Skip to content

Latest commit

 

History

History
73 lines (49 loc) · 2.13 KB

tutorial.DataSaver.rst

File metadata and controls

73 lines (49 loc) · 2.13 KB

Tutorial ~adaptive.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.

.. seealso::
    The complete source code of this tutorial can be found in
    :jupyter-download:notebook:`tutorial.DataSaver`

.. jupyter-execute::
    :hide-code:

    import adaptive
    adaptive.notebook_extension(_inline_js=False)

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:

.. jupyter-execute::

    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.

.. jupyter-execute::

    runner = adaptive.Runner(learner, goal=lambda l: l.learner.loss() < 0.1)

.. jupyter-execute::
    :hide-code:

    await runner.task  # This is not needed in a notebook environment!

.. jupyter-execute::

    runner.live_info()

.. jupyter-execute::

    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.

.. jupyter-execute::

    learner.extra_data