{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Learning a sensorimotor model with a sensorimotor context\n", "\n", "In this notebook, we will see how to use the Explauto libarary to allow the learning and control of local actions that depend on a sensory and motor context. We suppose that the reader is familiar with the main components of the Explauto library explained in another notebook ([full tutorial](http://nbviewer.ipython.org/github/flowersteam/explauto/blob/master/notebook/full_tutorial.ipynb)): the environment, the sensorimotor model and the interest model.\n", "\n", "Another [tutorial](http://nbviewer.ipython.org/github/flowersteam/explauto/blob/master/notebook/learning_with_environment_context.ipynb) describes how to define actions (not local) that only depends on a context provided by the environment.\n", "\n", "Let's suppose we are in a motor state $m$ and a sensory state $s$.\n", "If the goal is to reach a sensory state $s'$ from $s$, \n", "a *local* action $\\Delta m$ has to be found, and $m + \\Delta m$ will be evaluated in the environment.\n", "The result of the command in the *environment* is defined as $(s, \\Delta s)$, with $\\Delta s = s' - s$.\n", "Section I will show how to simply define an environment suited to the control of local actions from a usual Explauto environment.\n", "\n", "\n", "In Section II we explain how the *sensorimotor model* is thus adapted to store and learn with tuples of $(m, \\Delta m, s, \\Delta s)$ instances.\n", "We will explain different possibilities to query the sensorimotor model. \n", "\n", "To predict the result of an action in the environment, we can use a forward prediction of $\\Delta s$ given $(m, \\Delta m, s$.\n", "To infer the right motor command that should best reach a sensory state $s'$, we can query $\\Delta m$ from the sensorimotor model given $(m, s, \\Delta s = s' - s)$. This use case is explained in Section V.\n", "\n", "Another use case is to query $(m, \\Delta m)$ from $(s, \\Delta s)$. \n", "This can be used when the robot is allowed to choose the starting and end position of a movement $m \\rightarrow m + \\Delta m$ at each iteration of the learning algorithm. This use case is explained in Section IV.\n", "\n", "An *interest model* is also used to estimate how a given action is useful for learning, and to sample the best ones.\n", "In our case, if we are in a state $(m, s)$, the local action to be sampled is defined as $\\Delta s$, and depends on $s$. In Section III we show how the interest models are adapted to this purpose.\n", "\n", "In Sections IV and V, we explain how to automoatically create the environment, sensorimotor model, interest model and the learning procedure adapted to local actions with the class 'Experiment'.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# I. Environment\n", "\n", "In this section we define an environment suited to the control of local actions from a usual Explauto environment.\n", "\n", "We will use the available SimpleArm environment (this one is by default perturbated by a small random noise)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from __future__ import print_function\n", "from explauto.environment.simple_arm import SimpleArmEnvironment\n", "from explauto.environment import environments\n", "\n", "env_cls = SimpleArmEnvironment\n", "env_conf = environments['simple_arm'][1]['low_dimensional']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we use the class 'ContextEnvironment' to convert an Explauto environment that takes as input a motor position and outputs a sensory position to an environment that takes a motor command $\\Delta m$ or $(m, \\Delta m)$ and outputs a sensory position $(s, \\Delta s)$.\n", "\n", "To instanciate such an environment, one must provide the class and configuration of the underlying environment, and define a simple config for local actions called 'context_mode'.\n", "The 'choose_m' parameter defines if the robot is allowed to choose $m$ and $\\Delta m$ at each iteration instead of only $\\Delta m$.\n", "A rest position also has to be specified, and the bounds for the delta motor actions and delta sensory goals." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from explauto.environment.context_environment import ContextEnvironment\n", "\n", "context_mode = dict(mode='mdmsds',\n", " choose_m=False,\n", " rest_position=[0]*3,\n", " dm_bounds=[[-0.2, -0.2, -0.2],\n", " [0.2, 0.2, 0.2]],\n", " ds_bounds=[[-0.2, -0.2],\n", " [0.2, 0.2]])\n", "\n", "environment = ContextEnvironment(env_cls, env_conf, context_mode)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we sample and execute a few $\\delta m$ actions." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZgAAAEKCAYAAAAvlUMdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzt3WtwXOd95/nvH2jcbwSIKwneCVGUBIqWICKp1CQZx84oeWF5dzKxPOtEntWMdpLxTG1SScUp75ZTTmYjJzP2ZireTFSOYzk1sTPxVhKmoqxsy5ZdNbEAgroA4AW8iSIA4kYSBEDcgf7vi+4+6QYajQbJgwao36fqFPpc+vQDEDw/PJfzHHN3RERE7re8XBdAREQeTAoYEREJhQJGRERCoYAREZFQKGBERCQUChgREQlFTgPGzL5iZqNm1rvGfjOz/2Jml8ys28yeSNr3nJldjC/PbV6pRUQkG7muwXwVeDrD/p8BWuLLC8AfAZhZDfBZoB04AXzWzKpDLamIiGxITgPG3X8A3MpwyDPA1zzmDWCHmTUB/wz4trvfcvdx4NtkDioREdlkkVwXYB27gf6k9YH4trW2r2JmLxCr/VBWVvbkww8/HE5JRUQeUKdPn77h7nUbfd9WD5h75u4vAS8BtLW1eVdXV45LJCKyvZjZe3fzvlz3waxnENiTtN4c37bWdhER2SK2esCcBH4xPprsR4AJdx8CXgV+2syq4537Px3fJiIiW0ROm8jM7OvATwK1ZjZAbGRYAYC7/1fgFeBngUvADPCv4vtumdlvA6fip/qcu2caLCAiIpsspwHj7h9fZ78D/26NfV8BvhJGuURE5N5t9SYyERHZphQwIiISCgWMiIiEQgEjIiKhUMCIiEgoFDAiIhIKBYyIiIRCASMiIqFQwIiISCgUMCIiEgoFjIiIhEIBIyIioVDAiIhIKBQwIiISCgWMiIiEQgEjIiKhUMCIiEgoFDAiIhKKnAaMmT1tZn1mdsnMPp1m/xfN7O34csHMbiftW07ad3JzSy4iIuuJ5OqDzSwf+BLwYWAAOGVmJ939bOIYd/+VpOP/PfCBpFPMuvvxzSqviIhsTC5rMCeAS+5+xd0XgG8Az2Q4/uPA1zelZCIics9yGTC7gf6k9YH4tlXMbB9wAPhu0uZiM+syszfM7KPhFVNERO5GzprINuhZ4Jvuvpy0bZ+7D5rZQeC7Ztbj7pdXvtHMXgBeANi7d+/mlFZERHJagxkE9iStN8e3pfMsK5rH3H0w/vUK8Dqp/TPJx73k7m3u3lZXV3evZRYRkSzlMmBOAS1mdsDMComFyKrRYGb2MFAN/DBpW7WZFcVf1wI/Bpxd+V4REcmdnDWRufuSmX0KeBXIB77i7mfM7HNAl7snwuZZ4Bvu7klvPwr8sZlFiYXki8mjz0REJPcs9br9YGtra/Ourq5cF0NEZFsxs9Pu3rbR9+lOfhERCYUCRkREQqGAERGRUChgREQkFAoYEREJhQJGRERCoYAREZFQKGBERCQUChgREQmFAkZEREKhgBERkVAoYEREJBQKGBERCYUCRkREQqGAERGRUChgREQkFAoYEREJhQJGRGSTNTY2YmarlsbGxlwX7b5SwIiIbKJoNMrIyEjafWtt364iufxwM3sa+AMgH/iyu7+4Yv8ngd8HBuOb/tDdvxzf9xzwf8S3/467v7wphRaR9z13Z3Z2ljt37jA7O8vc3FzwNd2SvG9hYSHXxd80OQsYM8sHvgR8GBgATpnZSXc/u+LQv3D3T614bw3wWaANcOB0/L3jm1B0EXmALS8vMzU1xdTUFJOTk2t+XV5e3rQyNTY2pq3dNDQ0MDw8vGnl2Khc1mBOAJfc/QqAmX0DeAZYGTDp/DPg2+5+K/7ebwNPA18Pqawi8gCYn59ncnIyY3BMT09nda6ioiIqKiooKSmhuLg4ZVm5LXm9qKiI3/qt39pQubdrk1ouA2Y30J+0PgC0pznun5vZjwMXgF9x9/413rs73YeY2QvACwB79+69D8UWka0mGo0yPT0dhEQiMFauZ9M8ZWaUlZVRWVlJZWUlFRUVVFRUpKxXVlZSWFi4Cd8Zm1pTut9y2geThb8Fvu7u82b2vwEvAx/cyAnc/SXgJYC2tja//0UUkTAtLi6uqmWsDJCpqSnc1//vHYlE1g2O8vJy8vLCHf/U0NCQtvZRV1fHW2+9xY0bN7h58yY3btxgfDxzy7+ZBefcas1luQyYQWBP0noz/9iZD4C730xa/TLwe0nv/ckV7339vpdQREKT6CjPFByTk5PMzc1ldb7S0tIgJFZ+TbwuLi4OLsi5EI1GGR8f5wc/+AE3btxICZKZmRkATp48eVfn3orNZbkMmFNAi5kdIBYYzwL/MvkAM2ty96H46keAc/HXrwL/l5lVx9d/GvjN8IssIvdicHCQzs5O+vv7s+4oz8vLWxUU6dYjka3XILOwsMDAwADXrl3jvffeY2BggKWlpbTHFhQUUFtbS21tLTt37gxel5SU8NWvfpXGxkYaGxv567/+603+Lu5ezv5F3H3JzD5FLCzyga+4+xkz+xzQ5e4ngf9gZh8BloBbwCfj771lZr9NLKQAPpfo8BeRrWV5eZmzZ8/S0dHB4GBKIwVFRUVpgyM5QEpLS3Na69iI2dlZrl27FgTK0NAQ0Wg05ZjKyspVIVJbW0t5eTlTU1MMDw8zPDxMb28vw8PD3L59m09+8pPB+7dTwFg27ZYPira2Nu/q6sp1MUTeF6anp+nq6qKrq4s7d+4AUFxczBNPPMHjjz/Ojh07Nq2jPCxTU1O89957QaCMjo6m7E/cnb9371727dvH3r17KSsrIxqNcvPmTYaGhoJAGR4eZnZ2dtVnRCIRGhoaaGhooKmpiaeeemrN8oR1PTez0+7ettH3bb06pYhsa0NDQ3R0dNDb2xs0gdXV1XHixAmOHTu2bUPF3RkfHw/C5Nq1a9y6ldpwkp+fz+7du4NA2bNnDwUFBYyNjTE0NMT3v//9IEwWFxdXfUZxcTF1dXVUVFRQWlpKfn4+S0tLTE5OMjg4yNmz2dzFsXUoYETknkWjUc6dO0dnZyfXrl0Ltj/00EO0t7dz4MCBbdPMleDujI6OpgTK1NRUyjGFhYXs2bMnCJTGxkZu3brF0NAQfX19vP7664yMjKTtd0ncH5Ofn080GmVubo6ZmRn6+/tXHbtdKWBE5K7NzMzw5ptvcurUKSYnJ4FYv8rx48c5ceIENTU1Gz7n9PQ0586d486dO5gZeXl55OXlBa/D2ubu3Lhxg6GhIQYHB7l+/Trz8/MpZSsuLg6aupqbm8nPz2d4eJjBwUHOnTvH6Ojoqj4XiA1UWLk9MXVMMjOjoqKCqqoqqqqqqKys5Nlnn11VU9ouFDAismEjIyN0dHTQ09MT/HW+c+dOTpw4weOPP05RUdGGzre4uEhfXx/d3d1cvnw57UV6K5ibm6Ovr4++vr4NvS/x/eTl5ZGfn08kEiESiVBYWEhhYSFFRUXBEolEyM/PJz8/HzPbtuECChgRyVI0GuXChQt0dHRw9erVYPvhw4dpb2/n0KFDG2oGi0ajvPvuu/T09HDu3LngLnszo6WlhaamJtydaDS66mu6besds7S0xOzsLPPz88zNzaXtA0muzSSW+ylRrnSffa8aGhru+znvlQJGRDKanZ3lrbfe4tSpU9y+fRuI3bORaAarra3N+lzuzvDwMN3d3fT29gajywCam5tpbW3l0Ucfpays7J7LfefOHd577z0uX77MtWvXuHnz5qpjVjZdufua9+bk5eVRUlJCZWUldXV1NDY2Ul1dHdz9X1hYGITSyoBLLMvLyxteMs1bttVHAStgRCStsbExOjs7eeedd4K/uKurqzlx4gTHjx+nuLg463Pdvn2bnp4euru7uXHjRrC9pqaG1tZWjh07dlf9NYuLi0xMTDAxMRH0nYyOjjI1NZVVLWGtprjy8nJqa2tpampi37597N+/f8PNfrm2FWZgVsCISMDduXjxIp2dnVy+fDnYfuDAAdrb22lpacl6nq7Z2VnOnDlDT09Pysiy0tJSHnvsMY4dO8auXbuyblabnJzkwoULXLlyhfHxcW7fvp3VNDKJp0WmCxMzo76+nl27dtHU1ERTUxMNDQ0UFBRkVaatbCvMwKyAERHm5+d5++236ezsDDqVI5EIjz/+OCdOnKC+vj6r8ywtLXHhwgW6u7u5ePFicFGPRCIcPXqU1tZWDh48SH5+/rrncndGRkaCTvWhoaGMx5sZBQUFuHtK7SXRbJWfn099fX0QJLt27aK+vn5LTjGTbK2JMRsaGlhYWGBmZiZYZmdng9dbwdb+yYpIqG7evElnZydvv/120MleVVXFU089xRNPPEFJScm653B3rl69Snd3N+fOnQuG9poZhw4d4tixYzz88MNZ3WC5tLTE1atX6evr48KFC8HQ53QSo6wSo9jcPfge8vPzg7m7ErWT+vr6rIItl9yd6elpJiYmgsk+//zP/3xVeCRe/+7v/m6ui5yRAkbkfcbduXLlCh0dHVy8eDHYvm/fPtrb2zly5EhWzWAjIyN0d3fT09OTcgPirl27aG1t5bHHHqO8vHzd88zMzHDhwgUuXLjA5cuXMz6zpbCwMNif6IyPRCI0NjYGNZOmpibq6uq2XJi4O/Pz80Gf0eTk5KqvG31SZiQSobS0lNLSUkpKSlK+ZmJmm9IXo4AReZ9YWFjgnXfeobOzM+hoz8/Pp7W1lfb2dhobG9c9x8TEBD09PfT09KTMu7Vjxw6OHTtGa2vruqPK3J2bN28GTV8DAwNrjoZKBF2iqW1hYYFIJML+/fs5dOgQBw4coK6uLvTnt2RjcXFxVWisDJBsHnhWUlIS3GRZWVlJWVlZECIrgyQxlczi4iJLS0spy3o2oy9GASPygBsfH+fUqVO8+eabQfNVRUUFTz31FE8++eS6f+3Ozc1x9uxZuru7ee+994LtJSUlPProoxw7dozm5uaMnfXRaJRr164FTV+Zbh6MRCLBBTIRLDt37uTQoUO0tLSwb9++Te+Ej0ajTE1NZax9ZNPvUVBQEIRH8tfE64qKCubn57l9+zbj4+PBYIZ3332XqampVSGSaZhyWVlZ1o9/DotmUxZ5ACX6RTo6OlLuOt+zZw8nTpzg6NGjGZuQlpaWuHjxIj09PVy4cCGlOerIkSO0trZy+PDhjOeYm5vj0qVLXLhwgYsXL2Yc8WVmKRfLgoICDhw4wOHDhzl8+DDV1dVrvvdeJfo9VtY6ktfv3Lmz7j0neXl5KcGxMjyqqqooLi5mYWEhCI/kEEl83UgTWV5eXjArQCQSoaCgIGU9EonwC7/wCxm/92xoNmURYXFxkZ6eHjo6OoImrLy8PB577DHa29vZtWvXmu91d65du0Z3dzdnz55NCYQDBw5w7Ngxjh49mvF+kPHx8aA/5erVq2veZ7IyUNydurq6IFD27t1730Z3zc3NrdlklfiazUW9vLw8be0j8bW8vBwzY3l5mYmJiSAwrl27llIjSTclf7LS0lKqq6uprq5mx44dwevKyspVAZJN02CmgEmudYbRJ6OAEXkATExMBM1giQtYWVkZbW1ttLW1ZexsHx0dDe6sn5iYCLY3NjYGnfWVlZVp3+vuDA4OBv0pY2Nja35Ocqi4O4WFhRw8eDAIlaqqqrv51gNzc3MMDAzQ39/P9evXg0DJpt+juLg4pbaxsvZRWVkZ1NYSNZ5EaCTflzM+Ps7k5GTGmkEkEkkbIInXuXqcQRh9MgoYkW3K3env76ejo4Nz584FF7Vdu3bR3t7Oo48+umYT1uTkJL29vfT09KT81VpVVUVrayutra1r3vuysLDAlStXuHDhAn19fVnfc+HuNDQ0BIGyZ8+eux7p5e7cunWL/v5++vv7GRgYWPWwr4RIJLKqqWrl15UX9YWFhSAwhoaGUpqwxsfH150loKqqKgiM5BCprq6mrKzsnh5dkHg+zOzsLAsLC8zPzwdL8nri9fPPP4+ZBZNpfuELX7jrz94oBYzINrO0tERvby8dHR1BOOTl5fHoo4/S3t7O7t27017A5ufnOXv2LD09Pbz77rvB9uLiYh555BGOHTvG3r170753amoqCJQrV65k3U9QXFycUkupqKi4q+95cXGR69evB2HS39+/Ktjy8/Npampiz549NDc3U1NTQ2VlJSUlJau+p2g0yuTkJOPj4wwMDKSEx/j4+Lqd48XFxWlrIdXV1VRVVd1TcM7MzAS1r3TLRjvu9+zZc1dluR9yGjBm9jTwB0A+8GV3f3HF/l8F/jWwBIwB/6u7vxfftwz0xA+95u4f2bSCi+TA1NQUp06d4vTp08HFtbS0lCeffJK2tra0zVjLy8tcunSJnp4e+vr6gtFZ+fn5PPTQQ7S2ttLS0rKqv2Ojd9Ena2pqCgKlubn5roYQT01Nce3atSBQ0j3bvqysjD179gRLU1NTyveRqOVcvXqVW7dupYTIxMRExkcC5Ofnr6qBJAfJRuZhS7a0tJQ2NCYnJ7l9+zaTk5PrDjFODCYoKSkJaiWJKf9XTv2fvJ54nWnyzPstZwFjZvnAl4APAwPAKTM76e7JzwR9C2hz9xkz+yXg94CPxffNuvvxTS20SA4MDAzQ0dHB2bNng4tiY2Mj7e3tPPbYY2nDob+/n56eHs6cOZPSqbx//35aW1t55JFHVl0kl5aWeO+99+jr6wse+JWNkpISDh8+zKFDhzh8+PCGZ0KORqOMjIwEzV39/f0pfUEJDQ0NNDc3B4FSXV0d1EwS99YMDQ1x/fr14Fn3Kx8YlqyiomLNZqyKiooNN2Pdr9pHcXExO3bsWDWMObGUl5dvift+spHLGswJ4JK7XwEws28AzwBBwLj795KOfwP4xKaWUCRHlpeXOXPmDJ2dnQwODgKxTvKjR4/S3t6etinrxo0bwZ31iWn1Aerr64N+lZUd6TMzM1y8eJG+vj4uXryY1Q16EJtaP3FfSlNT04YueLOzs0EzV39/P4ODg6v6NBKPIk4ESnNzczB6LRqNcvPmTXp6elLCJF1nfkVFBU1NTdTU1KQ0ae3YsWPD99Jkqn0kXmdb+1gZGsl9RGHP2pxpbrP7LZcBsxtIfvj0ANCe4fjngb9PWi82sy5izWcvuvtfp3uTmb0AvACwd+/eeyqwSNju3LnD6dOn6erqCmoQxcXFPPnkkzz11FOrAuLOnTv09vbS3d2d0oxVUVERTIO/8sJx48YN+vr6OH/+PAMDA1mVq6ysLGj2Onjw4Lo3ZyYkahbJtZPk6foTqqurU5q7EnfnR6NRbty4wfnz51PCJF0ne2VlZcp0Mbt27cpqqppEOe9X7WOt8NgqtY/Nmqoftkknv5l9AmgDfiJp8z53HzSzg8B3zazH3S+vfK+7vwS8BLEbLTelwCIbNDQ0REdHB729vUEHel1dHe3t7Rw7dizlr+2FhQXOnTtHT08PV65cCUaPFRUVcfToUY4dO8a+fftSplnp7+/n/PnznDt3Lm3z00pmxp49e4JQaWxszKrJaHFxkcHBwZTO+JX3feTn57Nr164gTJqbmykvLycajTI2NsbQ0BCnT59maGiIkZGRtGFSVVW1KkwyNc0lhhaPjY1x+/btbVv72G5yGTCDQPLwhub4thRm9iHgM8BPuHvQoOrug/GvV8zsdeADwKqAEdmqlpeXOX/+PB0dHfT3/2Nl/siRI7S3t7N///7gor68vMyVK1fo7u6mr68vuOjm5eXx0EMPcezYMVpaWoIgmp+f59KlS5w/f54LFy5kdS9IRUVFSi0lm47sycnJlM744eHhVZ3n5eXlKbWTRFglwuT73/8+w8PDDA8Pp73I79ixIyVMmpqa1gyTRJCMjo4yNjYWLKOjo+s+O2Y71D62m1wGzCmgxcwOEAuWZ4F/mXyAmX0A+GPgaXcfTdpeDcy4+7yZ1QI/RmwAgMiWNzMzEzSDJaajLyoq4gMf+AAnTpwIpkVxdwYGBuju7ubMmTMpw3L37t0bPF44MaX+7du36evr4+zZs/T392c1tcnevXuDUKmvr89YS1leXl7VGb9yOn0zo7GxMaUzvqKiIgiTt99+OwiTdEOdq6urV4VJuuY4d+fOnTspAXLjxo2MQVJUVERdXV0wfDlxr4pqH+HJWcC4+5KZfQp4ldgw5a+4+xkz+xzQ5e4ngd8HyoG/jP/iJ4YjHwX+2MyiQB6xPpizaT9IZIsYGRmho6ODnp6e4C/1nTt30t7ezuOPPx7c7JfowO7p6UmZFLK2tjaYsXjHjh24O9evX+f8+fOcOXOG8fHxdctQVVUVBMqBAwcyXlRnZmZWdcavrGEUFRWldMY3NDQEjy++du0aHR0djIyMpA2TmpqaVWGy8vkz7s7U1FRKkCReZwqS+vp66urqgqW+vj6YykVWC+vxyprsUiRE0WiUvr4+Ojs7uXr1arD98OHDtLe3c+jQIcyM6enp4M76xKgxiDUvJR4v3NjYyNLSEleuXOHs2bP09fVlHIYLsf6Offv2BaFSW1ub9iLr7ty4cSOldnLz5s1Vx9XU1AQ1k127drG8vMzw8DBDQ0NBn0m6+0tqampSHkvc1NSU0gSXrkayXpAUFxevCpG6urr3XZAsLy8HfUlzc3Pk5eWtueTn56fdvtZUQBD7t9FklyJbyOzsLG+99RadnZ1Bp3phYSHHjx/nxIkT7Ny5k4WFhSBULl26FDRpFRYWBp31+/fvZ2Zmhr6+Pl599VX6+/sz3iAIsWamRKDs378/7dxWCwsLqzrjV17II5FI0Bnf1NREYWEht2/fZmhoiK6uLkZHR9OWZefOnavCJFFTSgTJ9evXV/WTKEhWc3fm5uYyjm5LfthbGOI/48fv5r0KGJH7aGxsjI6ODrq7u4OO+Orqak6cOMHx48cpLCzk3Xff5Qc/+AHnzp1L6axvaWmhtbWVhx56iPHxcc6dO8crr7yStiaRLBKJcODAgeC+lJqampT97s7ExETKvF3Dw8Or+mgqKiqCmklJSQkLCwuMjIxw6dIl/uEf/iFtn05tbW1KmDQ2NlJUVJRSI3nrrbcUJGtYXl5Oec7MxMREcEd/tpN1mhkVFRVUVVVRUlJCNBrd8JKFu8oKBYzIPXJ3Ll68SEdHB1euXAm2Hzx4kPb2dg4fPszw8DCvv/46vb29KfdTNDc309raysMPP8zY2Bi9vb288sor607pXlNTQ0tLCy0tLezduzdlGHOi2Sq5uWvlX7lmtupekfHxcYaHh1Mmzkw+vq6ublWYFBQUcOfOHUZHRxkaGqK7u3tDQZLcV/KgBcnKRySnC4+pqal1B2MUFBQEgxHSLRUVFWvOfba8vMzCwkIw8WXi9colLAoYkbs0Pz8fNIMlOtgLCgo4duwY7e3tRCIRenp6+Na3vpVSC9m5c2fwwK6xsTG6u7v51re+lXECyUgkwsGDB2lpaeHQoUMpD+Canp7mypUrQZhcv359VWd8cXExu3fvpqqqiry8PGZnZxkdHeXNN99MGyb19fUpYVJfX8/CwkLQrPXOO+/wne98Z90gqa+vp7a29oEMkuSnXKa7t+b27dtZDw/PNDy6uLg4ZUqcmZkZpqammJqaCp50mbxMT08HYZJl7SQ0ChiRDbp58yadnZ28/fbbwQWkqqqKEydO8PDDD3P58mX+9m//NuXelrKyMh599FH27dvH6Ogovb29vP766xk/Z+fOnRw5ciR4AFd+fj7uztjYGKdPnw4CJd3jh2tqaqipqaGwsJDFxUVu3brF5curbxPLy8ujvr4+qM00NjZSVlbG+Pg4Y2NjjIyM0Nvbm1WQJDdvPQhBkqh9rBUe2dY+MoVH4jkz7s7s7Cx37twJgmJ0dDR4nbx9I6GRl5dHYWHhukt1dXVWoxA3SqPIRLLg7ly+fJmOjg4uXboUbN+/fz9PPPEEAL29vVy6dCm4ABQUFHDkyBEaGxsZGxvj4sWLGZ+dUlBQEPSjHD58mMrKSubn51d1xq8cORaJRNi5c2fQ/j41NZX2YpEcJk1NTcG0M7du3cq6jyTd8N97fb7JZkt0nCcu3Hfu3Elptkos643Qg398yuWOHTtW3eW/Y8cOioqKWFhYWFXLWBkaU1NTG3oEQkVFRbCUl5evWk/MnrzRp4Jm+nd09w3/IytgRDJYWFjgnXfeobOzM5hDKxKJ8Nhjj9Hc3MzAwABnz54NajJmxoEDB9i5cydjY2MMDAxknIKktraWI0eO0NLSwu7du5mamkrpjB8ZGVn1V3JpaWkw2+/MzMyqmx0hNjy5vr6exsbGoCaztLTEjRs3ghsS17qAbtcgWV5eDgIjOTzSLdlczCORSNpZjRNhUlRUxOzs7LrBke0EokVFRRmDI7Fto5N0bsRa98MAS+6+4Q9WwIikMT4+TmdnJ2+99VZwIS4vL+fo0aO4O319fSkd5w0NDVRWVnLr1q2Mo74ikQiHDx/myJEj7Nu3j+np6ZTO+JVT5JtZcFGZn59PO+FiIkxqa2spLS0N+lhu3LjB2NjYmkFSUlKyqllrqwVJoraRHA6Ji/j09HRKkKw3MCJZUVFRcAEvLy+nvLw8CJPEz3BxcTHl81YGyXpPtUwoKCigsrJy3eDI1aOSs3G398EoYETi3J2rV6/S0dFBX19fsL2pqYmdO3cyMjKS8sz5iooKysrKmJiYyHhxq62t5ejRozQ3N7O0tBQ0eV2/fn3VX9KRSITi4mKWlpbSNlXl5+dTV1dHRUUFhYWFwV/tGwmSRO0kl0GyvLy8KiASF/Hp6emUC3u2TUeJMF65FBcXU1BQQH5+PmZGNBplcXGRmZmZlCVRnmyaxiD2b1VZWZk2MJKD5EGYgkYBkwUFjKSzuLhId3c3nZ2dwXPd8/Ly2LVrF0tLSylTZSSeCjgzM7Pmha+goICDBw+ye/du8vLyGB0dpb+/P22/SGFhIe6e9q/h/Px8qqurg0f+zs/Pc/v27S0bJIlhudk0U2Xqi1qpsLAwuFiXlpYG/QuJu9IhFliLi4vMzc2tCo5sAyohPz8/Y2AklqKioi1T0wub7uQX2aCJiQlOnTrFm2++GdRAiouLKS8vD57VDrGwiUQiGe8bqK6uprm5mYKCAm7fvs3Vq1da0I4CAAASHklEQVRTakEQ+ws7Ly8v5YKXOFfiolZQUMDS0hLT09MsLCykfXZKcpAk95WEFSTRaHRVQKwVHtn2N5gZpaWllJWVpXRIJ+7niEajq0Ij3Vxo2SgoKKC0tDRlKSkpWbWtrKyMioqKlGHBcm8UMPK+4u7BJIznz58POtBLS0uDi1miaSrxwKtoNLoqVBIjt0pLS4MmqpU1FDNL6aB3d5aXl8nLywtqJXNzcywtLbG8vJzyFEoIN0jcnYWFhXVrGlNTUxuqbUQikeBZ8QUFBeTl5QU/h0TT1Pz8PHNzc0xPT2f1EK9k+fn5q4JhrSURImF2iktmChh5X1haWqK3t5eOjo6UJq+CgoKgPX6llfcbFBcXU1ZWxszMDLOzs2uNtgm4e1D7WV5eDmou0Wg05cJaUlKS9obEuwmSxLmzaabKtpMaCAIjuVkqGo2ytLTEwsJCcK6lpaWgE3w9eXl5WdUskpeCggLVLrYRBYw80CYnJ+nq6uL06dNBiCTXLDJdZM2MwsJCFhYWgtFMmR5alXy3dUJy7ScRJCv7SUpLS9e9aCbupVivQ3wjNYJE+CVqGYlmqXTNUPPz8xk7vxNNXtkGRWlpKYWFhQqLB5wCRh447s7g4CAdHR2cOXNm1X0kmQa2JIdPotN6I58L2QdJNBplZmaGkZGRdZupNlLbWNkstZZ0TX8J6QIiU2io30LSUcDIA2N5eZkzZ87wxhtvMDQ0dFfn2MioyrWCJDEBZGIZHR3lypUrq4Jjenp6Q5+XrXRNexsNCz0aWO4HBYxse3fu3OHUqVOcOnVqQzfbZau0tJS6ujp27NhBeXk5JSUlRCKRlBvxent7gyarjdQ2NqqwsDDrzu3E67Vm2hUJmwJGtq3r16/z/e9/nwsXLtyX8xUWFgbDZs0smOp8bm6Oa9eu8d57792Xz0mIRCKUlZVlXbNIBJvIdpHT31Yzexr4AyAf+LK7v7hifxHwNeBJ4CbwMXe/Gt/3m8DzwDLwH9z91U0sumySle36ZsYbb7zB9773vYwd7tmcd2Xz1L08GyMx9DgRGCuDI11YaPisPOjWDBgzewX45cQF/X4zs3zgS8CHgQHglJmddPezSYc9D4y7+2Ezexb4PPAxM3sEeBZ4FNgFfMfMHnL3jd2yK1tauk7jvLw8Pv/5z3Ps2LF7Ovd6fR9FRUVB30XytCMaPiuSvUw1mD8FvmVmLwO/5+73u2H5BHDJ3a8AmNk3gGeA5IB5Bvit+OtvAn9osf/FzwDfcPd54F0zuxQ/3w/vcxlli1leXua1117bUMDk5+cHU7wkAqGioiKYFXdlbUPDZ0XujzUDxt3/0sz+Hvg/gS4z+zMgmrT/C/f42buB/qT1AaB9rWPcfcnMJoCd8e1vrHjv7nQfYmYvAC8A7N279x6LLFvBxMQEEBsdtXKywerqaqqrq6msrNTwWZEcW68PZgGYBoqACpICZrtw95eAlyA22WWOiyP3yWc/+9lcF0FE1pGpD+Zp4AvASeAJd89+QqLsDAJ7ktab49vSHTNgZhGgilhnfzbvFRGRHMp0N9VngH/h7p8OIVwATgEtZnbAzAqJddqfXHHMSeC5+OufA77rsd7Zk8CzZlZkZgeAFqAzhDJKDq3VEf9+esSEyHaWqQ/mn4T5wfE+lU8BrxIbpvwVdz9jZp8Dutz9JPAnwJ/FO/FvEQsh4sf9d2IDApaAf6cRZA8mhYnI9qUHjomISEZ3+8AxTTgkIiKhUMCIiEgoFDAiIhIKBYyIiIRCASMiIqFQwIiISCgUMCIiEgoFjIiIhEIBIyIioVDAiIhIKBQwIiISCgWMiIiEQgEjIiKhUMCIiEgoFDAiIhIKBYyIiIRCASMiIqFQwIiISChyEjBmVmNm3zazi/Gv1WmOOW5mPzSzM2bWbWYfS9r3VTN718zeji/HN/c7EBGR9eSqBvNp4DV3bwFei6+vNAP8ors/CjwN/N9mtiNp/6+7+/H48nb4RRYRkY3IVcA8A7wcf/0y8NGVB7j7BXe/GH99HRgF6jathCIick9yFTAN7j4Ufz0MNGQ62MxOAIXA5aTN/zHedPZFMyvK8N4XzKzLzLrGxsbuueAiIpKd0ALGzL5jZr1plmeSj3N3BzzDeZqAPwP+lbtH45t/E3gYeAqoAX5jrfe7+0vu3ububXV1qgCJiGyWSFgndvcPrbXPzEbMrMndh+IBMrrGcZXA3wGfcfc3ks6dqP3Mm9mfAr92H4suIiL3Qa6ayE4Cz8VfPwf8zcoDzKwQ+Cvga+7+zRX7muJfjVj/TW+opRURkQ3LVcC8CHzYzC4CH4qvY2ZtZvbl+DE/D/w48Mk0w5H/m5n1AD1ALfA7m1t8ERFZj8W6QN4f2travKurK9fFEBHZVszstLu3bfR9upNfRERCoYAREZFQKGBERCQUChgREQmFAkZEREKhgBERkVAoYEREJBQKGBERCYUCRkREQqGAERGRUChgREQkFAoYEREJhQJGRERCoYAREZFQKGBERCQUChgREQmFAkZEREKhgBERkVDkJGDMrMbMvm1mF+Nfq9c4btnM3o4vJ5O2HzCzDjO7ZGZ/YWaFm1d6ERHJRq5qMJ8GXnP3FuC1+Ho6s+5+PL58JGn754EvuvthYBx4PtziiojIRuUqYJ4BXo6/fhn4aLZvNDMDPgh8827eLyIimyNXAdPg7kPx18NAwxrHFZtZl5m9YWaJENkJ3Hb3pfj6ALB7rQ8ysxfi5+gaGxu7L4UXEZH1RcI6sZl9B2hMs+szySvu7mbma5xmn7sPmtlB4Ltm1gNMbKQc7v4S8BJAW1vbWp8jIiL3WWgB4+4fWmufmY2YWZO7D5lZEzC6xjkG41+vmNnrwAeA/xfYYWaReC2mGRi879+AiIjck1w1kZ0Enou/fg74m5UHmFm1mRXFX9cCPwacdXcHvgf8XKb3i4hIbuUqYF4EPmxmF4EPxdcxszYz+3L8mKNAl5m9QyxQXnT3s/F9vwH8qpldItYn8yebWnoREVmXxSoE7w9tbW3e1dWV62KIiGwrZnba3ds2+j7dyS8iIqFQwIiISCgUMCIiEgoFjIiIhEIBIyIioVDAiIhIKBQwIiISCgWMiIiEQgEjIiKhUMCIiEgoFDAiIhIKBYyIiIRCASMiIqFQwIiISCgUMCIiEgoFjIiIhEIBIyIioVDAiIhIKHISMGZWY2bfNrOL8a/VaY75p2b2dtIyZ2Yfje/7qpm9m7Tv+OZ/FyIikkmuajCfBl5z9xbgtfh6Cnf/nrsfd/fjwAeBGeBbSYf8emK/u7+9KaUWEZGs5SpgngFejr9+GfjoOsf/HPD37j4TaqlEROS+yVXANLj7UPz1MNCwzvHPAl9fse0/mlm3mX3RzIruewlFROSeRMI6sZl9B2hMs+szySvu7mbmGc7TBLQCryZt/k1iwVQIvAT8BvC5Nd7/AvACwN69ezfwHYiIyL0ILWDc/UNr7TOzETNrcveheICMZjjVzwN/5e6LSedO1H7mzexPgV/LUI6XiIUQbW1tawaZiIjcX7lqIjsJPBd//RzwNxmO/TgrmsfioYSZGbH+m94QyigiIvcgVwHzIvBhM7sIfCi+jpm1mdmXEweZ2X5gD/D9Fe//b2bWA/QAtcDvbEKZRURkA0JrIsvE3W8CP5Vmexfwr5PWrwK70xz3wTDLJyIi90538ouISCgUMCIiEgoFjIiIhEIBIyIioVDAiIhIKBQwIiISCgWMiIiEQgEjIiKhUMCIiEgoFDAiIhIKBYyIiIRCASMiIqFQwIiISCgUMCIiEgoFjIiIhEIBIyIioVDAiIhIKBQwIiISCgWMiIiEIicBY2b/wszOmFnUzNoyHPe0mfWZ2SUz+3TS9gNm1hHf/hdmVrg5JRcRkWzlqgbTC/zPwA/WOsDM8oEvAT8DPAJ83Mweie/+PPBFdz8MjAPPh1tcERHZqJwEjLufc/e+dQ47AVxy9yvuvgB8A3jGzAz4IPDN+HEvAx8Nr7QiInI3IrkuQAa7gf6k9QGgHdgJ3Hb3paTtu9c6iZm9ALwQX71jZusF292oBW6EcN4wbbcyb7fygsq8GbZbeWF7lvnI3bwptIAxs+8AjWl2fcbd/yasz13J3V8CXgrzM8ysy93X7EvairZbmbdbeUFl3gzbrbywfct8N+8LLWDc/UP3eIpBYE/SenN8201gh5lF4rWYxHYREdlCtvIw5VNAS3zEWCHwLHDS3R34HvBz8eOeAzatRiQiItnJ1TDl/8nMBoAfBf7OzF6Nb99lZq8AxGsnnwJeBc4B/93dz8RP8RvAr5rZJWJ9Mn+y2d/DCqE2wYVku5V5u5UXVObNsN3KC++jMlusQiAiInJ/beUmMhER2cYUMCIiEgoFzF0wsxoz+7aZXYx/rc5wbKWZDZjZH25mGdOUY90ym9lxM/thfBqfbjP7WA7KmXZ6oKT9RfHpgS7Fpwvav9llTFOm9cr8q2Z2Nv4zfc3M9uWinEnlyVjepOP+uZl5pumcNks2ZTazn4//nM+Y2Z9vdhnTlGe934u9ZvY9M3sr/rvxs7koZ1J5vmJmo2bWu8Z+M7P/Ev9+us3siXVP6u5aNrgAvwd8Ov7608DnMxz7B8CfA3+41csMPAS0xF/vAoaAHZtYxnzgMnAQKATeAR5ZccwvA/81/vpZ4C9y/HPNpsz/FCiNv/6lXJY5m/LGj6sgNpXTG0DbNvgZtwBvAdXx9fptUOaXgF+Kv34EuJrjMv848ATQu8b+nwX+HjDgR4CO9c6pGszdeYbYFDWQYaoaM3sSaAC+tUnlymTdMrv7BXe/GH99HRgF6jathGtMD7TimOTv45vAT8WnD8qVdcvs7t9z95n46hvE7t3KlWx+xgC/TWzOv7nNLNwasinzvwG+5O7jAO4+usllXCmbMjtQGX9dBVzfxPKt4u4/AG5lOOQZ4Gse8wax+xGbMp1TAXN3Gtx9KP56mFiIpDCzPOA/A7+2mQXLYN0yJzOzE8T+8rocdsGSpJseaOU0QMExHhvKPkFsqHquZFPmZM8T+yswV9Ytb7zpY4+7/91mFiyDbH7GDwEPmdn/MLM3zOzpTStdetmU+beAT8Rv2XgF+PebU7S7ttHf9S09F1lOZZrqJnnF3d3M0o31/mXgFXcf2Kw/sO9DmRPnaQL+DHjO3aP3t5TvX2b2CaAN+Ilcl2Ut8T+MvgB8MsdF2agIsWaynyRWQ/yBmbW6++2cliqzjwNfdff/bGY/CvyZmT32IP2fU8CswTNMdWNmI2bW5O5D8Ytxuur4jwL/xMx+GSgHCs3sjruv2al6r+5DmTGzSuDviM0Z90ZIRV3LWtMDpTtmwMwixJoWbm5O8dLKpsyY2YeIBf1PuPv8JpUtnfXKWwE8Brwe/8OoEThpZh9x97uaj+o+yOZnPECsT2AReNfMLhALnFObU8RVsinz88DTAO7+QzMrJjYRZq6b99aS1e96MjWR3Z2TxKaogTWmqnH3/8Xd97r7fmLNZF8LM1yysG6Z41Py/BWxsn5z5f5NkHZ6oBXHJH8fPwd81+M9kDmybpnN7APAHwMf2QJ9AxnL6+4T7l7r7vvjv7tvECt3rsIFsvu9+GtitRfMrJZYk9mVzSzkCtmU+RrwUwBmdhQoBsY2tZQbcxL4xfhosh8BJpKa3dPL5aiF7boQa/N/DbgIfAeoiW9vA76c5vhPkvtRZOuWGfgEsAi8nbQc3+Ry/ixwgVjfz2fi2z5H7CIHsf+EfwlcAjqBg1vg92G9Mn8HGEn6mZ7cyuVdcezr5HgUWZY/YyPWtHcW6AGe3QZlfgT4H8RGmL0N/HSOy/t1YiNHF4nVCJ8H/i3wb5N+xl+Kfz892fxeaKoYEREJhZrIREQkFAoYEREJhQJGRERCoYAREZFQKGBERCQUChiRHDGzPWb2rpnVxNer4+v7c1sykftDASOSI+7eD/wR8GJ804vAS+5+NWeFErmPdB+MSA6ZWQFwGvgKsRmBj3tsuhORbU9zkYnkkLsvmtmvA/8fsTu5FS7ywFATmUju/QyxKToey3VBRO4nBYxIDpnZceDDxJ4Q+CvrPcBJZDtRwIjkSPxJnH8E/O/ufg34feA/5bZUIvePAkYkd/4NcM3dvx1f/3+Ao2a2ZR9IJrIRGkUmIiKhUA1GRERCoYAREZFQKGBERCQUChgREQmFAkZEREKhgBERkVAoYEREJBT/Pwdi2n+F2wxnAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create the axes for plotting:\n", "%pylab inline\n", "ax = axes()\n", "\n", "for dm in environment.random_dm(n=10):\n", " m = environment.current_motor_position\n", " mdm = np.hstack((m, dm))\n", " environment.update(mdm, reset=False)\n", " environment.plot(ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# II. Sensorimotor model\n", "\n", "In this Section we show how to store the motor and sensory signals into the database and how to predict the result of an action. The inference of a motor action given a sensory goal is explicited later in Sections IV and V." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The adapted sensorimotor models are 'NN', 'LWLR-BFGS', and 'LWLR-CMAES' altough CMAES' exploration sigma and bounds might need to be adapted.\n", "The database contains tuples of $(M, \\Delta M, S, \\Delta S)$ so we create the sensorimotor model with the dimensions and bounds of the environment." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from explauto import SensorimotorModel\n", "\n", "sm_model = SensorimotorModel.from_configuration(environment.conf, 'nearest_neighbor', 'default')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the following we ramdomly draw delta actions and update the sensorimotor model and the environment." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n", "Size of database: 1000\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create the axes for plotting:\n", "%pylab inline\n", "ax = axes()\n", "\n", "for dm in environment.random_dm(n=1000):\n", " m = environment.current_motor_position\n", " mdm = np.hstack((m, dm))\n", " sds = environment.update(mdm, reset=False) \n", " sm_model.update(mdm, sds)\n", " environment.plot(ax, alpha=0.3)\n", " \n", "print(\"Size of database:\", sm_model.size())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can query the sensorimotor model given $(m, \\Delta m)$ and the context on given dimensions.\n", "Let's say we want the hand y position to be considered as the context (but in more complex setups it could be the position of some objects in the environment).\n", "\n", "In the plot, the black dot and red x are the predicted $s$ and $s'$ given the motor position $m$ and delta $\\Delta m$, in the context c.\n", "The corresponding reached arm positions are also represented." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predicted s= [ 0.66848136 -0.71826462] predicted ds= [0.02691438 0.03667372]\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Predict with sensori context\n", "m = environment.current_motor_position\n", "s = environment.current_sensori_position\n", "dm = [0.1]*3\n", "context = s # context\n", "c_dims = [0, 1] # hand dimensions\n", "sds = sm_model.predict_given_context(np.hstack((m, dm)), context, c_dims)\n", "s = sds[0:2]\n", "ds = sds[2:4]\n", "print(\"Predicted s=\", s, \"predicted ds=\", ds)\n", "\n", "ax = axes()\n", "environment.plot(ax)\n", "environment.update(np.hstack((m, dm)), reset=False)\n", "environment.plot(ax, color='red')\n", "ax.plot(*s, marker='o', color='k')\n", "ax.plot(*list(np.array(s)+np.array(ds)), marker='x', color='red')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Goal babbling using interest models" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section, we create an *interest model* that can sample given a context $s$ and output an interesting delta goal $\\Delta s$ only on the dimensions that are not in the context.\n", "This feature is implemented with the Random and Discretized interest models." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Random interest model\n", "from explauto.interest_model.random import RandomInterest\n", "\n", "im_model = RandomInterest(environment.conf, environment.conf.s_dims)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Discretized interest model\n", "from explauto.interest_model.discrete_progress import DiscretizedProgress, competence_dist\n", "\n", "im_model = DiscretizedProgress(environment.conf, environment.conf.s_dims, **{'x_card': 1000,\n", " 'win_size': 10,\n", " 'measure': competence_dist,\n", " 'eps_random':0.1})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sampling with context:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sampling interesting goal with hand position= [0.7, 0.6] : ds= [-0.16987703 0.18555438]\n" ] } ], "source": [ "c = [0.7, 0.6] # context\n", "c_dims = [0, 1] # hand position's dimensions\n", "\n", "ds = im_model.sample_given_context(c, c_dims)\n", "\n", "#print im_model.discrete_progress.progress()\n", "print(\"Sampling interesting goal with hand position=\", c, \": ds=\", ds)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# IV. Learning choosing m" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section, we consider that the agent can choose the motor position $m$ at each iteration (parameter 'choose_m'=True).\n", "\n", "Here we run the whole procedure without resetting the arm to its rest position during the experiment, first using motor babbling and after using goal babbling.\n", "\n", "We also describe how to automatically create the environment, sensorimotor model, interest model and the learning procedure." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "context_mode = dict(mode='mdmsds',\n", " choose_m=True,\n", " rest_position=[0]*3,\n", " dm_bounds=[[-0.2, -0.2, -0.2],\n", " [0.2, 0.2, 0.2]],\n", " ds_bounds=[[-0.2, -0.2],\n", " [0.2, 0.2]])\n", "\n", "environment = ContextEnvironment(env_cls, env_conf, context_mode)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Motor Babbling" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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7yyz9EH3CxcucPbsWWpra2lubqajo4MFCxbkTBNO384+nuPuTJw4kXPnznHmzBmmT59Ob29vyaKwcePGYesGBwd57rnnmDx5MnfddRdTp04teaG0kdIU48qQyEF+d//A3W9394Xufoe7nwnX/zhdXMLlt9z9encfHPL4Fe6+2N1vdveH3D2a9q8iMTl79iwvvfRSzvkt9913H0eOHMk5j6WxsZGenp7M8tDjLS0tLTlnuKc1NTVljjmsWrUKgIaGBnp6ejh+/HjmLP5UKpX5sk9/SaebSgJ0dXVljqX09vZSX18/6tfc19fHyy+/POLikn4dUvmS2oMRkVBfXx9btmzh/PnzmWMgt956K5MmTcq5uNa4ceM4depUzmOzv2hra2uZO3cuvb29w35Heq+nrq6O8+fPs379empqali4cCG7d+8e1q8suxlldguZrq4uBgYGaGtru/wXfplmz56d99LEGharHCowIgm6dOlSpgVMurjcdNNNNDc3s2nTppxts68EmX1CY1pra2vOteazpacqp7+Q08NkLS0tvPjiizz99NNFc06ePJn169cnfiXGoa1bpLKpF5lIQgYGBti6dWvmgLy7s2jRIu699162bds2bE8k+1yRob2+UqkUt9xyy7Dt0l544YWc4bT0yZtz5swpK2tfX19m5lfcNKW4eqnAiCTA3dmyZQtvv/02ELR3Wb16NQ888AA7duzg1KlTeU+kzFZXV5e5XVNTw+DgIEePHh1WYN599106Oztz1qXPh8ke/iole7guLhruqm4aIhOJWX9/f6bPFgSX8V2zZg1NTU0sWbKE1tZWLl68SCqVYvz48cOuXW9mmeunpAvUhx9+yI4dOzJ9xtKmTZvGhg0bhp0zs2jRIoCcCQSlHDwYX8s/HcS/MmgPRiRCdXV1me7C6Z8VK1ZkisvixYt59NFHmTFjBg0NDbS2tjIwMEBnZ2fmRMY9e/bkPOesWbO48cYbh33hHzx4MOeLefr06Tz++OPDiouZ0dDQMOLXMtZTiQvRXsuVQ3swIhHKN8tp79697N27l9raWs6cOQMEZ++vXLkSgPb2dpYsWQIEeyavv/46K1euZPHixRw+fJju7u7M8ZRp06bxyCOPDGuv8v7777NhwwaeeOKJYb8/3RkAgqtNVorZs2frGMsVxq6mXdFly5Z59oWURKJW7lUn06655hrc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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Random Motor Babbling\n", "ax = axes()\n", "environment.reset()\n", "motor_configurations = environment.random_dm(n=500)\n", "\n", "# Plotting 10 random motor configurations:\n", "for dm in motor_configurations:\n", " m = environment.current_motor_position\n", " environment.update(np.hstack((m, dm)), reset=False)\n", " environment.plot(ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Goal Babbling" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Random Goal Babbling\n", "im_model = RandomInterest(environment.conf, environment.conf.s_dims)\n", "\n", "# Reset environment\n", "environment.reset()\n", "\n", "# Reset sensorimotor model\n", "sm_model = SensorimotorModel.from_configuration(environment.conf, 'nearest_neighbor', 'default')\n", "\n", "c_dims = [0, 1] # hand position's dimensions\n", "\n", "# Add one point to boostrap sensorimotor model\n", "sm_model.update([0.]*6, np.hstack((environment.current_sensori_position, [0., 0.])))\n", " \n", "ax = axes()\n", "\n", "for _ in range(500):\n", " # Get current context\n", " s = environment.current_sensori_position\n", " # sample a random sensory goal using the interest model:\n", " ds_g = im_model.sample_given_context(s, c_dims)\n", " # infer a motor command to reach that goal using the sensorimotor model:\n", " mdm = sm_model.inverse_prediction(np.hstack((s, ds_g)))\n", " # execute this command and observe the corresponding sensory effect:\n", " sds = environment.update(mdm, reset=False)\n", " # update the sensorimotor model:\n", " sm_model.update(mdm, sds)\n", " # update interest model\n", " im_model.update(hstack((mdm, s, ds_g)), hstack((mdm, sds)))\n", " # plot arm\n", " environment.plot(ax, alpha=0.3)\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we test the learned sensorimotor model on a given goal ds_goal in sensory context s_goal. The agent chooses also the starting $m$ position.\n", "\n", "In the plot, the black dot and red x are the goal $s$ and $s + \\Delta s$.\n", "The corresponding reached arm positions are represented." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "501\n", "Inverse without context: m = [0.4046924 0.30103043 1.01681014] dm = [0.16536759 0.01617986 0.2 ]\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Inverse without context: (M, dM) <- i(S, dS)\n", "sm_model.mode = \"exploit\" # no exploration noise\n", "print(sm_model.size())\n", "s_goal = [0.8, 0.5]\n", "ds_goal = [-0.1, 0.1]\n", "mdm = sm_model.inverse_prediction(s_goal + ds_goal)\n", "m = mdm[0:3]\n", "dm = mdm[3:6]\n", "print(\"Inverse without context: m =\", m, \"dm =\", dm)\n", "\n", "ax = axes()\n", "environment.update(np.hstack((m, [0]*3)))\n", "environment.plot(ax)\n", "environment.update(np.hstack((m, dm)), reset=False)\n", "environment.plot(ax, color='red')\n", "ax.plot(*s_goal, marker='o', color='k')\n", "ax.plot(*list(np.array(s_goal)+np.array(ds_goal)), marker='x', color='red')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using 'Experiment'" ] }, { "cell_type": "code", "execution_count": 14, "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": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from explauto import Agent\n", "from explauto import Experiment\n", "from explauto.utils import rand_bounds\n", "from explauto.experiment import make_settings\n", "%pylab inline\n", "\n", "context_mode = dict(mode='mdmsds',\n", " choose_m=True,\n", " rest_position=[0]*3,\n", " dm_bounds=[[-0.2, -0.2, -0.2],\n", " [0.2, 0.2, 0.2]],\n", " ds_bounds=[[-0.2, -0.2],\n", " [0.2, 0.2]])\n", "\n", "goal_babbling = make_settings(environment='simple_arm', environment_config = 'low_dimensional',\n", " babbling_mode='goal', \n", " interest_model='discretized_progress',\n", " sensorimotor_model='nearest_neighbor',\n", " context_mode=context_mode)\n", "\n", "expe = Experiment.from_settings(goal_babbling)\n", "\n", "expe.evaluate_at([50, 100, 150, 200, 500], \n", " rand_bounds(np.vstack(([0.8, -0.1, -0.1, -0.2], [1., 0.1, 0.1, 0.2])), n=50))\n", "\n", "expe.run()\n", "\n", "ax = axes()\n", "expe.log.plot_learning_curve(ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# V. Learning without choosing m\n", "\n", "In this section, we consider that the agent can't choose the motor position $m$ at each iteration (parameter 'choose_m'=False). In that case, the environment can be resetted to the rest position each N iterations if the parameter 'reset_iterations' is provided in 'context_mode'.\n", "\n", "Here we run the whole procedure first using motor babbling and after using goal babbling.\n", "\n", "We also describe how to automatically create the environment, sensorimotor model, interest model and the learning procedure." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "from explauto.environment.context_environment import ContextEnvironment\n", "from explauto.environment.simple_arm import SimpleArmEnvironment\n", "from explauto.environment import environments\n", "\n", "env_cls = SimpleArmEnvironment\n", "env_conf = environments['simple_arm'][1]['low_dimensional']\n", "\n", "context_mode = dict(mode='mdmsds',\n", " choose_m=False,\n", " rest_position=[0]*3,\n", " reset_iterations=20,\n", " dm_bounds=[[-0.2, -0.2, -0.2],\n", " [0.2, 0.2, 0.2]],\n", " ds_bounds=[[-0.2, -0.2],\n", " [0.2, 0.2]])\n", "\n", "environment = ContextEnvironment(env_cls, env_conf, context_mode)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Motor Babbling" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Random Motor Babbling\n", "ax = axes()\n", "environment.reset()\n", "motor_configurations = environment.random_dm(n=500)\n", "\n", "for dm in motor_configurations:\n", " \n", " m = list(environment.current_motor_position)\n", " environment.update(np.hstack((m, dm)), reset=False)\n", " environment.plot(ax, alpha=0.3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Goal Babbling" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = axes()\n", "\n", "# Random Goal Babbling\n", "im_model = RandomInterest(environment.conf, environment.conf.s_dims)\n", "\n", "# Reset environment\n", "environment.reset()\n", "\n", "# Reset sensorimotor model\n", "sm_model = SensorimotorModel.from_configuration(environment.conf, 'nearest_neighbor', 'default')\n", "\n", "# Add points to boostrap sensorimotor model\n", "for i in range(10):\n", " sm_model.update([0.]*6, np.hstack((environment.current_sensori_position, [0., 0.])))\n", " \n", "\n", "in_dims = list(range(3)) + list(range(6,10))\n", "out_dims = list(range(3, 6))\n", "\n", "for i in range(500):\n", " if np.mod(i, context_mode['reset_iterations']) == 0:\n", " environment.reset()\n", " m = list(environment.current_motor_position)\n", " s = list(environment.current_sensori_position)\n", "\n", " ds_g = list(im_model.sample_given_context(s, range(environment.conf.s_ndims//2)))\n", " #print \"ds_g\", ds_g\n", "\n", " dm = sm_model.infer(in_dims, \n", " out_dims, \n", " m + s + ds_g)\n", " mdm = np.hstack((m, dm))\n", " #print \"mdm\", mdm\n", " sds = environment.update(mdm, reset=False)\n", " # update the sensorimotor model:\n", " sm_model.update(mdm, sds)\n", " # update interest model\n", " im_model.update(np.hstack((mdm, s, ds_g)), np.hstack((mdm, sds)))\n", " # plot arm\n", " environment.plot(ax, alpha=0.3)\n", " #print \"m\", m, \"s\", s, \"ds_g\", ds_g, \"dm\", dm\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we test the learned sensorimotor model on a given goal ds_goal in sensory context s_current. \n", "\n", "In the plot, the black dot and red x are the current $s$ and goal $s + \\Delta s$.\n", "The corresponding reached arm positions are represented." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "current m = [0.1, 0.1, 0.1]\n", "current s = [0.9799830609453174, 0.11433786893122476]\n", "Inverse with context: dm = [ 0.10074124 -0.09695959 0.15373203]\n", "Goal ds= [-0.05, 0.1] Reached ds= [0.00154637 0.12730727]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Inverse with sensorimotor context: dM <- i(M, S, dS)\n", "ax = axes()\n", "dm = [0.1]*3\n", "environment.update(np.hstack(([0]*3, dm)))\n", "environment.plot(ax)\n", "\n", "in_dims = list(range(3)) + list(range(6,10))\n", "out_dims = list(range(3, 6))\n", "ds_goal = [-0.05, 0.1]\n", "\n", "m_current = list(environment.current_motor_position)\n", "s_current = list(environment.current_sensori_position)\n", "print(\"current m = \", m_current)\n", "print(\"current s = \", s_current)\n", "\n", "dm = sm_model.infer(in_dims, \n", " out_dims, \n", " m_current + s_current + ds_goal)\n", "\n", "print(\"Inverse with context: dm =\", dm)\n", "sds = environment.update(np.hstack((m_current, dm)), reset=False)\n", "environment.plot(ax, color='red')\n", "ax.plot(*s_current, marker='o', color='k')\n", "ax.plot(*list(np.array(s_current) + np.array(ds_goal)), marker='x', color='red')\n", "\n", "print(\"Goal ds=\", ds_goal, \"Reached ds=\", environment.current_sensori_position - s_current)\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using 'Experiment'" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "scrolled": true }, "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": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from explauto import Agent\n", "from explauto import Experiment\n", "from explauto.utils import rand_bounds\n", "from explauto.experiment import make_settings\n", "%pylab inline\n", "\n", "n_dims = 3\n", "\n", "context_mode = dict(mode='mdmsds',\n", " choose_m=False,\n", " reset_iterations=20,\n", " rest_position=[0]*n_dims,\n", " dm_bounds=[[-0.2]*n_dims,\n", " [0.2]*n_dims],\n", " ds_bounds=[[-0.2, -0.2],\n", " [0.2, 0.2]])\n", "\n", "goal_babbling = make_settings(environment='simple_arm', environment_config = 'low_dimensional',\n", " babbling_mode='goal', \n", " interest_model='random',\n", " sensorimotor_model='nearest_neighbor',\n", " context_mode=context_mode)\n", "\n", "expe = Experiment.from_settings(goal_babbling)\n", "expe.evaluate_at([10, 100, 200, 300, 400, 500], \n", " rand_bounds(np.vstack(([1., 0., -0.1, -0.1], [1., 0., 0., 0.1])), n=200))\n", "\n", " \n", "expe.run()\n", "\n", "ax = axes()\n", "expe.log.plot_learning_curve(ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Possible extensions\n", "\n", " - choosing s at each iteration\n", " - multistep planning" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 1 }