{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A simple parameter exploration\n", "\n", "This notebook demonstrates a very simple parameter exploration of a custom function that we have defined. It is a simple function that returns the distance to a unit circle, so we expect our parameter exploration to resemble a circle. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# change to the root directory of the project\n", "import os\n", "if os.getcwd().split(\"/\")[-1] == \"examples\":\n", " os.chdir('..')\n", " \n", "# This will reload all imports as soon as the code changes\n", "%load_ext autoreload\n", "%autoreload 2 " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "try:\n", " import matplotlib.pyplot as plt\n", "except ImportError:\n", " import sys\n", " !{sys.executable} -m pip install matplotlib\n", " import matplotlib.pyplot as plt\n", " \n", "import numpy as np\n", "\n", "from neurolib.utils.parameterSpace import ParameterSpace\n", "from neurolib.optimize.exploration import BoxSearch" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define the evaluation function\n", "Here we define a very simple evaluation function. The function needs to take in `traj` as an argument, which is the pypet trajectory. This is how the function knows what parameters were assigned to it. Using the builtin function `search.getParametersFromTraj(traj)` we can then retrieve the parameters for this run. They are returned as a dictionary and can be accessed in the function. \n", "\n", "In the last step, we use `search.saveToPypet(result_dict, traj)` to save the results to the pypet trajectory and to an HDF. In between, the computational magic happens!" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def explore_me(traj):\n", " pars = search.getParametersFromTraj(traj)\n", " # let's calculate the distance to a circle\n", " computation_result = abs((pars['x']**2 + pars['y']**2) - 1)\n", " result_dict = {\"distance\" : computation_result}\n", " search.saveToPypet(result_dict, traj)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define the parameter space and exploration\n", "\n", "Here we define which space we want to cover. For this, we use the builtin class `ParameterSpace` which provides a very easy interface to the exploration. To initialize the exploration, we simply pass the evaluation function and the parameter space to the `BoxSearch` class." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "parameters = ParameterSpace({\"x\": np.linspace(-2, 2, 2), \"y\": np.linspace(-2, 2, 2)})\n", "# info: chose np.linspace(-2, 2, 40) or more, values here are low for testing\n", "search = BoxSearch(evalFunction = explore_me, parameterSpace = parameters, filename=\"example-1.1.hdf\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Run\n", "\n", "And off we go!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "search.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get results\n", "\n", "We can easily obtain the results from pypet. First we call `search.loadResults()` to make sure that the results are loaded from the hdf file to our instance." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "search.loadResults()\n", "print(\"Number of results: {}\".format(len(search.results)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The runs are also ordered in a simple pandas dataframe called `search.dfResults`. We cycle through all results by calling `search.results[i]` and loading the desired result (here the distance to the circle) into the dataframe" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xydistance
0-2.0-2.0000007.000000
1-2.0-1.8974366.600263
2-2.0-1.7948726.221565
3-2.0-1.6923085.863905
4-2.0-1.5897445.527285
............
15952.01.5897445.527285
15962.01.6923085.863905
15972.01.7948726.221565
15982.01.8974366.600263
15992.02.0000007.000000
\n", "

1600 rows × 3 columns

\n", "
" ], "text/plain": [ " x y distance\n", "0 -2.0 -2.000000 7.000000\n", "1 -2.0 -1.897436 6.600263\n", "2 -2.0 -1.794872 6.221565\n", "3 -2.0 -1.692308 5.863905\n", "4 -2.0 -1.589744 5.527285\n", "... ... ... ...\n", "1595 2.0 1.589744 5.527285\n", "1596 2.0 1.692308 5.863905\n", "1597 2.0 1.794872 6.221565\n", "1598 2.0 1.897436 6.600263\n", "1599 2.0 2.000000 7.000000\n", "\n", "[1600 rows x 3 columns]" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "for i in search.dfResults.index:\n", " search.dfResults.loc[i, 'distance'] = search.results[i]['distance']\n", " \n", "search.dfResults" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And of course a plot can visualize the results very easily." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.imshow(search.dfResults.pivot_table(values='distance', index = 'x', columns='y'), \\\n", " extent = [min(search.dfResults.x), max(search.dfResults.x),\n", " min(search.dfResults.y), max(search.dfResults.y)], origin='lower')\n", "plt.colorbar(label='Distance to the unit circle')" ] } ], "metadata": { "kernelspec": { "display_name": "py36", "language": "python", "name": "py36" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.10" } }, "nbformat": 4, "nbformat_minor": 5 }