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.
See also
The complete source code of this tutorial can be found in
tutorial.Learner2D.ipynb
import adaptive
adaptive.notebook_extension()
import numpy as np
from functools import partial
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)
%%opts EdgePaths (color='w')
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)