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. 1
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': 1.000099990001, 'waiting_time': 0.7532777875045548}),
(-1,
{'y': -0.9999000099990001, 'waiting_time': 0.9112413339414227}),
(-0.5,
{'y': -0.4996001599360256, 'waiting_time': 0.544066047946683}),
(0.0, {'y': 1.0, 'waiting_time': 0.9130795171860135}),
(-0.25,
{'y': -0.24840255591054314,
'waiting_time': 0.051892659101278604}),
(0.5,
{'y': 0.5003998400639744, 'waiting_time': 0.2881279014193022}),
(-0.75,
{'y': -0.7498222538215429, 'waiting_time': 0.5619060087423442}),
(-0.125,
{'y': -0.11864069952305246, 'waiting_time': 0.5964528576500883}),
(-0.0625,
{'y': -0.0375390015600624, 'waiting_time': 0.763755440992522}),
(0.75,
{'y': 0.7501777461784571, 'waiting_time': 0.9791359747944517}),
(-0.03125,
{'y': 0.06163824383164006, 'waiting_time': 0.49661994281882893}),
(0.25,
{'y': 0.2515974440894569, 'waiting_time': 0.386045548632559}),
(-0.015625,
{'y': 0.27495388762769585, 'waiting_time': 0.9084879932042188}),
(-0.0078125,
{'y': 0.6131699135839903, 'waiting_time': 0.0547623170657362}),
(0.125,
{'y': 0.13135930047694755, 'waiting_time': 0.8970082865834855}),
(0.0625,
{'y': 0.0874609984399376, 'waiting_time': 0.16928771833104062}),
(0.03125,
{'y': 0.12413824383164006, 'waiting_time': 0.3219346332461146}),
(0.0078125,
{'y': 0.6287949135839903, 'waiting_time': 0.6677912274206986}),
(0.015625,
{'y': 0.30620388762769585, 'waiting_time': 0.9320175646356186}),
(-0.00390625,
{'y': 0.8637065438995976, 'waiting_time': 0.08688445511184273}),
(-0.375,
{'y': -0.3742893942085628, 'waiting_time': 0.5557676526579054}),
(-0.625,
{'y': -0.6247440655192271,
'waiting_time': 0.041203566245000434}),
(0.00390625,
{'y': 0.8715190438995976, 'waiting_time': 0.7979866988877152}),
(0.875,
{'y': 0.8751305951875673, 'waiting_time': 0.2357319450324168}),
(-0.875,
{'y': -0.8748694048124327, 'waiting_time': 0.6326587112559906}),
(0.375,
{'y': 0.3757106057914372, 'waiting_time': 0.6037735741415742}),
(0.625,
{'y': 0.6252559344807729, 'waiting_time': 0.8327616399826078}),
(-0.01171875,
{'y': 0.40963707758975415, 'waiting_time': 0.41023659458469464}),
(0.01171875,
{'y': 0.43307457758975415, 'waiting_time': 0.5892128100565911}),
(-0.005859375,
{'y': 0.7385633611533918, 'waiting_time': 0.24909840919769677}),
(0.005859375,
{'y': 0.7502821111533918, 'waiting_time': 0.48274651290732373}),
(-0.0234375,
{'y': 0.1305706215220334, 'waiting_time': 0.6112225283785294}),
(0.009765625,
{'y': 0.5216216654886127, 'waiting_time': 0.2972473998188163}),
(-0.009765625,
{'y': 0.5020904154886127, 'waiting_time': 0.7486123484948725})])
- 1
This notebook can be downloaded as
tutorial.DataSaver.ipynb
andtutorial.DataSaver.md
.