{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Explauto, an open-source Python library to study autonomous exploration in developmental robotics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Explauto is an open-source Python library providing a unified API to design and compare various exploration strategies driving various sensorimotor learning algorithms in various simulated or robotics systems. Explauto aims at being collaborative and pedagogic, providing a platform to developmental roboticists where they can publish and compare their algorithmic contributions related to autonomous exploration and learning, as well a platform for teaching and scientific diffusion. It is is available on [github](https://github.com/flowersteam/explauto).\n", "\n", "The library is organized in three main packages, each one containing a collection of interchangeable modules:\n", "* The [environment package](http://flowersteam.github.io/explauto/explauto.environment.html) provides a unified interface to real and simulated robots.\n", "* The [sensorimotor_model package](http://flowersteam.github.io/explauto/explauto.sensorimotormodel.html) provides a unified interface to online machine learning algorithm.\n", "* The [interest_model package](http://flowersteam.github.io/explauto/explauto.interestmodel.html) provides a unified interface for the active choice of sensorimotor experiments.\n", "\n", "The library is easily extendable by forking the [github repository](https://github.com/flowersteam/explauto) and proposing new modules for each package (tutorial to come, do not hesitate to [contact us](https://github.com/flowersteam/explauto/blob/master/AUTHORS.md) want to get involved).\n", "\n", "This tutorial shows how to use modules contained in these three packages, how to integrated them in simulation loops and how to analyse the results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting environments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Explauto, an *environment* implements the physical properties of the interaction between the robot body and the environment in which it evolves. Explauto comes with several sensorimotor systems available from the [environment package](http://flowersteam.github.io/explauto/explauto.environment.html):" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['pendulum', 'simple_arm'])" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from __future__ import print_function\n", "\n", "from explauto.environment import environments\n", "environments.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "According to your installation, you will see at least two available environments:\n", "* a multi-joint arm acting on a plan ('simple_arm')\n", "* an under-actuated torque-controlled circular pendulum ('pendulum').\n", "\n", "These environments are simulated. Explauto also provides an interface to real robots based on Dynamixel actuators by providing bindings to the [Pypot](https://github.com/poppy-project/pypot) library ([this tutorial](http://nbviewer.ipython.org/github/flowersteam/explauto/blob/master/notebook/poppy_environment.ipynb) shows how to use it on a [Poppy](http://www.poppy-project.org/) robot).\n", "\n", "We will use the simple arm for this tutorial. It consists in the simulation of a $n$ degrees-of-freedom (DoF) arm with movements limited to a 2D plan. Each available environment comes with a set of predefined configurations. A default configuration will always be defined. For the simple arm they are:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['low_dimensional', 'high_dim_high_s_range', 'default', 'mid_dimensional', 'high_dimensional'])" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from explauto.environment import available_configurations\n", "available_configurations('simple_arm').keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, the 'mid_dimensional' configuration corresponds to:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'length_ratio': 1.5,\n", " 'm_maxs': array([ 1.04719755, 1.04719755, 1.04719755, 1.04719755, 1.04719755,\n", " 1.04719755, 1.04719755]),\n", " 'm_mins': array([-1.04719755, -1.04719755, -1.04719755, -1.04719755, -1.04719755,\n", " -1.04719755, -1.04719755]),\n", " 'noise': 0.02,\n", " 's_maxs': array([ 1., 1.]),\n", " 's_mins': array([-0.5, -1. ])}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "available_configurations('simple_arm')['mid_dimensional']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One can use this method with every registered environments. For example the available configurations for the pendulum are:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['underactuated', 'default'])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "available_configurations('pendulum').keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's instantiate a mid-dimensional simple arm:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from explauto import Environment\n", "environment = Environment.from_configuration('simple_arm', 'mid_dimensional')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each particular environment has to implement its own [compute_sensori_effect](http://flowersteam.github.io/explauto/explauto.environment.html#explauto.environment.environment.Environment.compute_sensori_effect) method, which takes as argument a motor command vector $m$ (here the position of the joints, 7-dimensional). It returns the corresponding sensory effect vector $s$ (here the coordinate of the hand, $2$-dimensional)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.42207932, 0.24807095])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from numpy import pi\n", "m = [-pi/6., pi/3., pi/4., pi/5., 0., pi/3., pi/6.]\n", "environment.compute_sensori_effect(m)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Environments can implement specific methods for, e.g., drawing:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAEKCAYAAAAvlUMdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAHMFJREFUeJzt3XuQlXed5/H3B7AhIAnXNARo7lnJeCHmLImV7DiTEMRLBXY1CRkv6CS2o+tszVhaJkVtuRUnVXHcMY41GZXKRNFCg2JpesvESEiyWiYw6UQMIYp0NwGaaw8kENMEaPjuH+eh99D05XTTv/N0w+dVdaqf5/f7Pc/5nlPd59PP9SgiMDMz629D8i7AzMzOTw4YMzNLwgFjZmZJOGDMzCwJB4yZmSXhgDEzsyRyDRhJD0o6IOnFLvol6RuSGiS9IOmdJX3LJW3LHssrV7WZmZUj7y2Y7wKLu+l/LzA3e9QC3wSQNA74EnA1sAD4kqSxSSs1M7NeyTVgIuJXwKFuhiwBvhdFG4AxkiYD7wHWRcShiHgFWEf3QWVmZhU2LO8CejAF2FUy35y1ddV+Fkm1FLd+GDVq1FVvectb0lRqZnaeeu655/4jIib2drmBHjDnLCJWAisBCoVC1NfX51yRmdngImlHX5bL+xhMT3YD00rmp2ZtXbWbmdkAMdADpg74WHY22TXA4YjYCzwGLJI0Nju4vyhrMzOzASLXXWSSfgj8BTBBUjPFM8PeBBAR3wIeAd4HNACtwCeyvkOSvgw8m63q7ojo7mQBMzOrsFwDJiJu66E/gP/eRd+DwIMp6jIzs3M30HeRmZnZIOWAMTOzJBwwZmaWhAPGzMyScMCYmVkSDhgzM0vCAWNmZkk4YMzMLAkHjJmZJeGAMTOzJBwwZmaWhAPGzMyScMCYmVkSDhgzM0vCAWNmZkk4YMzMLAkHjJmZJeGAMTOzJHINGEmLJW2V1CDpzk7675O0KXv8UdKrJX0nS/rqKlu5mZn1ZFheTyxpKHA/cCPQDDwrqS4iXjo9JiL+vmT83wJXlqziaETMr1S9ZmbWO3luwSwAGiKiKSKOAw8BS7oZfxvww4pUZmZm5yzPgJkC7CqZb87aziJpOjATeKKkeYSkekkbJC1NV6aZmfVFbrvIemkZsDYiTpa0TY+I3ZJmAU9I2hwRjR0XlFQL1ALU1NRUplozM8t1C2Y3MK1kfmrW1plldNg9FhG7s59NwFOceXymdNzKiChERGHixInnWrOZmZUpz4B5FpgraaakKoohctbZYJLeAowFnilpGytpeDY9AbgWeKnjsmZmlp/cdpFFRJukzwKPAUOBByNii6S7gfqIOB02y4CHIiJKFp8HfFvSKYoheW/p2WdmZpY/nfm5fX4rFApRX1+fdxlmZoOKpOciotDb5Xwlv5mZJeGAMTOzJBwwZmaWhAPGzMyScMCYmVkSDhgzM0vCAWNmZkk4YMzMLAkHjJmZJeGAMTOzJBwwZmaWhAPGzMyScMCYmVkSDhgzM0vCAWNmZkk4YMzMLAkHjJmZJeGAMTOzJBwwZmaWRK4BI2mxpK2SGiTd2Un/xyW1SNqUPe4o6VsuaVv2WF7Zys3MrCfD8npiSUOB+4EbgWbgWUl1EfFSh6FrIuKzHZYdB3wJKAABPJct+0oFSjczszLkuQWzAGiIiKaIOA48BCwpc9n3AOsi4lAWKuuAxYnqNDOzPsgzYKYAu0rmm7O2jj4o6QVJayVN6+WySKqVVC+pvqWlpT/qNjOzMgz0g/z/B5gREW+nuJWyqrcriIiVEVGIiMLEiRP7vUAzM+tcngGzG5hWMj81a2sXEQcj4lg2+wBwVbnLmplZvvIMmGeBuZJmSqoClgF1pQMkTS6ZvQn4fTb9GLBI0lhJY4FFWZuZmQ0QuZ1FFhFtkj5LMRiGAg9GxBZJdwP1EVEH/A9JNwFtwCHg49myhyR9mWJIAdwdEYcq/iLMzKxLioi8a6iYQqEQ9fX1eZdhZjaoSHouIgq9XW6gH+Q3M7NBygFjZmZJOGDMzCwJB4yZmSXhgDEzsyQcMGZmloQDxszMknDAmJlZEg4YMzNLwgFjZmZJOGDMzCwJB4yZmSXhgDEzsyQcMGZmloQDxszMknDAmJlZEg4YMzNLwgFjZmZJDMvzySUtBv4ZGAo8EBH3duj/HHAH0Aa0AH8dETuyvpPA5mzozoi4qWKFm52nJk2axP79+89qv/TSS9m4cSP79u3jyJEjjBgxgpEjR7Y/LrroovbpoUOH5lC5DUS5BYykocD9wI1AM/CspLqIeKlk2G+BQkS0Svo08I/ArVnf0YiYX9Gizc5znYULwIEDB1i1alVZ66iqqmLkyJGMHj2a66+/nhkzZvRjhTaY5LkFswBoiIgmAEkPAUuA9oCJiCdLxm8APlLRCs2s3ZQpU6iurmbs2LEcO3aM1tZWWltbOXr0aPt0a2srx48f5/jx47z66qs89NBDfPKTn2T8+PF5l285yDNgpgC7Suabgau7GX878GjJ/AhJ9RR3n90bET/rbCFJtUAtQE1NzTkVbHYhu+OOO3ocExHt4bNu3Tr+8Ic/sGbNGu644w6qqqoqUKUNJIPiIL+kjwAF4KslzdMjogD8FfB1SbM7WzYiVkZEISIKEydOrEC1ZhcuSYwYMYJx48axdOlSJkyYQEtLC3V1dURE3uVZheUZMLuBaSXzU7O2M0haCKwAboqIY6fbI2J39rMJeAq4MmWxZtY7w4cP59Zbb6WqqootW7awYcOGvEuyCsszYJ4F5kqaKakKWAbUlQ6QdCXwbYrhcqCkfayk4dn0BOBaSo7dmFnfVFdX96q9JxMmTGDp0qUArFu3ju3bt/e5Nht8cguYiGgDPgs8Bvwe+FFEbJF0t6TTpxx/FXgz8GNJmySdDqB5QL2k3wFPUjwG44AxO0f79u0jIs567Nu3r8/rnDdvHtdddx0Rwdq1azl8+HA/VmwDmS6k/aKFQiHq6+vzLsPsgnPq1ClWr15NU1MTl112GZ/4xCcYNizXy/CsFyQ9lx3z7pVBcZDfzAa3IUOG8MEPfpBLLrmEPXv28Oijj/a8kA16Dhgzq4iRI0dy6623MmzYMJ5//nmef/75vEuyxBwwZlYxkydP5v3vfz8AjzzyCLt3n3XiqJ1HHDBmVlHz58+nUChw8uRJfvSjH/H666/nXZIl4oAxs4pbvHgxU6dO5ciRI/zkJz/h1KlTeZdkCThgzKzihg4dys0338yoUaPYvn0769evz7skS8ABY2a5uPjii7n55psZMmQITz/9NFu2bMm7JOtnDhgzy8306dO58cYbAXj44YdpaWnJuSLrTw4YM8vV1Vdfzdve9jZOnDjBmjVreOONN/IuyfqJA8bMciWJD3zgA1RXV3Pw4EF+9rOf+c7L5wkHjJnlrqqqiltuuYURI0awdetWX4R5nnDAmNmAMGbMGEaNGpV3GdaPHDBmNiA8//zzHDx4kHHjxjF//vy8y7F+4IAxs9wdO3aMp556CoAbbriBoUOH5luQ9QsHjJnl7umnn+b1119n6tSpzJs3L+9yrJ84YMwsV6+99hrPPPMMAIsWLUJSzhVZf3HAmFmunnzySU6cOMG8efOYNm1a3uVYP3LAmFluDhw4wKZNmxgyZAg33HBD3uVYP8s1YCQtlrRVUoOkOzvpHy5pTda/UdKMkr67svatkt5TybqtclavXs2MGTMYMmQIM2bMYPXq1XmXZP1o3bp1RARXXXUV48ePz7sc62ddBoykR0o/0PubpKHA/cB7gSuA2yRd0WHY7cArETEHuA/4SrbsFcAy4M+AxcC/Zuuz88jq1aupra1lx44dRAQ7duygtrbWIXOeaGpqoqGhgaqqKt797nfnXY4l0N0WzHeAX0paIelNCZ57AdAQEU0RcRx4CFjSYcwSYFU2vRa4QcUjgEuAhyLiWERsBxqy9dl5ZMWKFbS2tp7R1trayl133ZVTRdZfIoJ169YBcN111/kCy/PUsK46IuLHkh4F/idQL+n7wKmS/q+d43NPAXaVzDcDV3c1JiLaJB0GxmftGzosO6WzJ5FUC9QC1NTUnGPJVkk7d+7stH3Xrl1861vfYs6cOcyZM4dp06b5uolBZvPmzezbt4/Ro0dzzTXX5F2OJdJlwGSOA68Dw4HRlATMYBERK4GVAIVCwXfQG0RqamrYsWPHWe1jxoxh//797N+/n9/85jdUVVUxc+ZM5syZw+zZsxk7dmwO1Vq52traeOKJJwC4/vrredObUuwgsYGgy4CRtBj4GlAHvDMiWrsa20e7gdJzEqdmbZ2NaZY0DLgEOFjmsjbI3XPPPdTW1p6xm2zkyJF84xvf4Nprr6WhoYGGhgZaWlrYunUrW7duBWD8+PHtWzfTp0/3B9gAs3HjRg4fPkx1dTVvf/vb8y7HEupuC2YFcHNEpPqauWeBuZJmUgyHZcBfdRhTBywHngE+BDwRESGpDviBpK8BlwFzgX9PVKfl5MMf/jBQPBazc+dOampquOeee9rbZ82axaJFizh8+DCNjY00NDTQ1NTEwYMHOXjwIBs3bmTYsGFMnz69PXDGjx/vC/ly1Nrayq9//WsAFi5cyJAhvlLifKY8v3dB0vuArwNDgQcj4h5JdwP1EVEnaQTwfeBK4BCwLCKasmVXAH8NtAF/FxGP9vR8hUIh6uvrE70aGwhOnjzJ7t2727du9u7de0b/JZdc0h42M2fOZPjw4TlVemH6xS9+wcaNG5k1axYf/ehH8y7HyiTpuYgo9Hq5C+mLfRwwF57XX3+9feumsbHxjN1tQ4YMYdq0ae2BU11d7a2bRNra2mhqamLNmjWcOnWKT33qU0yaNCnvsqxMDpgyOGAubBHB3r1727dumpubz/jmxDe/+c3Mnj2bOXPmMGvWLEaOHJljtYNbRHDo0KH2YN++fTttbW0AvOMd72Dp0qU5V2i94YApgwPGSh09epTt27e3B85rr712Rv+UKVPat24uu+wyHy/owfHjx9vfz8bGRl555ZUz+idNmsTcuXO57rrrqKqqyqlK6wsHTBkcMNaViKClpaX9w3HHjh2cPHmyvX/EiBHtWzezZ89m9OjROVY7MEQEBw4cOOM9O3Xq/1/JcNFFFzF79uz2h9+zwcsBUwYHjJXr+PHjvPzyy+1bNx3/G6+urr4gL/Q8evRo+y1eGhsbz9rqmzp1ansQe6vv/OGAKYMDxvqq4/GEEydOtPedzxd6RgR79uxpf+2dHbc6/bp93Or85YApgwPG+kNbWxs7d+5s/9A9cODAGf2D/ULPP/3pTzQ2NrY/Op55V1NT076V4jPvLgwOmDI4YCyFI0eOtIdNY2Mjx44da+8bDBd6njx5kubm5vbX4GuHrCMHTBkcMJbaqVOnzviw3rNnzxn9A+XD+vDhw+01NjU1nRWKM2bMaN9KGYihaJXlgCmDA8Yq7fSFnqcv9uzsQs/TH+STJk1K9kHe1tbGjh072kOlpaXljP4JEya01zEYd+tZWg6YMjhgLE+lF3o2Njaya9euMw6Yjxo1qv2A+ezZs8/5gPnBgwc7vdARiicmzJo1qz1UxowZc07PZec3B0wZHDA2kLzxxhtnnPJ75MiRM/qnTJnC7NmzmTt3blmn/PZ0avWkSZPaA+VCOrXazp0DpgwOGBuo+nKhZ+kyDQ0N7Ny584xlfKGj9RcHTBkcMDZYlG6NNDY2cujQoTP6L730Uo4ePeoLHa0i+howPX2jpZnloKqqissvv5zLL78cOPtCz9PX3vhCRxvIHDBmg8C4ceNYsGABCxYsoK2tjd27dzN8+HBf6GgDmgPGbJA5ffGm2UDnHbRmZpaEA8bMzJLIJWAkjZO0TtK27OdZt5+VNF/SM5K2SHpB0q0lfd+VtF3Spuwxv7KvwMzMepLXFsydwPqImAusz+Y7agU+FhF/BiwGvi6p9HLjL0TE/OyxKX3JZmbWG3kFzBJgVTa9CjjrC7oj4o8RsS2b3gMcACZWrEIzMzsneQVMdUScvif4PqC6u8GSFgBVQGNJ8z3ZrrP7JHV5S1pJtZLqJdV3vMGfmZmlkyxgJD0u6cVOHktKx0XxVgJd3k5A0mTg+8AnIuL0F37fBbwF+M/AOOCLXS0fESsjohARhYkTvQFkZlYpya6DiYiFXfVJ2i9pckTszQLkQBfjLgZ+DqyIiA0l6z699XNM0neAz/dj6WZm1g/y2kVWByzPppcDD3ccIKkK+CnwvYhY26FvcvZTFI/fvJi0WjMz67W8AuZe4EZJ24CF2TySCpIeyMbcAvw58PFOTkdeLWkzsBmYAPxDZcs3M7Oe+G7KZmbWrb7eTdlX8puZWRIOGDMzS8IBY2ZmSThgzMwsCQeMmZkl4YAxM7MkHDBmZpaEA8bMzJJwwJiZWRIOGDMzS8IBY2ZmSThgzMwsCQeMmZkl4YAxM7MkHDBmZpaEA8bMzJJwwJiZWRIOGDMzSyKXgJE0TtI6Sduyn2O7GHdS0qbsUVfSPlPSRkkNktZIqqpc9WZmVo68tmDuBNZHxFxgfTbfmaMRMT973FTS/hXgvoiYA7wC3J62XDMz6628AmYJsCqbXgUsLXdBSQKuB9b2ZXkzM6uMvAKmOiL2ZtP7gOouxo2QVC9pg6TTITIeeDUi2rL5ZmBKV08kqTZbR31LS0u/FG9mZj0blmrFkh4HJnXStaJ0JiJCUnSxmukRsVvSLOAJSZuBw72pIyJWAisBCoVCV89jZmb9LFnARMTCrvok7Zc0OSL2SpoMHOhiHbuzn02SngKuBH4CjJE0LNuKmQrs7vcXYGZm5ySvXWR1wPJsejnwcMcBksZKGp5NTwCuBV6KiACeBD7U3fJmZpavvALmXuBGSduAhdk8kgqSHsjGzAPqJf2OYqDcGxEvZX1fBD4nqYHiMZl/q2j1ZmbWIxU3CC4MhUIh6uvr8y7DzGxQkfRcRBR6u5yv5DczsyQcMGZmloQDxszMknDAmJlZEg4YMzNLwgFjZmZJOGDMzCwJB4yZmSXhgDEzsyQcMGZmloQDxszMknDAmJlZEg4YMzNLwgFjZmZJOGDMzCwJB4yZmSXhgDEzsyQcMGZmlkQuASNpnKR1krZlP8d2MuYvJW0qebwhaWnW911J20v65lf+VZiZWXfy2oK5E1gfEXOB9dn8GSLiyYiYHxHzgeuBVuCXJUO+cLo/IjZVpGozMytbXgGzBFiVTa8ClvYw/kPAoxHRmrQqMzPrN3kFTHVE7M2m9wHVPYxfBvywQ9s9kl6QdJ+k4f1eoZmZnZNhqVYs6XFgUiddK0pnIiIkRTfrmQy8DXispPkuisFUBawEvgjc3cXytUAtQE1NTS9egZmZnYtkARMRC7vqk7Rf0uSI2JsFyIFuVnUL8NOIOFGy7tNbP8ckfQf4fDd1rKQYQhQKhS6DzMzM+ldeu8jqgOXZ9HLg4W7G3kaH3WNZKCFJFI/fvJigRjMzOwd5Bcy9wI2StgELs3kkFSQ9cHqQpBnANOD/dlh+taTNwGZgAvAPFajZzMx6Idkusu5ExEHghk7a64E7SuZfBqZ0Mu76lPWZmdm585X8ZmaWhAPGzMyScMCYmVkSDhgzM0vCAWNmZkk4YMzMLAkHjJmZJeGAMTOzJBwwZmaWhAPGzMyScMCYmVkSDhgzM0vCAWNmZkk4YMzMLAkHjJmZJeGAMTOzJBwwZmaWhAPGzMyScMCYmVkSuQSMpJslbZF0SlKhm3GLJW2V1CDpzpL2mZI2Zu1rJFVVpnIzMytXXlswLwL/DfhVVwMkDQXuB94LXAHcJumKrPsrwH0RMQd4Bbg9bblmZtZbuQRMRPw+Irb2MGwB0BARTRFxHHgIWCJJwPXA2mzcKmBpumrNzKwvhuVdQDemALtK5puBq4HxwKsR0VbSPqWrlUiqBWqz2T9J6inY+mIC8B8J1pvSYKt5sNULrrkSBlu9MDhr/k99WShZwEh6HJjUSdeKiHg41fN2FBErgZUpn0NSfUR0eSxpIBpsNQ+2esE1V8JgqxcGb819WS5ZwETEwnNcxW5gWsn81KztIDBG0rBsK+Z0u5mZDSAD+TTlZ4G52RljVcAyoC4iAngS+FA2bjlQsS0iMzMrT16nKf9XSc3Au4CfS3osa79M0iMA2dbJZ4HHgN8DP4qILdkqvgh8TlIDxWMy/1bp19BB0l1wiQy2mgdbveCaK2Gw1QsXUM0qbhCYmZn1r4G8i8zMzAYxB4yZmSXhgOkDSeMkrZO0Lfs5tpuxF0tqlvQvlayxkzp6rFnSfEnPZLfxeUHSrTnU2entgUr6h2e3B2rIbhc0o9I1dlJTTzV/TtJL2Xu6XtL0POosqafbekvGfVBSdHc7p0opp2ZJt2Tv8xZJP6h0jZ3U09PvRY2kJyX9NvvdeF8edZbU86CkA5Je7KJfkr6RvZ4XJL2zx5VGhB+9fAD/CNyZTd8JfKWbsf8M/AD4l4FeM3A5MDebvgzYC4ypYI1DgUZgFlAF/A64osOYzwDfyqaXAWtyfl/LqfkvgZHZ9KfzrLmcerNxoyneymkDUBgE7/Fc4LfA2Gz+0kFQ80rg09n0FcDLOdf858A7gRe76H8f8Cgg4BpgY0/r9BZM3yyheIsa6OZWNZKuAqqBX1aoru70WHNE/DEitmXTe4ADwMSKVdjF7YE6jCl9HWuBG7LbB+Wlx5oj4smIaM1mN1C8disv5bzHAF+meM+/NypZXBfKqfmTwP0R8QpARByocI0dlVNzABdn05cAeypY31ki4lfAoW6GLAG+F0UbKF6POLm7dTpg+qY6IvZm0/sohsgZJA0B/gn4fCUL60aPNZeStIDif16NqQsr0dntgTreBqh9TBRPZT9M8VT1vJRTc6nbKf4XmJce6812fUyLiJ9XsrBulPMeXw5cLuk3kjZIWlyx6jpXTs3/C/hIdsnGI8DfVqa0Puvt7/qAvhdZrrq71U3pTESEpM7O9f4M8EhENFfqH+x+qPn0eiYD3weWR8Sp/q3ywiXpI0ABeHfetXQl+8foa8DHcy6lt4ZR3E32FxS3EH8l6W0R8WquVXXvNuC7EfFPkt4FfF/SW8+nvzkHTBeim1vdSNovaXJE7M0+jDvbHH8X8F8kfQZ4M1Al6U8R0eVB1XPVDzUj6WLg5xTvGbchUald6er2QJ2NaZY0jOKuhYOVKa9T5dSMpIUUg/7dEXGsQrV1pqd6RwNvBZ7K/jGaBNRJuiki+nQ/qn5QznvcTPGYwAlgu6Q/UgycZytT4lnKqfl2YDFARDwjaQTFG2HmvXuvK2X9rpfyLrK+qaN4ixro4lY1EfHhiKiJiBkUd5N9L2W4lKHHmrNb8vyUYq1rO/ZXQKe3B+owpvR1fAh4IrIjkDnpsWZJVwLfBm4aAMcGuq03Ig5HxISImJH97m6gWHde4QLl/V78jOLWC5ImUNxl1lTJIjsop+adwA0AkuYBI4CWilbZO3XAx7Kzya4BDpfsdu9cnmctDNYHxX3+64FtwOPAuKy9ADzQyfiPk/9ZZD3WDHwEOAFsKnnMr3Cd7wP+SPHYz4qs7W6KH3JQ/CP8MdAA/DswawD8PvRU8+PA/pL3tG4g19th7FPkfBZZme+xKO7aewnYDCwbBDVfAfyG4hlmm4BFOdf7Q4pnjp6guEV4O/A3wN+UvMf3Z69nczm/F75VjJmZJeFdZGZmloQDxszMknDAmJlZEg4YMzNLwgFjZmZJOGDMciJpmqTtksZl82Oz+Rn5VmbWPxwwZjmJiF3AN4F7s6Z7gZUR8XJuRZn1I18HY5YjSW8CngMepHhH4PlRvN2J2aDne5GZ5SgiTkj6AvALildyO1zsvOFdZGb5ey/FW3S8Ne9CzPqTA8YsR5LmAzdS/IbAv+/pC5zMBhMHjFlOsm/i/CbwdxGxE/gq8L/zrcqs/zhgzPLzSWBnRKzL5v8VmCdpwH4hmVlv+CwyMzNLwlswZmaWhAPGzMyScMCYmVkSDhgzM0vCAWNmZkk4YMzMLAkHjJmZJfH/ACwB+7KsMy/HAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Create the axes for plotting::\n", "%pylab inline\n", "ax = axes()\n", "\n", "# plot the arm:\n", "environment.plot_arm(ax, m)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The base of the arm is fixed at (0, 0) (circle). The first angle position m[0] corresponds to the angle between a horizontal line and the segment attached to the base, anticlock-wise. Each following angle position is measured with respect to their respective previous segment. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The [Environment](http://flowersteam.github.io/explauto/explauto.environment.html#explauto.environment.environment.Environment) base class provides several useful methods in order to, e.g., sample random motor commands:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "motor_configurations = environment.random_motors(n=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's for example plot 10 random arm configurations:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Create the axes for plotting::\n", "%pylab inline\n", "ax = axes()\n", "\n", "# Plotting 10 random motor configurations:\n", "for m in motor_configurations:\n", " environment.plot_arm(ax, m)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dynamical environments are also available, though their integration with the rest of the library is not yet completly clear (to discuss later). E.g., a circular pendulum:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "environment = Environment.from_configuration('pendulum', 'default')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Using matplotlib backend: TkAgg\n", "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%pylab\n", "ax = axes()\n", "\n", "# Sequence of torques at each time step:\n", "U = [0.25] * 15 + [-0.25] * 15 + [0.25] * 19\n", "\n", "# reset to lower position:\n", "environment.reset() \n", "\n", "# apply torque and plot:\n", "for u in U:\n", " ax.cla()\n", " environment.apply_torque(u)\n", " environment.plot_current_state(ax)\n", " draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The [compute_sensori_effect](http://flowersteam.github.io/explauto/explauto.environment.html#explauto.environment.environment.Environment.compute_sensori_effect) method is also defined (using a motor primitive):" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.42133711, 2.26684602])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "environment.compute_sensori_effect(environment.random_motors())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But let's continue this tutorial using a mid-dimensional simple arm:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "environment = Environment.from_configuration('simple_arm', 'mid_dimensional')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Learning sensorimotor models" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Explauto, a sensorimotor model implements both the iterative learning process from sensorimotor experience, i.e. from the iterative collection of $(m, s)$ pairs by interaction with the environment, and the use of the resulting internal model to perform forward and inverse predictions (or any kind of general prediction between sensorimotor subspaces). \n", "\n", "Learning sensorimotor mappings involves machine learning algorithms, for which Explauto provides a unified interface through the [SensorimotorModel abstract class](http://flowersteam.github.io/explauto/explauto.sensorimotormodel.html#explauto.sensorimotor_model.sensorimotor_model.SensorimotorModel). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the simple arm environment above, it allows to iteratively learn a sensorimotor model which will be able to:\n", "* infer the position of the end-effector from a given motor command, what is called *forward prediction*,\n", "* infer the motor command allowing to reach a particular end-effector position, what is called *inverse prediction*.\n", "* update online from sensorimotor experience\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Several sensorimotor models are provided: simple nearest-neighbor look-up, non-parametric models combining classical regressions and optimization algorithms, online local mixtures of Gaussians (beta).\n", "Similarly to environments, available sensorimotor models in Explauto can be accessed using:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['LWLR-CMAES', 'LWLR-BFGS', 'nearest_neighbor', 'WNN'])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from explauto.sensorimotor_model import sensorimotor_models\n", "sensorimotor_models.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we will use the 'nearest neighbor' model. This sensorimotor model simply stores sensorimotor experience, ie. $(m, s)$ pairs where $m$ is a motor command (here arm joint positions) and $s$ the corresponding sensory effect (here end-effector positions). When asked for a forward prediction for a given motor command $m$, it returns the associated sensory effect $s$ of the nearest neighbor of $m$ in the stored sensorimotor experience. When asked for an inverse prediction to reach a sensory goal $s$, it returns the associated motor command $m$ of the nearest neighbor of $s$ in the stored sensorimotor experience, possibly pertubated with a bit gaussian noise." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'default': {'fwd': 'NN', 'inv': 'NN', 'sigma_explo_ratio': 0.1},\n", " 'exact': {'fwd': 'NN', 'inv': 'NN', 'sigma_explo_ratio': 0.0}}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from explauto.sensorimotor_model import available_configurations\n", "available_configurations('nearest_neighbor')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use the 'exact' configuration, which perform forward and inverse prediction as explained above, without any noise added (ie., it just looks for the nearest neighbor). \n", "\n", "Now we can instantiate the sensorimotor model by using:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "from explauto import SensorimotorModel\n", "sm_model = SensorimotorModel.from_configuration(environment.conf, 'nearest_neighbor', 'exact')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that in addition to the names of the model and its configuration, one also has to pass environment.conf. This a [Configuration](http://flowersteam.github.io/explauto/explauto.utils.html#explauto.utils.config.Configuration) object which is instantiated during the environment creation and provides information about the motor and sensorimotor ranges used by the environment. It is useful for the sensorimotor model to be properly configured. When using the 'default' configuration for example, the added noise when performing inverse prediction depends on the motor ranges. Passing environment.conf thus allows to define sensorimotor model configurations independently of particular environment settings.\n", "\n", "Now let's train the model from the execution of random motor commands (i.e. random motor babbling):" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "for m in environment.random_motors(n=1000):\n", " # compute the sensori effect s of the motor command m through the environment:\n", " s = environment.compute_sensori_effect(m)\n", " # update the model according to this experience:\n", " sm_model.update(m, s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that sensorimotor model training in Explauto is an iterative process. They incorporate new sensorimotor experience on the fly instead of using batch training. This is a requirement for autonomous exploration where the internal model has to be refined *online*.\n", "\n", "Once the sensorimodel has been trained, one can perform forward and inverse prediction with it. Let's predict the sensori effect of a new random motor command (which is not in the training set we just used) using the [forward_prediction](http://flowersteam.github.io/explauto/explauto.sensorimotormodel.html#explauto.sensorimotor_model.sensorimotor_model.SensorimotorModel.forward_prediction) method:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "random motor command: [-0.74518822 -0.03926774 -0.80466019 0.17241023 -0.6806184 0.03708627\n", " -0.35089093]\n", "predicted effect: [ 0.47060119 -0.81562523]\n" ] } ], "source": [ "# random motor command:\n", "m = environment.random_motors(n=1)[0]\n", "# predicted sensory effect:\n", "s_pred = sm_model.forward_prediction(m)\n", "\n", "print('random motor command: ', m)\n", "print('predicted effect: ', s_pred)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and compare the predicted effect with the real effect observed from executing $m$ through the environment:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAEKCAYAAAAvlUMdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAHqBJREFUeJzt3X2QVfWd5/H3p8FGIYIgKIo0jRGCoIhwxW4VkknUGGujbsZEXczgxkxXks1sTVKZilP8kS1TbpnMTLI7NU5GKmOiCUajW9mQNVnjY0FMN6FRREChWxBtAvIoPrQ89nf/uAf22vbtvt30uacv/XlV3ep7fud37v3erguf/p2H31FEYGZm1t+qsi7AzMxOTA4YMzNLhQPGzMxS4YAxM7NUOGDMzCwVDhgzM0tFpgEj6T5JOyStLbJekv5ZUqukNZJmF6xbKKkleSwsX9VmZlaKrEcwPwWu6Wb9Z4ApyaMB+BGApDHAd4BLgbnAdySNTrVSMzPrlUwDJiKWAXu66XI98EDkNQGnSToL+DTwRETsiYi9wBN0H1RmZlZmQ7MuoAcTgDcKltuStmLtHyKpgfzohxEjRsyZNm1aOpWamZ2gVq1atSsixvV2u4EeMMctIhYDiwFyuVw0NzdnXJGZWWWRtKUv22V9DKYnW4GJBcvnJG3F2s3MbIAY6AGzFPir5GyyOmBfRGwDHgeuljQ6Obh/ddJmZmYDRKa7yCT9AvgEMFZSG/kzw04CiIh/A34LXAu0Au3Af07W7ZH0XWBl8lJ3RkR3JwuYmVmZZRowEXFLD+sD+C9F1t0H3JdGXWZmdvwG+i4yMzOrUA4YMzNLhQPGzMxS4YAxM7NUOGDMzCwVDhgzM0uFA8bMzFLhgDEzs1Q4YMzMLBUOGDMzS4UDxszMUuGAMTOzVDhgzMwsFQ4YMzNLhQPGzMxS4YAxM7NUOGDMzCwVDhgzM0tFpgEj6RpJGyS1Srqji/U/lLQ6eWyU9FbBuiMF65aWt3IzM+vJ0KzeWNIQ4B7gKqANWClpaUSsP9onIr5R0P9vgIsLXuL9iJhVrnrNzKx3shzBzAVaI2JTRBwEHgKu76b/LcAvylKZmZkdtywDZgLwRsFyW9L2IZImAZOBpwuaT5bULKlJ0g3plWlmZn2R2S6yXroZeDQijhS0TYqIrZLOBZ6W9FJEvNp5Q0kNQANATU1Neao1M7NMRzBbgYkFy+ckbV25mU67xyJia/JzE/AsHzw+U9hvcUTkIiI3bty4463ZzMxKlGXArASmSJosqZp8iHzobDBJ04DRQGNB22hJw5LnY4HLgfWdtzUzs+xktossIg5L+jrwODAEuC8i1km6E2iOiKNhczPwUEREwebnA/dK6iAfkncXnn1mZmbZ0wf/3z6x5XK5aG5uzroMM7OKImlVROR6u52v5Dczs1Q4YMzMLBUOGDMzS4UDxszMUuGAMTOzVDhgzMwsFQ4YMzNLhQPGzMxS4YAxM7NUOGDMzCwVDhgzM0uFA8bMzFLhgDEzs1Q4YMzMLBUOGDMzS4UDxszMUuGAMTOzVDhgzMwsFQ4YMzNLRaYBI+kaSRsktUq6o4v1t0naKWl18vhywbqFklqSx8LyVm5mZj0ZmtUbSxoC3ANcBbQBKyUtjYj1nbo+HBFf77TtGOA7QA4IYFWy7d4ylG5mZiXIcgQzF2iNiE0RcRB4CLi+xG0/DTwREXuSUHkCuCalOs3MrA+yDJgJwBsFy21JW2d/KWmNpEclTezltkhqkNQsqXnnzp39UbeZmZVgoB/k/w1QGxEzyY9S7u/tC0TE4ojIRURu3Lhx/V6gmZl1LcuA2QpMLFg+J2k7JiJ2R8SBZPHHwJxStzUzs2xlGTArgSmSJkuqBm4GlhZ2kHRWweJ1wMvJ88eBqyWNljQauDppMzOzASKzs8gi4rCkr5MPhiHAfRGxTtKdQHNELAX+q6TrgMPAHuC2ZNs9kr5LPqQA7oyIPWX/EGZmVpQiIusayiaXy0Vzc3PWZZiZVRRJqyIi19vtBvpBfjMzq1AOGDMzS4UDxszMUuGAMTOzVDhgzMwsFQ4YMzNLhQPGzMxS4YAxM7NUOGDMzCwVDhgzM0uFA8bMzFLhgDEzs1Q4YMzMLBUOGDMzS4UDxszMUuGAMTOzVDhgzMwsFQ4YMzNLRaYBI+kaSRsktUq6o4v135S0XtIaSU9JmlSw7oik1cljaXkrNzOzngzN6o0lDQHuAa4C2oCVkpZGxPqCbi8AuYhol/RV4PvATcm69yNiVlmLNjOzkmU5gpkLtEbEpog4CDwEXF/YISKeiYj2ZLEJOKfMNZqZWR9lGTATgDcKltuStmJuB35XsHyypGZJTZJuKLaRpIakX/POnTuPr2IzMytZZrvIekPSrUAO+HhB86SI2CrpXOBpSS9FxKudt42IxcBigFwuF2Up2MzMMh3BbAUmFiyfk7R9gKQrgUXAdRFx4Gh7RGxNfm4CngUuTrNYMzPrnSwDZiUwRdJkSdXAzcAHzgaTdDFwL/lw2VHQPlrSsOT5WOByoPDkADMzy1hmu8gi4rCkrwOPA0OA+yJinaQ7geaIWAr8A/AR4BFJAK9HxHXA+cC9kjrIh+Tdnc4+MzOzjCli8ByWyOVy0dzcnHUZZmYVRdKqiMj1djtfyW9mZqlwwJiZWSocMGZmlgoHjJmZpcIBY2ZmqXDAmJlZKhwwZmaWCgeMmZmlwgFjZmapcMCYmVkqHDBmZpYKB4yZmaXCAWNmZqlwwJiZWSocMGZmlgoHjJmZpcIBY2ZmqXDAmJlZKjINGEnXSNogqVXSHV2sHybp4WT9Ckm1Bev+PmnfIOnT5azbymfJkiXU1tZSVVVFbW0tS5YsybokMytR0YCR9NvC/9D7m6QhwD3AZ4DpwC2SpnfqdjuwNyLOA34IfC/ZdjpwMzADuAb41+T17ASyZMkSGhoa2LJlCxHBli1baGhocMiYVYjuRjA/AX4vaZGkk1J477lAa0RsioiDwEPA9Z36XA/cnzx/FPiUJCXtD0XEgYjYDLQmr2cnkEWLFtHe3v6Btvb2dhYtWpRRRWbWG0UDJiIeAWYDI4FmSd+S9M2jj3547wnAGwXLbUlbl30i4jCwDzi9xG0BkNQgqVlS886dO/uhbCuX119/vWj79u3by1yNmfVWT8dgDgLvAcOAUzs9KkJELI6IXETkxo0bl3U51gs1NTVdto8cOZJ7772XBx54gJaWFiKizJWZWSmGFlsh6RrgB8BSYHZEtBfr20dbgYkFy+ckbV31aZM0FBgF7C5xW6twd911Fw0NDR/YTXbKKafQ0NBAdXU1mzdvZvPmzYwdO5b6+npmzpzJ0KFFv9JmVmbd/WtcBHw+Ital9N4rgSmSJpMPh5uB/9Spz1JgIdAI3Ag8HREhaSnwoKQfAGcDU4A/pVSnZWTBggVA/ljM66+/Tk1NDXfddRcLFixg//79rFq1ihUrVrBr1y5+85vf8PTTT3PJJZdwySWXMHz48IyrNzNluXtB0rXA/wCGAPdFxF2S7gSaI2KppJOBnwEXA3uAmyNiU7LtIuBLwGHgbyPidz29Xy6Xi+bm5pQ+jWXhyJEjrFu3jsbGxmPHZYYOHcpFF11EXV0dY8eOzbhCs8onaVVE5Hq93WDaf+2AOXFFBK+99hqNjY20tLQca//Yxz5GXV0dkyZNIn8Copn1lgOmBA6YwWHnzp00NjayZs0ajhw5AsDZZ59NfX0906dPp6rKE1iY9YYDpgQOmMHl3XffZeXKlTQ3Nx87UWDUqFFceumlzJ49m2HDhmVcoVllcMCUwAEzOB06dIgXX3yRpqYmdu/eDcCwYcOYPXs2l156KaNGjcq4QrOBzQFTAgfM4BYRbNy4kcbGRrZs2QKAJGbMmEF9fT1nn312xhWaDUwOmBI4YOyoP//5zzQ2NrJu3bpjF2pOmjSJ+vp6pk6d6hMCzAo4YErggLHO9u3bx4oVK1i1ahUHDx4E4PTTT6euro6LLrqIk05KYxo+s8rigCmBA8aK2b9/P88//zwrVqzg7bffBmD48OHkcjnmzp3LiBEjMq7QLDsOmBI4YKwnR44cYf369TQ2NrJt2zYAhgwZwsyZM6mvr8fz2dlg5IApgQPGSnX0/jONjY1s3LjxWPuUKVOor6+ntrbWx2ls0OhrwHhmQLMuSKK2tpba2lp27dpFU1MTL774Ii0tLbS0tDB+/Hjq6+uZMWMGQ4b4XndmXfEIxqxE7733Hs3NzfzpT386duHmyJEjmTt3LnPmzOHkk0/OuEKzdHgXWQkcMNYfDh8+zJo1a2hsbGTXrl0AVFdXc/HFF1NXV8dpp52WcYVm/csBUwIHjPWniKC1tZXGxkY2b94M5HetTZ8+nfr6eiZM6PImq2YVxwFTAgeMpWXbtm00NTWxdu1aOjo6gPwdOY9euOkJNq2SOWBK4ICxtL399tvHLtw8cOAAAGPGjKGuro5Zs2b5wk2rSA6YEjhgrFwOHDjACy+8QFNTE/v27QPyt3s+euHmRz7ykYwrNCudA6YEDhgrt46ODl5++WUaGxvZunUrkL9w88ILL6S+vp4zzjgj4wrNeuaAKYEDxrISEbzxxhs0NjbyyiuvHGs/77zzqK+vZ/Lkyb5w0wasirrQUtIY4GGgFngN+EJE7O3UZxbwI2AkcAS4KyIeTtb9FPg4sC/pfltErC5H7WZ9IYmamhpqamrYvXs3TU1NrF69mtbWVlpbWznzzDOpr6/nggsu8IWbdsLIZAQj6fvAnoi4W9IdwOiI+HanPlOBiIgWSWcDq4DzI+KtJGD+T0Q82pv39QjGBpL29vZjF26+9957AJx66qnU1dWRy+Worq7OuEKzvIraRSZpA/CJiNgm6Szg2Yj4WA/bvAjcmATOT3HA2Ani8OHDvPTSSzQ2NrJz504gP5NzXV0dc+fO9a2dLXOVFjBvRcRpyXMBe48uF+k/F7gfmBERHUnA1AMHgKeAOyLiQJFtG4AGgJqamjlH72RoNtBEBC0tLSxbtuzYCQEnn3wyc+fOpa6ujlNOOSXjCm2wGnABI+lJYHwXqxYB9xcGiqS9ETG6yOucBTwLLIyIpoK27UA1sBh4NSLu7Kkmj2CsEkQEmzdvZtmyZcdu7VxdXc0ll1xCfX29701jZTfgAqbbNy1xF5mkkeTD5b8X2x0m6RPAtyLiP/T0vg4YqzRbtmxh+fLlvPrqqwAMHTqUOXPmcNlllzFy5MiMq7PBoqLOIgOWAguBu5Ofv+7cQVI18Cvggc7hIumsJJwE3ACsTb9ks/KbNGkSkyZNoq2tjeXLl7Nx40ZWrFhBc3MzF198MZdffrkn17QBK6sRzOnAL4EaYAv505T3SMoBX4mIL0u6FfgJsK5g09siYrWkp4FxgIDVyTbv9vS+HsFYpdu+fTvLly9n/fr1AFRVVTFz5kzmzZvHmDFjMq7OTlQVtYssKw4YO1Hs3LmT5cuXs3btWiICSVxwwQXMmzfPt3W2fueAKYEDxk40e/bsYfny5axZs+bYLM7Tp09n3rx5jB/f1Tk2Zr3ngCmBA8ZOVG+99RbPPfccL7zwAkeOHAFg6tSpzJ8/3/elsePmgCmBA8ZOdO+88w7PPfccq1at4vDhwwCce+65zJ8/n0mTJmVcnVUqB0wJHDA2WLz33ns0NjaycuVKDh48COTPSJs/f74n1rRec8CUwAFjg83777/PihUrWLFiBfv37wdgwoQJzJ8/nylTpjhorCQOmBI4YGyw2r9/PytXrqSpqYn29nYAxo8fz/z585k2bZqDxrrlgCmBA8YGu4MHD7Jq1Sr++Mc/8u67+UvHxo0bx7x585gxYwZVVVUZV2gDkQOmBA4Ys7xDhw7xwgsv8Nxzz/H2228DMGbMGK644gpmzpzpe9LYBzhgSuCAMfugI0eO8OKLL/KHP/yBvXvz9/wbNWoUV1xxBbNmzWLo0Kxmk7KBxAFTAgeMWdc6Ojp46aWXWL58Obt37wbyNz+77LLLmDNnDieddFLGFVqWHDAlcMCYda+jo4OXX36ZZcuWsWPHDgBGjBjBtddey/Tp0zOuzrJSabMpm9kAVFVVxYwZM5g+fTobNmxg2bJlbNu2jaamJgeM9ZpPGTGzD5HEtGnTuOqqqwB8dpn1ib81ZlbUoUOHAHwMxvrEAWNmRR2dz8wBY33hgDGzojyCsePhgDGzoo4GjK+Hsb5wwJhZUR7B2PHIJGAkjZH0hKSW5OfoIv2OSFqdPJYWtE+WtEJSq6SHJVWXr3qzwcMBY8cjqxHMHcBTETEFeCpZ7sr7ETEreVxX0P494IcRcR6wF7g93XLNBicf5LfjkVXAXA/cnzy/H7ih1A2Vn1f8k8CjfdnezErnYzB2PLIKmDMjYlvyfDtwZpF+J0tqltQk6WiInA68FRGHk+U2oOhNxyU1JK/RvHPnzn4p3myw8C4yOx6p/Vki6UlgfBerFhUuRERIKjYh2qSI2CrpXOBpSS8B+3pTR0QsBhZDfi6y3mxrNth5F5kdj9QCJiKuLLZO0puSzoqIbZLOAnYUeY2tyc9Nkp4FLgb+F3CapKHJKOYcYGu/fwAz8wjGjktWu8iWAguT5wuBX3fuIGm0pGHJ87HA5cD6yE///AxwY3fbm9nxc8DY8cgqYO4GrpLUAlyZLCMpJ+nHSZ/zgWZJL5IPlLsjYn2y7tvANyW1kj8m8+9lrd5skHDA2PHI5NSQiNgNfKqL9mbgy8nzPwIXFtl+EzA3zRrNzGeR2fHxlfxmVpQP8tvxcMCYWY8OHDiQdQlWgRwwZlZUbW0tABs2bMi2EKtIDhgzK+r8888H4JVXXiF/AqdZ6RwwZlbUxIkTGT58OHv37uXNN9/MuhyrMA4YMyuqqqqKadOmAflRjFlvOGDMrFtHd5O9/PLLGVdilcYBY2bdmjx5MsOGDWPHjh3s2bMn63KsgjhgzKxbQ4YMYerUqYBHMdY7Dhgz65GPw1hfOGDMrEfnnXceQ4cOpa2tjXfeeSfrcqxCOGDMrEfV1dV89KMfBTyKsdI5YMysRx0dHVRV5f+72Lx5c8bVWKXwFKlm1q39+/fzyCOPsGnTJoYMGcJFF12UdUlWIRwwZlbUnj17ePDBB9m9ezcjRozgpptuYuLEiVmXZRXCAWNmXXrttdd4+OGH2b9/P2eccQa33HILp512WtZlWQVxwJjZhzz//PM89thjdHR0MHXqVD73uc8xbNiwrMuyCuOAMbNjOjo6eOKJJ2hqagKgvr6eK6+88tgBfrPeyORbI2mMpCcktSQ/R3fR5y8krS547Jd0Q7Lup5I2F6ybVf5PYXZiOXjwIA899BBNTU1UVVXx2c9+lquvvtrhYn2W1TfnDuCpiJgCPJUsf0BEPBMRsyJiFvBJoB34fUGXvzu6PiJWl6VqsxNUe3s7DzzwAC0tLZxyyil88YtfZPbs2VmXZRUuq11k1wOfSJ7fDzwLfLub/jcCv4uI9nTLMht89u3bx89//nN27drFqFGjuPXWWxk7dmzWZdkJIKsRzJkRsS15vh04s4f+NwO/6NR2l6Q1kn4oyUcfzfpg165d3HfffezatYtx48bxpS99yeFi/Sa1EYykJ4HxXaxaVLgQESGp6L1YJZ0FXAg8XtD89+SDqRpYTH70c2eR7RuABoCamppefAKzE1tbWxsPPvgg77//PhMnTuSWW27hlFNOybosO4GkFjARcWWxdZLelHRWRGxLAmRHNy/1BeBXEXGo4LWPjn4OSPoJ8K1u6lhMPoTI5XK+qbgNKuPHj+/yVsejRo3iG9/4BgBTpkzh85//PCeddFK5y7MTXFa7yJYCC5PnC4Ffd9P3FjrtHktCCUkCbgDWplCjWcXrKlwgf9xlyJAhXHrppdx0000OF0uFIsr/R72k04FfAjXAFuALEbFHUg74SkR8OelXCzwHTIyIjoLtnwbGAQJWJ9u829P75nK5aG5u7udPYzZw5f8G69q7777LiBEjyliNVSpJqyIi19vtMhnBRMTuiPhUREyJiCsjYk/S3nw0XJLl1yJiQmG4JO2fjIgLI+KCiLi1lHAxsw/qt3BZsgRqa6GqKv9zyZL+eV2reL6S38z6bskSaGiA9uQKgi1b8ssACxZkV5cNCL5E18z6btGi/x8uR7W359tt0HPAmJ3Azjyz60vMirX32uuv967dBhXvIjM7gW3fvj3dN6ipye8W66rdBj2PYMys7+66C4YP/2Db8OH5dhv0HDBm1ncLFsDixTBpEkj5n4sX+wC/Ad5FZmbHa8ECB4p1ySMYMzNLhQPGzMxS4YAxM7NUOGDMzCwVDhgzM0uFA8bMzFLhgDEzs1Q4YMzMLBUOGDMzS4UDxszMUuGAMTOzVDhgzMwsFZkEjKTPS1onqUNSrpt+10jaIKlV0h0F7ZMlrUjaH5ZUXZ7KzcysVFmNYNYCnwOWFesgaQhwD/AZYDpwi6TpyervAT+MiPOAvcDt6ZZrZma9lUnARMTLEbGhh25zgdaI2BQRB4GHgOslCfgk8GjS737ghvSqNTOzvhjI94OZALxRsNwGXAqcDrwVEYcL2icUexFJDUBDsviupJ6CrS/GArtSeN00VVrNlVYvuOZyqLR6oTJr/lhfNkotYCQ9CYzvYtWiiPh1Wu/bWUQsBhan+R6SmiOi6LGkgajSaq60esE1l0Ol1QuVW3NftkstYCLiyuN8ia3AxILlc5K23cBpkoYmo5ij7WZmNoAM5NOUVwJTkjPGqoGbgaUREcAzwI1Jv4VA2UZEZmZWmqxOU/6PktqAeuAxSY8n7WdL+i1AMjr5OvA48DLwy4hYl7zEt4FvSmolf0zm38v9GTpJdRdcSiqt5kqrF1xzOVRavTCIalZ+QGBmZta/BvIuMjMzq2AOGDMzS4UDpg8kjZH0hKSW5OfobvqOlNQm6V/KWWMXdfRYs6RZkhqTaXzWSLopgzq7nB6oYP2wZHqg1mS6oNpy19hFTT3V/E1J65Pf6VOSJmVRZ0E93dZb0O8vJUV30zmVSyk1S/pC8nteJ+nBctfYRT09fS9qJD0j6YXku3FtFnUW1HOfpB2S1hZZL0n/nHyeNZJm9/iiEeFHLx/A94E7kud3AN/rpu//BB4E/mWg1wxMBaYkz88GtgGnlbHGIcCrwLlANfAiML1Tn68B/5Y8vxl4OOPfayk1/wUwPHn+1SxrLqXepN+p5KdyagJyFfA7ngK8AIxOls+ogJoXA19Nnk8HXsu45vnAbGBtkfXXAr8DBNQBK3p6TY9g+uZ68lPUQDdT1UiaA5wJ/L5MdXWnx5ojYmNEtCTP/wzsAMaVrcIi0wN16lP4OR4FPpVMH5SVHmuOiGcioj1ZbCJ/7VZWSvkdA3yX/Jx/+8tZXBGl1PzXwD0RsRcgInaUucbOSqk5gJHJ81HAn8tY34dExDJgTzddrgceiLwm8tcjntXdazpg+ubMiNiWPN9OPkQ+QFIV8E/At8pZWDd6rLmQpLnk//J6Ne3CCnQ1PVDnaYCO9Yn8qez7yJ+qnpVSai50O/m/ArPSY73Jro+JEfFYOQvrRim/46nAVEnPSWqSdE3ZqutaKTX/N+DW5JKN3wJ/U57S+qy33/UBPRdZprqb6qZwISJCUlfnen8N+G1EtJXrD+x+qPno65wF/AxYGBEd/Vvl4CXpViAHfDzrWopJ/jD6AXBbxqX01lDyu8k+QX6EuEzShRHxVqZVde8W4KcR8U+S6oGfSbrgRPo354ApIrqZ6kbSm5LOiohtyX/GXQ3H64F5kr4GfASolvRuRBQ9qHq8+qFmJI0EHiM/Z1xTSqUWU2x6oK76tEkaSn7Xwu7ylNelUmpG0pXkg/7jEXGgTLV1pad6TwUuAJ5N/jAaDyyVdF1E9Gk+qn5Qyu+4jfwxgUPAZkkbyQfOyvKU+CGl1Hw7cA1ARDRKOpn8RJhZ794rpqTveiHvIuubpeSnqIEiU9VExIKIqImIWvK7yR5IM1xK0GPNyZQ8vyJf66Od15dBl9MDdepT+DluBJ6O5AhkRnqsWdLFwL3AdQPg2EC39UbEvogYGxG1yXe3iXzdWYULlPa9+N/kRy9IGkt+l9mmchbZSSk1vw58CkDS+cDJwM6yVtk7S4G/Ss4mqwP2Fex271qWZy1U6oP8Pv+ngBbgSWBM0p4DftxF/9vI/iyyHmsGbgUOAasLHrPKXOe1wEbyx34WJW13kv9PDvL/CB8BWoE/AecOgO9DTzU/CbxZ8DtdOpDr7dT3WTI+i6zE37HI79pbD7wE3FwBNU8HniN/htlq4OqM6/0F+TNHD5EfEd4OfAX4SsHv+J7k87xUyvfCU8WYmVkqvIvMzMxS4YAxM7NUOGDMzCwVDhgzM0uFA8bMzFLhgDHLiKSJkjZLGpMsj06Wa7OtzKx/OGDMMhIRbwA/Au5Omu4GFkfEa5kVZdaPfB2MWYYknQSsAu4jPyPwrMhPd2JW8TwXmVmGIuKQpL8D/i/5K7kdLnbC8C4ys+x9hvwUHRdkXYhZf3LAmGVI0izgKvJ3CPxGTzdwMqskDhizjCR34vwR8LcR8TrwD8A/ZluVWf9xwJhl56+B1yPiiWT5X4HzJQ3YG5KZ9YbPIjMzs1R4BGNmZqlwwJiZWSocMGZmlgoHjJmZpcIBY2ZmqXDAmJlZKhwwZmaWiv8HdwYWkT9greQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%pylab inline\n", "ax = axes()\n", "\n", "environment.plot_arm(ax, m)\n", "ax.plot(*s_pred, marker='o', color='red')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that the predicted end-effector position is quite close to the observed position when executing the motor command. Using the 'NN' model, it simply corresponds to the sensory effect of the nearest neighbor of $m$ in the stored sensorimotor experience." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sensorimotor models can also be used for inverse prediction using the [inverse_prediction](http://flowersteam.github.io/explauto/explauto.sensorimotormodel.html#explauto.sensorimotor_model.sensorimotor_model.SensorimotorModel.inverse_prediction) method, allowing the inference of an appropriate motor comand $m$ in order to reach a given sensory goal $s_g$:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Inferred motor command to reach the position [0.7, 0.5] : [-0.0566666 0.87217121 0.05877777 0.23734133 0.59929837 -0.38790785\n", " -0.89865953]\n" ] } ], "source": [ "s_g = [0.7, 0.5]\n", "m = sm_model.inverse_prediction(s_g)\n", "print('Inferred motor command to reach the position ', s_g, ': ', m)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can check if the inferred motor command is actually appropriate to reach the goal $s_g$:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = axes()\n", "environment.plot_arm(ax, m)\n", "ax.plot(*s_g, marker='o', color='red')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that the inferred motor command results in an end-effector position which is quite close to the goal. Using the 'exact' configuration of the 'nearest_neighbor' model, it is simply the motor command which resulted in the sensory effect which is the closest to $s_g$ in the stored experience." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a bit more complex example where the arm attempt to follow a vertical straight line with the end-effector:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = axes()\n", "\n", "# Define the line and plot it:\n", "x = 0.8\n", "y_a = 0.5\n", "y_b = -0.5\n", "ax.plot([x, x], [y_a, y_b], color='red')\n", "\n", "# for 10 points equidistantly spaced on the line, perform inverse prediction and plot:\n", "for y in linspace(-0.5, 0.5, 10):\n", " m = sm_model.inverse_prediction([x, y])\n", " environment.plot_arm(ax, m)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using another sensorimotor model in Explauto simply consists of changing the model name and configuration above. For example, you can try to execute the exact same code, just replacing the model instanciation by:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "sm_model = SensorimotorModel.from_configuration(environment.conf, 'LWLR-BFGS', 'default')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Motor and goal babbling using interest models" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Explauto, the role of interest models is to provide sensorimotor predictions (forward or inverse) to be performed by the sensorimotor model. An interest model implements the active exploration process, where sensorimotor experiments are chosen to improve the forward or inverse predictions of the sensorimotor model. It explores in a given *interest space* resulting in motor babbling strategies when it corresponds to the motor space and in goal babbling strategies when it corresponds to the sensory space.\n", "\n", "An interest model has to implement a sampling procedure in the interest space. Explauto provides several sampling procedures: \n", "* random sampling\n", "* learning progress maximization in forward or inverse predictions.\n", "* In development:\n", " * social interaction (e.g. using a mouse pointer to interactively provide sensory goals)\n", " * optimization toward a specific goal" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly to environments and sensorimotor models, available interest models in Explauto can be accessed using:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['misc_random', 'random', 'gmm_progress_beta', 'tree', 'discretized_progress'])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from explauto.interest_model import interest_models, available_configurations\n", "interest_models.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and the available configurations of a given model by:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'default': {'eps_random': 0.3,\n", " 'measure': ,\n", " 'win_size': 10,\n", " 'x_card': 400}}" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "available_configurations('discretized_progress')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using an environment, a sensorimotor and an interest model, one can run a motor babbling strategy by:\n", "* first instantiate a random motor interest model:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "from explauto import InterestModel\n", "im_model = InterestModel.from_configuration(environment.conf, environment.conf.m_dims, 'random')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Then running the following simulation loop and (optionally) plotting the reached sensory effects:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAH8hJREFUeJzt3X+MJOV95/H3d2Z3wOOEsNuzidfA9GAHK17bF8iOOHORLskZ25g/AClcAp7d2yR25nbJRTpZlrJW310i7kbBRJfA6YzICHNwzJzB4ZR45dhC/PJZSozD+Lz8tJZd1jMLhJj9AZbwXvix870/uppU91R3V3dV14/uz0sqbXV1dddT3bP17ef5Ps9T5u6IiIg0jOVdABERKRYFBhERaaLAICIiTRQYRESkiQKDiIg0UWAQEZEmCgwiItJEgUFERJooMIiISJNNeRegH1NTUz4zM5N3MURESuV73/veCXff1m2/UgaGmZkZVlZW8i6GiEipmNlanP3UlCQiIk0UGEREpIkCg4iINFFgEBGRJgoMIiLSRIFBUrG8vMzMzAxjY2PMzMywvLycd5FEpE+l7K4qxbK8vMz8/DynT58GYG1tjfn5eQDm5ubyLJqI9EE1BkmsVqu9ExQaTp8+Ta1Wy6lEw0W1McmaagyS2LFjx3raLvGpNiZ5UI1BEpuenu5pezv6ZbyRamOSBwUGSWxhYYHJycmmbZOTkywsLMR+j8Yv47W1Ndz9nV/Gox4cVBuTPKQSGMzsCjM7ZGZHzGx/xPN/ZmYHg+U5M3st9NyZ0HMH0iiPZGtubo7FxUWq1SpmRrVaZXFxsaemDv0yjpZWbUykF+buyd7AbBx4Dvg48CLwOHC9uz/bZv/fBy5x998JHr/u7j/VyzFnZ2ddk+gNl7GxMaL+Fs2M9fX1HEpUDK05BqjXxnoNvCIAZvY9d5/ttl8aNYZLgSPuftTd3wTuBa7usP/1wFdSOK4MEf0yjpZGbSwO5XckLI3AcB7wQujxi8G2DcysClwIPBLafLaZrZjZY2Z2TQrlkRJKI08xrObm5lhdXWV9fZ3V1dWBBAXldyQs6+TzdcD97n4mtK0aVG0+DdxiZu+PeqGZzQcBZOX48eM9H1i/iIotq1/GspHyO9IqjRzDZcAfufsng8dfAHD3P47Y9/vA77n737Z5r7uAr7v7/Z2O2WuOQe20Iu0pvzM6sswxPA5cZGYXmtkE9VrBht5FZvYLwBbgO6FtW8zsrGB9CvhlIDJpnYR+EYm0p/yOtEocGNz9beDfAQ8APwC+6u7PmNmNZnZVaNfrgHu9+afJB4EVM3sCeBS4qV1vpiTUF1ykPeV3ZAN3L92yc+dO70W1WnVgw1KtVnt6H5GiWFpa8mq16mbm1WrVl5aWCvV+eR9HogErHuMam/tFvp+l18CwtLTkk5OTTUFhcnJSf5QyMIO8AJb177ms5R4mCgwt9EtFsjLoC2BZa8Bxyq3/p4MVNzAk7pWUB418liKbmZlhbW1tw/Zqtcrq6mri9y9rL6Ju5VbvwcHLsleSiIQMurNDXr2Iko4F6lbudr0Hd+3apbFHGVNgEEnZoC/cefQiSmN0dLdydwqcGo2dsTjtTUVb+skxiGQliyRr1m3xaeU1OpW73TGSHE+aoRyDSH6Wl5ep1WocO3aM6elpFhYWSt1OnkVeIyrHMMjjjSLlGCR3ozw/1aAnvstaFnmN8HxZvZZD0qXAIAOhGTuHS1Z5jUZAXVpa0mjsPMVpbyraohxD8ZW1r720l3VeQ2Ma0ocGuEmezCwyMJhZ3kWTDOR1UVcw6SxuYNiUTz1Fht309HTkIC+1EQ+/1iRyoxkRGGiuJa/jDiPlGGQgNGPn6MprmntNr58eBQYZCN2RbXTlNc29ptdPj5qSZGDm5uYUCEZQXs2Iar5Mj2oMkopRHrMgzfJqRlTzZYriZKiLtqhXUrFonn1ppV5JxYSmxJCsDHqaaRkd4alEtm7dCsCpU6eGYlqRItCUGJIZJf2GQ7fmwEE3F7aOlj958iQnT57EXSPnMxenWlG0RU1JxaJRzuXXrTkwi+bCuLOrqrmof2jks2RFOYby6xbcswj+7UbLty76W+tf3MCQSlOSmV1hZofM7IiZ7Y94/rfM7LiZHQyWz4ae22Nmh4NlTxrlkWxpzEL5dWsOzKK5ME630vHxcQ1iy0DiwGBm48CXgE8BO4DrzWxHxK73ufvFwXJH8NqtwB8C/xy4FPhDM9uStEySvWGbZnrUdJtWO4tpt6O6m4ZNTk5y5syZyOeUz0pXGjWGS4Ej7n7U3d8E7gWujvnaTwIPuvspd38VeBC4IoUyiUgPFhYWmJiYaNo2MTHxzhiALMYItNY8K5UKlUqlqRba7l4NY2NjLC8vazxNStIIDOcBL4Qevxhsa/XrZvakmd1vZhf0+FrMbN7MVsxs5fjx4ykUW0TCvKXrevhxP82F/VykwzXPEydOcOLEiaZaaLtaxZkzZ9izZw+7du3SPUDSECcR0WkBrgXuCD3eDfz3ln0qwFnB+r8FHgnWPw/8h9B+/xH4fLdjKvkskq60k8uD7JCwtLTk4+PjsRLVSc5hGJFh8vkl4ILQ4/ODbeHgc9Ld3wge3gHsjPtaERm8tJPLg5zpdG5urqf7Psc5BzVBNUsjMDwOXGRmF5rZBHAdcCC8g5ltDz28CvhBsP4A8Akz2xIknT8RbBORDKWdXB5EL6bwxXtsLP6lq9s56Da0EeJUK7otwJXAc8DzQC3YdiNwVbD+x8AzwBPAo8AvhF77O8CRYPntOMdTU5JIutJu+smiaSrOYmZdz2GUBmiiAW4i0os0RxRnFWjGx8fdzLxSqfjmzZs3BIV9+/Z1fe9Rug2tAoOI5CrNQBPn4t3v8doFnUqlMnRTb8QNDJpdVUQKb5Az+LbeKxpg8+bNmBlvvvnmO9smJydLP6Jfs6uKyNAY5AC7qDEa55xzTlNQgNGaekM1BhEphfC9GgZ9f4axsTGiro1m1lNX2aJRjUFEhkKjm+ru3bsBuOeeewY+H1cWc0MVmQKDiAxM0oFjUWMMdu/ejZkNdCDayN8/Ok6GumiLeiWJFF8aXVa73bwnjWk22vVmamwn6BZL6EZBZYW6q4pIntIYOBbn5j1JBqIV4c51WYobGJR8FpGBSCOB266bar/v15rAPnHiBD/5yU827NfoBjvIbrJ5UPJZRHKVRgK32817enm/qHxFVFCAbO9cV0QKDCIyEGkkcMNjDKBeO+j3/aJmfG0nyzvXFVKc9qaiLcoxiGQnydQWaU6LkfT94uQrGkunHEPjfeIeP+3PIAmUfBaRpIYp+dqth1NjqVQq7h7dK6k1uHT7LIr2+cUNDEo+i0hbw5R8jZoTqVVjPiRgw75mFplM7/RZFO3zi5t83pRFYUSknIYp+doYKR3ulXTllVfyjW98Y8M0GzMzMxsCSLsf0Z0+i7J+fgoMItLW9PR05C/esiZf5+bmYk2l0cuFu9NnUdbPT72SRKStUZ0aIu6Fu9tnUdbPT4FBRNqKmpK67PckiGNhYWFD19iG8fHx2J9FWT8/JZ9FRCK0CwxlnnpbI59FRBJoDKprVfT8QBpSCQxmdoWZHTKzI2a2P+L5z5nZs2b2pJk9bGbV0HNnzOxgsBxIozwiIkmVNT+QhsSBwczGgS8BnwJ2ANeb2Y6W3b4PzLr7PwPuB24OPff/3P3iYLkqaXlERNJQ1vxAGtLornopcMTdjwKY2b3A1cCzjR3c/dHQ/o8Bu1I4rojIQMXt3jps0mhKOg94IfT4xWBbO58Bvhl6fLaZrZjZY2Z2TQrlERGRBDJNPpvZLmAW+JPQ5mqQJf80cIuZvb/Na+eDALJy/PjxDEorItK/pLc1zVMageEl4ILQ4/ODbU3M7HKgBlzl7m80trv7S8G/R4FvAZdEHcTdF9191t1nt23blkKxRWRYFO0iHHXvh/n5+dzLFVucmfY6LdTzFEeBC4EJ4AngQy37XAI8D1zUsn0LcFawPgUcBnZ0O6ZmVxWRhqLNYOqezm1NB4EsZ1c1syuBW4Bx4E53XzCzG4NCHDCzh4CPAC8HLznm7leZ2b8A/hxYp157ucXdv9zteBrgJiINRZvBFNK5rekgxB3gppHPIlJqRbwIFzFYgUY+i8iQ6JY/KOLtN8s+OE6BQUQKK04SN82LcFpJ7NIPjouTiCjaouSzyGiIm8RN477KRUxipw3d2lNEyi7L/EFR8wJpUo5BREqvn/xBv81BZb0N5yAoMIhIYfWaP0gysKyISey8KDCISGH1msSt1WqcPn26advp06ep1Wpdj1X2nkRpUo5BRIZG0pzE8vIytVqNY8eOMT09zcLCQnl6EsWgAW4iMnJGIYGchJLPIjJyBt0clHScQ9Em+2srTp/Woi0axyAi7aQxpqHd+yYZ51CEcRJoHIOISHqSNlMVoZlLTUkiIh302qyTdJxDmcZJKDCISKGFL+BTU1NMTU0lbqPvZ7xD0nEOpRonEae9qWiLcgwioyGqXZ4U2uj7uZHOKOUYcr/I97MoMIiMhnYX8LgX83bMLPK9zKzj65ImtgeVGI8rbmBQ8llECqvdgLWwfibUK0IiOA9KPotI6cVpf++njV7TX3SmwCAihRV1AQ/r92Je+hvpDJiakkSk0MLzF23duhWAU6dODeVcRoOmuZJERKRJpjkGM7vCzA6Z2REz2x/x/Flmdl/w/HfNbCb03BeC7YfM7JNplEdEhlNWcw3lPadR3sdP3HUUGAeeB94HTABPADta9rkBuD1Yvw64L1jfEex/FnBh8D7j3Y6p7qoioyercQBxjrO0tOSVSuWd5yuVSmHmZOqErMYxAJcBD4QefwH4Qss+DwCXBeubgBOAte4b3q/TosAgMnr6GZTW0Mv4gW7HWVpa8s2bN294fmJiIpWLd5Lz7CZuYEijKek84IXQ4xeDbZH7uPvbwI+BSszXAmBm82a2YmYrx48fT6HYItKLvJs3+p1rqNfpL7odp1ar8dZbb214/s0334x1p7huijCnUmm6q7r7orvPuvvstm3b8i6OyEhJci/ltPQ711Cvt/vsdpxOF+g0Lt5FmFMpjcDwEnBB6PH5wbbIfcxsE/AzwMmYrxWRnCW5l3Ja+h2U1usv8G7H6XSBTuPiXYjBd3Hamzot1HMGR6knjxvJ5w+17PN7NCefvxqsf4jm5PNRlHwWKZx+5xZKWz9zDfU7YV674ww6x9Dt+EmQ5SR6wJXAc9R7FdWCbTcCVwXrZwN/ARwB/g54X+i1teB1h4BPxTmeAoNItgaZEB20QfTyGWSvpEHKNDBkvSgwiGSrCFNGJ5H3rKZFETcwaOSziMQSnppC01GUk6bEEBGRJpp2W0RE+qLAICIiTRQYRESkiQKDiAj5T/lRJJvyLoCISN5uuOEGbr/99sbYqnem/ABGsueVagwiMtKWl5ebgkJD1lN+FIkCg4iMtFqttiEoNAxiRtMyNFkpMIhI6aR5ce108U97RtMizFIbhwKDiJRK2hfXdhd/M0t9RtMizFIbhwKDiJRK3Itr3FpF1DTXZsbevXsBUm32KcJNeGKJM6FS0RZNoicyuuJMAR41NfbmzZvbTp4XNcneICYOzHuWWjSJnogMo5mZGdbW1jZsr1arrK6uAjA1NcXJkyc37FOpVDhx4kRqx+lVoxksXOOZnJxkcXExk26xmitJRIZSnDucRQWFTtujDKLZZ25ujsXFRarVKmZGtVrNLCj0QoFBREolq4trL/de7qWX1NzcHKurq6yvr7O6ulq4oAAoxyAiwyd8d7XwUqlUur62kW8gyFvQJcdQppsYETPHoBqDiAydW2+9lYmJiaZtExMT3HrrrR1fF+4KC/UfzmYG0LZmUpYuqL1QYBCRoTM3N8edd97Z1Nx05513dm22ibrIu/s7Ceeo12fRBTXr0dLqlSQiEhgbG4ucHsPMWF9fBzbe4vT111+PTGon6b0UlmZPpkx6JZnZVjN70MwOB/9uidjnYjP7jpk9Y2ZPmtlvhp67y8x+aGYHg+XiJOURGTVlmHenTDolnJeXl5mammLXrl1No65fffXVDfu39pJKIpemqjiJiHYLcDOwP1jfD3wxYp8PABcF6+8FXgbODR7fBVzb63GVfBYpV9KzLNp9pvv27duwvd1iZr5v374N79s6gC6uOAP64iJm8jlpYDgEbA/WtwOHYrzmiVCgUGAQ6VPeo2j7keQCmZWoMrb7rNst4e+g11HYrdL8nrMKDK+F1i38uM3+lwI/AMb8nwLDIeBJ4M+As+IcV4FBJN1fklkocw2n3WfdqdbQELfrbLugmebnllpgAB4Cno5Yrm4NBMCrHd5nexAEPtqyzYCzgLuB/9Th9fPACrAyPT3d8wciMmzKVmMoW3nDktQYOu3X0O3in1ZNK6saQ6ymJOAc4P/SodkI+FXg63GOqxqDSPl+gWdVw0l6EY07oR7g7373u31iYqLjdxAnMGQVNLMKDH9Cc/L55oh9JoCHgX8f8VwjqBhwC3BTnOMqMIjUlaHNviGLi1/SYNnp9Z2aejp9B3GakrIKmlkFhkpw0T9Mvclpa7B9FrgjWN8FvAUcDC0XB889AjxFvWlqCfipOMdVYBApnyxqOEmDzyCC19LS0oZaxcTERNN5D1WNIa9FgUGknNKo4XR6j6S/vAf1y73beWfVLKjAICJDp9sFtIg1hriyaBZUYBCRodPtwj3IHMMwiBsYNImeiJRGtwnrkt6roSw30hk0TaInIqUxiNttjhLd2lNEhk6c23pKcgoMIlIaaurJhpqSRERGhJqSRKR0dH+JYtiUdwFERGDjncrW1taYn58HUFNRxlRjEJFCyOVOZRJJgUFECqHbGAXJjgKDiBRCp/stS7YUGESkEDRGoTgUGESkEKLGKOzZs4daraZeShnTOAYRKaTWXkpQr0FoQFv/NI5BREqtn15KGgeRDo1jEJFC6rWXksZBpEc1BikU/eKThl57KWkcRHoUGKQwGr/41tbWcPd3fvEpOIymXnspaRxEehQYpDD0i0/Cep1JVeMg0qPAIIWhX3wStry8TK1W49ixY0xPT7OwsNAxV6BxEOlJFBjMbKuZPWhmh4N/t7TZ74yZHQyWA6HtF5rZd83siJndZ2YTScoj5aZffNLQT7Oi7tWQojg3hm63ADcD+4P1/cAX2+z3epvtXwWuC9ZvB/bFOe7OnTtTvUG2FMOw34h9VC0tLXm1WnUz82q1Guv7rFarTX8HjaVarQ6+wEMMWPE41/Y4O7V9MRwCtgfr24FDbfbbEBgAA04Am4LHlwEPxDmuAsPw6uciIsXVLtjv27ev4/dsZpGBwcxyOpPhEDcwJBr5bGavufu5wboBrzYet+z3NnAQeBu4yd3/ysymgMfc/eeDfS4AvunuH25zrHlgHmB6enpn1A3BRaRYZmZmiPq/amaErz2tI5rbva5arbK6ujqw8g671EY+m9lDZvZ0xHJ1eL8gGrWLMtWgMJ8GbjGz98c5iZb3X3T3WXef3bZtW68vF5EctOs40PqDtLX3mRLJ+eo68tndL2/3nJn9yMy2u/vLZrYdeKXNe7wU/HvUzL4FXAL8b+BcM9vk7m8D5wMv9XEOIlJQ09PTkb/8o4SDSKPm0EuvJElP0u6qB4A9wfoe4GutO5jZFjM7K1ifAn4ZeDaoYTwKXNvp9SJSXlG//Outzhu19j6bm5tjdXWV9fV1VldXFRQylDQw3AR83MwOA5cHjzGzWTO7I9jng8CKmT1BPRDc5O7PBs/9AfA5MzsCVIAvJyyPiBRIVBfSvXv3qpmo4BIFBnc/6e4fc/eL3P1ydz8VbF9x988G63/r7h9x918M/v1y6PVH3f1Sd/95d//X7v5GstMRkby1zncFNP3yv+222zTeoOB0PwYRSY3uoVBsuh+DiGRuEPNdacbd7CkwiEhq0p7vKumMuwoq/VFgEJHUpD3fVZIaiKZx758Cg4ikJu2BaUlqIJrGvX8KDCKSmrRnOE1SA9E07v1TYBCRVKU5MC1JDUTTuPdPgUFkyAxTwjVJDUTzLSUQZwrWoi2adlskmu5p0UzTuDcji2m386IBbtKvXm8XWTaarlo6iTvArevsqiLDonVUbqP7IjA0wUEJV0mDcgwyMkah+6ISrpIGBQYZGaPwa1oJV0mDAoOMjFH4NZ32OAIZTQoMMjKG+dd0uItqrVZjYWFBN7iRvikwyMgY1l/TmhNI0qbuqiIll6SL6rB335Vm6q4qMiL6TaqPQvdd6Y+akkRKrt+k+ih035X+KDCIlFy/SfVR6L4r/UkUGMxsq5k9aGaHg3+3ROzza2Z2MLT8o5ldEzx3l5n9MPTcxUnKIzKK+k2qj0L3XelPouSzmd0MnHL3m8xsP7DF3f+gw/5bgSPA+e5+2szuAr7u7vf3clwln0WSa80xQL2mMQw9tSRa3ORz0qakq4G7g/W7gWu67H8t8E13P91lPxHpII2ptYe1+64kl7TG8Jq7nxusG/Bq43Gb/R8B/tTdvx48vgu4DHgDeBjY7+5vdDuuagwyyvRLX/oVt8bQNTCY2UPAeyKeqgF3hwOBmb3q7hvyDMFz24Engfe6+1uhbf8ATACLwPPufmOb188D8wDT09M7o/pti4wCTa0t/UptHIO7X97hID8ys+3u/nJwkX+lw1v9BvCXjaAQvPfLweobZvY/gM93KMci9eDB7Oxs+UbliaREvYlk0JLmGA4Ae4L1PcDXOux7PfCV8IYgmDSaoa4Bnk5YHsnBMN1KsgzUm0gGLWlguAn4uJkdBi4PHmNms2Z2R2MnM5sBLgD+T8vrl83sKeApYAr4LwnLIxmLmqdn9+7d3HDDDXkXbWgN82SAUgyJAoO7n3T3j7n7Re5+ubufCravuPtnQ/utuvt57r7e8vp/5e4fcfcPu/sud389SXkke1GjZ92d22+/XTWHAWn0JqpUKu9se9e73tXXe6m2J5Hi3Bi6aMvOnTs73/FaMmNmTTeeDy/VajXv4g2lpaUlr1QqGz7vycnJnm52v7S05JOTk4neQ8oFWPEY11jNriqJtOshA2BmrK+vRz4n/YnqqhrWS88k9W4aPVkNcJMRt7CwQL3vwEZKhqYvqukurJeeSerdJO0oMEgic3Nz7N27d0NwUDJ0MLpdtHsJxurdJO0oMEhit912G/fcc8/AplZQgvSfdLpo9xqM1btJ2oqTiCjaouTz6FCCtFnU5wF4pVLp6zNZWlryarXqZubVanVkP9dRQczkc+4X+X4WBYbRUa1Wh7LHU5ILsi7m0q+4gUG9kqTQxsbGiPobLXOPJ02CJ3lRryQZCsOYINUtNaXoFBik0IYxQapuolJ0CgxSaMN4M5lhrAXJcFFgkMKbm5tjdXWV9fV1VldXSx0UYDhrQTJcFBhEMjaMtSAZLuqVJCIyItQrSURE+qLAICIiTRQYRESkiQKDiIg0UWAQEZEmpeyVZGbHgejbhqVjCjgxwPfPgs6hGHQOxaBzqKu6+7ZuO5UyMAyama3E6dJVZDqHYtA5FIPOoTdqShIRkSYKDCIi0kSBIdpi3gVIgc6hGHQOxaBz6IFyDCIi0kQ1BhERaaLAAJjZVjN70MwOB/9uidjnYjP7jpk9Y2ZPmtlv5lHWVmZ2hZkdMrMjZrY/4vmzzOy+4PnvmtlM9qXsLMY5fM7Mng0+94fNrJpHOTvpdg6h/X7dzNzMCtdDJs45mNlvBN/FM2b2v7IuYzcx/pamzexRM/t+8Pd0ZR7lbMfM7jSzV8zs6TbPm5n9t+D8njSzXxpIQeLcGHrYF+BmYH+wvh/4YsQ+HwAuCtbfC7wMnJtzuceB54H3ARPAE8COln1uAG4P1q8D7sv78+7jHH4NmAzW95XxHIL9fhr4NvAYMJt3ufv4Hi4Cvg9sCR7/bN7l7uMcFoF9wfoOYDXvcreU718CvwQ83eb5K4FvAgZ8FPjuIMqhGkPd1cDdwfrdwDWtO7j7c+5+OFj/e+AVoOtAkQG7FDji7kfd/U3gXurnEhY+t/uBj5mZZVjGbrqeg7s/6u6NmyQ/BpyfcRm7ifM9APxn4IvAP2ZZuJjinMPvAl9y91cB3P2VjMvYTZxzcOCcYP1ngL/PsHxdufu3gVMddrka+J9e9xhwrpltT7scCgx1P+fuLwfr/wD8XKedzexS6r9Inh90wbo4D3gh9PjFYFvkPu7+NvBjoJJJ6eKJcw5hn6H+i6lIup5DUOW/wN3/OsuC9SDO9/AB4ANm9jdm9piZXZFZ6eKJcw5/BOwysxeBbwC/n03RUtPr/5e+bEr7DYvKzB4C3hPxVC38wN3dzNp21Qqi8z3AHndfT7eU0omZ7QJmgV/Juyy9MLMx4E+B38q5KEltot6c9KvUa23fNrOPuPtruZaqN9cDd7n7fzWzy4B7zOzD+r/cbGQCg7tf3u45M/uRmW1395eDC39kFdnMzgH+GqgF1bi8vQRcEHp8frAtap8XzWwT9erzyWyKF0ucc8DMLqcexH/F3d/IqGxxdTuHnwY+DHwraMV7D3DAzK5y96LcijDO9/Ai9Tbtt4Afmtlz1APF49kUsas45/AZ4AoAd/+OmZ1NfQ6iojWLtRPr/0tSakqqOwDsCdb3AF9r3cHMJoC/pN6+d3+GZevkceAiM7swKN911M8lLHxu1wKPeJDFKoiu52BmlwB/DlxVwHZt6HIO7v5jd59y9xl3n6GeJylSUIB4f0t/Rb22gJlNUW9aOpplIbuIcw7HgI8BmNkHgbOB45mWMpkDwL8Jeid9FPhxqBk8PXln4YuwUG9zfxg4DDwEbA22zwJ3BOu7gLeAg6Hl4gKU/UrgOer5jlqw7UbqFx6o/+H/BXAE+DvgfXmXuY9zeAj4UehzP5B3mXs9h5Z9v0XBeiXF/B6MepPYs8BTwHV5l7mPc9gB/A31HksHgU/kXeaW8n+Feo/Ht6jX0D4D7AX2hr6DLwXn99Sg/o408llERJqoKUlERJooMIiISBMFBhERaaLAICIiTRQYRESkiQKDiIg0UWAQEZEmCgwiItLk/wOJAzWJFQ5MRQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# re-instantiate the sensorimotor model (to forget what was previously learnt in the previous section\n", "sm_model = SensorimotorModel.from_configuration(environment.conf, 'nearest_neighbor', 'default')\n", "\n", "# run the simulation loop\n", "for _ in range(100):\n", " # sample a random motor command using the interest model:\n", " m = im_model.sample()\n", " # execute this command and observe the corresponding sensory effect:\n", " s = environment.compute_sensori_effect(m)\n", " # update the sensorimotor model:\n", " sm_model.update(m, s)\n", " # plot the observed sensory effect:\n", " plot(s[0], s[1], 'ok')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(The plots are quite hugly here, we will present Explauto visualization tools in the following.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Random goal babbling corresponds to:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Instantiate a random goal interest model:\n", "im_model = InterestModel.from_configuration(environment.conf, environment.conf.s_dims, 'random')\n", "\n", "for _ in range(100):\n", " # sample a random sensory goal using the interest model:\n", " s_g = im_model.sample()\n", " # infer a motor command to reach that goal using the sensorimotor model:\n", " m = sm_model.inverse_prediction(s_g)\n", " # execute this command and observe the corresponding sensory effect:\n", " s = environment.compute_sensori_effect(m)\n", " # update the sensorimotor model:\n", " sm_model.update(m, s)\n", " # plot the observed sensory effect:\n", " plot(s[0], s[1], 'ok')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that goal babbling allow a more uniform covering of the sensory space." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And finally, here is the code for curiosity-driven goal babbling (maximization of the learning progress):" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Instantiate an active goal interest model:\n", "im_model = InterestModel.from_configuration(environment.conf, environment.conf.s_dims, 'discretized_progress')\n", "\n", "for _ in range(100):\n", " # sample a sensory goal maximizing learning progress using the interest model:\n", " s_g = im_model.sample()\n", " # infer a motor command to reach that goal using the sensorimotor model:\n", " m = sm_model.inverse_prediction(s_g)\n", " # execute this command and observe the corresponding sensory effect:\n", " s = environment.compute_sensori_effect(m)\n", " # update the sensorimotor model:\n", " sm_model.update(m, s)\n", " # update the interest model:\n", " im_model.update(hstack((m, s)), hstack((m, s_g)))\n", " # plot the observed sensory effect:\n", " plot(s[0], s[1], 'ok')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The reached point obtained above do not well cover the sensory space. This is due to the fact that we did not re-initialize the sensorimotor model (therefore this latter was already trained) to avoid some bootstrapping issues. The next section shows how to encapsulate a sensorimotor and an interest models into an agent to, among other things, take care of those bootstrapping issues." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Encapsulating a sensorimotor and an interest models into an agent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Encapsulating a sensorimotor and an interest models into an agent allows to generalize and simplify the simulation loop whatever the exploration strategy involved, ie whatever the type of babbling, the sensorimotor and the interest models. In Explauto, an agent is intantiated using a configuration (generally from an environment), a sensorimotor and an interest models:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "from explauto import Agent\n", "\n", "sm_model = SensorimotorModel.from_configuration(environment.conf, 'nearest_neighbor', 'default')\n", "im_model = InterestModel.from_configuration(environment.conf, environment.conf.m_dims, 'random')\n", "\n", "agent = Agent(environment.conf, sm_model, im_model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An agent is provided with two methods. One for producing a motor command:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.74032642 -0.94512615 -0.00888012 0.41936147 -0.46972772 -0.58415502\n", " -1.00354773]\n" ] } ], "source": [ "m = agent.produce()\n", "print(m)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The *produce()* method calls the *sample()* method of the interest model, which returns either a motor command or a sensory goal according to the interest space (i.e. the type of babbling). Then it uses the sensorimotor model to complete the obtained value into a full sensorimotor vector (using forward prediction in case of motor babbling and inverse prediction in case of goal babbling). Finally it returns the motor part of this full sensorimotor vector. Agents also take care of model bootstrapping issues." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The second main agent method is *perceive()*, which informs the agent with the sensorimotor consequence of its action in order to update both the sensorimotor and the interest models:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "s = environment.update(m)\n", "agent.perceive(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hence the entire simulation loop can now be rewritten as:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "for _ in range(100):\n", " m = agent.produce()\n", " s = environment.update(m)\n", " agent.perceive(s) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This loop is valid whatever the exploration strategy involved. The corresponding formal framework is defined in:\n", "\n", "C. Moulin-Frier and P.-Y. Oudeyer, [*Exploration strategies in developmental robotics: A unified probabilistic framework*](https://hal.inria.fr/hal-00860641), ICDL/Epirob, Osaka, Japan, 2013, pp. 1–6.\n", "\n", "\n", "Let's for example create a curiosity-driven goal babbler:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "sm_model = SensorimotorModel.from_configuration(environment.conf, 'nearest_neighbor', 'default')\n", "im_model = InterestModel.from_configuration(environment.conf, environment.conf.s_dims, 'discretized_progress')\n", "\n", "agent = Agent(environment.conf, sm_model, im_model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and run it using the exact same loop:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "for _ in range(100):\n", " m = agent.produce()\n", " s = environment.update(m)\n", " agent.perceive(s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course lack a way to visualize the result of our simulations here, this is why we introduce Explauto's Experiment in the next section." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Encapsulating an environment and an agent into an experiment" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Encapsulating an environment and an agent into an experiment allows to evaluate agent learning and offers plotting facilities. Once an environment and an agent have been constructed, one can set an experiment using:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "from explauto import Experiment\n", "\n", "expe = Experiment(environment, agent)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An experiment offers the management of the simulation loop with evaluation, logging and plotting capabilities. Instead of seperately constructing the environment and the agent (containing the sensorimotor and the interest models), one can simply use:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "from explauto.experiment import make_settings\n", "\n", "random_goal_babbling = make_settings(environment='simple_arm', environment_config = 'mid_dimensional',\n", " babbling_mode='goal', \n", " interest_model='random',\n", " sensorimotor_model='nearest_neighbor')\n", "\n", "expe = Experiment.from_settings(random_goal_babbling)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is the compact way to construct the environment (here a mid-dimensional 'simple_arm'), the sensorimotor model (here, 'NN') and the interest model (here curiosity-driven goal babbling) and encapsulate them into an experiment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An experiment allows to insert an evaluation phase at given time steps:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "expe.evaluate_at([100, 200, 400, 1000], random_goal_babbling.default_testcases)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's run the experiment:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "expe.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This executes the same simulation loop as above, inserting an evaluation phase at each specified time step and logging the flow of interest model choices, sensorimotor model inferences and sensorimotor observations. This allows to, e.g., visualize the chosen goals and reached hand positions during the experiment using the [scatter_plot](http://flowersteam.github.io/explauto/explauto.experiment.html#explauto.experiment.log.ExperimentLog.scatter_plot) method:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%pylab inline\n", "ax = axes()\n", "title(('Random goal babbling'))\n", "\n", "expe.log.scatter_plot(ax, (('sensori', [0, 1]),))\n", "expe.log.scatter_plot(ax, (('choice', [0, 1]),), marker='.', color='red')\n", "#expe.log.scatter_plot(ax, (('testcases', [0, 1]),), marker='o', color='green')\n", "\n", "legend(['reached hand positions', 'chosen goals'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "or to vizualize the learning curve:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = axes()\n", "expe.log.plot_learning_curve(ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parallel comparison of exploration strategies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Various exploration strategies can be launched in parallel and compared by using an experiment pool:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "from explauto import ExperimentPool\n", "xps = ExperimentPool.from_settings_product(environments=[('simple_arm', 'high_dim_high_s_range')],\n", " babblings=['goal'],\n", " interest_models=[('random', 'default'), ('discretized_progress', 'default')],\n", " sensorimotor_models=[('nearest_neighbor', 'default')],\n", " evaluate_at=[200, 500, 900, 1400],\n", " same_testcases=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "running it:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[],\n", " []], dtype=object)" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xps.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "comparing learning curves:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax = axes()\n", "\n", "for log in xps.logs:\n", " log.plot_learning_curve(ax)\n", " \n", "legend([s.interest_model for s in xps.settings])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "or vizualize the iterative choice of goals and the reached effects:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Using matplotlib backend: TkAgg\n", "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/sforesti/.local/lib/python3.5/site-packages/IPython/core/magics/pylab.py:160: UserWarning: pylab import has clobbered these variables: ['log']\n", "`%matplotlib` prevents importing * from pylab and numpy\n", " \"\\n`%matplotlib` prevents importing * from pylab and numpy\"\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%pylab\n", "clf()\n", "last_t = 0\n", "for t in linspace(100, xps.logs[0].eval_at[-1], 40):\n", " t = int(t)\n", " for i, (config, log) in enumerate(zip(xps.settings, xps.logs)):\n", " ax = subplot(1, 2, i+1)\n", " log.scatter_plot(ax, (('sensori', [0, 1]),), range(0, t), marker='.', markersize=0.3, color = 'white')\n", " log.density_plot(ax, (('choice', [0, 1]),), range(last_t, t))\n", " title(config.interest_model + ' ' + config.babbling_mode)\n", " draw()\n", " last_t = t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Work in progress" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Interest models for social interaction\n", "* Motor and sensory primitives, eg Dynamic Movement Primitives\n", " * in open and close loop modes\n", "* Module connexion for modularity and graphical programming " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "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.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }