{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Learning a sensorimotor model with a context provided by environment\n", "\n", "In this notebook, we will see how to use the Explauto libarary to allow the learning and control of actions that depend on a context provided by the environment. 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_sensorimotor_context.ipynb) describes how to define local actions that depends on the previous motor and sensory positions.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We first define an environment where the sensory feedback depends on the motor command and on the environment's context.\n", "We define a Half Lazy Arm: which is a 2D robotic arm with 3 joints (based on explauto's SimpleArmEnvironment), but with the specificity that it behave normally only one time out of 2, and is lazy (moves much less than commanded) the other times." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from explauto.environment.simple_arm import SimpleArmEnvironment\n", "from explauto.environment import environments\n", "\n", "class HalfLazyArm(SimpleArmEnvironment):\n", " def __init__(self, **kwargs):\n", " SimpleArmEnvironment.__init__(self, **kwargs)\n", " self.current_context = [0] # 0: lazy, 1: normal\n", " \n", " def compute_motor_command(self, m):\n", " if self.current_context[0]:\n", " return m\n", " else:\n", " return [mi/4 for mi in m]\n", " \n", " def compute_sensori_effect(self, m):\n", " s = SimpleArmEnvironment.compute_sensori_effect(self, m) \n", " self.current_context[0] = 1 - self.current_context[0]\n", " return s\n", " \n", "env_cls = HalfLazyArm\n", "env_conf = environments['simple_arm'][1]['low_dimensional']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, the context is hidden in self.current_context, and not available to the learning agent. We thus use the \"ContextEnvironment\" class to translate this HalfLazyArm environment to an environment which is providing the context in the sensory feedback. The sensory feedback is now the concatenation of the context $c$ and the feedback of the arm $s$.\n", "We thus call this mode \"mcs\".\n", "\n", "Additional information has to be provided to build this new environment: \"reset_iterations\" says the number of iterations before the environment is reset, \"context_n_dims\" says how many dimensions has the context, and \"context_sensory_bounds\" specify the min and max bounds on those dimensions." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from explauto.environment.context_environment import ContextEnvironment\n", "\n", "context_mode = dict(mode='mcs',\n", " reset_iterations=10,\n", " context_n_dims=1,\n", " context_sensory_bounds=[[0],[1]])\n", "\n", "environment = ContextEnvironment(env_cls, env_conf, context_mode)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "data": { "image/png": "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\nK0l7kuCMAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create the axes for plotting:\n", "%pylab inline\n", "ax = axes()\n", "\n", "for m in environment.random_motors(n=10):\n", " s = environment.update(m, reset=False)\n", " environment.plot(ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we detail the learning loop, but this is encapsulated in the \"experiment\" methods (see after).\n", "\n", "Note that to draw a goal given a context, the interest model has to be 'RandomInterest' or 'DiscretizedProgress'.\n", "\n", "The RandomInterest model will just draw a random goal in the dimensions of $s$ (not $c$).\n", "\n", "The DiscretizedProgress model will draw a goal in the $s$ region where the progress is maximal on points when context was similar to $c$." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "ax = axes()\n", "\n", "# Random Goal Babbling\n", "from explauto.interest_model.random import RandomInterest\n", "im_model = RandomInterest(environment.conf, environment.conf.s_dims)\n", "\n", "# Reset environment\n", "environment.reset()\n", "\n", "# Reset sensorimotor model\n", "from explauto.sensorimotor_model.sensorimotor_model import SensorimotorModel\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.]*3, [0.]*3)\n", " \n", "\n", "in_dims = range(3,6)\n", "out_dims = range(3)\n", "\n", "for i in range(1000):\n", " if np.mod(i, context_mode['reset_iterations']) == 0:\n", " environment.reset()\n", " \n", " # Get the context from environment\n", " context = environment.get_current_context()\n", "\n", " # Draw a goal given this context\n", " s_g = list(im_model.sample_given_context(context, range(context_mode[\"context_n_dims\"])))\n", " \n", " # Infer a motor position to reach this goal given the context\n", " m = sm_model.infer(in_dims, \n", " out_dims, \n", " context + s_g)\n", " \n", " s = environment.update(m, reset=False)\n", " \n", " # update the sensorimotor model:\n", " sm_model.update(m, s)\n", " # update interest model\n", " im_model.update(np.hstack((m, context, s_g)), np.hstack((m, s)))\n", " # plot arm\n", " environment.plot(ax, alpha=0.1)\n", " #print \"m\", m, \"s\", s, \"ds_g\", ds_g, \"dm\", dm\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's give a goal to the agent, together with the context of the environment and see if it manages to take into account the context (lazy or not) to do the right motor command.\n", "\n", "The goal is [0.95, 0.3], and here the context is normal:" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Context: normal\n", "Infered m [ 0.1660466 0.48982339 -0.15758733]\n", "Goal s= [0.95, 0.3] Reached s= [ 1. 0.95064366 0.27254737]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Inverse with sensory context\n", "ax = axes()\n", "\n", "s_g = [0.95, 0.3]\n", "sm_model.mode = \"exploit\"\n", "\n", "context = environment.get_current_context()\n", "\n", "print \"Context:\", \"normal\" if context[0] else \"lazy\"\n", "\n", "#print \"NN\", [sm_model.model.imodel.fmodel.get_xy(idx) for idx in sm_model.model.imodel.fmodel.dataset.nn_y(context+s_g, k=3)[1]]\n", "\n", "m = sm_model.infer(in_dims, \n", " out_dims, \n", " context + s_g)\n", "print \"Infered m\", m\n", "\n", "s = environment.update(m, reset=False)\n", "\n", "ax.plot(s_g[0], s_g[1], marker='o', color='red')\n", "environment.plot(ax, alpha=0.1)\n", "\n", "print \"Goal s=\", s_g, \"Reached s=\", s\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The same goal in the lazy context:" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Context: lazy\n", "Infered m [ 1.04719755 0.71571144 0.38191676]\n", "Goal s= [0.95, 0.3] Reached s= [ 0. 0.9729549 0.09996568]\n" ] }, { "data": { "image/png": "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\nSUX+H+l1Vef+Kfm2AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Inverse with sensory context\n", "ax = axes()\n", "\n", "s_g = [0.95, 0.3]\n", "sm_model.mode = \"exploit\"\n", "\n", "context = environment.get_current_context()\n", "\n", "print \"Context:\", \"normal\" if context[0] else \"lazy\"\n", "\n", "#print \"NN\", [sm_model.model.imodel.fmodel.get_xy(idx) for idx in sm_model.model.imodel.fmodel.dataset.nn_y(context+s_g, k=3)[1]]\n", "\n", "m = sm_model.infer(in_dims, \n", " out_dims, \n", " context + s_g)\n", "print \"Infered m\", m\n", "\n", "s = environment.update(m, reset=False)\n", "\n", "ax.plot(s_g[0], s_g[1], marker='o', color='red')\n", "environment.plot(ax, alpha=0.1)\n", "\n", "print \"Goal s=\", s_g, \"Reached s=\", s\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using \"Experiment\"\n", "\n", "Here, the previous loop is entirely encapsulated in the \"Experiment\" class." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING:explauto.agent.agent:Sensorimotor model not bootstrapped yet\n" ] }, { "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", "from explauto.interest_model.interest_model import InterestModel\n", "%pylab inline\n", "\n", "\n", "context_mode = dict(mode='mcs',\n", " rest_position=[0]*3,\n", " reset_iterations=10,\n", " context_n_dims=1,\n", " context_sensory_bounds=[[0],[1]])\n", "\n", "sm_model = SensorimotorModel.from_configuration(environment.conf, 'nearest_neighbor', 'default')\n", "im_model = InterestModel.from_configuration(environment.conf, environment.conf.s_dims, 'random')\n", "\n", "agent = Agent(environment.conf, sm_model, im_model, context_mode=context_mode)\n", "\n", "expe = Experiment(environment, agent, context_mode)\n", "expe.evaluate_at([100, 500, 1000, 2000, 5000, 10000], \n", " rand_bounds(np.vstack(([0.97, -0.3], [1., 0.3])), n=200))\n", "\n", " \n", "expe.run()\n", "\n", "ax = axes()\n", "expe.log.plot_learning_curve(ax)" ] } ], "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.6" } }, "nbformat": 4, "nbformat_minor": 0 }