Skip to content

Latest commit

 

History

History
91 lines (69 loc) · 2.1 KB

tutorial.Learner2D.md

File metadata and controls

91 lines (69 loc) · 2.1 KB
jupytext kernelspec
text_representation
extension format_name format_version jupytext_version
.md
myst
0.13
1.14.5
display_name name
python3
python3

Tutorial {class}~adaptive.Learner2D

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. [^download]
:tags: [hide-cell]

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)
:tags: [hide-cell]

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"))