Tutorial DataSaverΒΆ

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.DataSaver.ipynb

import adaptive
adaptive.notebook_extension()

If the function that you want to learn returns a value along with some metadata, you can wrap your learner in an adaptive.DataSaver.

In the following example the function to be learned returns its result and the execution time in a dictionary:

from operator import itemgetter

def f_dict(x):
    """The function evaluation takes roughly the time we `sleep`."""
    import random
    from time import sleep

    waiting_time = random.random()
    sleep(waiting_time)
    a = 0.01
    y = x + a**2 / (a**2 + x**2)
    return {'y': y, 'waiting_time': waiting_time}

# Create the learner with the function that returns a 'dict'
# This learner cannot be run directly, as Learner1D does not know what to do with the 'dict'
_learner = adaptive.Learner1D(f_dict, bounds=(-1, 1))

# Wrapping the learner with 'adaptive.DataSaver' and tell it which key it needs to learn
learner = adaptive.DataSaver(_learner, arg_picker=itemgetter('y'))

learner.learner is the original learner, so learner.learner.loss() will call the correct loss method.

runner = adaptive.Runner(learner, goal=lambda l: l.learner.loss() < 0.1)
await runner.task  # This is not needed in a notebook environment!
runner.live_info()
runner.live_plot(plotter=lambda l: l.learner.plot(), update_interval=0.1)

Now the DataSavingLearner will have an dictionary attribute extra_data that has x as key and the data that was returned by learner.function as values.

learner.extra_data
OrderedDict([(-1,
              {'y': -0.9999000099990001, 'waiting_time': 0.09065028803722042}),
             (1, {'y': 1.000099990001, 'waiting_time': 0.11662581365747127}),
             (0.0, {'y': 1.0, 'waiting_time': 0.46802795997124835}),
             (-0.75,
              {'y': -0.7498222538215429, 'waiting_time': 0.1515577956724382}),
             (-0.5,
              {'y': -0.4996001599360256, 'waiting_time': 0.7177688235498877}),
             (-0.25,
              {'y': -0.24840255591054314, 'waiting_time': 0.6483029138289754}),
             (0.5,
              {'y': 0.5003998400639744, 'waiting_time': 0.7533300765512431}),
             (-0.125,
              {'y': -0.11864069952305246, 'waiting_time': 0.4790104429362657}),
             (-0.0625,
              {'y': -0.0375390015600624, 'waiting_time': 0.30438815269595143}),
             (-0.03125,
              {'y': 0.06163824383164006, 'waiting_time': 0.1435666154400499}),
             (-0.015625,
              {'y': 0.27495388762769585, 'waiting_time': 0.1094011738906362}),
             (0.75,
              {'y': 0.7501777461784571, 'waiting_time': 0.9809747234288344}),
             (-0.0078125,
              {'y': 0.6131699135839903, 'waiting_time': 0.5117627505401209}),
             (0.25,
              {'y': 0.2515974440894569, 'waiting_time': 0.5768010411546609}),
             (0.125,
              {'y': 0.13135930047694755, 'waiting_time': 0.3221329049865198}),
             (-0.00390625,
              {'y': 0.8637065438995976, 'waiting_time': 0.9880727125180438}),
             (0.0625,
              {'y': 0.0874609984399376, 'waiting_time': 0.8569217201593176}),
             (0.015625,
              {'y': 0.30620388762769585, 'waiting_time': 0.32360357038278764}),
             (0.03125,
              {'y': 0.12413824383164006, 'waiting_time': 0.7892111707225021}),
             (0.0078125,
              {'y': 0.6287949135839903, 'waiting_time': 0.6745658750798121}),
             (-0.375,
              {'y': -0.3742893942085628, 'waiting_time': 0.8854384069215806}),
             (-0.625,
              {'y': -0.6247440655192271, 'waiting_time': 0.15497560887223705}),
             (0.00390625,
              {'y': 0.8715190438995976, 'waiting_time': 0.525291886209578}),
             (0.875,
              {'y': 0.8751305951875673, 'waiting_time': 0.35455809754661294}),
             (-0.875,
              {'y': -0.8748694048124327, 'waiting_time': 0.5836576334786364}),
             (0.375,
              {'y': 0.3757106057914372, 'waiting_time': 0.01397048980394855}),
             (-0.01171875,
              {'y': 0.40963707758975415, 'waiting_time': 0.2961477817803956}),
             (0.625,
              {'y': 0.6252559344807729, 'waiting_time': 0.46657734298703657}),
             (-0.005859375,
              {'y': 0.7385633611533918, 'waiting_time': 0.42555808850071464}),
             (0.01171875,
              {'y': 0.43307457758975415, 'waiting_time': 0.778669377435803}),
             (-0.0234375,
              {'y': 0.1305706215220334, 'waiting_time': 0.057013538636729866}),
             (0.005859375,
              {'y': 0.7502821111533918, 'waiting_time': 0.4653641397009757}),
             (0.009765625,
              {'y': 0.5216216654886127, 'waiting_time': 0.43874066582940796}),
             (-0.009765625,
              {'y': 0.5020904154886127, 'waiting_time': 0.5837299831163055})])