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, goal=lambda l: l.loss() < 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
andtutorial.Learner2D.md
.