Tutorial Learner2D#

Note

Because this documentation consists of static html, the live_plot and live_info widget is not live. Download the notebook in order to see the real behaviour. 1

import adaptive
import holoviews as hv
import numpy as np

from functools import partial
adaptive.notebook_extension()

Besides 1D functions, we can also learn 2D functions: $f: ℝ^2 → ℝ$.

def ring(xy, wait=True):
    import numpy as np
    from time import sleep
    from random import random

    if wait:
        sleep(random() / 10)
    x, y = xy
    a = 0.2
    return x + np.exp(-((x**2 + y**2 - 0.75**2) ** 2) / a**4)


learner = adaptive.Learner2D(ring, bounds=[(-1, 1), (-1, 1)])
runner = adaptive.Runner(learner, loss_goal=0.01)
await runner.task  # This is not needed in a notebook environment!
runner.live_info()
def plot(learner):
    plot = learner.plot(tri_alpha=0.2)
    return (plot.Image + plot.EdgePaths.I + plot).cols(2)


runner.live_plot(plotter=plot, update_interval=0.1)
import itertools

# Create a learner and add data on homogeneous grid, so that we can plot it
learner2 = adaptive.Learner2D(ring, bounds=learner.bounds)
n = int(learner.npoints**0.5)
xs, ys = [np.linspace(*bounds, n) for bounds in learner.bounds]
xys = list(itertools.product(xs, ys))
learner2.tell_many(xys, map(partial(ring, wait=False), xys))

(
    learner2.plot(n).relabel("Homogeneous grid")
    + learner.plot().relabel("With adaptive")
    + learner2.plot(n, tri_alpha=0.4)
    + learner.plot(tri_alpha=0.4)
).cols(2).opts(hv.opts.EdgePaths(color="w"))

1

This notebook can be downloaded as tutorial.Learner2D.ipynb and tutorial.Learner2D.md.