From bcb7440539a12915ae37239e158c026a737204ab Mon Sep 17 00:00:00 2001 From: conorheins Date: Wed, 27 Oct 2021 15:52:10 +0200 Subject: [PATCH] ran through demos to verify they work with latest changes --- examples/A_matrix_demo.ipynb | 126 +- examples/A_matrix_demo.py | 4 +- examples/agent_demo.ipynb | 333 +-- examples/graph_navigation_demo.ipynb | 193 ++ examples/gridworld_tutorial_1.ipynb | 346 +-- examples/gridworld_tutorial_2.ipynb | 539 +--- examples/opti_model_v3_rjp.py | 196 ++ examples/tmaze_demo.ipynb | 595 ++--- examples/tmaze_learning_demo.ipynb | 2276 +---------------- .../old_examples}/B_matrix_demo.ipynb | 0 .../old_examples}/B_matrix_demo.py | 0 11 files changed, 1041 insertions(+), 3567 deletions(-) create mode 100644 examples/graph_navigation_demo.ipynb create mode 100644 examples/opti_model_v3_rjp.py rename {examples => experimental/old_examples}/B_matrix_demo.ipynb (100%) rename {examples => experimental/old_examples}/B_matrix_demo.py (100%) diff --git a/examples/A_matrix_demo.ipynb b/examples/A_matrix_demo.ipynb index 466f3688..26bbabfa 100644 --- a/examples/A_matrix_demo.ipynb +++ b/examples/A_matrix_demo.ipynb @@ -2,24 +2,26 @@ "cells": [ { "cell_type": "markdown", + "metadata": {}, "source": [ "# Generative Model Demo: Constructing a simple likelihood model \n", "This demo notebook provides a walk-through of how to build a simple A matrix (or likelihood mapping) that encodes an aegnt's beliefs about how hidden states 'cause' or probabilistically relate to observations" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Imports\n", "\n", "First, import `pymdp` and the modules we'll need." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import os\n", "import sys\n", @@ -36,12 +38,11 @@ "import pymdp.utils as utils\n", "from pymdp.utils import create_A_matrix_stub, read_A_matrix\n", "from pymdp.algos import run_fpi" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## The world (as represented by the agent's generative model)\n", "\n", @@ -68,12 +69,13 @@ "#### 2. `WEATHER_OBSERVATION`\n", "\n", "The second modality is a ternary (3-valued) variable representing the agent's observation of the state of the weather, e.g. by looking at the sky. In this example, it can either look `clear`, `rainy`, or `cloudy`\n" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "model_labels = {\n", " \"observations\": {\n", @@ -99,20 +101,20 @@ "pre_specified_excel = True\n", "\n", "A_stub = create_A_matrix_stub(model_labels)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Option 1. Write the empty A matrix stub to an excel file, fill it out separately (e.g. manually in excel, and then read it back into memory). Remember, these represent the agent's generative model, not the true probabilities that relate states to observations. So you can think of these as the agent's personal/subjective 'assumptions' about how hidden states relate to observations." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "if read_from_excel:\n", " ## Option 1: fill out A matrix 'offline' (e.g. in an excel spreadsheet)\n", @@ -126,37 +128,37 @@ " if not pre_specified_excel:\n", " A_stub.to_excel(excel_path)\n", " print(f'Go fill out the A matrix in {excel_path} and then continue running this code\\n')" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "After you've filled out the Excel sheet separately (e.g. opening up Microsoft Excel and filling out the cells, you can read it back into memory)" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "if read_from_excel:\n", " A_stub = read_A_matrix(excel_path, n_factors)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Option 2. Fill out the A matrix using the desired probabilities. Remember, these represent the agent's generative model, not the true probabilities that relate states to observations. So you can think of these as the agent's personal/subjective 'assumptions' about how hidden states relate to observations." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "if not read_from_excel:\n", " A_stub.loc[('grass_observation','wet'),('rained', 'on')] = 1.0\n", @@ -172,36 +174,36 @@ " A_stub.loc['weather_observation','rained'] = np.tile(np.array([0.1, 0.65, 0.25]).reshape(-1,1), (1,2)) \n", "\n", " A_stub.loc[('weather_observation'),('did_not_rain')] = np.tile(np.array([0.9, 0.05, 0.05]).reshape(-1,1), (1,2)) \n" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Now we can use a utility function `convert_stub_to_ndarray` to convert the human-readable A matrix into the multi-dimensional tensor form needed by `pymdp` to achieve things like inference and action selection" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "A = utils.convert_A_stub_to_ndarray(A_stub, model_labels)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Sample a random observation" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "obs_idx = [np.random.randint(o_dim) for o_dim in num_obs]\n", "# obs_idx = [0, 1] # wet and rainy\n", @@ -211,55 +213,35 @@ "for g, modality_name in enumerate(model_labels['observations'].keys()):\n", " observation[g][obs_idx[g]] = 1.0\n", " print('%s: %s'%(modality_name, model_labels['observations'][modality_name][obs_idx[g]]))" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "grass_observation: dry\n", - "weather_observation: clear\n" - ] - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Given the observation and your A matrix, perform inference to optimize a simple posterior belief about the state of the world " - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "qs = run_fpi(A, observation, num_obs, n_states, prior=None, num_iter=10, dF=1.0, dF_tol=0.001)\n", "\n", "print('Belief that it rained: %.2f'%(qs[0][0]))\n", "print('Belief that the sprinkler was on: %.2f'%(qs[1][0]))" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Belief that it rained: 0.00\n", - "Belief that the sprinkler was on: 0.33\n" - ] - } - ], - "metadata": {} + ] } ], "metadata": { "interpreter": { - "hash": "4144ffdb2ef81a5a74efd1d0bf9253d3fe81ec80475fd1008a839668d590b806" + "hash": "43ee964e2ad3601b7244370fb08e7f23a81bd2f0e3c87ee41227da88c57ff102" }, "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)" + "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -276,4 +258,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/examples/A_matrix_demo.py b/examples/A_matrix_demo.py index 718f3abc..d45ae083 100644 --- a/examples/A_matrix_demo.py +++ b/examples/A_matrix_demo.py @@ -45,7 +45,7 @@ if read_from_excel: ## Option 1: fill out A matrix 'offline' (e.g. in an excel spreadsheet) - excel_dir = 'tmp_dir' + excel_dir = 'examples/tmp_dir' if not os.path.exists(excel_dir): os.mkdir(excel_dir) @@ -93,3 +93,5 @@ print('Belief that it rained: %.2f'%(qs[0][0])) print('Belief that the sprinkler was on: %.2f'%(qs[1][0])) + +# %% diff --git a/examples/agent_demo.ipynb b/examples/agent_demo.ipynb index 1ae613ae..9d21db60 100644 --- a/examples/agent_demo.ipynb +++ b/examples/agent_demo.ipynb @@ -2,24 +2,26 @@ "cells": [ { "cell_type": "markdown", + "metadata": {}, "source": [ "# Active Inference Demo: Constructing a basic generative model from the \"ground up\"\n", "This demo notebook provides a full walk-through of how to build a POMDP agent's generative model and perform active inference routine (inversion of the generative model) using the `Agent()` class of `pymdp`. We build a generative model from 'ground up', directly encoding our own A, B, and C matrices." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Imports\n", "\n", "First, import `pymdp` and the modules we'll need." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import os\n", "import sys\n", @@ -36,12 +38,11 @@ "from pymdp.agent import Agent\n", "from pymdp import utils\n", "from pymdp.maths import softmax" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## The world (as represented by the agent's generative model)\n", "\n", @@ -58,12 +59,13 @@ "\n", "The second factor is a ternary (3-valued) variable representing the decision-state or 'sampling state' of the agent itself. The first state/level of this hidden state factor is just the starting or initial state of the agent (`PLAYING_VS_SAMPLING = 0`, a state that we can call `START`); the second state/level is the state the agent occupies when \"playing\" the multi-armed bandit or slot machine (`PLAYING_VS_SAMPLING = 1`, a state that we can call `PLAYING`); and the third state/level of this factor is a \"sampling state\" (`PLAYING_VS_SAMPLING = 2`, a state that we can call `SAMPLING`). This is a decision-state that the agent occupies when it is \"sampling\" data in order to _find out_ the level of the first hidden state factor - the `GAME_STATE`. \n", "\n" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "factor_names = [\"GAME_STATE\", \"PLAYING_VS_SAMPLING\"]\n", "num_factors = len(factor_names) # this is the total number of hidden state factors\n", @@ -72,12 +74,11 @@ "START, PLAYING, SAMPLING = 0, 1, 2 # let's assign the indices names so that when we build the A matrices, things will be more 'semantically' obvious\n", "\n", "num_states = [len([HIGH_REW,LOW_REW]), len([START, PLAYING, SAMPLING])] # this is a list of the dimensionalities of each hidden state factor " - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Observations \n", "\n", @@ -95,12 +96,13 @@ "#### Note about the arbitrariness of 'labelling' observations, before defining the `A` and `C` matrices.\n", "\n", "There is a bit of a circularity here, in that that we're \"pre-empting\" what the A matrix (likelihood mapping) should look like, by giving these observations labels that imply particular roles or meanings. An observation per se doesn't mean _anything_, it's just some discrete index that distinguishes is from another observation. It's only through its probabilistic relationship to hidden states (encoded in the `A` matrix, as we'll see below) that we endow an observation with meaning. For example: by already labelling `GAME_STATE_OBS=0` as `HIGH_REW_EVIDENCE`, that's a hint about how we're going to structure the `A` matrix for the `GAME_STATE_OBS` modality." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "modality_names = [\"GAME_STATE_OBS\", \"GAME_OUTCOME\", \"ACTION_SELF_OBS\"]\n", "num_modalities = len(modality_names)\n", @@ -110,36 +112,36 @@ "START_O, PLAY_O, SAMPLE_O = 0, 1, 2\n", "\n", "num_obs = [len([HIGH_REW_EVIDENCE, LOW_REW_EVIDENCE, NO_EVIDENCE]), len([REWARD, PUN, NEUTRAL]), len([START_O, PLAY_O, SAMPLE_O])]" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Setting up observation likelihood matrix - first main component of generative model" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "A = utils.obj_array_zeros([[o] + num_states for _, o in enumerate(num_obs)])" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Set up the **first** modality's likelihood mapping, correspond to how `\"GAME_STATE_OBS\"` i.e. `modality_names[0]` are related to hidden states." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "A[0][NO_EVIDENCE,:, START] = 1.0 # they always get the 'no evidence' observation in the START STATE\n", "A[0][NO_EVIDENCE, :, PLAYING] = 1.0 # they always get the 'no evidence' observation in the PLAYING STATE\n", @@ -158,20 +160,20 @@ "# A[0][:, :, 0] = 1.0\n", "# A[0][:, :, 1] = 1.0\n", "# A[0][:, :, 2] = np.array([[0.8, 0.2], [0.2, 0.8], [0.0, 0.0]])" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Set up the **second** modality's likelihood mapping, correspond to how `\"GAME_OUTCOME\"` i.e. `modality_names[1]` are related to hidden states." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "A[1][NEUTRAL, :, START] = 1.0 # regardless of the game state, if you're at the START, you see the 'neutral' outcome\n", "\n", @@ -195,20 +197,20 @@ "# A[1][2, :, 0] = np.ones(num_states[0])\n", "# A[1][0:2, :, 1] = softmax(np.eye(num_obs[1] - 1)) # relationship of game state to reward observations (mapping between reward-state (first hidden state factor) and rewards (Good vs Bad))\n", "# A[1][2, :, 2] = np.ones(num_states[0])" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Set up the **third** modality's likelihood mapping, correspond to how `\"ACTION_SELF_OBS\"` i.e. `modality_names[2]` are related to hidden states." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "A[2][START_O,:,START] = 1.0\n", "A[2][PLAY_O,:,PLAYING] = 1.0\n", @@ -218,12 +220,11 @@ "# modality_idx, factor_idx = 2, 2\n", "# for sampling_state_i in num_states[factor_idx]:\n", "# A[modality_idx][sampling_state_i,:,sampling_state_i] = 1.0" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Control state factors\n", "\n", @@ -234,12 +235,13 @@ "\n", "#### 1. `PLAYING_VS_SAMPLING_CONTROL`\n", "This is a control factor that reflects the agent's ability to move itself between the `START`, `PLAYING` and `SAMPLING` states of the `PLAYING_VS_SAMPLING` hidden state factor. The levels/values of this control factor are `START_ACTION`, `PLAY_ACTION`, and `SAMPLE_ACTION`. When we describe the `B` matrices below, we will set up the transition dynamics of the `PLAYING_VS_SAMPLING` hidden state factor, such that they are totally determined by the value of the `PLAYING_VS_SAMPLING_CONTROL` factor. " - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "control_names = [\"NULL\", \"PLAYING_VS_SAMPLING_CONTROL\"]\n", "num_control_factors = len(control_names) # this is the total number of controllable hidden state factors\n", @@ -248,24 +250,24 @@ "START_ACTION, PLAY_ACTION, SAMPLE_ACTION = 0, 1, 2\n", "\n", "num_control = [len([NULL_ACTION]), len([START_ACTION, PLAY_ACTION, SAMPLE_ACTION])] # this is a list of the dimensionalities of each hidden state factor " - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### (Controllable-) Transition Dynamics\n", "\n", "Importantly, some hidden state factors are _controllable_ by the agent, meaning that the probability of being in state $i$ at $t+1$ isn't merely a function of the state at $t$, but also of actions (or from the generative model's perspective, _control states_ ). So each transition likelihood or `B` matrix encodes conditional probability distributions over states at $t+1$, where the conditioning variables are both the states at $t-1$ _and_ the actions at $t-1$. This extra conditioning on control states is encoded by a third, lagging dimension on each factor-specific `B` matrix. So they are technically `B` \"tensors\" or an array of action-conditioned `B` matrices.\n", "\n", "For example, in our case the 2nd hidden state factor (`PLAYING_VS_SAMPLING`) is under the control of the agent, which means the corresponding transition likelihoods `B[1]` are index-able by both previous state and action." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "control_fac_idx = [1] # this is the (non-trivial) controllable factor, where there will be a >1-dimensional control state along this factor\n", "B = utils.obj_array(num_factors)\n", @@ -288,22 +290,22 @@ "B[1][START, :, START_ACTION] = 1.0 \n", "B[1][PLAYING, :, PLAY_ACTION] = 1.0\n", "B[1][SAMPLING, :, SAMPLE_ACTION] = 1.0" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Prior preferences\n", "\n", "Now we parameterise the C vector, or the prior beliefs about observations. This will be used in the expression of the prior over actions, which is technically a softmax function of the negative expected free energy of each action. It is the equivalent of the exponentiated reward function in reinforcement learning treatments.\n" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "C = utils.obj_array_zeros([num_ob for num_ob in num_obs])\n", "C[1][REWARD] = 1.0 # make the observation we've a priori named `REWARD` actually desirable, by building a high prior expectation of encountering it \n", @@ -311,85 +313,76 @@ "\n", "# the above code implies the following for the `neutral' observation:\n", "C[1][NEUTRAL] = 0.0 # we don't need to write this - but it's basically just saying that observing `NEUTRAL` is in between reward and punishment" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Initialise an instance of the `Agent()` class:\n", "\n", "All you have to do is call `Agent(generative_model_params...)` where `generative_model_params` are your A, B, C's... and whatever parameters of the generative model you want to specify" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "agent = Agent(A=A, B=B, C=C, control_fac_idx=control_fac_idx)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/Users/conor/pymdp/pymdp/agent/agent.py:249: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", - " D = Categorical(values=np.array([np.ones(Ns) for Ns in self.n_states]))\n" - ] - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Generative process:\n", "Important note how the generative process doesn't have to be described by A and B matrices - can just be the arbitrary 'rules of the game' that you 'write in' as a modeller. But here we just use the same transition/likelihood matrices to make the sampling process straightforward." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# transition/observation matrices characterising the generative process\n", "A_gp = copy.deepcopy(A)\n", "B_gp = copy.deepcopy(B)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Initialise the simulation" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# initial state\n", "T = 20 # number of timesteps in the simulation\n", "observation = [NO_EVIDENCE, NEUTRAL, START_O] # initial observation\n", "state = [HIGH_REW, START] # initial (true) state" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Create some string names for the state, observation, and action indices to help with print statements" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "states_idx_names = [ [\"HIGH_REW\", \"LOW_REW\"], \\\n", " [\"START\", \"PLAYING\", \"SAMPLING\"]]\n", @@ -399,20 +392,20 @@ " [\"START\", \"PLAYING\", \"SAMPLING\"] ]\n", "\n", "action_idx_names = [ [\"NULL\"], [\"MOVE TO START\", \"PLAY\", \"SAMPLE\"] ]" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Run simulation" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "for t in range(T):\n", " \n", @@ -433,146 +426,18 @@ " for g, _ in enumerate(observation):\n", " observation[g] = utils.sample(A_gp[g][:, state[0], state[1]])\n", "\n", - " print(f\"Beliefs: {[(factor_names[f], belief_state[f].values.round(3).T) for f in range(num_factors)]}\")\n", + " print(f\"Beliefs: {[(factor_names[f], belief_state[f].round(3).T) for f in range(num_factors)]}\")\n", " print(f\"Action: {[(control_names[a], action_idx_names[a][int(action[a])]) for a in range(num_factors)]}\")" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - "Time 0:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'START')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'NEUTRAL'), ('ACTION_SELF_OBS', 'START')]\n", - "Beliefs: [('GAME_STATE', array([[0.5, 0.5]])), ('PLAYING_VS_SAMPLING', array([[1., 0., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'SAMPLE')]\n", - "\n", - "Time 1:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'SAMPLING')]\n", - "Observations: [('GAME_STATE_OBS', 'HIGH_REW_EV'), ('GAME_OUTCOME', 'NEUTRAL'), ('ACTION_SELF_OBS', 'SAMPLING')]\n", - "Beliefs: [('GAME_STATE', array([[0.8, 0.2]])), ('PLAYING_VS_SAMPLING', array([[0., 0., 1.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 2:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.916, 0.084]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 3:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'PUN'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.8, 0.2]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 4:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.916, 0.084]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 5:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.967, 0.033]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 6:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'PUN'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.916, 0.084]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 7:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.967, 0.033]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 8:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'PUN'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.916, 0.084]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 9:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.967, 0.033]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 10:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.988, 0.012]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 11:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.995, 0.005]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 12:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.998, 0.002]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 13:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.999, 0.001]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 14:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[1., 0.]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 15:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'PUN'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.999, 0.001]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 16:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'PUN'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.998, 0.002]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 17:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'PUN'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.995, 0.005]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 18:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.998, 0.002]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "\n", - "Time 19:\n", - "State: [('GAME_STATE', 'HIGH_REW'), ('PLAYING_VS_SAMPLING', 'PLAYING')]\n", - "Observations: [('GAME_STATE_OBS', 'NO_EV'), ('GAME_OUTCOME', 'REWARD'), ('ACTION_SELF_OBS', 'PLAYING')]\n", - "Beliefs: [('GAME_STATE', array([[0.999, 0.001]])), ('PLAYING_VS_SAMPLING', array([[0., 1., 0.]]))]\n", - "Action: [('NULL', 'NULL'), ('PLAYING_VS_SAMPLING_CONTROL', 'PLAY')]\n", - "/Users/conor/pymdp/pymdp/distributions/categorical.py:371: UserWarning: You have called :log: on a Categorical that contains zeros. We have removed zeros by adding a small non-negative scalar to each value.\n", - " We have removed zeros by adding a small non-negative scalar to each value.\"\n" - ] - } - ], - "metadata": {} + ] } ], "metadata": { + "interpreter": { + "hash": "43ee964e2ad3601b7244370fb08e7f23a81bd2f0e3c87ee41227da88c57ff102" + }, "kernelspec": { - "name": "python3710jvsc74a57bd04144ffdb2ef81a5a74efd1d0bf9253d3fe81ec80475fd1008a839668d590b806", - "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)" + "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -589,4 +454,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/examples/graph_navigation_demo.ipynb b/examples/graph_navigation_demo.ipynb new file mode 100644 index 00000000..3829dee5 --- /dev/null +++ b/examples/graph_navigation_demo.ipynb @@ -0,0 +1,193 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "source": [ + "import os\n", + "import sys\n", + "import pathlib\n", + "import numpy as np\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "path = pathlib.Path(os.getcwd())\n", + "module_path = str(path.parent) + '/'\n", + "sys.path.append(module_path)\n", + "\n", + "from pymdp.agent import Agent\n", + "from pymdp import utils\n", + "from pymdp.maths import softmax\n", + "import copy" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 5, + "source": [ + "A_distance = np.ones((3, 5, 5)) / 3.0" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 6, + "source": [ + "A_distance[:,0,0] = np.eye(3)[0] # current is location 0, last was location 0, probability of '0 distance traveled' is 100%\n", + "A_distance[:,1,1] = np.eye(3)[0] # current is location 0, last was location 0, probability of '0 distance traveled' is 100%\n", + "A_distance[:,2,2] = np.eye(3)[0] # current is location 0, last was location 0, probability of '0 distance traveled' is 100%\n", + "A_distance[:,3,3] = np.eye(3)[0] # current is location 0, last was location 0, probability of '0 distance traveled' is 100%\n", + "A_distance[:,4,4] = np.eye(3)[0] # current is location 0, last was location 0, probability of '0 distance traveled' is 100%" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "source": [ + "# Starting location 0\n", + "\n", + "# (1, 0) THIS EXISTS\n", + "# (1, 2) X\n", + "# (1, 3) X\n", + "# (1, 4) X\n", + "\n", + "A_distance[:,1,0] = np.eye(3)[1] # current is location 1, last location was location 0, probability of '5 units distance traveled' is 100%\n", + "\n", + "A_distance[:,4,0] = np.eye(3)[2] # current location is location 4, last location was location 0, probability of '20 units distance traveled' is 100%\n", + "\n", + "# starting location 1\n", + "A_distance[:,2,1] = np.eye(3)[1] # current is location 0, last was location 0, probability of '5 distance traveled' is 100%\n", + "\n", + "# Starting location 2\n", + "A_distance[:,3,2] = np.eye(3)[1] # current is location 0, last was location 0, probability of '5 distance traveled' is 100%\n", + "\n", + "# Starting location 4\n", + "A_distance[:,3,4] = np.eye(3)[1] # current is location 0, last was location 0, probability of '5 distance traveled' is 100%\n" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 11, + "source": [ + "observation_names = ['0 distance', '5 distance', '20 distance']" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 25, + "source": [ + "curr_loc = 3\n", + "prev_loc = 4\n", + "\n", + "edge_weight = observation_names[np.where(A_distance[:,curr_loc, prev_loc])[0][0]]\n", + "print(f'Observation given move from {prev_loc} to {curr_loc}: {edge_weight}')" + ], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Observation given move from 4 to 3: 5 distance\n" + ] + } + ], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 32, + "source": [ + "B = utils.obj_array(2)\n", + "\n", + "B[0] = np.zeros((5, 5, 5)) # current location\n", + "\n", + "B[1] = np.ones((5, 5, 5)) # previous location" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 36, + "source": [ + "qs_past = utils.obj_array(2)" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 37, + "source": [ + "qs_past[0] = np.eye(5)[2]\n", + "qs_past[1] = np.eye(5)[1]" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 39, + "source": [ + "qs_new = utils.obj_array(2)" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "source": [ + "qs_new[0] = np.log(A_proprioception_current[obs_proprio_curr,:]) + np.log(B[0][:,:,last_action].dot(qs_past[0]))\n", + "qs_new[1] = np.log(A_proprioception_previous[obs_proprio_prev,:]) + np.log(B[1][:,:,0].dot(qs_past[1]))" + ], + "outputs": [], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### During policy evaluation / multi-step EFE integration, we need to tie together counterfactual beliefs about current location (imaginations about what my CURRENT location will be at t + tau) to counterfactual beliefs about previous location (imaginations about what my PREVIOUS location will be at t + tau). In order to do that, the idea is that we keep the hidden state factors statistically independent (B[0] does not depend on B[1]), but the space of allowable policies is reduced, such that if you're e.g. moving to Location 1 along hidden state factor 0, you can only move to consistent locations along hidden state factor 1. So like if the action along Hidden state factor 0 (current location) is \"Move to Location 1\", then policies that include that action can only have actions along Hidden state factor 1 (previous location) that are consistent with Location 1 being Current Location. " + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [], + "metadata": {} + } + ], + "metadata": { + "orig_nbformat": 4, + "language_info": { + "name": "python", + "version": "3.7.10", + "mimetype": "text/x-python", + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "pygments_lexer": "ipython3", + "nbconvert_exporter": "python", + "file_extension": ".py" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)" + }, + "interpreter": { + "hash": "4144ffdb2ef81a5a74efd1d0bf9253d3fe81ec80475fd1008a839668d590b806" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/examples/gridworld_tutorial_1.ipynb b/examples/gridworld_tutorial_1.ipynb index fe69b70d..05fd3248 100644 --- a/examples/gridworld_tutorial_1.ipynb +++ b/examples/gridworld_tutorial_1.ipynb @@ -2,34 +2,35 @@ "cells": [ { "cell_type": "markdown", + "metadata": {}, "source": [ "# Tutorial on Active Inference with `pymdp`" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "This set of 3 tutorial notebooks aims to be an accessible introduction to discrete-state-space active inference modelling with the `pymdp` package. We assume no prerequisites other than a good grasp of Python and some basic mathematical knowledge (specifically some familiarity with probability and linear algebra). We assume no prior knowledge of active inference. Hopefully, by the end of this series of notebooks, you will understand active inference well enough to understand the recent literature, as well as implement your own agents!" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "These tutorials will walk you through the specification, and construction of an active inference agent which can solve a simple navigation task in a 2-dimensional grid-world environment. The goal here is to implement the agent 'from scratch'. Specifically, instead of just using magical library functions, we will show you an example of how these functions could be implemented from pure Python and numpy code. The goal at the end of these tutorials is that you understand at a fairly detailed level how active inference works in discrete state spaces and how to apply it, as well as how you could implement a simple agent without using the `pymdp` package. Once you understand what the `pymdp` package aims to abstract, we will go through the structure and functionality offered by the package, and show how you can construct complex agents in a simple and straightforward way." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# What is Active Inference?" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Fundamentally, the core contention of active inference is that the brain (and agents in general) can be thought of as fundamentally performing (Bayesian) inference about the world. Specifically, an agent performs two functions.\n", "\n", @@ -40,27 +41,27 @@ "2.) **Action**. Typically, the agent can also perform the actions which change the state of the world. The agent can use these actions to drive the world towards a set of states that it desires. \n", "\n", "The theory of Active Inference argues that **both** perception and action can be represented and solved as Bayesian inference problems. " - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# What is Bayesian Inference?" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Bayesian inference provides a recipe for performing *optimal* inference. That is, if you have some set of Hypotheses $H$ and some set of data $D$, then Bayesian inference allows you to compute the *best possible* update to your hypotheses given the data that you have. In other words, the best explanation $H$ that accounts for your actual data $D$.\n", "\n", "For instance, suppose you are a trader and you want to know whether some stock will go up tomorrow. And you have a set of information about that stock (for instance earnings reports, sales data, rumours a friend of a friend told you etc). Then Bayesian inference provides the *optimal way* to estimate the probability that the stock will go up. In this scenario, our \"hypotheses\" $H$ is that the stock will go up, or it will go down and our \"data\" $D$ is the various pieces of information we hold." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The fundamental equation in Bayesian inference is **Bayes Rule**. Which is \n", "$$\n", @@ -77,18 +78,18 @@ "The key insight of Bayes rule is simply that the posterior probability -- how likely the hypothesis is, given the data -- is simply the likelihood times the prior. This multiplication can be expressed as computing the following: how likely is the data you actually saw, given the different hypotheses ($P(D = d | H)$), multiplied by the prior probability you assign to each hypothesis ($P(H)$). So the full posterior is a distribution over the different hypotheses - in the case of discrete / Categorical distributions, your posterior $p(H |D)$ will also be a vector of probabilities, e.g. $p(H | D) = [0.75, 0.25]$.\n", "\n", "Effectively, hypotheses are more likely if they can predict the data well, but are also weighted by their a-priori probability. The marginal likelihood $p(D)$ is basically just there to normalize the posterior (i.e. make sure it equals 1)." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Generative Models" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "In Active Inference we typically talk about *generative models* as a core component. But what are generative models? Technically a generative model is simply the product of a likelihood and a prior, for all the possible data points $D$ and hypotheses $H$. This is also known as a *joint distribution* $p(H,D) = p(D | H)p(H)$. The generative model, then, is simply the numerator of Bayes rule, and if we normalize it we can compute posterior probabilities. It is called a generative model because it allows you to *generate* samples of the data. To do so, we follow the following steps:\n", "\n", @@ -105,18 +106,18 @@ "3.) Be happy!\n", "\n", "All the methods in Bayesian statistics essentially fall into two classes. Coming up with more expressive and powerful generative models and then figuring out algorithms to perform inference on them." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Why is Bayesian Inference hard?" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "At this point, you may be wondering: Bayesian inference seems pretty easy. We known Bayes rule. We can invent generative models easily enough. Computing the posterior is just taking the generative model and dividing it by $p(D)$. Why all this fuss? Why do we need to make a whole academic field out of this anyway? Luckily this has a straightforward answer. Bayesian inference is hard for essentially just one reason: that computing $p(D)$, the normalizing constant, is hard.\n", "\n", @@ -132,18 +133,18 @@ "Because of this intrinsic difficulty, there are a large number of special case algorithms which can solve (or usually approximate) the Bayesian posterior in various cases, and a large amount of work in statistics goes into inventing new ones or improving existing methods. Active Inference agents use one special class of approximate Bayesian inference methods called *variational methods* or *variational inference*. This will be discussed in much more detail in notebook 2.\n", "\n", "Beyond merely the difficulty of performing inference, another reason why Bayesian statistics is hard is that you often *don't know* the generative model. Or at least you are uncertain about some aspects of it. There is also a wide class of methods which let you perform inference and *learning* simultaneously, including for active inference, although they won't be covered in this tutorial." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# A Generative Model for an Agent" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "In Active Inference, we typically go a step beyond the simple cases of Bayesian inference described above, where we have a static set of hypotheses and some static data. We are instead interested in the case of an *agent* interacting with a *dynamic environment*. The key thing we need to add to the formalism to accomodate this is a notion of *time*. We consider an environment consisting of a set of *states* $[x_1, x_2, \\dots x_t]$ evolving over time. Moreover, there is an agent which is in the environment over time. This agent receives a set of *observations* $[o_1, o_2 \\dots o_t]$, which are a function of the state of the environment, and it can emit *actions* $[a_1, a_2 \\dots a_t]$ which can change the state of the environment. The key step to get a handle on this situation mathematically is to define a *generative model* of it. \n", "\n", @@ -176,76 +177,77 @@ "Secondly, we can represent the transition distribution by a matrix $\\textbf{B}$ of shape $state\\_dim \\times state\\_dim \\times action\\_dim$ where element $\\textbf{B}_{i,j,k}$ represents the probability of the environment moving to state $i$ given that it was previously in state $j$ and that action $k$ was taken.\n", "\n", "In the rest of this notebook, we will explicitly write down the generative process / generative model for a simple grid-world environment in code, to get a better handle on how the environment and the agent's model is specified. In the next notebook, we will turn to inference and action selection and discuss how active inference solves these two tricky problems." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Constructing a Generative Model " - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "For the rest of this notebook, we will construct a simple generative model for an active inference agent navigating a 3x3 grid world environment. The agent can perform one of 5 movement actions at each time step: `LEFT, RIGHT, UP, DOWN, STAY`. The goal of the agent is to navigate to its preferred position. \n", "\n", "We will create matrices for both the environment as well as the agent itself. As we go up levels of abstraction, these environment and generative model matrices will be imported from classes - but this notebook is the lowest level representation of construction, to show how everything is built from the ground up. " - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Understanding the state space" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The first thing to note is that we are in a 3x3 grid world which means we have 9 states in total. We can define the following mapping to better understand the space." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "state_mapping = {0: (0,0), 1: (1,0), 2: (2,0), 3: (0,1), 4: (1,1), 5:(2,1), 6: (0,2), 7:(1,2), 8:(2,2)}" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "All we're doing with this mapping dictionary is assigning a particular index (`0`, `1`, `2`, ..., `8`) to each grid position, which is defined as a pair of `(x, y)` coordinates ( `(0, 0), (1, 0)`, ..., `(2, 2)`). We will use the linear indices to refer to the grid positions in our probability distributions (e.g. `P(o_t | x_t = 5)`), so this `state_mapping` will allow us to easily move between these linear indices and the grid world indices. These kinds of mappings are very handy for intuition and visualization." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "And the following heatmap just represents how the coordinates map to the real grid space" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "grid = np.zeros((3,3))\n", "for linear_index, xy_coordinates in state_mapping.items():\n", @@ -254,95 +256,52 @@ "fig = plt.figure(figsize = (3,3))\n", "sns.set(font_scale=1.5)\n", "sns.heatmap(grid, annot=True, cbar = False, fmt='.0f', cmap='crest')" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ] - }, - "metadata": {}, - "execution_count": 4 - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-14T14:38:08.718566\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Likelihood Matrix: A" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The likelihood matrix represents $P(o_t | x_t)$ , the probability of an observation given a state. In a grid world environment, the likelihood matrix of the agent is identical to that of the environment. It is simply the identity matrix over all states (in this case 9 states, for a 3x3 grid world) which represents the fact that the agent has probability 1 of observing that it is occupying any state x, given that it is in state x. This just means that the agent has full transparency over its own location in the grid. " - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "A = np.eye(9)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "A" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "array([[1., 0., 0., 0., 0., 0., 0., 0., 0.],\n", - " [0., 1., 0., 0., 0., 0., 0., 0., 0.],\n", - " [0., 0., 1., 0., 0., 0., 0., 0., 0.],\n", - " [0., 0., 0., 1., 0., 0., 0., 0., 0.],\n", - " [0., 0., 0., 0., 1., 0., 0., 0., 0.],\n", - " [0., 0., 0., 0., 0., 1., 0., 0., 0.],\n", - " [0., 0., 0., 0., 0., 0., 1., 0., 0.],\n", - " [0., 0., 0., 0., 0., 0., 0., 1., 0.],\n", - " [0., 0., 0., 0., 0., 0., 0., 0., 1.]])" - ] - }, - "metadata": {}, - "execution_count": 6 - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "We can also plot the likelihood matrix as follows:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "labels = [state_mapping[i] for i in range(A.shape[1])]\n", "def plot_likelihood(A):\n", @@ -350,40 +309,27 @@ " ax = sns.heatmap(A, xticklabels = labels, yticklabels = labels, cbar = False)\n", " plt.title(\"Likelihood distribution (A)\")\n", " plt.show()\n" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_likelihood(A)" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-14T14:38:12.335706\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": {} - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Transition matrix: B" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The transition matrix determines how the agent can move around the gridworld given each of the 5 available actions (UP, DOWN, LEFT, RIGHT, STAY). \n", "So the transition matrix will be a 9x9x5 matrix, where each entry corresponds to an end state, a starting state, and the action that defines that specific transition. \n", @@ -391,40 +337,22 @@ "To construct this matrix, we have to understand that when the agent is at the edges of the grid, it cannot move outward, so trying to move right at the right wall will cause the agent to stay still. \n", "\n", "We will start by constructing a dictionary which we call P, which maps each state to its next state given an action" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "state_mapping" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "{0: (0, 0),\n", - " 1: (1, 0),\n", - " 2: (2, 0),\n", - " 3: (0, 1),\n", - " 4: (1, 1),\n", - " 5: (2, 1),\n", - " 6: (0, 2),\n", - " 7: (1, 2),\n", - " 8: (2, 2)}" - ] - }, - "metadata": {}, - "execution_count": 9 - } - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "P = {}\n", "dim = 3\n", @@ -448,48 +376,29 @@ "\n", " ''' Stay in the same place (self explanatory) '''\n", " P[state_index][actions['STAY']] = state_index" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "P" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "{0: {0: 0, 1: 1, 2: 3, 3: 0, 4: 0},\n", - " 1: {0: 1, 1: 2, 2: 4, 3: 0, 4: 1},\n", - " 2: {0: 2, 1: 2, 2: 5, 3: 1, 4: 2},\n", - " 3: {0: 0, 1: 4, 2: 6, 3: 3, 4: 3},\n", - " 4: {0: 1, 1: 5, 2: 7, 3: 3, 4: 4},\n", - " 5: {0: 2, 1: 5, 2: 8, 3: 4, 4: 5},\n", - " 6: {0: 3, 1: 7, 2: 6, 3: 6, 4: 6},\n", - " 7: {0: 4, 1: 8, 2: 7, 3: 6, 4: 7},\n", - " 8: {0: 5, 1: 8, 2: 8, 3: 7, 4: 8}}" - ] - }, - "metadata": {}, - "execution_count": 11 - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "From here, we can easily construct the transition matrix" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "num_states = 9\n", "B = np.zeros([num_states, num_states, len(actions)])\n", @@ -498,47 +407,36 @@ " ns = int(P[s][a])\n", " B[ns, s, a] = 1\n", " " - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "B is a very large matrix, we can see its shape below, which is as expected:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "B.shape" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "(9, 9, 5)" - ] - }, - "metadata": {}, - "execution_count": 13 - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "We can also visualize B on the plots below. The x axis is the starting state, and the y axis is the ending state, and each plot corresponds to an action given by the title." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "fig, axes = plt.subplots(2,3, figsize = (15,8))\n", "a = list(actions.keys())\n", @@ -554,37 +452,23 @@ "plt.tight_layout()\n", "plt.show()\n", " " - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-14T14:38:20.278608\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "iVBORw0KGgoAAAANSUhEUgAABB8AAAInCAYAAADQwfFSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAB+VklEQVR4nO3dfVhU553/8Q8KKKhVY2wCk2gVcgnGhyhJTYNWmq0UXV1Xt12TaCKIsluDMULSFpEEE9uYVCNWQWw1aGy2K66JiUqrYLfUppGmqzERomCwSvwt+EAiDDZRw/z+yDo6AZwHZjwM5/26rlxXuc/N/bnPmfHr9OvMmQCbzWYTAAAAAACAj3QxegMAAAAAAKBzo/kAAAAAAAB8iuYDAAAAAADwKZoPAAAAAADAp2g+AAAAAAAAn6L5AAAAAAAAfIrmA0zjJz/5iYYMGaKPP/641eNlZWUaMmSI1qxZ4zD/+v+io6M1evRo/eAHP9Abb7xxM7cPAIZrrS4OGTJEI0aM0He+8x0tXrxY586ds89fs2aNhgwZorKyshZrff7559q2bZseffRRjR07VsOHD9d3vvMdZWRk6Pjx421mt6eGt/bfT37yEy9dHQDwrdbq2rBhwzR+/Hg9/fTTqqqqavX3Ll26pIKCAn3/+9/X6NGjFRMTo2nTpmnDhg1qbGx0mPvkk09qyJAh+uSTT1qs8+Mf/1hDhgzR/PnzWxxramrS0KFDlZaW5rDX1157rdU9ffzxxw41G+YQaPQGgI4uIyNDffv2lSTZbDZZrVa99dZb+slPfqJPPvlEc+bMMXiHAHBzXV8XJclqteqdd97R9u3bdeTIEf3Xf/2XgoOD2/z9uro6zZ8/X+Xl5YqLi9PcuXPVo0cPnThxQjt27NDOnTuVk5Oj7373ux7vccaMGfrWt75l//l//ud/tHXrVs2YMUMxMTH28QEDBnicAQBGuL4G//3vf9fJkyf1+uuva8+ePfrVr36lMWPG2OfW1dVp7ty5qqqq0ne/+11NmzZNNptNhw4d0qpVq7R161atX79egwcPliTdd999+u1vf6v3339f48ePd8gtKytTUFCQ/vKXv+iLL75Q165d7cfef/99ffHFFw7ZkrRq1Sp973vf06233uqrywE/QvMBcOK73/2u7rjjDoex73//+5o0aZJyc3M1a9asG77IBoDOprW6OHPmTGVnZ+s3v/mNSkpKNGnSpFZ/12azaeHChaqqqtKGDRs0duxYh+MpKSl69NFHtXjxYt17773q06ePR3scNWqURo0aZf/5iy++0NatW3XPPfdo6tSpHq0JAB1BazX4scce07/8y7/oySefVElJiXr06KFLly7phz/8oT7++GMVFBQ4NGRnzZqlxx57TCkpKZo3b5527dqlkJAQ3XfffZLUovnwt7/9Tf/7v/+radOm6Y033lB5eblGjBhhP37w4EFJ0je/+U2HfTU2NuqFF17QypUrvX4d4H/42AXgge7du+vBBx+U1Wpt8y1uAGA206ZNkyQdPny4zTk7d+7UoUOHNHfu3BaNB0nq06ePFi9erAsXLuh3v/udz/YKAJ1JWFiYfvzjH6u+vl7bt2+XJO3YsUPl5eX68Y9/7NB4uGrkyJFavHixPv74Y23cuFGSdNddd6lv374t6viBAwfUpUsX/fu//7sCAgL0zjvvOBw/dOiQvv71r2vQoEEO4w8++KB27drVYj7MieYD4KGAgABJX/5rGgBACgkJkfTluxvasnPnTgUFBd3wI2tjxoxRQUGBpk+f7vU9AkBnlZCQoODgYO3fv1/Sl82H0NBQe2O4Nf/0T/+k/v37a+fOnZK+fH0bExOjDz74wGHegQMHFBUVpW984xsaMmSIDhw4YD9ms9n0/vvvt3jXgyQtWbJEISEhys7O1qVLl7xxmvBjNB8ADzQ3N+svf/mLgoODFRERYfR2AKBDuPqCd+jQoW3OeffddzVs2DD17NmzzTldunTRAw880OpH2hoaGlRfX9/iv6/eNA0AzKZbt24aMGCAjh49qi+++EIffPCBhg4dqm7durX5OwEBARozZoz+9re/6ezZs5K+vO/Dp59+qr/97W+Svmwu/OUvf7Hfz+H+++/XwYMH7c2Ejz76SBcuXND999/fYn2LxaL58+frb3/7m375y196+Yzhb7jnA+DE1Re60pfvcjh9+rQ2bdqko0ePKjExUT169DB4hwBwc11fF6Uvbzi5f/9+rV27VhEREfrHf/zHVn/v008/1d///nfddtttLY5ZrdYW/yoWFBSkXr16OYzd6F/wAMDsvva1r+nUqVO6cOGCLl26pP79+zv9na9//euSpDNnzqh///72+z4cPnxY3/jGN1RZWanz58/bmwtjxozRpk2bdPDgQd1///06dOiQfbw1SUlJeuutt/TLX/5SU6ZM0cCBA71xqvBDNB+Ar7j6cYqrWnuhGxwcrEcffVTp6ek3a1sA0GG0VhdDQkL04IMPKisrS0FBQa3+XnNzs6TWP5axePFi7dmzx2Hsm9/8prZs2eIw9vOf/7zVu6YfPXpUL774osvnAACd0ZUrVxQQEGCvs9d/I0VbAgO//L+EV38nOjpavXr10vvvv6+pU6fqwIED6tq1q+69915JX74zomvXrvrLX/5ifxfE7bff3ua3BwUFBSk7O1uzZs3Sc889Z7+/BMyH5gNM4+rbd9u6R8PV8a++zff6F7pdunTR1772NUVERNzwLWwA0JldrYuXL1/W/v379dprr2nixInKzs6+YW3s27evgoKCdO7cuRbHHn/8cT300EP2n59++ulW1xg9enSLu7xLrr3ABoDO7tNPP9Utt9yiW265RUFBQTp//rzT3zlz5oyka++A6NKli2JiYuw3nTxw4IDDx+V69eql6Oho/c///I8k6b333mvzXQ9X3XvvvZo2bZpef/117d69WyNHjvT4HOG/aD7ANHr37i1JampqavX4hQsXJH35drXrtfVCFwDM6vq6OH78eA0cOFDLli3Tp59+qry8vBbvILsqICBAo0aN0uHDh9XU1OTwsbUhQ4Y4zKXBCwDusVqtqqmpUVxcnL3efvDBB/r888/brKk2m03/8z//ozvvvNPefJC+bBasXr1an3/+uf7617/q4Ycfdvi9MWPG6De/+Y3q6+t14sQJJScnO93f008/rd///vd64YUXtGHDhvadLPwSN5yEaVy9MWRbX41ZWVkp6cuvGAIAuO7RRx/VP/zDP+j3v/+9Nm/efMO5//RP/6TPP/9cv/nNb27S7gDAHH73u9/JZrPpH/7hHyRJU6dOldVq1datW9v8nX379qmmpkZTpkxxGP/mN7+py5cv67e//a0aGhpavLPh/vvv18WLF7V7927ZbDan73yQpFtuuUVPPfWUzp49q5ycHPdPEH6P5gNMIzY2Vt27d9err76qzz77zOFYQ0OD3njjDYWFhWn48OEG7RAA/Ndzzz2n3r17KycnRzU1NW3Omz59ukaNGqVf/OIXKikpaXH8iy++0KZNm1RXV+fL7QJAp3LmzBn94he/0G233WZvJFyttytXrtSf/vSnFr/z4YcfKisrS3fccYfmzp3rcOzuu+9W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OyVJjz76qPr376833njD4fhtt92mJ554Qp988olefvll+/jly5e1dOlSfe1rX1NWVpZH2QAAwHtoPgAAgHbp0aOHJGnr1q0tjoWEhOjgwYN66aWX3F73iy++0G9/+1tFRkaqf//+evDBB1VVVaX333/fYd6jjz6q6Ohobdu2TUeOHJEkbdq0SR999JGefvpp+8c0AACAcWg+wHQaGxtVX1/f6n+XLl1qMf/ixYsuzwUAM/qnf/onBQUF6cUXX9TkyZOVk5OjsrIye50MDg72aN133nlH586ds39k4up9Ib767oeuXbvqueeekyS9+OKLOnfunPLy8nTfffe1eh8IAABw83HPB5jO448/3uax3NzcFp8Lfv755/X888+3mPvCCy9o+vTpXt8fAPibu+66S2vXrtXixYtVVVWlqqoqrVu3TqGhoXrwwQeVmpqqQYMGub3u1Y9cXG063H///erdu7d2796tjIwMh6bGiBEj9K//+q/6z//8T82bN09XrlzR888/3+o3YAAAgJuP5gNM58c//rHDDc+u19p4cnKyxo4d22I8MjLS63sDAH8VFxen//7v/9a+ffv0hz/8QX/+85919uxZ7dq1S8XFxdqwYYO++c1vurzeZ599puLiYlksFg0bNkySFBQUpLi4OL355pvat2+fJk6c6PA76enpKikpUUVFhZ588kmPGh4AAMA3aD7AdO6++263vu0iMjJSDzzwgA93BACdQ7du3TRp0iRNmjRJklReXq5XXnlFu3bt0rPPPqvf/va3Lq/1+9//Xk1NTZowYYI+/vhj+/g999yjN998U6+//nqL5sPXvvY1jRs3Tm+88YamTJninZMCAABeQfMBAAB47OLFi1q/fr3uvvtuh6/ZlL5s9q5cuVINDQ364x//qE8++UR9+/Z1ad2rH7nYsWOHduzY0eL422+/rTNnzujrX/96u88BAAD4Hs0HAADgsW7dumnjxo0aNWpUi+bDVZGRkdq/f7+6d+/u0poXLlzQ/v37ZbFYtHjx4hbH33rrLe3Zs0dvvvmm5s2b1679AwCAm4PmAwAA8FjXrl01adIkvfnmm3rzzTc1depUh+Offvqp9uzZowceeEAhISEurfm73/1Oly9f1vTp01vcBFiS7rzzTu3Zs0dvvPEGzQcAAPwEzQd0KqtWrbJ/3/z1rv9c8J///GfV1ta2ucaECRMUGhrqk/0BQGf0k5/8RO+//75+9KMf6a233tK4cePUs2dPnTp1Sq+//rouX76sZ555xuX1du3apS5durT5jUJDhgzRqFGjdOjQIR0+fFgjR4701qkAAAAfofmATmXXrl2tjg8ePNj+v/Pz82+4xr59+2g+AIAbbrnlFr3++uvatGmT9u3bp9zcXP3973/X17/+dcXHx+vf//3fXb43Q21trd59913FxsYqPDy8zXkPP/ywDh06pNdff53mAwAAfiDAZrPZjN4EAAAAAADovLoYvQEAAAAAANC50XwAAAAAAAA+RfMBAAAAAAD4FM0HAAAAAADgUzQfAAAAAACAT9F8AAAAAAAAPkXzAQAAAAAA+FSg0Ru4GbIDAm5+ps3WYfL12fmbnq/u/YzLNzKbfB57tMp0dbAjPRfJN082+dRhAOjAeOcDAAAAAADwKZoPAAAAAADAp1xuPuTn5yszM9P+87lz55Senq4xY8YoJiZGaWlpOnv2rEeb2Lx5syZMmKARI0Zo2rRpKi0tdTg+e/ZsFRUVebQ2AHQW1GEAAAD4K5eaD5WVlSooKFBaWpok6cqVK0pOTtb777+v7OxsZWdn6+DBg5o7d66uXLni1gY2bNigF198UdOmTdOaNWt05513av78+Tp06JB9TkZGhpYtW6bz5w347CAAdADUYQAAAPgzl5oPK1as0NSpU9Wv35c38dm9e7eOHj2q/Px8TZw4UVOmTNGGDRt07Ngx7d271+XwixcvKj8/X3PmzNH8+fM1fvx4rV69WsOGDVNubq59XlRUlEaOHKl169a5eXoA0DlQhwEAAODPnDYfKisrVVpaqsmTJ9vH3n77bUVGRioiIsI+dvXnr75V90YOHz6sxsZGxcfH28cCAgI0YcIEvfPOO7p06ZJ9fMqUKdq2bZvq6+tdXh8AOgPqMAAAAPyd0+bDzp07FR4erhEjRtjHqqurNWjQoBZzBwwYoBMnTrgcXl1dLUkaPHiww/jAgQN15coV1dTU2Mfi4uLU3NyskpISl9cHgM6AOgwAAAB/57T5cODAAQ0fPtxhrLGxUT179mwxt0ePHrJarS6HX53bo0ePFutIUlNTk30sNDRUERERKisrc3l9AOgMqMMAAADwd06bDzU1NbJYLC3GAwICWozZbDZ16eL6t3fabLY212ktw2Kx6PTp0y6vDwCdAXUYAAAA/s7pK1Sr1arQ0FCHsZ49e7b6L2tNTU2t/ktcW3r16iWbzebwL2tX17l6/HohISFqbGx0eX0A6AyowwAAAPB3TpsPffr0UUNDg8PYoEGDdPLkyRZzT5061epnkNtyde6pU6ccxk+ePKng4GCFh4c7jDc0NKhv374urw8AnQF1GAAAAP7OafPBYrGorq7OYWzs2LGqqqqy36hMko4fP67q6mo98MADLoePGjVKoaGh2rNnj33MZrOpuLhY9913n4KDgx3m19bWKiwszOX1AaAzoA4DAADA3wU6mxAbG6vCwkKHsUmTJik/P19z585Venq6bDabVq5cqbvuuksTJ060z6uoqFBwcLAiIyNbXTskJERz5sxRXl6eunbtqpEjR2r79u0qLy/Xq6++6jDXarWqqqpKycnJnpwnAPgt6jAAAAD8ndN3PsTHx+vs2bOqqKiwjwUHB6ugoEBDhw7VkiVL9Pzzz2vUqFHauHGjAgOv9TNSU1O1dOnSG66fmpqqBQsW6PXXX9eCBQv08ccfKy8vTzExMQ7z9u/fr6CgIMXFxbl5igDg36jDAAAA8HcBtqu3NL+BlJQUhYWFOX0B+1U1NTXKzs7Wxo0bPd7gVUlJSYqMjFRmZqbbv5vdyp3cfS37ustqdL4+O3/T89W9n3H5RmaTz2PvI9Rh9xlaBzvSc5F882ST79M6DABoH5e+j23RokUqKirSmTNn3Fo8JydH48aN82hj1ysvL1dFRYVSUlLavRYA+CPqMAAAAPyZS82H6OhoJSYmatWqVW4tnpycrMTERE/25WD58uXKyspS//79270WAPgj6jAAAAD8mUsfuwAAAAAAAPCUS+98AAAAAAAA8BTNBwAAAAAA4FOBzqd0AkbfbdngfO4yf5ORb1x+Rzp3ODJZHTT1Nw6ZPd/M597R8gEAHQrvfAAAAAAAAD5F8wEAAAAAAPiUy82H/Px8ZWZmtnrsiSeeaPOYKzZv3qwJEyZoxIgRmjZtmkpLSx2Oz549W0VFRR6vDwCdAXUYAAAA/sql5kNlZaUKCgqUlpbmMG6z2fTSSy9pz549Hm9gw4YNevHFFzVt2jStWbNGd955p+bPn69Dhw7Z52RkZGjZsmU6f96Azw4CQAdAHQYAAIA/c6n5sGLFCk2dOlX9+l27iU91dbXmzp2rX//61+revbtH4RcvXlR+fr7mzJmj+fPna/z48Vq9erWGDRum3Nxc+7yoqCiNHDlS69at8ygHAPwddRgAAAD+zGnzobKyUqWlpZo8ebLD+LPPPqvGxkZt3brV4cWwOw4fPqzGxkbFx8fbxwICAjRhwgS98847unTpkn18ypQp2rZtm+rr6z3KAgB/RR0GAACAv3PafNi5c6fCw8M1YsQIh/ElS5aosLBQ0dHRHodXV1dLkgYPHuwwPnDgQF25ckU1NTX2sbi4ODU3N6ukpMTjPADwR9RhAAAA+DunzYcDBw5o+PDhLcaHDBnS7nCr1SpJ6tGjh8P41Z+bmprsY6GhoYqIiFBZWVm7cwHAn1CHAQAA4O+cNh9qampksVh8Em6z2RQQENDquKQWxywWi06fPu2TvQBAR0UdBgAAgL9z2nywWq0KDQ31SXivXr1ks9kc/mVNuvYvbb169XIYDwkJUWNjo0/2AgAdFXUYAAAA/s5p86FPnz5qaGjwSfigQYMkSadOnXIYP3nypIKDgxUeHu4w3tDQoL59+/pkLwDQUVGHAQAA4O+cNh8sFovq6up8Ej5q1CiFhoY6fD+9zWZTcXGx7rvvPgUHBzvMr62tVVhYmE/2AgAdFXUYAAAA/i7Q2YTY2FgVFhZ6tHhFRYWCg4MVGRnZ6vGQkBDNmTNHeXl56tq1q0aOHKnt27ervLxcr776qsNcq9WqqqoqJScne7QXAPBX1GEAAAD4O6fvfIiPj9fZs2dVUVHh9uKpqalaunSp0zkLFizQ66+/rgULFujjjz9WXl6eYmJiHObt379fQUFBiouLc3sfAODPqMMAAADwdwG2q7c0v4GUlBSFhYU5fQH7VTU1NcrOztbGjRs93uBVSUlJioyMVGZmpvu//Nn5due7rXu/DpOf3cqd7H0t+/qn1c0+/w507ck38WPvZdRhDxhYBw2tgVLH+rNgtnwzn3tHywcAdChO3/kgSYsWLVJRUZHOnDnj1uI5OTkaN26cRxu7Xnl5uSoqKpSSktLutQDAH1GHAQAA4M9caj5ER0crMTFRq1atcmvx5ORkJSYmerIvB8uXL1dWVpb69+/f7rUAwB9RhwEAAODPXPrYBQAAAAAAgKdceucDAAAAAACAp2g+AAAAAAAAnwo0egM3hdF3WybfPNnk89ijdUY/HgY+F033jUNSx/qzaOY6ZPZ8AECHwjsfAAAAAACAT9F8AAAAAAAAPuVy8yE/P1+ZmZn2n0+ePKmFCxdq7NixiomJ0cMPP6wDBw54tInNmzdrwoQJGjFihKZNm6bS0lKH47Nnz1ZRUZFHawNAZ0EdBgAAgL9yqflQWVmpgoICpaWlSZI+/fRTPfroo6qurtbixYu1atUq9evXT0lJSfrrX//q1gY2bNigF198UdOmTdOaNWt05513av78+Tp06JB9TkZGhpYtW6bz5w347CAAdADUYQAAAPgzl5oPK1as0NSpU9Wv35c38dmxY4fq6+u1YcMGTZo0Sd/+9re1evVqRURE6JVXXnE5/OLFi8rPz9ecOXM0f/58jR8/XqtXr9awYcOUm5trnxcVFaWRI0dq3bp1bp4eAHQO1GEAAAD4M6fNh8rKSpWWlmry5Mn2sdtvv12JiYm67bbb7GNdu3bVwIEDVVNT43L44cOH1djYqPj4ePtYQECAJkyYoHfeeUeXLl2yj0+ZMkXbtm1TfX29y+sDQGdAHQYAAIC/c9p82Llzp8LDwzVixAj7WEJCgp566imHeRcuXNC7776ryMhIl8Orq6slSYMHD3YYHzhwoK5cueLwAjouLk7Nzc0qKSlxeX0A6AyowwAAAPB3TpsPBw4c0PDhw284p7m5WVlZWWpqalJycrLL4VarVZLUo0cPh/GrPzc1NdnHQkNDFRERobKyMpfXB4DOgDoMAAAAf+e0+VBTUyOLxdLm8cuXL+vpp5/Wnj17tHjxYg0bNszlcJvNpoCAgFbHJbU4ZrFYdPr0aZfXB4DOgDoMAAAAf+e0+WC1WhUaGtrqsYaGBiUnJ6uoqEhZWVmaOXOmW+G9evWSzWZz+Jc16dq/tPXq1cthPCQkRI2NjW5lAIC/ow4DAADA3zltPvTp00cNDQ0txuvq6vTwww/r0KFDevnllzVr1iy3wwcNGiRJOnXqlMP4yZMnFRwcrPDwcIfxhoYG9e3b1+0cAPBn1GEAAAD4O6fNB4vForq6OoexpqYmJSUlqba2VgUFBZo4caJH4aNGjVJoaKj27NljH7PZbCouLtZ9992n4OBgh/m1tbUKCwvzKAsA/BV1GAAAAP4u0NmE2NhYFRYWOoytXbtWH330kRYsWKDAwEC999579mPdunVTdHS0JKmiokLBwcFt3nk9JCREc+bMUV5enrp27aqRI0dq+/btKi8v16uvvuow12q1qqqqyq0bqQFAZ0AdBgAAgL9z2nyIj49Xbm6uKioqNHToUEnS3r17JUlr1qzRmjVrHOYPGDBAxcXFkqTU1FRZLBZt2bKlzfVTU1PVtWtXFRYWasOGDYqMjFReXp5iYmIc5u3fv19BQUGKi4tz6wQBwN9RhwEAAODvAmxXb2l+AykpKQoLC9PSpUvdWrympkbZ2dnauHGjxxu8KikpSZGRkcrMzHT/lz873+58t3XvR75R+WY+d7Pnd6Rz9zLqsAc6yHMxu5VvE/G17Ov/ajfbtTc638zn3tHyAQAditN7PkjSokWLVFRUpDNnzri1eE5OjsaNG+fRxq5XXl6uiooKpaSktHstAPBH1GEAAAD4M5eaD9HR0UpMTNSqVavcWjw5OVmJiYme7MvB8uXLlZWVpf79+7d7LQDwR9RhAAAA+DOXPnbh94x+2x/55skmn8cerTP68eBjFzdXR/qzaOY6ZPZ8AECHYo7mAwAAAAAAMIxLH7sAAAAAAADwFM0HAAAAAADgU4FGb+CmMPozhybPv9mfd77+s8581tpk+R3p3OHI6MfDxM9F6qB5H3vT5wMAOhTe+QAAAAAAAHyK5gMAAAAAAPApl5sP+fn5yszMtP987tw5paena8yYMYqJiVFaWprOnj3brs384Q9/0N13391ifPbs2SoqKmrX2gDg76jDAAAA8Fcu3fOhsrJSBQUF9heeV65cUXJysi5evKjs7GxduXJFK1eu1Ny5c7V9+3YFBrp/K4mDBw8qPT1drX3zZ0ZGhubMmaMxY8aoXz8+ywfAfKjDAAAA8GcuvfNhxYoVmjp1qv0F5+7du3X06FHl5+dr4sSJmjJlijZs2KBjx45p7969bm3gs88+U15enh577LE2XyxHRUVp5MiRWrdunVtrA0BnQR0GAACAP3PafKisrFRpaakmT55sH3v77bcVGRmpiIgI+9jVn0tLS93aQFFRkTZv3qyMjAzNmjWrzXlTpkzRtm3bVF9f79b6AODvqMMAAADwd06bDzt37lR4eLhGjBhhH6uurtagQYNazB0wYIBOnDjh1gbGjBmjffv2aebMmTecFxcXp+bmZpWUlLi1PgD4O+owAAAA/J3T5sOBAwc0fPhwh7HGxkb17NmzxdwePXrIarW6tQGLxdLqWl8VGhqqiIgIlZWVubU+APg76jAAAAD8ndPmQ01NjSwWS4vxgICAFmM2m01duvju2zstFotOnz7ts/UBoCOiDgMAAMDfOX2FarVaFRoa6jDWs2fPVv9lrampyaV/PfNUSEiIGhsbfbY+AHRE1GEAAAD4O6fNhz59+qihocFhbNCgQTp58mSLuadOnWr1M8je0tDQoL59+/psfQDoiKjDAAAA8HdOmw8Wi0V1dXUOY2PHjlVVVZWqq6vtY8ePH1d1dbUeeOAB7+/y/9TW1iosLMxn6wNAR0QdBgAAgL9z2nyIjY3VwYMHHcYmTZqkgQMHau7cudq9e7d27dqlefPm6a677tLEiRPt8yoqKnT8+HGvbNRqtaqqqkpjx471ynoA4C+owwAAAPB3TpsP8fHxOnv2rCoqKuxjwcHBKigo0NChQ7VkyRI9//zzGjVqlDZu3KjAwED7vNTUVC1dutQrG92/f7+CgoIUFxfnlfUAwF9QhwEAAODvnDYfoqKiNH78eG3dutVhPCwsTGvXrtWhQ4dUVlaml19+WV//+tcd5mzevFnBwcEub2bBggUOL66vV1hYqBkzZqh3794urwcAnQF1GAAAAP7Ope9jW7RokYqKinTmzBm3Fs/JydG4ceM82tj1ysvLVVFRoZSUlHavBQD+iDoMAAAAf+ZS8yE6OlqJiYlatWqVW4snJycrMTHRk305WL58ubKystS/f/92rwUA/og6DAAAAH8WYLPZbEZvAgAAAAAAdF4uvfMBAAAAAADAUzQfAAAAAACATwU6n9IJfHb+5md270e+Ufkd6NyzAwJuenz29Z+k4rE3Lh+OjH48zPxcpA7e3PAOdO1Nnw8A6FB45wMAAAAAAPApmg8AAAAAAMCnXG4+5OfnKzMzs9VjTzzxRJvH3PGHP/xBd999d4vx2bNnq6ioqN3rA4A/ow4DAADAX7nUfKisrFRBQYHS0tIcxm02m1566SXt2bOn3Rs5ePCg0tPT1do3f2ZkZGjZsmU6f96Azw4CQAdAHQYAAIA/c6n5sGLFCk2dOlX9+l27iU91dbXmzp2rX//61+revbvHG/jss8+Ul5enxx57TIGBrd//MioqSiNHjtS6des8zgEAf0YdBgAAgD9z2nyorKxUaWmpJk+e7DD+7LPPqrGxUVu3bnV4MeyuoqIibd68WRkZGZo1a1ab86ZMmaJt27apvr7e4ywA8EfUYQAAAPg7p82HnTt3Kjw8XCNGjHAYX7JkiQoLCxUdHd2uDYwZM0b79u3TzJkzbzgvLi5Ozc3NKikpaVceAPgb6jAAAAD8ndPmw4EDBzR8+PAW40OGDPHKBiwWi3r27Ol0XmhoqCIiIlRWVuaVXADwF9RhAAAA+DunzYeamhpZLJabsRenLBaLTp8+bfQ2AOCmog4DAADA3zltPlitVoWGht6MvTgVEhKixsZGo7cBADcVdRgAAAD+zmnzoU+fPmpoaLgZe3GqoaFBffv2NXobAHBTUYcBAADg75w2HywWi+rq6m7GXpyqra1VWFiY0dsAgJuKOgwAAAB/57T5EBsbq4MHD3q0eEVFhY4fP+7R736V1WpVVVWVxo4d65X1AMBfUIcBAADg75w2H+Lj43X27FlVVFS4vXhqaqqWLl3q0ca+av/+/QoKClJcXJxX1gMAf0EdBgAAgL9z2nyIiorS+PHjtXXr1jbn/P73v9dPf/rTFuObN29WcHCwy5tZsGBBmy+uCwsLNWPGDPXu3dvl9QCgM6AOAwAAwN85bT5I0qJFi1RUVKQzZ864tXhOTo7GjRvn0cauV15eroqKCqWkpLR7LQDwR9RhAAAA+DOXmg/R0dFKTEzUqlWr3Fo8OTlZiYmJnuzLwfLly5WVlaX+/fu3ey0A8EfUYQAAAPizAJvNZjN6EwAAAAAAoPNy6Z0PAAAAAAAAnqL5AAAAAAAAfCrQ6A3cFJ+dv/mZ3fuRb1S+mc/d7Pkd6dzhyOjHw8zPRZPnZwcE3NTo7Os/zWrya294PgCgQ+GdDwAAAAAAwKdoPgAAAAAAAJ9yufmQn5+vzMxM+88nT57UwoULNXbsWMXExOjhhx/WgQMH2rWZP/zhD7r77rtbjM+ePVtFRUXtWhsA/B11GAAAAP7KpeZDZWWlCgoKlJaWJkn69NNP9eijj6q6ulqLFy/WqlWr1K9fPyUlJemvf/2rRxs5ePCg0tPT1do3f2ZkZGjZsmU6f96Azw4CQAdAHQYAAIA/c6n5sGLFCk2dOlX9+n15E58dO3aovr5eGzZs0KRJk/Ttb39bq1evVkREhF555RW3NvDZZ58pLy9Pjz32mAIDW7//ZVRUlEaOHKl169a5tTYAdBbUYQAAAPgzp82HyspKlZaWavLkyfax22+/XYmJibrtttvsY127dtXAgQNVU1Pj1gaKioq0efNmZWRkaNasWW3OmzJlirZt26b6+nq31gcAf0cdBgAAgL9z2nzYuXOnwsPDNWLECPtYQkKCnnrqKYd5Fy5c0LvvvqvIyEi3NjBmzBjt27dPM2fOvOG8uLg4NTc3q6SkxK31AcDfUYcBAADg75w2Hw4cOKDhw4ffcE5zc7OysrLU1NSk5ORktzZgsVjUs2dPp/NCQ0MVERGhsrIyt9YHAH9HHQYAAIC/c9p8qKmpkcViafP45cuX9fTTT2vPnj1avHixhg0b5tUNXs9isej06dM+Wx8AOiLqMAAAAPxd63cWu47ValVoaGirxxoaGpSamqp3331XWVlZTt+y214hISFqbGz0aQYAdDTUYQAAAPg7p82HPn36qKGhocV4XV2d5syZo1OnTunll1/WxIkTfbLB6zU0NKhv374+zwGAjoQ6DAAAAH/ntPlgsVhUV1fnMNbU1KSkpCTV1dWpoKBA9957r882eL3a2loNGTLkpmQBQEdBHQYAAIC/c3rPh9jYWB08eNBhbO3atfroo4+UlJSkwMBAvffee/b/PvzwQ/u8iooKHT9+3CsbtVqtqqqq0tixY72yHgD4C+owAAAA/J3Tdz7Ex8crNzdXFRUVGjp0qCRp7969kqQ1a9ZozZo1DvMHDBig4uJiSVJqaqosFou2bNnS7o3u379fQUFBiouLa/daAOBPqMMAAADwdwE2m83mbFJKSorCwsK0dOlStxavqalRdna2Nm7c6PEGr0pKSlJkZKQyMzPd/+XPzrc7323d+5FvVL6Zz93s+R3p3L2MOuwBnovkS8oOCLip0dnXv6wy+bU3PB8A0KE4/diFJC1atEhFRUU6c+aMW4vn5ORo3LhxHm3seuXl5aqoqFBKSkq71wIAf0QdBgAAgD9zqfkQHR2txMRErVq1yq3Fk5OTlZiY6Mm+HCxfvlxZWVnq379/u9cCAH9EHQYAAIA/c+ljFwAAAAAAAJ5y6Z0PAAAAAAAAnqL5AAAAAAAAfMrpV212CkbfbZl882R3sPybfZd3yfFO76a+yzwcGf14UIfINyDb6Bpsumv/1XwAQIfCOx8AAAAAAIBP0XwAAAAAAAA+5XLzIT8/X5mZmfafz507p/T0dI0ZM0YxMTFKS0vT2bNn3d7ApUuXlJ+fr4SEBN1zzz1KSEhQXl6eLl26ZJ8ze/ZsFRUVub02AHQm1GEAAAD4K5fu+VBZWamCggL7C88rV64oOTlZFy9eVHZ2tq5cuaKVK1dq7ty52r59uwIDXb+VxLJly/TWW29p/vz5Gj58uD744APl5uaqtrZWzz33nCQpIyNDc+bM0ZgxY9SvH5/lA2A+1GEAAAD4M5dena5YsUJTp061v+DcvXu3jh49qqKiIkVEREiSoqOjNXnyZO3du1eTJk1yKfzChQsqLCzUU089pblz50qSvvWtb0mSVq5cqfT0dPXu3VtRUVEaOXKk1q1bpyVLlrh9kgDg76jDAAAA8GdOP3ZRWVmp0tJSTZ482T729ttvKzIy0v6CV5L959LSUpfDrVarHnroIT344IMO44MHD5Yk1dTU2MemTJmibdu2qb6+3uX1AaAzoA4DAADA3zltPuzcuVPh4eEaMWKEfay6ulqDBg1qMXfAgAE6ceKEy+EWi0XZ2dn2F7lX7du3T0FBQRo4cKB9LC4uTs3NzSopKXF5fQDoDKjDAAAA8HdOmw8HDhzQ8OHDHcYaGxvVs2fPFnN79Oghq9Xarg0VFxfrjTfe0COPPKJevXrZx0NDQxUREaGysrJ2rQ8A/oY6DAAAAH/ntPlQU1Mji8XSYjwgIKDFmM1mU5cunn975969e5WWlqaYmBilp6e3OG6xWHT69GmP1wcAf0QdBgAAgL9z+grVarUqNDTUYaxnz56t/staU1NTq/8S54pNmzZp4cKFGj16tNavX69u3bq1mBMSEqLGxkaP1gcAf0UdBgAAgL9z2nzo06ePGhoaHMYGDRqkkydPtph76tSpVj+D7MzPfvYzvfDCC5o0aZJ+9atftfnCuaGhQX379nV7fQDwZ9RhAAAA+DunzQeLxaK6ujqHsbFjx6qqqkrV1dX2sePHj6u6uloPPPCAWxvIycnR5s2blZSUpBUrVig4OLjNubW1tQoLC3NrfQDwd9RhAAAA+DunzYfY2FgdPHjQYWzSpEkaOHCg5s6dq927d2vXrl2aN2+e7rrrLk2cONE+r6KiQsePH29z7WPHjmn9+vUaNmyYEhISdPjwYb333nv2/65/S7HValVVVZXGjh3ryXkCgN+iDgMAAMDfBTqbEB8fr9zcXFVUVGjo0KGSpODgYBUUFOinP/2plixZouDgYMXGxuonP/mJAgOvLZmamiqLxaItW7a0unZxcbGam5t15MgRzZgxo8Xx1157Tffee68kaf/+/QoKClJcXJwn5wkAfos6DAAAAH8XYLPZbM4mpaSkKCwsTEuXLnVr8ZqaGmVnZ2vjxo0eb/CqpKQkRUZGKjMz0/1f/ux8u/Pd1r0f+Ublm/ncv5Kf3cq3Ifha9nUl5WbnX59t9LX3NuqwB6hD5BuR34FqsOmu/VfzAQAdikvfx7Zo0SIVFRXpzJkzbi2ek5OjcePGebSx65WXl6uiokIpKSntXgsA/BF1GAAAAP7MpeZDdHS0EhMTtWrVKrcWT05OVmJioif7crB8+XJlZWWpf//+7V4LAPwRdRgAAAD+zKWPXQAAAAAAAHjKpXc+AAAAAAAAeIrmAwAAAAAA8CmnX7XZKRh9t2XyzZNNfod57A2/yzwcmfi5aLpzN3t+Bzp3w+ug0Y89AKBD4Z0PAAAAAADAp2g+AAAAAAAAn6L5AAAAAAAAfMrl5kN+fr4yMzNbPfbEE0+0ecyZS5cuKT8/XwkJCbrnnnuUkJCgvLw8Xbp0yT5n9uzZKioq8mh9AOgsqMMAAADwVy41HyorK1VQUKC0tDSHcZvNppdeekl79uzxeAPLli1Tfn6+pk+frnXr1mn69Olav369li1bZp+TkZGhZcuW6fx5A25cBAAdAHUYAAAA/syl5sOKFSs0depU9et37Q7C1dXVmjt3rn7961+re/fuHoVfuHBBhYWFSk1NVUpKir71rW8pJSVFjz/+uLZu3aoLFy5IkqKiojRy5EitW7fOoxwA8HfUYQAAAPgzp82HyspKlZaWavLkyQ7jzz77rBobG7V161aHF8PusFqteuihh/Tggw86jA8ePFiSVFNTYx+bMmWKtm3bpvr6eo+yAMBfUYcBAADg7wKdTdi5c6fCw8M1YsQIh/ElS5ZoyJAh7Qq3WCzKzs5uMb5v3z4FBQVp4MCB9rG4uDg1NzerpKRE//qv/9quXADwJ9RhAAAA+Dun73w4cOCAhg8f3mK8vS9421JcXKw33nhDjzzyiHr16mUfDw0NVUREhMrKynySCwAdFXUYAAAA/s5p86GmpkYWi+Vm7EV79+5VWlqaYmJilJ6e3uK4xWLR6dOnb8peAKCjoA4DAADA3zltPlitVoWGhvp8I5s2bdLChQs1evRorV+/Xt26dWsxJyQkRI2NjT7fCwB0JNRhAAAA+Dun93zo06ePGhoafLqJn/3sZ9q8ebMmT56sF154QcHBwa3Oa2hoUN++fX26FwDoaKjDAAAA8HdO3/lgsVhUV1fnsw3k5ORo8+bNSkpK0ooVK9p8wStJtbW1CgsL89leAKAjog4DAADA3zl950NsbKwKCws9WryiokLBwcGKjIxs9fixY8e0fv16DRs2TAkJCTp8+LDD8cjISPXs2VPSl287rqqqUnJyskd7AQB/RR0GAACAv3PafIiPj1dubq4qKio0dOhQtxZPTU2VxWLRli1bWj1eXFys5uZmHTlyRDNmzGhx/LXXXtO9994rSdq/f7+CgoIUFxfn1h4AwN9RhwEAAODvAmw2m83ZpJSUFIWFhWnp0qVuLV5TU6Ps7Gxt3LjR4w1elZSUpMjISGVmZrr/y5+db3e+27r3I9+ofDOfu9nzr8vODgi4udmSsp2XU49Rhz3QQZ6Lpjt3s+d3oHM3vA4a/dgDADoUp/d8kKRFixapqKhIZ86ccWvxnJwcjRs3zqONXa+8vFwVFRVKSUlp91oA4I+owwAAAPBnLjUfoqOjlZiYqFWrVrm1eHJyshITEz3Zl4Ply5crKytL/fv3b/daAOCPqMMAAADwZy597AIAAAAAAMBTLr3zAQAAAAAAwFM0HwAAAAAAgE85/arNTsHouy2Tb55s8nns0TqjHw8zPxfJN092B8s3/Ns2AAAdCu98AAAAAAAAPkXzAQAAAAAA+JTLzYf8/HxlZmbafz558qQWLlyosWPHKiYmRg8//LAOHDjg9gYuXbqk/Px8JSQk6J577lFCQoLy8vJ06dIl+5zZs2erqKjI7bUBoDOhDgMAAMBfuXTPh8rKShUUFNhfeH766ad69NFH1bt3by1evFg9e/ZUYWGhkpKStGXLFt17770ub2DZsmV66623NH/+fA0fPlwffPCBcnNzVVtbq+eee06SlJGRoTlz5mjMmDHq14/PVAMwH+owAAAA/JlLzYcVK1Zo6tSp9hecO3bsUH19vbZt26bbbrtNkhQbG6upU6fqlVdecflF74ULF1RYWKinnnpKc+fOlSR961vfkiStXLlS6enp6t27t6KiojRy5EitW7dOS5YscfskAcDfUYcBAADgz5x+7KKyslKlpaWaPHmyfez2229XYmKi/QWvJHXt2lUDBw5UTU2Ny+FWq1UPPfSQHnzwQYfxwYMHS5LDWlOmTNG2bdtUX1/v8voA0BlQhwEAAODvnDYfdu7cqfDwcI0YMcI+lpCQoKeeesph3oULF/Tuu+8qMjLS5XCLxaLs7Gz7i9yr9u3bp6CgIA0cONA+FhcXp+bmZpWUlLi8PgB0BtRhAAAA+DunzYcDBw5o+PDhN5zT3NysrKwsNTU1KTk5uV0bKi4u1htvvKFHHnlEvXr1so+HhoYqIiJCZWVl7VofAPwNdRgAAAD+zmnzoaamRhaLpc3jly9f1tNPP609e/Zo8eLFGjZsmMeb2bt3r9LS0hQTE6P09PQWxy0Wi06fPu3x+gDgj6jDAAAA8HdOmw9Wq1WhoaGtHmtoaFBycrKKioqUlZWlmTNneryRTZs2aeHChRo9erTWr1+vbt26tZgTEhKixsZGjzMAwB9RhwEAAODvnH7bRZ8+fdTQ0NBivK6uTnPmzNGpU6f08ssva+LEiR5v4mc/+5k2b96syZMn64UXXlBwcHCr8xoaGtS3b1+PcwDAH1GHAQAA4O+cNh8sFovq6uocxpqampSUlKS6ujoVFBS49X3yX5WTk6PNmzcrKSlJP/7xjxUQENDm3NraWg0ZMsTjLADwR9RhAAAA+DunzYfY2FgVFhY6jK1du1YfffSRFixYoMDAQL333nv2Y926dVN0dLQkqaKiQsHBwW3eef3YsWNav369hg0bpoSEBB0+fNjheGRkpHr27Cnpy7cdV1VVtftGagDgb6jDAAAA8HdOmw/x8fHKzc1VRUWFhg4dKunLG5JJ0po1a7RmzRqH+QMGDFBxcbEkKTU1VRaLRVu2bGl17eLiYjU3N+vIkSOaMWNGi+Ovvfaa/V/z9u/fr6CgIMXFxbl+dgDQCVCHAQAA4O8CbDabzdmklJQUhYWFaenSpW4tXlNTo+zsbG3cuNHjDV6VlJSkyMhIZWZmuv/Ln51vd77buvcj36h8M5+72fM70rl7GXXYAzwXyTci38zn/pX87Bt8hMtXsp2/rAUAGMTpt11I0qJFi1RUVKQzZ864tXhOTo7GjRvn0cauV15eroqKCqWkpLR7LQDwR9RhAAAA+DOXmg/R0dFKTEzUqlWr3Fo8OTlZiYmJnuzLwfLly5WVlaX+/fu3ey0A8EfUYQAAAPgzlz52AQAAAAAA4CmX3vkAAAAAAADgKZoPAAAAAADAp2g+AAAAAAAAn6L5AAAAAAAAfIrmAwAAAAAA8CmaDwAAAAAAwKdoPgAAAAAAAJ+i+QAAAAAAAHyK5gMAAAAAAPApmg8AAAAAAMCnaD4AAAAAAACfCjR6Ax3FJ598opKSEpWVlen06dOyWq3q06ePwsPDNW7cOI0fP169evXqdNnkmzvfzOfeEfJxjdGPhZnzzXzu5Jv7uQcAuLkCbDabzehNGKm+vl55eXnavn27vvjiC0VERMhisSgkJEQNDQ2qra1VVVWVgoOD9dBDD2nevHnq16+f32eTb+58M597R8jHNUY/FmbON/O5k2/u5x4AwCA2EysqKrI98MADth/+8Ie23bt32y5evNjqvMbGRltRUZEtKSnJNmbMGNvu3bv9Opt8c+eb+dw7Qj6uMfqxMHO+mc+dfHM/9wAAxjF182H27Nm2o0ePuvU7R44csc2aNcuvs8k3d76Zz70j5OMaox8LM+eb+dzJN/dzDwBgHNN/7AIAAAAAAPgWN5z8P1euXFFNTY2sVqu6dOmiXr16KTw8XIGBvr9ERmZ3hHwYo7GxUTU1NRowYIB69uzZ4nhTU5OOHTum0aNHkw+fM7oOmT0fxjC6DhmZb/S5AwBuPtO/qjl8+LByc3P15z//WV988YXDseDgYN13331KTU3VPffc06myO0I+jHH58mUtW7ZMhYWFkqSgoCDNnDlTixYtUnBwsH3e8ePHNXPmTH344Yfkw2eMrkNmz4cxjK5DRuYbfe4AAOOYuvnwxz/+UfPnz9ewYcO0aNEiDRw4UD169JDNZlNTU5NOnjyp4uJizZo1S/n5+Ro7dmynyO4I+TDOhg0b9OabbyotLU2DBw9WSUmJNm3apCNHjmj9+vUKDQ0lHzeF0XXI7PkwjtF1yMh8o88dAGAcU9/zYfr06brzzju1evXqG8574okndPr0aW3fvr1TZHeE/GHDhrk1/8iRI+R7ycSJEzV9+nTNmzfPPlZcXKz09HTde++9+uUvf6nAwEAdPnxYDz30kNf/1cns+bjG6Dpk5nwz18COkG90HTIy3+hzBwAYx9TvfPjoo4+0aNEip/O+//3v64knnug02R0hf+3atUpPT1dQUJBmzZrl9fXJb1ttba2GDx/uMDZhwgStWLFCTz75pDIyMvTzn/+cfPic0XXIzPlmroEdId/oOmRkvtHnDgAwjqmbD7fddpsqKio0bty4G847fPiwbrnllk6T3RHy4+Li9Ktf/UqPPfaY+vXrp4cfftjrGeS37vbbb9eRI0d0//33O4zHx8frRz/6kZYvX67+/fvre9/7HvnwKaPrkJnzzVwDO0K+0XXIyHyjzx0AYBxTNx9mzpypl156SRcvXtSECRM0aNAg9ejRQ5J08eJFnTp1Sr/73e/0q1/9SgsWLOg02R0hX5JGjx6t+fPna/Xq1Zo6depN/5ynWfOnTp2q3Nxcde3aVd/5znf0jW98w34sMTFR/+///T+98sorevfdd8mHTxldh8yeb9Ya2BHyja5DRuYbfe4AAOOY+p4P0pc3Plq/fr2sVqt9LCAgQFcvS/fu3ZWcnKzU1NROld0R8iXp888/V1FRke6//36FhYX5LIf8ay5duqRly5Zp27Ztevjhh/XMM8+0mJOTk6Nf/vKXstlsXv+8rdnz4cjoOmT2fDPWwI6Qb3QdMjLf6HMHABjH9M0HSfr73/+uw4cPq7q6WlarVTabTT179tTgwYM1atQode/evVNmd4R8GKehoUFWq1Xh4eGtHj927JhKSkr0+OOPkw+fMroOmT0fxjG6DhmZb/S5AwBuPpoPAAAAAADAp7oYvQEAAAAAANC50XwAAAAAAAA+RfMBAAAAAAD4FM0HAAAAAADgUzQfAAAAAACAT9F8cMFHH32kxx57TPPmzdOrr75qmmzyzZ1v5nPvCPm4xujHwsz5Zj538s393AMAeB/NBxdcunRJH3/8sZ555hm9//77Onr0qCmyyTd3vpnPvSPk4xqjHwsz55v53Mk393MPAOB9ATabzWb0JgAAAAAAQOfFOx8AAAAAAIBPBRq9AaM1Nzdrz549+uMf/6gTJ07IarUqICBAvXr10qBBgxQbG6uEhAR16dL5+jQHDx7UK6+8olOnTumuu+7S3LlzFR0d7TDn6NGjWrhwofbs2eP1fDNfe8nY68+1N/a5j2t4LlIHjGJ0HTDz9Tf62gMAjNH5/kZzw7lz5/Qv//IvSktL0wcffKBbbrlF0dHRGjJkiHr37q333ntP6enpmj59us6dO2f0dr2qrKxMs2bN0smTJzVgwAD96U9/0g9+8AP95je/cZj3+eef69SpU17PN/O1l4y9/lx7Y5/7uIbnInXAKEbXATNff6OvPQDAOKZ+58MLL7ygTz/9VLt27VJERESrc44fP66UlBQtX75cK1as8Fp2VlaWy3MDAgL03HPPeS1bklavXq3vfve7ysnJUZcuXdTQ0KAlS5boueeek81m0yOPPOLVvK8y8tpL5r7+XHtjn/u4hucidcAVne3aS+a+/kZfewCAcUzdfCgtLdXSpUvb/ItfkiIjI5WWlqZly5Z5NfvChQvau3evQkJC1Ldv3xvODQgI8Gq2JFVWVmr+/Pn2t3N+7Wtf0+rVq/XUU0/ppz/9qW699VbFx8d7PfcqI6+9ZO7rz7U39rmPa3guUgfMeO0lc19/o689AMA4pm4+BAYGKigoyOm8Ll266PLly17N/sUvfqGXXnpJ//Ef/6G8vDxFRUV5dX1nQkJC1NTU5DAWEBCgF198UWfPntXTTz+tW2+9VV27dvVJvpHXXjL39efaG/vcxzU8F6kDZrz2krmvv9HXHgBgHFPf8yE2NlYrV67UiRMn2pzzt7/9TStXrlRsbKzX83/0ox8pJiZG2dnZXl/bmdGjRysvL09nz551GA8MDFRubq7uuOMO/du//Zv+9Kc/+STf6Gsvmff6c+2Nfe7jGp6L1AEzXnvJ3Nff6GsPADBOgM1msxm9CaOcP39ec+bMUWVlpSIjIzVo0CD16NFDAQEBslqtOnXqlKqqqjRgwABt2rRJt912m9f3cOLECT3zzDN65plndNddd3l9/bacOnVKs2bN0ieffKKkpCSlpaU5HD9z5owSExNVXV2tgIAAffjhh17N7wjXXjLn9efaG/vcxzU8F6kDZrz2krmvv9HXHgBgHFM3HyTpiy++0K5du/TnP/9Z1dXVamxslM1mc/iqq0mTJik4ONjorXrdhQsXtGPHDt1+++363ve+1+L4xYsXtWbNGhUXF6ukpMTr+Wa+9pKx159rb+xzH9fwXKQOGMXoOmDm62/0tQcAGMP0zQcAAAAAAOBbpr7nQ1ZWlj755BO3fufcuXNavHixX2eTb+58M597R8jHNUY/FmbON/O5k2/u5x4AwDimbj5YLBZNnDhRy5cv15EjR2449+jRo1q6dKn+8R//UXfeeafXsl988UWVl5ff1Ozr85cvX254/s2+9tfnm/H6c+2Nfe7jGp6L1AEzXvuv5pvt+ht97QEAxjH9xy4qKyu1cuVKlZaWKjw8XMOHD9cdd9yhkJAQNTY2qra2VgcPHtS5c+c0fvx4Pfnkk177Siojs8k3d76Zz70j5OMaox8LM+eb+dzJN/dzDwBgDNM3H66qrKzUzp07VVZWppqaGjU2Nqpv376yWCyKjY1VfHy8hgwZ0umyyTd3vpnPvSPk4xqjHwsz55v53Mk393MPAHBz0XwAAAAAAAA+Zep7PgAAAAAAAN+j+QAAAAAAAHyK5gMAAAAAAPApmg8AAAAAAMCnaD4AAAAAAACfovkAAAAAAAB86v8D7K+/OBKho44AAAAASUVORK5CYII=" - }, - "metadata": {} - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Now our generative model and environment are set up, and we can move on to Notebook 2, where we go through the core mechanics of how to perform inference and planning on this environment with this generative model." - ], - "metadata": {} + ] } ], "metadata": { "interpreter": { - "hash": "4144ffdb2ef81a5a74efd1d0bf9253d3fe81ec80475fd1008a839668d590b806" + "hash": "24ee14d9f6452059a99d44b6cbd71d1bb479b0539b0360a6a17428ecea9f0810" }, "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)" + "display_name": "Python 3.8.10 64-bit ('pymdp_env2': conda)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -596,9 +480,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" + "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/examples/gridworld_tutorial_2.ipynb b/examples/gridworld_tutorial_2.ipynb index b65c2937..51771f44 100644 --- a/examples/gridworld_tutorial_2.ipynb +++ b/examples/gridworld_tutorial_2.ipynb @@ -2,31 +2,33 @@ "cells": [ { "cell_type": "markdown", + "metadata": {}, "source": [ "# Tutorial Notebook 2. Inference and Planning\n", "\n", "\n", "In this notebook, we will continue on from the last notebook to build a fully fledged active inference agent capable of performing inference and planning using Active Inference in the simple grid-world environment. We will also begin to use some aspects of `pymdp`, although this will mostly be helpful functions for building and sampling from discrete distributions while we will implement the core functionality of the agent ourselves.\n" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "First, we simply start out by defining our generative model as we did last time." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Add `pymdp` module" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# This is needed (on my machine at least) due to weird python import issues\n", "import os\n", @@ -37,28 +39,20 @@ "print(path)\n", "module_path = str(path.parent) + '/'\n", "sys.path.append(module_path)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "/Users/conor/pymdp/examples\n" - ] - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Imports" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import numpy as np\n", "import seaborn as sns\n", @@ -69,28 +63,20 @@ "from pymdp.maths import spm_log_single as log_stable # @NOTE: we use the `spm_log_single` helper function from the `maths` sub-library of pymdp. This is a numerically stable version of np.log()\n", "from pymdp import control\n", "print(\"imports loaded\")" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "imports loaded\n" - ] - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Plotting" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "state_mapping = {0: (0,0), 1: (1,0), 2: (2,0), 3: (0,1), 4: (1,1), 5:(2,1), 6: (0,2), 7:(1,2), 8:(2,2)}\n", "\n", @@ -141,49 +127,35 @@ " fig.delaxes(axes.flatten()[5])\n", " plt.tight_layout()\n", " plt.show()" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Generative model\n", "\n", "Here, we setup our generative model which is the same as in the last notebook. This is formed of a likelihood distribution $P(o_t|s_t)$, denoted `A`, and a empirical prior (transition) distribution $P(s_t|s_{t-1},a_{t-1})$, denoted `B`.\n", "\n", "Since this was covered in more detail in the previous tutorial, we quickly skip over the details here\n" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# A matrix\n", "A = np.eye(9)\n", "plot_likelihood(A)" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:07:24.907646\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# construct B matrix\n", "\n", @@ -219,41 +191,27 @@ " B[ns, s, a] = 1\n", "\n", "plot_transition(B)" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:07:27.491855\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Create Environment Class" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "To make things simple we will parcel up the $A$ and $B$ matrices into a class which represents the environment. The environment has two functions `step` which when given an action will update the environment a single step and `reset` which resets the environment back to its initial condition. The API of our simple environment class is similar to the `Env` base class used by `pymdp`, although the `pymdp` version has many more features than we use here." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "class GridWorldEnv():\n", " \n", @@ -277,50 +235,41 @@ " return obs\n", " \n", "env = GridWorldEnv(A,B)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "B: (9, 9, 5)\n" - ] - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Inference" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Now that we have the generative model setup, we turn to the behaviour of the active inference agent itself. To recap, we assume that this agent receives observations from the environment and can emit actions. Moreover, we assume that this agent has some kind of goal or preferences over the state of the environment it wants to create, and will choose actions in order to increase the probability of observing itself in its preferred state. For the time being, we will not deal with the problem of action selection but only with inference.\n", "\n", "The agent receives observations $o_t$ from the environment but does not naturally know the environments true state $x_t$. Thus, the agent must *infer* this state by computing the posterior distribution $p(x_t | o_t)$. It can do this by Bayesian inference using Bayes rule but, as we discussed last time, explicitly computing Bayes rule is often intractable because the marginal likelihood requires the averaging over an infinite number of hypotheses. We therefore need some other way to compute or approximate this posterior. Active inference assumes that this posterior can be approximated through a family of methods called *variational inference* which only approximate the posterior, but are fast and computationally efficient." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Variational Inference\n" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Variational inference is a set of inference methods which can rapidly and efficiently compute *approximate* posteriors for Bayesian inference problems. The key idea behind variational inference is that instead of trying to compute the true posterior $p(x_t | o_t)$ which may be extremely complex, is that we instead optimize an *approximate posterior*. Specifically, we will define another distribution $q(x_t ; \\phi)$ which has some parameters $\\phi$ which we then optimize so as to make $q(x_t ; \\phi)$ as close as possible to the true distribution. Typically, we choose this $q$ distribution to be some simple distribution which is easy to work with mathematically. If the process works, then we can get the $q$ distribution very close to the true posterior, and as such get a good estimate of the posterior without ever explicitly computing it using Bayes rule. " - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Mathematically, we can do this by setting up an optimization problem. We have the true posterior $p(x_t | o_t)$, which is unknown, and we have our $q$ distribution which we do know. We then want to optimize the $q$ distribution to make it as *close as possible* to the true posterior $p(x_t | o_t)$. To do this, we first need a way to quantify *how close* two probability distributions are. The way we do this is by using a quantity known as the *Kullback-Leibler (KL) divergence*. This is a metric derived from information theory which lets us quantify the distance (in bits) of two distributions. The KL divergence between two distributions $q(x)$ and $p(x)$ is defined as,\n", "$$\n", @@ -329,21 +278,21 @@ "\\end{align}\n", "$$\n", "Mathematically it can be thought of as the average of the difference of the logarithms of the probabilities assigned by $q$ and $p$ to the states $x$. The KL divergence is smallest when $q(x) = p(x)$ when it is equal to 0, and can grow to be infinitely large which happens wherever $q(x)$ assigns a nonzero probability but $p(x)$ doesn't. In code, we can compute the KL divergence as:\n" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def KL_divergence(q,p):\n", " return np.sum(q * (log_stable(q) - log_stable(p)))" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Now that we know about the KL divergence, we can express our variational problem of making our approximate posterior $q(x_t ; \\varphi)$ as close as possible to the true posterior as simply minimizing the KL divergence between the two distributions. That is, we can define the optimal approximate distribution as,\n", "$$\n", @@ -382,18 +331,18 @@ "The free energy here is simply the divergence between the approximate posterior and the *generative model* of the agent. Since we know both the approximate posterior (as we defined it in the first place!) and the generative model, then both terms of this divergence are computable. We thus have our algorithm to approximate the posterior! Since the free energy is an upper bound, if we minimize the free energy, we also implicitly minimize the true divergence between the true and approximate posteriors, which will force the approximate posterior to be close to the true posterior and thus a good approximation! Moreover, since we can compute the free energy, we can actually perform this optimization! \n", "\n", "In many cases, we typically perform variational inference by taking the gradients of the free energy with respect to the variational parameteres $\\varphi$ and then doing gradient descent on the parameters $\\varphi$ that define $q(x_t ; \\varphi)$. However, when the distributions are discrete (i.e. Categorical distributions), the parameters of the approximate distribution are simply the probability values for each state (the elements of the vector $q(x)$. For some simple generative models (e.g. the grid-world described here), we can actually solve this optimization problem directly to obtain $q(x)$ in a single step, instead of as a gradient descent." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Directly solving variational inference in the case of a simple discrete model" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "To recap, remember that we have turned the problem of computing the posterior distribution $p(x_t | o_t)$ into that of minimizing the variational free energy: $\\mathcal{F} = KL[q(x_t) || p(o_t, x_t)]$ with respect to an approximate posterior distribution $q(x_t)$. From now on, we will leave out the variational parameters $\\varphi$ when referring to $q(x_t)$, since we are dealing with a single Categorical distribution $q(x_t)$ whose vector elements are identical to the variational parameters, i.e. $\\forall_{i} \\varphi_i = q(x_t = i)$.\n", "\n", @@ -447,21 +396,21 @@ "\n", "\n", "And for fun, we can explicitly compute it in code:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def compute_free_energy(q,A, B):\n", " return np.sum(q * (log_stable(q) - log_stable(A) - log_stable(B)))" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Then, all we need to do is take the derivative of the free energy with respect to the approximate posterior distribution $\\textbf{q}$ as follows,\n", "$$\n", @@ -479,40 +428,40 @@ "$$\n", "\n", "Where $\\sigma$ is a softmax function $\\sigma(x) = \\frac{e^x}{\\sum_x e^x}$ which ensures that the resulting probability distribution is normalized. This expression lets us compute the optimal approximate posterior instantly as a straightforward function of the current observation $o_t$, $\\textbf{A}$, and $\\textbf{B}$. We can thus quickly right the code for inference:" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def softmax(x):\n", " return np.exp(x) / np.sum(np.exp(x))\n", "\n", "def perform_inference(likelihood, prior):\n", " return softmax(log_stable(likelihood) + log_stable(prior))" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Note that the likelihood term is not the entire $\\textbf{A}$ matrix, but just the 'row' of the $\\textbf{A}$ matrix corresponding to the current observation, i.e. $P(o_t = o \\mid x_t)$. \n", "\n", "Inference for simple discrete state-space models like these is therefore very simple. All we need to do is have some initial set of beliefs $\\textbf{q}_0$ and then update them according to these rules for every observation we get, using the $\\textbf{A}$, $\\textbf{B}$, the past action $a_t$ and the past posterior $q(x_{t-1})$ to provide the likelihood and prior terms." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Planning through Active Inference" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "So far we just have an agent that can perform perform inference in the discrete state space, but inference by itself isn't really that useful. Instead what we really want to do is *planning*. That is, the agent needs to be able to figure out how to emit a series of actions which will take it to a certain goal state. A key part of Active Inference is that this process of planning, or more broadly action selection, can also be solved as a process of variational inference. This is why it is called *Active* Inference, after all. \n", "\n", @@ -586,67 +535,54 @@ " \n", "4.) Execute the sampled action to 'step forward' the environmental dynamics and get a new observation. Go back to step 1.\n", "\n" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "And that's it! We're done. We have the full algorithm to create an active inference agent. Now all we do is show how to translate this algorithm into code for our specific case." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Beliefs\n", "\n", "First we need to setup an initial belief distribution which we will then update according to the observations we will receive." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 66, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# setup initial prior beliefs -- uncertain -- completely unknown which state it is in\n", "Qs = np.ones(9) * 1/9\n", "plot_beliefs(Qs)" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:00.762893\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAARQElEQVR4nO3dYYxlZX3H8e/PXTcKSmiCmW53SaHJRrsxseJkQUnMRGxh0bh9Q8omQkJCtqSCYGsImjS1r3hDjJIQqAGsRAtRtMlGN0KjTFqSQncWLLquNNPVyspaMEYQMF23/vviHppxdpg5Ozsz98yz309yw577PM+e37mZ/XHnmXvvpKqQJLXrdeMOIElaXRa9JDXOopekxln0ktQ4i16SGrdx3AEWcs4559R55523pud8+eWXOfPMM9f0nEPOAcPJMpQcYJYh54DhZBlHjgMHDvysqt6y4GBVDe72rne9q9baI488subnXMhQclQNJ8tQclSZZSFDyVE1nCzjyAHM1Gt0qls3ktQ4i16SGmfRS1LjLHpJapxFL0mNs+glqXEWvSQ1zqKXpMZZ9JLUuNQAf/HI5ORkzczMLG9xsrJhFrPYY7eWOcAsQ84Bw8kylBywPrIMJUcPSQ5U1eRCYz6jl6TGWfSS1DiLXpIaZ9FLUuMseklqnEUvSY2z6CWpcRa9JDXOopekxln0ktQ4i16SGmfRS1LjLHpJapxFL0mNs+glqXEWvSQ1rlfRJ7ksydNJZpPcssD425L8a5L/SfLxk1krSVpdSxZ9kg3AHcBOYDuwO8n2edN+DnwUuG0ZayVJq6jPM/odwGxVHa6qY8ADwK65E6rquaraD/z6ZNdKklbXxh5ztgDPzDk+AlzY8+/vvTbJHmAPwMTEBNPT0z1P8dumlrVqeRbLOLVmKUbMcqKh5IDhZBlKDlgfWabWNMXij8mpWPKXgye5Ari0qq7tjq8CdlTVDQvM/RTwUlXddrJr5/KXgy+DWYabA4aTZSg5YH1kGUqOHk71l4MfAc6dc7wVeLbnuU9lrSRpBfQp+v3AtiTnJ9kEXAns7fn3n8paSdIKWHKPvqqOJ7keeAjYANxbVQeTXNeN35Xkd4EZ4CzgN0luArZX1YsLrV2la5EkLWDJPfpxcI9+Gcwy3BwwnCxDyQHrI8tQcvRwqnv0kqR1zKKXpMZZ9JLUOItekhpn0UtS4yx6SWqcRS9JjbPoJalxFr0kNc6il6TGWfSS1DiLXpIaZ9FLUuMseklqnEUvSY2z6CWpcRa9JDXOopekxln0ktQ4i16SGmfRS1LjLHpJapxFL0mNs+glqXEWvSQ1zqKXpMZZ9JLUOItekhpn0UtS43oVfZLLkjydZDbJLQuMJ8nt3fhTSS6YM/axJAeTfC/J/UnesJIXIEla3JJFn2QDcAewE9gO7E6yfd60ncC27rYHuLNbuwX4KDBZVW8HNgBXrlh6SdKS+jyj3wHMVtXhqjoGPADsmjdnF3BfjTwGnJ1kcze2EXhjko3AGcCzK5RdktTDxh5ztgDPzDk+AlzYY86WqppJchvwY+BXwMNV9fBCJ0myh9F3A0xMTDA9Pd3rAuabWtaq5Vks49SapRgxy4mGkgOGk2UoOWB9ZJla0xSLPyanIlW1+ITkCuDSqrq2O74K2FFVN8yZ8w3g1qp6tDv+FnAzcBj4KvBnwC+ArwAPVtUXFzvn5ORkzczMLPOKsrx1y7HYY7eWOcAsQ84Bw8kylBywPrIMJUcPSQ5U1eRCY322bo4A58453sqJ2y+vNef9wA+r6vmq+jXwNeA9fYNLkk5dn6LfD2xLcn6STYx+mLp33py9wNXdq28uAl6oqqOMtmwuSnJGkgCXAIdWML8kaQlL7tFX1fEk1wMPMXrVzL1VdTDJdd34XcA+4HJgFngFuKYbezzJg8ATwHHgSeBzq3EhkqSFLblHPw7u0S+DWYabA4aTZSg5YH1kGUqOHk51j16StI5Z9JLUOItekhpn0UtS4yx6SWqcRS9JjbPoJalxFr0kNc6il6TGWfSS1DiLXpIaZ9FLUuMseklqnEUvSY2z6CWpcRa9JDXOopekxln0ktQ4i16SGmfRS1LjLHpJapxFL0mNs+glqXEWvSQ1zqKXpMZZ9JLUOItekhpn0UtS43oVfZLLkjydZDbJLQuMJ8nt3fhTSS6YM3Z2kgeT/CDJoSTvXskLkCQtbsmiT7IBuAPYCWwHdifZPm/aTmBbd9sD3Dln7LPAN6vqbcA7gEMrkFuS1FOfZ/Q7gNmqOlxVx4AHgF3z5uwC7quRx4Czk2xOchbwXuAegKo6VlW/WLn4kqSlbOwxZwvwzJzjI8CFPeZsAY4DzwOfT/IO4ABwY1W9PP8kSfYw+m6AiYkJpqene17Cb5ta1qrlWSzj1JqlGDHLiYaSA4aTZSg5YH1kmVrTFIs/JqciVbX4hOQK4NKqurY7vgrYUVU3zJnzDeDWqnq0O/4WcDMQ4DHg4qp6PMlngRer6q8XO+fk5GTNzMws84qyvHXLsdhjt5Y5wCxDzgHDyTKUHLA+sgwlRw9JDlTV5EJjfbZujgDnzjneCjzbc84R4EhVPd7d/yBwAZKkNdOn6PcD25Kcn2QTcCWwd96cvcDV3atvLgJeqKqjVfVT4Jkkb+3mXQJ8f6XCS5KWtuQefVUdT3I98BCwAbi3qg4mua4bvwvYB1wOzAKvANfM+StuAL7U/U/i8LwxSdIqW3KPfhzco18Gsww3Bwwny1BywPrIMpQcPZzqHr0kaR2z6CWpcRa9JDXOopekxln0ktQ4i16SGmfRS1LjLHpJapxFL0mNs+glqXEWvSQ1zqKXpMZZ9JLUOItekhpn0UtS4yx6SWqcRS9JjbPoJalxFr0kNc6il6TGWfSS1DiLXpIaZ9FLUuMseklqnEUvSY2z6CWpcRa9JDXOopekxvUq+iSXJXk6yWySWxYYT5Lbu/Gnklwwb3xDkieTfH2lgkuS+lmy6JNsAO4AdgLbgd1Jts+bthPY1t32AHfOG78ROHTKaSVJJ63PM/odwGxVHa6qY8ADwK55c3YB99XIY8DZSTYDJNkKfAC4ewVzS5J62thjzhbgmTnHR4ALe8zZAhwFPgPcDLx5sZMk2cPouwEmJiaYnp7uEe1EU8tatTyLZZxasxQjZjnRUHLAcLIMJQesjyxTa5pi8cfkVKSqFp+QXAFcWlXXdsdXATuq6oY5c74B3FpVj3bH32JU7puBy6vqL5JMAR+vqg8uFWpycrJmZmaWeUVZ3rrlWOyxW8scYJYh54DhZBlKDlgfWYaSo4ckB6pqcqGxPls3R4Bz5xxvBZ7tOedi4ENJfsRoy+d9Sb7YM7ckaQX0Kfr9wLYk5yfZBFwJ7J03Zy9wdffqm4uAF6rqaFV9oqq2VtV53bpvV9WHV/ICJEmLW3KPvqqOJ7keeAjYANxbVQeTXNeN3wXsAy4HZoFXgGtWL7Ik6WQsuUc/Du7RL4NZhpsDhpNlKDlgfWQZSo4eTnWPXpK0jln0ktQ4i16SGmfRS1LjLHpJapxFL0mNs+glqXEWvSQ1zqKXpMZZ9JLUOItekhpn0UtS4yx6SWqcRS9JjbPoJalxFr0kNc6il6TGWfSS1DiLXpIaZ9FLUuMseklqnEUvSY2z6CWpcRa9JDXOopekxln0ktQ4i16SGmfRS1LjehV9ksuSPJ1kNsktC4wnye3d+FNJLujuPzfJI0kOJTmY5MaVvgBJ0uKWLPokG4A7gJ3AdmB3ku3zpu0EtnW3PcCd3f3Hgb+qqj8ELgI+ssBaSdIq6vOMfgcwW1WHq+oY8ACwa96cXcB9NfIYcHaSzVV1tKqeAKiqXwKHgC0rmF+StIQ+Rb8FeGbO8RFOLOsl5yQ5D3gn8PhJp5QkLdvGHnOywH11MnOSvAn4KnBTVb244EmSPYy2fZiYmGB6erpHtBNNLWvV8iyWcWrNUoyY5URDyQHDyTKUHLA+skytaYrFH5NTkar5nT1vQvJu4FNVdWl3/AmAqrp1zpy/A6ar6v7u+GlgqqqOJnk98HXgoar6dJ9Qk5OTNTMzs5zrgSz0/5xVsthjt5Y5wCxDzgHDyTKUHLA+sgwlRw9JDlTV5EJjfbZu9gPbkpyfZBNwJbB33py9wNXdq28uAl7oSj7APcChviUvSVpZS27dVNXxJNcDDwEbgHur6mCS67rxu4B9wOXALPAKcE23/GLgKuC7Sb7T3ffJqtq3olchSXpNffbo6Yp537z77prz5wI+ssC6R1l4/16StEZ8Z6wkNc6il6TGWfSS1DiLXpIaZ9FLUuMseklqnEUvSY2z6CWpcRa9JDXOopekxln0ktQ4i16SGmfRS1LjLHpJapxFL0mNs+glqXEWvSQ1zqKXpMZZ9JLUOItekhpn0UtS4yx6SWqcRS9JjbPoJalxFr0kNc6il6TGWfSS1DiLXpIaZ9FLUuN6FX2Sy5I8nWQ2yS0LjCfJ7d34U0ku6LtWkrS6liz6JBuAO4CdwHZgd5Lt86btBLZ1tz3AnSexVpK0ivo8o98BzFbV4ao6BjwA7Jo3ZxdwX408BpydZHPPtZKkVbSxx5wtwDNzjo8AF/aYs6XnWgCS7GH03QDAS0me7pFtJZ0D/OykViTDyAGtZxlKDljvWYaSA1rPMo4cv/9aA32KfqEzV885fdaO7qz6HPC5HnlWRZKZqpoc1/mHlgOGk2UoOcAsQ84Bw8kylByv6lP0R4Bz5xxvBZ7tOWdTj7WSpFXUZ49+P7AtyflJNgFXAnvnzdkLXN29+uYi4IWqOtpzrSRpFS35jL6qjie5HngI2ADcW1UHk1zXjd8F7AMuB2aBV4BrFlu7Kldy6sa2bTTPUHLAcLIMJQeYZSFDyQHDyTKUHACkasEtc0lSI3xnrCQ1zqKXpMad9kU/lI9oSHJvkueSfG9cGboc5yZ5JMmhJAeT3DjGLG9I8m9J/r3L8rfjytLl2ZDkySRfH3OOHyX5bpLvJJkZc5azkzyY5Afd18y7x5Dhrd1j8ertxSQ3rXWOOXk+1n29fi/J/UneMK4s/5/pdN6j7z6i4T+AP2b0EtH9wO6q+v4YsrwXeInRO4zfvtbnn5NjM7C5qp5I8mbgAPCnY3pMApxZVS8leT3wKHBj9+7rNZfkL4FJ4Kyq+uA4MnQ5fgRMVtXJvyFn5bN8AfiXqrq7e2XdGVX1izHm2QD8BLiwqv5rDOffwujrdHtV/SrJl4F9VfX3a51lrtP9Gf1gPqKhqv4Z+Pk4zj0vx9GqeqL78y+BQ4ze4TyOLFVVL3WHr+9uY3lmkmQr8AHg7nGcf4iSnAW8F7gHoKqOjbPkO5cA/zmOkp9jI/DGJBuBMxjAe4dO96J/rY9uEJDkPOCdwONjzLAhyXeA54B/qqpxZfkMcDPwmzGdf64CHk5yoPvokHH5A+B54PPdltbdSc4cYx4YvVfn/nGdvKp+AtwG/Bg4yug9RQ+PK8+rTvei7/0RDaebJG8CvgrcVFUvjitHVf1vVf0Ro3dV70iy5ttaST4IPFdVB9b63K/h4qq6gNGnwn6k2/Ybh43ABcCdVfVO4GVgnD/n2gR8CPjKGDP8DqNdgfOB3wPOTPLhceV51ele9H0+3uG00+2HfxX4UlV9bdx5ALotgWngsjGc/mLgQ93e+APA+5J8cQw5AKiqZ7v/Pgf8I6MtyHE4AhyZ813Wg4yKf1x2Ak9U1X+PMcP7gR9W1fNV9Wvga8B7xpgHsOj9iIZ5uh+A3gMcqqpPjznLW5Kc3f35jYz+Ef1grXNU1SeqamtVncfoa+TbVTWWZ2lJzux+SE63TfInwFheqVVVPwWeSfLW7q5LgDX/of0cuxnjtk3nx8BFSc7o/i1dwujnXGPV50PNmjWkj2hIcj8wBZyT5AjwN1V1zxiiXAxcBXy32xsH+GRV7RtDls3AF7pXUrwO+HJVjfWljQMwAfzjqEPYCPxDVX1zjHluAL7UPVE6TPfxJ2styRmMXj335+M4/6uq6vEkDwJPAMeBJxnAxyGc1i+vlKTTwem+dSNJzbPoJalxFr0kNc6il6TGWfSS1DiLXpIaZ9FLUuP+D+wgn4wfpayHAAAAAElFTkSuQmCC" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Preferences" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Now we have to encode the agent's preferences, so that it can learn to go to its reward state. In the current context, the agent wants (i.e. expects) to be in the reward location 7." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# C matrix -- desires\n", "\n", @@ -658,58 +594,36 @@ "C[REWARD_LOCATION] = 1. \n", "print(C)\n", "plot_beliefs(C)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "(1, 2)\n", - "[0. 0. 0. 0. 0. 0. 0. 1. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:20:21.372155\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAQCklEQVR4nO3df4xlZ13H8ffHXRpop1hCcVK71da4QjYEpLO2RRR3qOAuEOofbWzRJTZp1iYsAY2R4h+i4R8N/gpY2JBtLUToBErBWjYUg1ORINjdAqVLKVkLlqXVgig4xaQufP1jLsllmDv3bnvnnsOz71dy0jlznpzns3NnP3P2mXtOU1VIkn74/UjXASRJ02GhS1IjLHRJaoSFLkmNsNAlqRFbu5r47LPPrvPPP3+mcz766KOcccYZM51zlL5k6UsOMEufc0B/svQlB3ST5ciRI1+vqmese7CqOtkWFhZq1paXl2c+5yh9ydKXHFVmWU9fclT1J0tfclR1kwU4XCN61SUXSWqEhS5JjbDQJakRFrokNcJCl6RGWOiS1IixhZ7kxiSPJLl3xPEkeUuSY0nuSXLh9GNKksaZ5Ar9JmD3Bsf3ANsH2z7g7U88liTpZI0t9Kr6GPCNDYZcBrxr8J73TwJnJTlnWgElSZNJTfA/uEhyPnB7VT17nWO3A39cVR8f7H8UeH1VHV5n7D5Wr+KZn59fWFpaemLpT9LKygpzc3MznXOUvmTpSw4wS59zwOZk2bW4ONXzbeTO5eWpn7OL12dxcfFIVe1c9+CoW0iHN+B84N4Rxz4E/MLQ/keBhXHn9Nb/5a4jVFV/clSZZT19yVG1SVlgdtsmaPHW/+PAeUP724CHpnBeSdJJmEah3wa8avBul0uAb1bVw1M4ryTpJIx9fG6Sm4FdwNlJjgNvBJ4EUFUHgEPAS4FjwLeBqzcrrCRptLGFXlVXjTlewKunlkiS9Lh4p6gkNcJCl6RGWOiS1AgLXZIaYaFLUiMsdElqhIUuSY2w0CWpERa6JDXCQpekRljoktQIC12SGmGhS1IjLHRJaoSFLkmNsNAlqREWuiQ1wkKXpEZY6JLUCAtdkhphoUtSIyx0SWqEhS5JjbDQJakRFrokNcJCl6RGWOiS1AgLXZIaYaFLUiMsdElqhIUuSY2w0CWpERMVepLdSe5PcizJdesc/9Ekf5fks0mOJrl6+lElSRsZW+hJtgDXA3uAHcBVSXasGfZq4PNV9VxgF/BnSU6bclZJ0gYmuUK/CDhWVQ9U1WPAEnDZmjEFnJkkwBzwDeDEVJNKkjaUqtp4QHI5sLuqrhns7wUurqr9Q2POBG4DngWcCfxaVX1onXPtA/YBzM/PLywtLU3rzzGRlZUV5ubmZjrnKH3J0pccYJY+54DNybJrcXGq59vIncvLUz9nF6/P4uLikaraue7BqtpwA64ADg7t7wXeumbM5cBfAAF+GvgS8NSNzruwsFCztry8PPM5R+lLlr7kqDLLevqSo2qTssDstk3QxesDHK4RvTrJkstx4Lyh/W3AQ2vGXA3cOpjv2KDQnzXRjxtJ0lRMUuh3AduTXDD4ReeVrC6vDHsQuBQgyTzwTOCBaQaVJG1s67gBVXUiyX7gDmALcGNVHU1y7eD4AeBNwE1JPsfqssvrq+rrm5hbkrTG2EIHqKpDwKE1nzsw9PFDwEumG02SdDK8U1SSGmGhS1IjLHRJaoSFLkmNsNAlqREWuiQ1wkKXpEZY6JLUCAtdkhphoUtSIyx0SWqEhS5JjbDQJakRFrokNcJCl6RGWOiS1AgLXZIaYaFLUiMsdElqhIUuSY2w0CWpERa6JDXCQpekRljoktQIC12SGmGhS1IjLHRJaoSFLkmNsNAlqREWuiQ1wkKXpEZY6JLUiIkKPcnuJPcnOZbkuhFjdiX5TJKjSf5xujElSeNsHTcgyRbgeuDFwHHgriS3VdXnh8acBbwN2F1VDyb5sU3KK0kaYZIr9IuAY1X1QFU9BiwBl60Z80rg1qp6EKCqHpluTEnSOJMU+rnAV4b2jw8+N+xngKcluTPJkSSvmlZASdJkUlUbD0iuAH6lqq4Z7O8FLqqq1wyN+StgJ3Ap8BTgn4GXVdUX15xrH7APYH5+fmFpaWmKf5TxVlZWmJubm+mco/QlS19ygFn6nAM2J8uuxcWpnm8jdy4vT/2cXbw+i4uLR6pq57oHq2rDDXg+cMfQ/huAN6wZcx3wh0P7NwBXbHTehYWFmrXl5eWZzzlKX7L0JUeVWdbTlxxVm5QFZrdtgi5eH+BwjejVSZZc7gK2J7kgyWnAlcBta8b8LfCLSbYmOR24GLjv5H7uSJKeiLHvcqmqE0n2A3cAW4Abq+pokmsHxw9U1X1JPgzcA3wXOFhV925mcEnS9xtb6ABVdQg4tOZzB9bsvxl48/SiSZJOhneKSlIjLHRJaoSFLkmNsNAlqREWuiQ1wkKXpEZY6JLUCAtdkhphoUtSIyx0SWqEhS5JjbDQJakRFrokNcJCl6RGWOiS1AgLXZIaYaFLUiMsdElqhIUuSY2w0CWpERa6JDXCQpekRljoktQIC12SGmGhS1IjLHRJaoSFLkmNsNAlqREWuiQ1wkKXpEZY6JLUCAtdkhphoUtSIyYq9CS7k9yf5FiS6zYY93NJvpPk8ulFlCRNYmyhJ9kCXA/sAXYAVyXZMWLcnwB3TDukJGm8Sa7QLwKOVdUDVfUYsARcts641wDvBx6ZYj5J0oRSVRsPWF0+2V1V1wz29wIXV9X+oTHnAu8BXgTcANxeVbesc659wD6A+fn5haWlpWn9OSaysrLC3NzcTOccpS9Z+pIDzNLnHLA5WXYtLk71fBu5c3l56ufs4vVZXFw8UlU71z1YVRtuwBXAwaH9vcBb14x5H3DJ4OObgMvHnXdhYaFmbXl5eeZzjtKXLH3JUWWW9fQlR9UmZYHZbZugi9cHOFwjenXrBD8QjgPnDe1vAx5aM2YnsJQE4GzgpUlOVNUHJzi/JGkKJin0u4DtSS4AvgpcCbxyeEBVXfC9j5PcxOqSywenF1OSNM7YQq+qE0n2s/rulS3AjVV1NMm1g+MHNjmjJGkCk1yhU1WHgENrPrdukVfVbz7xWJKkk+WdopLUCAtdkhphoUtSIyx0SWqEhS5JjbDQJakRFrokNcJCl6RGWOiS1AgLXZIaYaFLUiMsdElqhIUuSY2w0CWpERa6JDXCQpekRljoktQIC12SGmGhS1IjLHRJaoSFLkmNsNAlqREWuiQ1wkKXpEZY6JLUCAtdkhphoUtSIyx0SWqEhS5JjbDQJakRFrokNcJCl6RGTFToSXYnuT/JsSTXrXP815PcM9g+keS5048qSdrI2EJPsgW4HtgD7ACuSrJjzbAvAb9UVc8B3gS8Y9pBJUkbm+QK/SLgWFU9UFWPAUvAZcMDquoTVfVfg91PAtumG1OSNE6qauMByeXA7qq6ZrC/F7i4qvaPGP+7wLO+N37NsX3APoD5+fmFpaWlJxj/5KysrDA3NzfTOUfpS5a+5ACz9DkHbE6WXYuLUz3fRu5cXp76Obt4fRYXF49U1c51D1bVhhtwBXBwaH8v8NYRYxeB+4CnjzvvwsJCzdry8vLM5xylL1n6kqPKLOvpS46qTcoCs9s2QRevD3C4RvTq1gl+IBwHzhva3wY8tHZQkucAB4E9VfWfk/60kSRNxyRr6HcB25NckOQ04ErgtuEBSX4CuBXYW1VfnH5MSdI4Y6/Qq+pEkv3AHcAW4MaqOprk2sHxA8AfAE8H3pYE4ESNWuORJG2KSZZcqKpDwKE1nzsw9PE1wA/8ElSSNDveKSpJjbDQJakRFrokNcJCl6RGWOiS1AgLXZIaYaFLUiMsdElqhIUuSY2w0CWpERa6JDXCQpekRljoktQIC12SGmGhS1IjLHRJaoSFLkmNsNAlqREWuiQ1wkKXpEZY6JLUCAtdkhphoUtSIyx0SWqEhS5JjbDQJakRFrokNcJCl6RGWOiS1AgLXZIaYaFLUiMsdElqhIUuSY2YqNCT7E5yf5JjSa5b53iSvGVw/J4kF04/qiRpI2MLPckW4HpgD7ADuCrJjjXD9gDbB9s+4O1TzilJGmOSK/SLgGNV9UBVPQYsAZetGXMZ8K5a9UngrCTnTDmrJGkDWycYcy7wlaH948DFE4w5F3h4eFCSfaxewQOsJLn/pNI+cWcDX5/xnKP0JUtfcoBZ1tOXHNCfLI8vRzL9JN18TX5y1IFJCn29r0I9jjFU1TuAd0ww56ZIcriqdnY1/7C+ZOlLDjBLn3NAf7L0JQf0KwtMtuRyHDhvaH8b8NDjGCNJ2kSTFPpdwPYkFyQ5DbgSuG3NmNuAVw3e7XIJ8M2qenjtiSRJm2fskktVnUiyH7gD2ALcWFVHk1w7OH4AOAS8FDgGfBu4evMiPyGdLfesoy9Z+pIDzLKevuSA/mTpSw7oVxZS9QNL3ZKkH0LeKSpJjbDQJakRp0yhj3t8wQxz3JjkkST3dpVhkOO8JMtJ7ktyNMlrO8zy5CT/kuSzgyx/1FWWQZ4tST6d5PaOc3w5yeeSfCbJ4Q5znJXkliRfGHy/PL+jHM8cfC2+t30ryes6yvLbg+/Ve5PcnOTJXeRY65RYQx88vuCLwItZfYvlXcBVVfX5DrK8EFhh9c7aZ896/qEc5wDnVNXdSc4EjgC/2tHXJMAZVbWS5EnAx4HXDu46nrkkvwPsBJ5aVS/vIsMgx5eBnVXV6c08Sd4J/FNVHRy80+30qvrvjjNtAb4KXFxV/zbjuc9l9Xt0R1X9b5L3Aoeq6qZZ5ljPqXKFPsnjC2aiqj4GfKOLudfkeLiq7h58/D/Afaze3dtFlqqqlcHukwZbJ1caSbYBLwMOdjF/3yR5KvBC4AaAqnqs6zIfuBT411mX+ZCtwFOSbAVOpyf33ZwqhT7q0QQCkpwPPA/4VIcZtiT5DPAI8PdV1VWWvwR+D/huR/MPK+AjSY4MHpvRhZ8Cvgb89WAZ6mCSMzrKMuxK4OYuJq6qrwJ/CjzI6uNNvllVH+kiy1qnSqFP9GiCU1GSOeD9wOuq6ltd5aiq71TVz7J6l/FFSWa+HJXk5cAjVXVk1nOP8IKqupDVp5m+erBcN2tbgQuBt1fV84BHgc5+BwUwWPZ5BfC+juZ/Gqv/wr8A+HHgjCS/0UWWtU6VQvfRBOsYrFe/H3h3Vd3adR6AwT/n7wR2dzD9C4BXDNaul4AXJfmbDnIAUFUPDf77CPABVpcOZ+04cHzoX0y3sFrwXdoD3F1V/9HR/L8MfKmqvlZV/wfcCvx8R1m+z6lS6JM8vuCUMvhF5A3AfVX15x1neUaSswYfP4XVvzBfmHWOqnpDVW2rqvNZ/R75h6rq5MoryRmDX1YzWOJ4CTDzd0ZV1b8DX0nyzMGnLgVm/ovzNa6io+WWgQeBS5KcPvh7dCmrv4Pq3CRPW/yhN+rxBV1kSXIzsAs4O8lx4I1VdUMHUV4A7AU+N1i7Bvj9qjrUQZZzgHcO3rnwI8B7q6rTtwz2wDzwgdW+YCvwnqr6cEdZXgO8e3Ax9AAdPtojyemsvlvtt7rKUFWfSnILcDdwAvg0PXkEwCnxtkVJOhWcKksuktQ8C12SGmGhS1IjLHRJaoSFLkmNsNAlqREWuiQ14v8Bf1dvrlL+/osAAAAASUVORK5CYII=" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The C matrix is a 1x9 matrix, where each value represents the preference to occupy a given state. We will create a one-hot C matrix, so that the agent only has a preference to be in state 7. " - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Implementing the Active Inference Agent" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Evaluate policy \n", "\n", "This helper function we evaluate the negative expected free energy for a given policy $-\\mathcal{G}(\\pi)$. To do this we need to calculate the cumulative expected free energy for that policy. All that entails is looping through the timesteps of the policy, simulate what the environment would do, using our generative model, evolving posterior beliefs and the actions entailed by the policy, and then compute the expected free energy of our (policy-dependent) expectations about the hidden states and observations.\n" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 63, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def evaluate_policy(policy, Qs, A, B, C):\n", " # initialize expected free energy at 0\n", @@ -741,22 +655,22 @@ " G += (divergence + uncertainty)\n", "\n", " return -G" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Infer action\n", "\n", "This helper function will infer the most likely action. Specifically, it computes steps 3.1 to 3.5 in the active inference algorithm. First, it constructs all possible policies for a given policy length and set of actions. Then it loops through every possible policy and computes the expected free energy of that policy using our previous function, and then computing the policy distribution $q(\\pi)$ using the softmax over the expected free energies." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 64, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def infer_action(Qs, A, B, C, n_actions, policies):\n", " \n", @@ -787,27 +701,27 @@ " u = utils.sample(Qu)\n", "\n", " return u" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Main loop" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Here we simply implement the main loop of the active inference agent interacting with the environment. Specifically, this essentially implements steps 1-5 of the MDP \"program\" we discussed in notebook 1. Specifically, for each timestep, the agent infers an action, it emits that action to the environment, the environment is updated and returns an observation to the agent. The agent then infers the new state of the environment given that observation." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 67, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "# number of time steps\n", "T = 10\n", @@ -841,227 +755,27 @@ " \n", " print(Qs.round(3))\n", " plot_beliefs(Qs, \"Beliefs (Qs) at time {}\".format(t))" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 1. 0. 0. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:04.550216\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 0. 0. 0. 1.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:04.782246\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 0. 0. 1. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:05.009092\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 0. 0. 1. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:05.236114\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 0. 0. 1. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:05.473463\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 0. 0. 1. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:05.698853\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 0. 0. 1. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:05.999808\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 0. 0. 1. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:06.238886\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 0. 0. 1. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:06.522098\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0. 0. 0. 0. 0. 0. 0. 1. 0.]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-16T16:22:06.757302\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "And that's it! In the last two notebooks, we have implemented a basic active inference agent which can successfully navigate around a 3x3 gridworld using active inference. Moreover, we have implemented this all from scratch using mostly basic numpy functions and not using much of the functionality of `pymdp`. \n", "\n", "Hopefully after going through this you now understand roughly what active inference is and how it works, as well as ideally have some intuitions about how inference as well as policy selection work \"under the hood\", as well as learnt a lot about Bayesian and specifically variational inference. In the next notebook, we will focus more on the `pymdp` library itself and demonstrate how `pymdp` provides a useful set of abstractions that allows us to easily create active inference agents, as well as perform inference and policy selection in considerably more complex environments than the one described here.\n", "\n", "We will discuss the high level structure of the library and show how its possible to replicate these notebooks in a much smaller amount of code using the `pymdp` abstractions." - ], - "metadata": {} + ] } ], "metadata": { + "interpreter": { + "hash": "24ee14d9f6452059a99d44b6cbd71d1bb479b0539b0360a6a17428ecea9f0810" + }, "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)" + "display_name": "Python 3.8.10 64-bit ('pymdp_env2': conda)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -1073,12 +787,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" - }, - "interpreter": { - "hash": "4144ffdb2ef81a5a74efd1d0bf9253d3fe81ec80475fd1008a839668d590b806" + "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/examples/opti_model_v3_rjp.py b/examples/opti_model_v3_rjp.py new file mode 100644 index 00000000..7746d730 --- /dev/null +++ b/examples/opti_model_v3_rjp.py @@ -0,0 +1,196 @@ +# -*- coding: utf-8 -*- +"""opti_model_v3_RJP.ipynb + +Automatically generated by Colaboratory. + +Original file is located at + https://colab.research.google.com/drive/1j-s5mT8vGxBYytUq9wQ6-yDVpJfeDXf6 + +# OPTI Generative Model + +## Setup +""" + +# %% Imports + +import os +import sys +import pathlib + +path = pathlib.Path(os.getcwd()) +module_path = str(path.parent) + '/' +sys.path.append(module_path) + +import numpy as np +import pymdp +import copy +from pymdp import utils +from pymdp.utils import obj_array +from pymdp.agent import Agent + +# %% +# States +states = {'person_type': [ + 'child', + 'adult'], + + 'action_states': [ + 'rest_close', + 'rest_medium', + 'rest_far', + 'wave_smile_close', + 'wave_smile_medium', + 'wave_smile_far', + 'spin_close', + 'spin_medium', + 'spin_far', + 'dance_close', + 'dance_medium', + 'dance_far'] + } + +# Observations +observations = {'action_outcomes': states['action_states'], + 'movement': ['toward_slow', 'toward_fast', 'stay', 'away_slow', 'away_fast'], + 'distance_from_target': ['close', 'medium', 'far'], + 'facial_expression': ['happy', 'not_happy'], + 'height': ['short', 'tall'] + } + +num_states = [ + len(states[key]) for key in states +] + +num_observations = [ + len(observations[key]) for key in observations +] + +num_factors = len(num_states) +num_modalities = len(num_observations) + +A = utils.obj_array_zeros([ [no, num_states[0], num_states[1]] for no in num_observations]) + +# Action outcomes +for idx in range(num_states[1]): + A[0][idx,:,idx] = np.ones(num_states[0]) + +# Movement +for idx in [0,3,6,9]: + A[1][:,:,idx] = [[0, 0], [0, 0], [0.2, 0.1], [0.4, 0.4], [0.4, 0.5]] + +for idx in [1,2]: + A[1][:,:,idx] = [[0.18, 0.17], [0.17, 0.18], [0.3, 0.3], [0.18, 0.17], [0.17, 0.18]] + +for idx in [4,7,10]: + A[1][:,:,idx] = [[0.05, 0.1], [0.05, 0.1], [0.8, 0.6], [0.05, 0.1], [0.05, 0.1]] + +for idx in [5,8,11]: + A[1][:,:,idx] = [[0.3, 0.2], [0.4, 0.35], [0.1, 0.15], [0.1, 0.15], [0.1, 0.15]] + +# Distance from target +for idx in [0,3,6,9]: + A[2][0,:,idx] = np.ones(num_states[0]) + +for idx in [1,4,7,10]: + A[2][1,:,idx] = np.ones(num_states[0]) + +for idx in [2,5,8,11]: + A[2][2,:,idx] = np.ones(num_states[0]) + +# Facial expression +for idx in range(2): + A[3][:,:,idx] = [[0.5, 0.5], [0.5, 0.5]] + +for idx in range(2,11): + A[3][:,:,idx] = [[0.8, 0.9], [0.2, 0.1]] + +# Height +for idx in range(11): + A[4][:,:,idx] = np.eye(len(A[4])) + + +"""## B matrix""" + +# setting up empty (w zeros) B matrix + +num_actions = [2, 4] +B = utils.obj_array_zeros( [ [ns, ns, num_actions[f]] for f, ns in enumerate(num_states)]) + +# Transition matrix for person_type +for idx in range(num_states[0]): + B[0][idx,idx,:] = 1 + +# Transition matrices for actions and directions +# Rest at medium +B[1][1,:,0] = 1 + +# Wave_Smile at medium +B[1][4,:,1] = 1 + +# Spin at medium +B[1][7,:,2] = 1 + +# Dance at medium +B[1][10,:,3] = 1 + +C = utils.obj_array_zeros( [no for no in num_observations]) + +C[1] = np.array([0, 0, 10, -2, -3]) +C[2] = np.array([-2, 0, -5]) +C[3] = np.array([5, -10]) + +D = utils.obj_array_uniform(num_states) +D[1] = np.eye(num_states[1])[1] + +num_controls = [2, 4] +policies = pymdp.control.construct_policies(num_states, num_controls, policy_len=1) +agent = Agent(A = A, B = B, C = C, policies = policies) + +B_gp = copy.deepcopy(B) +A_gp = copy.deepcopy(A) +# %% + +"""#Agent loop""" +T = 10 # number of timesteps in the simulation + +# Initial observation: agent is +observation = [0,0,0,0,0] +state = [0,0] + +for t in range(T): + + print(f"\nTime {t}:") + + print(f"State: {[(list(states)[f], states[list(states)[f]][state[f]]) for f in range(len(states))]}") + print(f"Observations: {[(list(observations)[g], observations[list(observations)[g]][observation[g]]) for g in range(len(observations))]}") + print(observation) + belief_state = agent.infer_states(observation) + print(agent.qs) + agent.infer_policies() + action = agent.sample_action() + print(action) + # update environment + + if t > 0: # update previous_location with current current_location + state[0] = state[1] + for f, s in enumerate(state): + state[f] = utils.sample(B_gp[f][:, s, int(action[f])]) + for g, _ in enumerate(observation): + observation[g] = utils.sample(A_gp[g][:, state[0], state[1]]) + + # print(f"Beliefs: {[(list(states)[f], belief_state[f].values.round(3).T) for f in range(len(states))]}") + +# print(f"Action: {[(list(actions)[a], actions[list(actions)[a]][int(action[a])]) for a in range(len(states))]}") +#%% +belief_state = agent.infer_states([0, 0, 0, 0, 0, 0]) + +agent.infer_policies() + +B[1][:,0,0] + +agent.A[1] + +A + + +# %% diff --git a/examples/tmaze_demo.ipynb b/examples/tmaze_demo.ipynb index 2fe41218..e710d33d 100644 --- a/examples/tmaze_demo.ipynb +++ b/examples/tmaze_demo.ipynb @@ -2,24 +2,26 @@ "cells": [ { "cell_type": "markdown", + "metadata": {}, "source": [ "# Active Inference Demo: T-Maze Environment\n", "This demo notebook provides a full walk-through of active inference using the `Agent()` class of `pymdp`. The canonical example used here is the 'T-maze' task, often used in the active inference literature in discussions of epistemic behavior (see, for example, [\"Active Inference and Epistemic Value\"](https://pubmed.ncbi.nlm.nih.gov/25689102/))" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Imports\n", "\n", "First, import `pymdp` and the modules we'll need." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import os\n", "import sys\n", @@ -36,22 +38,22 @@ "from pymdp.agent import Agent\n", "from pymdp import utils\n", "from pymdp.envs import TMazeEnv" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Auxiliary Functions\n", "\n", "Define some utility functions that will be helpful for plotting." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def plot_beliefs(belief_dist, title=\"\"):\n", " plt.grid(zorder=0)\n", @@ -66,12 +68,11 @@ " plt.yticks(range(A.shape[0]))\n", " plt.title(title)\n", " plt.show()" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Environment\n", "\n", @@ -86,51 +87,51 @@ "The environment is designed such that when the agent is located in the `RIGHT ARM` and the reward condition is `Reward on Right`, the agent has a specified probability $a$ (where $a > 0.5$) of receiving a reward, and a low probability $b = 1 - a$ of receiving a 'loss' (we can think of this as an aversive or unpreferred stimulus). If the agent is in the `LEFT ARM` for the same reward condition, the reward probabilities are swapped, and the agent experiences loss with probability $a$, and reward with lower probability $b = 1 - a$. These reward contingencies are intuitively swapped for the `Reward on Left` condition. \n", "\n", "For instance, we can encode the state of the environment at the first time step in a `Reward on Right` trial with the following pair of hidden state vectors: $s_1 = [1 \\ 0 \\ 0 \\ 0]$, $s_2 = [1 \\ 0]$, where we assume the agent starts sitting in the central location. If the agent moved to the right arm, then the corresponding hidden state vectors would now be $s_1 = [0 \\ 1 \\ 0 \\ 0]$, $s_2 = [1 \\ 0]$. This highlights the _independence_ of the two hidden state factors -- the location of the agent ($s_1$) can change without affecting the identity of the reward condition ($s_2$).\n" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### 1. Initialize environment\n", "Now we can initialize the T-maze environment using the built-in `TMazeEnv` class from the `pymdp.envs` module." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Choose reward probabilities $a$ and $b$, where $a$ and $b$ are the probabilities of reward / loss in the 'correct' arm, and the probabilities of loss / reward in the 'incorrect' arm. Which arm counts as 'correct' vs. 'incorrect' depends on the reward condition (state of the 2nd hidden state factor)." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "reward_probabilities = [0.98, 0.02] # probabilities used in the original SPM T-maze demo" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Initialize an instance of the T-maze environment" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "env = TMazeEnv(reward_probs = reward_probabilities)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Structure of the state --> outcome mapping\n", "We can 'peer into' the rules encoded by the environment (also known as the _generative process_ ) by looking at the probability distributions that map from hidden states to observations. Following the SPM version of active inference, we refer to this collection of probabilistic relationships as the `A` array. In the case of the true rules of the environment, we refer to this array as `A_gp` (where the suffix `_gp` denotes the generative process). \n", @@ -145,255 +146,143 @@ "\n", "In `pymdp`, we store the set of probability distributions encoding the conditional probabilities of observations, under different configurations of hidden states, as a set of matrices referred to as the likelihood mapping or `A` array (this is a convention borrowed from SPM). The likelihood mapping _for a single modality_ is stored as a single matrix `A[i]` with the larger likelihood array, where `i` is the index of the corresponding modality. Each modality-specific A matrix has `n_observations[i]` rows, and as many lagging dimensions (e.g. columns, 'slices' and higher-order dimensions) as there are hidden state factors. `n_observations[i]` tells you the number of observation values for observation modality `i`, and is usually stored as a property of the `Env` class (e.g. `env.n_observations`).\n", "\n" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "A_gp = env.get_likelihood_dist()" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_likelihood(A_gp[1][:,:,0],'Reward Right')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:11.316653\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 7, - "source": [ - "plot_likelihood(A_gp[1][:,:,1],'Reward Left')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:11.663739\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], + "execution_count": null, "metadata": { "scrolled": false - } + }, + "outputs": [], + "source": [ + "plot_likelihood(A_gp[1][:,:,1],'Reward Left')" + ] }, { "cell_type": "code", - "execution_count": 8, - "source": [ - "plot_likelihood(A_gp[2][:,3,:],'Cue Mapping')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:11.975127\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], + "execution_count": null, "metadata": { "scrolled": true - } + }, + "outputs": [], + "source": [ + "plot_likelihood(A_gp[2][:,3,:],'Cue Mapping')" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Transition Dynamics\n", "\n", "We represent the dynamics of the environment (e.g. changes in the location of the agent and changes to the reward condition) as conditional probability distributions that encode the likelihood of transitions between the states of a given hidden state factor. These distributions are collected into the so-called `B` array, also known as _transition likelihoods_ or _transition distribution_ . As with the `A` array, we denote the true probabilities describing the environmental dynamics as `B_gp`. Each sub-matrix `B_gp[f]` of the larger array encodes the transition probabilities between state-values of a given hidden state factor with index `f`. These matrices encode dynamics as Markovian transition probabilities, such that the entry $i,j$ of a given matrix encodes the probability of transition to state $i$ at time $t+1$, given state $j$ at $t$. " - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "B_gp = env.get_transition_dist()" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "For example, we can inspect the 'dynamics' of the `Reward Condition` factor by indexing into the appropriate sub-matrix of `B_gp`" - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 10, - "source": [ - "plot_likelihood(B_gp[1][:,:,0],'Reward Condition Transitions')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:12.981145\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], + "execution_count": null, "metadata": { "scrolled": true - } + }, + "outputs": [], + "source": [ + "plot_likelihood(B_gp[1][:,:,0],'Reward Condition Transitions')" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The above transition array is the 'trivial' identity matrix, meaning that the reward condition doesn't change over time (it's mapped from whatever it's current value is to the same value at the next timestep)." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### (Controllable-) Transition Dynamics\n", "\n", "Importantly, some hidden state factors are _controllable_ by the agent, meaning that the probability of being in state $i$ at $t+1$ isn't merely a function of the state at $t$, but also of actions (or from the agent's perspective, _control states_ ). So now each transition likelihood encodes conditional probability distributions over states at $t+1$, where the conditioning variables are both the states at $t-1$ _and_ the actions at $t-1$. This extra conditioning on actions is encoded via an optional third dimension to each factor-specific `B` matrix.\n", "\n", "For example, in our case the first hidden state factor (`Location`) is under the control of the agent, which means the corresponding transition likelihoods `B[0]` are index-able by both previous state and action." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 11, - "source": [ - "plot_likelihood(B_gp[0][:,:,0],'Transition likelihood for \"Move to Center\"')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:14.231217\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], + "execution_count": null, "metadata": { "scrolled": false - } + }, + "outputs": [], + "source": [ + "plot_likelihood(B_gp[0][:,:,0],'Transition likelihood for \"Move to Center\"')" + ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_likelihood(B_gp[0][:,:,1],'Transition likelihood for \"Move to Right Arm\"')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:14.800067\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_likelihood(B_gp[0][:,:,2],'Transition likelihood for \"Move to Left Arm\"')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:15.312659\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_likelihood(B_gp[0][:,:,3],'Transition likelihood for \"Move to Cue Location\"')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:16.004621\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## The generative model\n", "Now we can move onto setting up the generative model of the agent - namely, the agent's beliefs about how hidden states give rise to observations, and how hidden states transition among eachother.\n", @@ -401,21 +290,21 @@ "In almost all MDPs, the critical building blocks of this generative model are the agent's representation of the observation likelihood, which we'll refer to as `A_gm`, and its representation of the transition likelihood, or `B_gm`. \n", "\n", "Here, we assume the agent has a veridical representation of the rules of the T-maze (namely, how hidden states cause observations) as well as its ability to control its own movements with certain consequences (i.e. 'noiseless' transitions)." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "A_gm = copy.deepcopy(A_gp) # make a copy of the true observation likelihood to initialize the observation model\n", "B_gm = copy.deepcopy(B_gp) # make a copy of the true transition likelihood to initialize the transition model" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Note !\n", "It is not necessary, or even in many cases _important_ , that the generative model is a veridical representation of the generative process. This distinction between generative model (essentially, beliefs entertained by the agent and its interaction with the world) and the generative process (the actual dynamical system 'out there' generating sensations) is of crucial importance to the active inference formalism and (in our experience) often overlooked in code.\n", @@ -423,212 +312,159 @@ "It is for notational and computational convenience that we encode the generative process using `A` and `B` matrices. By doing so, it simply puts the rules of the environment in a data structure that can easily be converted into the Markovian-style conditional distributions useful for encoding the agent's generative model.\n", "\n", "Strictly speaking, however, all the generative process needs to do is generate observations and be 'perturbable' by actions. The way in which it does so can be arbitrarily complex, non-linear, and unaccessible by the agent." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Introducing the `Agent()` class\n", "\n", "In `pymdp`, we have abstracted much of the computations required for active inference into the `Agent()` class, a flexible object that can be used to store necessary aspects of the generative model, the agent's instantaneous observations and actions, and perform action / perception using functions like `Agent.infer_states` and `Agent.infer_policies`. \n", "\n", "An instance of `Agent` is straightforwardly initialized with a call to `Agent()` with a list of optional arguments.\n" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "In our call to `Agent()`, we need to constrain the default behavior with some of our T-Maze-specific needs. For example, we want to make sure that the agent's beliefs about transitions are constrained by the fact that it can only control the `Location` factor - _not_ the `Reward Condition` (which we assumed stationary across an epoch of time). Therefore we specify this using a list of indices that will be passed as the `control_fac_idx` argument of the `Agent()` constructor. \n", "\n", "Each element in the list specifies a hidden state factor (in terms of its index) that is controllable by the agent. Hidden state factors whose indices are _not_ in this list are assumed to be uncontrollable." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "controllable_indices = [0] # this is a list of the indices of the hidden state factors that are controllable" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Now we can construct our agent..." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "agent = Agent(A=A_gm, B=B_gm, control_fac_idx=controllable_indices)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Now we can inspect properties (and change) of the agent as we see fit. Let's look at the initial beliefs the agent has about its starting location and reward condition, encoded in the prior over hidden states $P(s)$, known in SPM-lingo as the `D` array." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 18, - "source": [ - "plot_beliefs(agent.D[0],\"Beliefs about initial location\")" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:20.816210\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], + "execution_count": null, "metadata": { "scrolled": true - } + }, + "outputs": [], + "source": [ + "plot_beliefs(agent.D[0],\"Beliefs about initial location\")" + ] }, { "cell_type": "code", - "execution_count": 19, - "source": [ - "plot_beliefs(agent.D[1],\"Beliefs about reward condition\")" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:21.481345\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], + "execution_count": null, "metadata": { "scrolled": false - } + }, + "outputs": [], + "source": [ + "plot_beliefs(agent.D[1],\"Beliefs about reward condition\")" + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Let's make it so that agent starts with precise and accurate prior beliefs about its starting location." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "agent.D[0] = utils.onehot(0, agent.num_states[0])" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "And now confirm that our agent knows (i.e. has accurate beliefs about) its initial state by visualizing its priors again." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_beliefs(agent.D[0],\"Beliefs about initial location\")" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:23.324935\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Another thing we want to do in this case is make sure the agent has a 'sense' of reward / loss and thus a motivation to be in the 'correct' arm (the arm that maximizes the probability of getting the reward outcome).\n", "\n", "We can do this by changing the prior beliefs about observations, the `C` array (also known as the _prior preferences_ ). This is represented as a collection of distributions over observations for each modality. It is initialized by default to be all 0s. This means agent has no preference for particular outcomes. Since the second modality (index `1` of the `C` array) is the `Reward` modality, with the index of the `Reward` outcome being `1`, and that of the `Loss` outcome being `2`, we populate the corresponding entries with values whose relative magnitudes encode the preference for one outcome over another (technically, this is encoded directly in terms of relative log-probabilities). \n", "\n", "Our ability to make the agent's prior beliefs that it tends to observe the outcome with index `1` in the `Reward` modality, more often than the outcome with index `2`, is what makes this modality a Reward modality in the first place -- otherwise, it would just be an arbitrary observation with no extrinsic value _per se_. " - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "agent.C[1][1] = 3.0\n", "agent.C[1][2] = -3.0" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_beliefs(agent.C[1],\"Prior beliefs about observations\")" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:24.920037\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Active Inference\n", "Now we can start off the T-maze with an initial observation and run active inference via a loop over a desired time interval." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, + "metadata": { + "scrolled": false + }, + "outputs": [], "source": [ "T = 5 # number of timesteps\n", "\n", @@ -656,135 +492,73 @@ "\n", " msg = \"\"\"[Step {}] Observation: [{}, {}, {}]\"\"\"\n", " print(msg.format(t, location_observations[obs[0]], reward_observations[obs[1]], cue_observations[obs[2]]))" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - " === Starting experiment === \n", - " Reward condition: Left, Observation: [CENTER, No reward, Cue Left]\n", - "[Step 0] Action: [Move to CUE LOCATION]\n", - "[Step 0] Observation: [CUE LOCATION, No reward, Cue Left]\n", - "[Step 1] Action: [Move to LEFT ARM]\n", - "[Step 1] Observation: [LEFT ARM, Reward!, Cue Left]\n", - "[Step 2] Action: [Move to LEFT ARM]\n", - "[Step 2] Observation: [LEFT ARM, Reward!, Cue Left]\n", - "[Step 3] Action: [Move to LEFT ARM]\n", - "[Step 3] Observation: [LEFT ARM, Reward!, Cue Left]\n", - "[Step 4] Action: [Move to LEFT ARM]\n", - "[Step 4] Observation: [LEFT ARM, Reward!, Cue Right]\n" - ] - } - ], - "metadata": { - "scrolled": false - } + ] }, { "cell_type": "markdown", - "source": [], - "metadata": {} + "metadata": {}, + "source": [] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The agent begins by moving to the `CUE LOCATION` to resolve its uncertainty about the reward condition - this is because it knows it will get an informative cue in this location, which will signal the true reward condition unambiguously. At the beginning of the next timestep, the agent then uses this observaiton to update its posterior beliefs about states `qx[1]` to reflect the true reward condition. Having resolved its uncertainty about the reward condition, the agent then moves to `RIGHT ARM` to maximize utility and continues to do so, given its (correct) beliefs about the reward condition and the mapping between hidden states and reward observations. \n", "\n", "Notice, perhaps confusingly, that the agent continues to receive observations in the 3rd modality (i.e. samples from `A_gp[2]`). These are observations of the form `Cue Right` or `Cue Left`. However, these 'cue' observations are random and totally umambiguous unless the agent is in the `CUE LOCATION` - this is reflected by totally entropic distributions in the corresponding columns of `A_gp[2]` (and the agents beliefs about this ambiguity, reflected in `A_gm[2]`. See below." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 25, - "source": [ - "plot_likelihood(A_gp[2][:,:,0],'Cue Observations when condition is Reward on Right, for Different Locations')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:32.509845\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], + "execution_count": null, "metadata": { "scrolled": false - } + }, + "outputs": [], + "source": [ + "plot_likelihood(A_gp[2][:,:,0],'Cue Observations when condition is Reward on Right, for Different Locations')" + ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_likelihood(A_gp[2][:,:,1],'Cue Observations when condition is Reward on Left, for Different Locations')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:32.898147\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The final column on the right side of these matrices represents the distribution over cue observations, conditioned on the agent being in `CUE LOCATION` and the appropriate Reward Condition. This demonstrates that cue observations are uninformative / lacking epistemic value for the agent, _unless_ they are in `CUE LOCATION.`" - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "Now we can inspect the agent's final beliefs about the reward condition characterizing the 'trial,' having undergone 10 timesteps of active inference." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_beliefs(qx[1],\"Final posterior beliefs about reward condition\")" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T10:37:34.122349\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] } ], "metadata": { + "interpreter": { + "hash": "24ee14d9f6452059a99d44b6cbd71d1bb479b0539b0360a6a17428ecea9f0810" + }, "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)" + "display_name": "Python 3.8.10 64-bit ('pymdp_env2': conda)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -796,12 +570,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" - }, - "interpreter": { - "hash": "4144ffdb2ef81a5a74efd1d0bf9253d3fe81ec80475fd1008a839668d590b806" + "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/examples/tmaze_learning_demo.ipynb b/examples/tmaze_learning_demo.ipynb index 007512e8..48fb96f6 100644 --- a/examples/tmaze_learning_demo.ipynb +++ b/examples/tmaze_learning_demo.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "metadata": {}, "source": [ "# Demo: T-Maze Environment + Learning\n", "This notebook gives a step-by-step demonstration of active inference and learning using the `Agent()` class of `pymdp` and the `TMazeEnv` environment.\n", @@ -13,21 +14,22 @@ "'Learning' under active inference corresponds to updating posterior beliefs about the sufficient statistics of distributions that parameterize the so-called 'structure' of the generative model. In the case of the Categorical distributions used to represent beliefs about states and outcomes in the discrete space-and-time MDPs used in `pymdp`, these structural parameters correspond to prior beliefs about the sensory and transition likelihoods and priors (the `A`, `B`, `C`, and `D` arrays) of the generative model. \n", "\n", "In the following exercise, we consider the case when an active inference agent needs to learn how sensory cues (the equivalent of a 'conditioned stimulus' or CS in learning theory) indicate the probability of receiving a reward in the two arms of a T-Maze." - ], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Imports|\n", "\n", "First, import `pymdp` and the modules we'll need." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import os\n", "import sys\n", @@ -44,22 +46,22 @@ "from pymdp.agent import Agent\n", "from pymdp import utils\n", "from pymdp.envs import TMazeEnvNullOutcome" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Auxiliary Functions\n", "\n", "Define some utility functions that will be helpful for plotting." - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "def plot_beliefs(belief_dist, title=\"\"):\n", " plt.grid(zorder=0)\n", @@ -74,151 +76,110 @@ " plt.yticks(range(A.shape[0]))\n", " plt.title(title)\n", " plt.show()" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "reward_probabilities = [0.85, 0.15] # the 'true' reward probabilities \n", "env = TMazeEnvNullOutcome(reward_probs = reward_probabilities)\n", "A_gp = env.get_likelihood_dist()\n", "B_gp = env.get_transition_dist()" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "pA = utils.dirichlet_like(A_gp, scale = 1e16)\n", "\n", "pA[1][1:,1:3,:] = 1.0\n", "\n", "A_gm = utils.norm_dist_obj_arr(pA) " - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], "source": [ "plot_likelihood(A_gm[1][:,:,0],'Initial beliefs about reward mapping')\n", "plot_likelihood(A_gp[1][:,:,0],'True reward mapping in RIGHT ARM (Condition 0)')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T17:06:38.579473\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T17:06:38.742056\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": { - "scrolled": true - } + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_likelihood(A_gm[2][:,:,0],'Initial beliefs about cue mapping')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T17:06:39.059985\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "B_gm = copy.deepcopy(B_gp)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "controllable_indices = [0] # this is a list of the indices of the hidden state factors that are controllable\n", "learnable_modalities = [1] # this is a list of the modalities that you want to be learn-able " - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "agent = Agent(A=A_gm,pA=pA,B=B_gm,\n", " control_fac_idx=controllable_indices,\n", " modalities_to_learn=learnable_modalities,\n", " lr_pA = 0.25,\n", " use_param_info_gain=True)" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "agent.D[0] = utils.onehot(0, agent.num_states[0])" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "agent.C[1][1] = 2.0\n", "agent.C[1][2] = -2.0" - ], - "outputs": [], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "T = 1000 # number of timesteps\n", "\n", @@ -255,2129 +216,41 @@ "\n", " msg = \"\"\"[Step {}] Observation: [{}, {}, {}]\"\"\"\n", " print(msg.format(t, location_observations[int(obs[0])], reward_observations[int(obs[1])], cue_observations[int(obs[2])]))" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - " === Starting experiment === \n", - " Reward condition: Right Arm Better, Observation: [CENTER, No reward, Null]\n", - "[Step 0] Action: [Move to CUE LOCATION]\n", - "[Step 0] Observation: [CUE LOCATION, No reward, Cue Right]\n", - "[Step 1] Action: [Move to RIGHT ARM]\n", - "[Step 1] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 2] Action: [Move to RIGHT ARM]\n", - "[Step 2] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 3] Action: [Move to RIGHT ARM]\n", - "[Step 3] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 4] Action: [Move to RIGHT ARM]\n", - "[Step 4] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 5] Action: [Move to RIGHT ARM]\n", - "[Step 5] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 6] Action: [Move to RIGHT ARM]\n", - "[Step 6] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 7] Action: [Move to RIGHT ARM]\n", - "[Step 7] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 8] Action: [Move to RIGHT ARM]\n", - "[Step 8] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 9] Action: [Move to RIGHT ARM]\n", - "[Step 9] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 10] Action: [Move to RIGHT ARM]\n", - "[Step 10] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 11] Action: [Move to RIGHT ARM]\n", - "[Step 11] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 12] Action: [Move to RIGHT ARM]\n", - "[Step 12] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 13] Action: [Move to RIGHT ARM]\n", - "[Step 13] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 14] Action: [Move to RIGHT ARM]\n", - "[Step 14] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 15] Action: [Move to RIGHT ARM]\n", - "[Step 15] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 16] Action: [Move to RIGHT ARM]\n", - "[Step 16] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 17] Action: [Move to RIGHT ARM]\n", - "[Step 17] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 18] Action: [Move to RIGHT ARM]\n", - "[Step 18] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 19] Action: [Move to RIGHT ARM]\n", - "[Step 19] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 20] Action: [Move to RIGHT ARM]\n", - "[Step 20] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 21] Action: [Move to RIGHT ARM]\n", - "[Step 21] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 22] Action: [Move to RIGHT ARM]\n", - "[Step 22] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 23] Action: [Move to RIGHT ARM]\n", - "[Step 23] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 24] Action: [Move to RIGHT ARM]\n", - "[Step 24] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 25] Action: [Move to RIGHT ARM]\n", - "[Step 25] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 26] Action: [Move to RIGHT ARM]\n", - "[Step 26] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 27] Action: [Move to RIGHT ARM]\n", - "[Step 27] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 28] Action: [Move to RIGHT ARM]\n", - "[Step 28] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 29] Action: [Move to RIGHT ARM]\n", - "[Step 29] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 30] Action: [Move to RIGHT ARM]\n", - "[Step 30] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 31] Action: [Move to RIGHT ARM]\n", - "[Step 31] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 32] Action: [Move to RIGHT ARM]\n", - "[Step 32] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 33] Action: [Move to RIGHT ARM]\n", - "[Step 33] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 34] Action: [Move to RIGHT ARM]\n", - "[Step 34] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 35] Action: [Move to RIGHT ARM]\n", - "[Step 35] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 36] Action: [Move to RIGHT ARM]\n", - "[Step 36] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 37] Action: [Move to RIGHT ARM]\n", - "[Step 37] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 38] Action: [Move to RIGHT ARM]\n", - "[Step 38] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 39] Action: [Move to RIGHT ARM]\n", - "[Step 39] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 40] Action: [Move to RIGHT ARM]\n", - "[Step 40] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 41] Action: [Move to RIGHT ARM]\n", - "[Step 41] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 42] Action: [Move to RIGHT ARM]\n", - "[Step 42] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 43] Action: [Move to RIGHT ARM]\n", - "[Step 43] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 44] Action: [Move to RIGHT ARM]\n", - "[Step 44] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 45] Action: [Move to RIGHT ARM]\n", - "[Step 45] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 46] Action: [Move to RIGHT ARM]\n", - "[Step 46] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 47] Action: [Move to RIGHT ARM]\n", - "[Step 47] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 48] Action: [Move to RIGHT ARM]\n", - "[Step 48] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 49] Action: [Move to RIGHT ARM]\n", - "[Step 49] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 50] Action: [Move to RIGHT ARM]\n", - "[Step 50] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 51] Action: [Move to RIGHT ARM]\n", - "[Step 51] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 52] Action: [Move to RIGHT ARM]\n", - "[Step 52] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 53] Action: [Move to RIGHT ARM]\n", - "[Step 53] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 54] Action: [Move to RIGHT ARM]\n", - "[Step 54] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 55] Action: [Move to RIGHT ARM]\n", - "[Step 55] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 56] Action: [Move to RIGHT ARM]\n", - "[Step 56] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 57] Action: [Move to RIGHT ARM]\n", - "[Step 57] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 58] Action: [Move to RIGHT ARM]\n", - "[Step 58] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 59] Action: [Move to RIGHT ARM]\n", - "[Step 59] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 60] Action: [Move to RIGHT ARM]\n", - "[Step 60] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 61] Action: [Move to RIGHT ARM]\n", - "[Step 61] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 62] Action: [Move to RIGHT ARM]\n", - "[Step 62] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 63] Action: [Move to RIGHT ARM]\n", - "[Step 63] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 64] Action: [Move to RIGHT ARM]\n", - "[Step 64] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 65] Action: [Move to RIGHT ARM]\n", - "[Step 65] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 66] Action: [Move to RIGHT ARM]\n", - "[Step 66] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 67] Action: [Move to RIGHT ARM]\n", - "[Step 67] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 68] Action: [Move to RIGHT ARM]\n", - "[Step 68] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 69] Action: [Move to RIGHT ARM]\n", - "[Step 69] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 70] Action: [Move to RIGHT ARM]\n", - "[Step 70] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 71] Action: [Move to RIGHT ARM]\n", - "[Step 71] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 72] Action: [Move to RIGHT ARM]\n", - "[Step 72] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 73] Action: [Move to RIGHT ARM]\n", - "[Step 73] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 74] Action: [Move to RIGHT ARM]\n", - "[Step 74] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 75] Action: [Move to RIGHT ARM]\n", - "[Step 75] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 76] Action: [Move to RIGHT ARM]\n", - "[Step 76] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 77] Action: [Move to RIGHT ARM]\n", - "[Step 77] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 78] Action: [Move to RIGHT ARM]\n", - "[Step 78] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 79] Action: [Move to RIGHT ARM]\n", - "[Step 79] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 80] Action: [Move to RIGHT ARM]\n", - "[Step 80] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 81] Action: [Move to RIGHT ARM]\n", - "[Step 81] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 82] Action: [Move to RIGHT ARM]\n", - "[Step 82] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 83] Action: [Move to RIGHT ARM]\n", - "[Step 83] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 84] Action: [Move to RIGHT ARM]\n", - "[Step 84] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 85] Action: [Move to RIGHT ARM]\n", - "[Step 85] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 86] Action: [Move to RIGHT ARM]\n", - "[Step 86] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 87] Action: [Move to RIGHT ARM]\n", - "[Step 87] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 88] Action: [Move to RIGHT ARM]\n", - "[Step 88] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 89] Action: [Move to RIGHT ARM]\n", - "[Step 89] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 90] Action: [Move to RIGHT ARM]\n", - "[Step 90] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 91] Action: [Move to RIGHT ARM]\n", - "[Step 91] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 92] Action: [Move to RIGHT ARM]\n", - "[Step 92] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 93] Action: [Move to RIGHT ARM]\n", - "[Step 93] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 94] Action: [Move to RIGHT ARM]\n", - "[Step 94] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 95] Action: [Move to RIGHT ARM]\n", - "[Step 95] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 96] Action: [Move to RIGHT ARM]\n", - "[Step 96] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 97] Action: [Move to RIGHT ARM]\n", - "[Step 97] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 98] Action: [Move to RIGHT ARM]\n", - "[Step 98] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 99] Action: [Move to RIGHT ARM]\n", - "[Step 99] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 100] Action: [Move to RIGHT ARM]\n", - "[Step 100] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 101] Action: [Move to RIGHT ARM]\n", - "[Step 101] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 102] Action: [Move to RIGHT ARM]\n", - "[Step 102] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 103] Action: [Move to RIGHT ARM]\n", - "[Step 103] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 104] Action: [Move to RIGHT ARM]\n", - "[Step 104] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 105] Action: [Move to RIGHT ARM]\n", - "[Step 105] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 106] Action: [Move to RIGHT ARM]\n", - "[Step 106] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 107] Action: [Move to RIGHT ARM]\n", - "[Step 107] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 108] Action: [Move to RIGHT ARM]\n", - "[Step 108] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 109] Action: [Move to RIGHT ARM]\n", - "[Step 109] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 110] Action: [Move to RIGHT ARM]\n", - "[Step 110] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 111] Action: [Move to RIGHT ARM]\n", - "[Step 111] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 112] Action: [Move to RIGHT ARM]\n", - "[Step 112] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 113] Action: [Move to RIGHT ARM]\n", - "[Step 113] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 114] Action: [Move to RIGHT ARM]\n", - "[Step 114] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 115] Action: [Move to RIGHT ARM]\n", - "[Step 115] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 116] Action: [Move to RIGHT ARM]\n", - "[Step 116] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 117] Action: [Move to RIGHT ARM]\n", - "[Step 117] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 118] Action: [Move to RIGHT ARM]\n", - "[Step 118] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 119] Action: [Move to RIGHT ARM]\n", - "[Step 119] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 120] Action: [Move to RIGHT ARM]\n", - "[Step 120] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 121] Action: [Move to RIGHT ARM]\n", - "[Step 121] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 122] Action: [Move to RIGHT ARM]\n", - "[Step 122] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 123] Action: [Move to RIGHT ARM]\n", - "[Step 123] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 124] Action: [Move to RIGHT ARM]\n", - "[Step 124] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 125] Action: [Move to RIGHT ARM]\n", - "[Step 125] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 126] Action: [Move to RIGHT ARM]\n", - "[Step 126] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 127] Action: [Move to RIGHT ARM]\n", - "[Step 127] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 128] Action: [Move to RIGHT ARM]\n", - "[Step 128] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 129] Action: [Move to RIGHT ARM]\n", - "[Step 129] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 130] Action: [Move to RIGHT ARM]\n", - "[Step 130] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 131] Action: [Move to RIGHT ARM]\n", - "[Step 131] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 132] Action: [Move to RIGHT ARM]\n", - "[Step 132] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 133] Action: [Move to RIGHT ARM]\n", - "[Step 133] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 134] Action: [Move to RIGHT ARM]\n", - "[Step 134] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 135] Action: [Move to RIGHT ARM]\n", - "[Step 135] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 136] Action: [Move to RIGHT ARM]\n", - "[Step 136] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 137] Action: [Move to RIGHT ARM]\n", - "[Step 137] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 138] Action: [Move to RIGHT ARM]\n", - "[Step 138] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 139] Action: [Move to RIGHT ARM]\n", - "[Step 139] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 140] Action: [Move to RIGHT ARM]\n", - "[Step 140] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 141] Action: [Move to RIGHT ARM]\n", - "[Step 141] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 142] Action: [Move to RIGHT ARM]\n", - "[Step 142] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 143] Action: [Move to RIGHT ARM]\n", - "[Step 143] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 144] Action: [Move to RIGHT ARM]\n", - "[Step 144] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 145] Action: [Move to RIGHT ARM]\n", - "[Step 145] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 146] Action: [Move to RIGHT ARM]\n", - "[Step 146] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 147] Action: [Move to RIGHT ARM]\n", - "[Step 147] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 148] Action: [Move to RIGHT ARM]\n", - "[Step 148] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 149] Action: [Move to RIGHT ARM]\n", - "[Step 149] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 150] Action: [Move to RIGHT ARM]\n", - "[Step 150] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 151] Action: [Move to RIGHT ARM]\n", - "[Step 151] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 152] Action: [Move to RIGHT ARM]\n", - "[Step 152] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 153] Action: [Move to RIGHT ARM]\n", - "[Step 153] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 154] Action: [Move to RIGHT ARM]\n", - "[Step 154] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 155] Action: [Move to RIGHT ARM]\n", - "[Step 155] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 156] Action: [Move to RIGHT ARM]\n", - "[Step 156] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 157] Action: [Move to RIGHT ARM]\n", - "[Step 157] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 158] Action: [Move to RIGHT ARM]\n", - "[Step 158] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 159] Action: [Move to RIGHT ARM]\n", - "[Step 159] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 160] Action: [Move to RIGHT ARM]\n", - "[Step 160] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 161] Action: [Move to RIGHT ARM]\n", - "[Step 161] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 162] Action: [Move to RIGHT ARM]\n", - "[Step 162] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 163] Action: [Move to RIGHT ARM]\n", - "[Step 163] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 164] Action: [Move to RIGHT ARM]\n", - "[Step 164] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 165] Action: [Move to RIGHT ARM]\n", - "[Step 165] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 166] Action: [Move to RIGHT ARM]\n", - "[Step 166] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 167] Action: [Move to RIGHT ARM]\n", - "[Step 167] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 168] Action: [Move to RIGHT ARM]\n", - "[Step 168] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 169] Action: [Move to RIGHT ARM]\n", - "[Step 169] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 170] Action: [Move to RIGHT ARM]\n", - "[Step 170] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 171] Action: [Move to RIGHT ARM]\n", - "[Step 171] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 172] Action: [Move to RIGHT ARM]\n", - "[Step 172] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 173] Action: [Move to RIGHT ARM]\n", - "[Step 173] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 174] Action: [Move to RIGHT ARM]\n", - "[Step 174] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 175] Action: [Move to RIGHT ARM]\n", - "[Step 175] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 176] Action: [Move to RIGHT ARM]\n", - "[Step 176] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 177] Action: [Move to RIGHT ARM]\n", - "[Step 177] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 178] Action: [Move to RIGHT ARM]\n", - "[Step 178] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 179] Action: [Move to RIGHT ARM]\n", - "[Step 179] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 180] Action: [Move to RIGHT ARM]\n", - "[Step 180] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 181] Action: [Move to RIGHT ARM]\n", - "[Step 181] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 182] Action: [Move to RIGHT ARM]\n", - "[Step 182] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 183] Action: [Move to RIGHT ARM]\n", - "[Step 183] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 184] Action: [Move to RIGHT ARM]\n", - "[Step 184] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 185] Action: [Move to RIGHT ARM]\n", - "[Step 185] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 186] Action: [Move to RIGHT ARM]\n", - "[Step 186] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 187] Action: [Move to RIGHT ARM]\n", - "[Step 187] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 188] Action: [Move to RIGHT ARM]\n", - "[Step 188] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 189] Action: [Move to RIGHT ARM]\n", - "[Step 189] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 190] Action: [Move to RIGHT ARM]\n", - "[Step 190] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 191] Action: [Move to RIGHT ARM]\n", - "[Step 191] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 192] Action: [Move to RIGHT ARM]\n", - "[Step 192] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 193] Action: [Move to RIGHT ARM]\n", - "[Step 193] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 194] Action: [Move to RIGHT ARM]\n", - "[Step 194] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 195] Action: [Move to RIGHT ARM]\n", - "[Step 195] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 196] Action: [Move to RIGHT ARM]\n", - "[Step 196] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 197] Action: [Move to RIGHT ARM]\n", - "[Step 197] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 198] Action: [Move to RIGHT ARM]\n", - "[Step 198] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 199] Action: [Move to RIGHT ARM]\n", - "[Step 199] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 200] Action: [Move to RIGHT ARM]\n", - "[Step 200] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 201] Action: [Move to RIGHT ARM]\n", - "[Step 201] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 202] Action: [Move to RIGHT ARM]\n", - "[Step 202] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 203] Action: [Move to RIGHT ARM]\n", - "[Step 203] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 204] Action: [Move to RIGHT ARM]\n", - "[Step 204] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 205] Action: [Move to RIGHT ARM]\n", - "[Step 205] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 206] Action: [Move to RIGHT ARM]\n", - "[Step 206] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 207] Action: [Move to RIGHT ARM]\n", - "[Step 207] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 208] Action: [Move to RIGHT ARM]\n", - "[Step 208] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 209] Action: [Move to RIGHT ARM]\n", - "[Step 209] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 210] Action: [Move to RIGHT ARM]\n", - "[Step 210] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 211] Action: [Move to RIGHT ARM]\n", - "[Step 211] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 212] Action: [Move to RIGHT ARM]\n", - "[Step 212] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 213] Action: [Move to RIGHT ARM]\n", - "[Step 213] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 214] Action: [Move to RIGHT ARM]\n", - "[Step 214] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 215] Action: [Move to RIGHT ARM]\n", - "[Step 215] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 216] Action: [Move to RIGHT ARM]\n", - "[Step 216] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 217] Action: [Move to RIGHT ARM]\n", - "[Step 217] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 218] Action: [Move to RIGHT ARM]\n", - "[Step 218] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 219] Action: [Move to RIGHT ARM]\n", - "[Step 219] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 220] Action: [Move to RIGHT ARM]\n", - "[Step 220] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 221] Action: [Move to RIGHT ARM]\n", - "[Step 221] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 222] Action: [Move to RIGHT ARM]\n", - "[Step 222] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 223] Action: [Move to RIGHT ARM]\n", - "[Step 223] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 224] Action: [Move to RIGHT ARM]\n", - "[Step 224] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 225] Action: [Move to RIGHT ARM]\n", - "[Step 225] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 226] Action: [Move to RIGHT ARM]\n", - "[Step 226] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 227] Action: [Move to RIGHT ARM]\n", - "[Step 227] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 228] Action: [Move to RIGHT ARM]\n", - "[Step 228] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 229] Action: [Move to RIGHT ARM]\n", - "[Step 229] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 230] Action: [Move to RIGHT ARM]\n", - "[Step 230] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 231] Action: [Move to RIGHT ARM]\n", - "[Step 231] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 232] Action: [Move to RIGHT ARM]\n", - "[Step 232] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 233] Action: [Move to RIGHT ARM]\n", - "[Step 233] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 234] Action: [Move to RIGHT ARM]\n", - "[Step 234] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 235] Action: [Move to RIGHT ARM]\n", - "[Step 235] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 236] Action: [Move to RIGHT ARM]\n", - "[Step 236] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 237] Action: [Move to RIGHT ARM]\n", - "[Step 237] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 238] Action: [Move to RIGHT ARM]\n", - "[Step 238] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 239] Action: [Move to RIGHT ARM]\n", - "[Step 239] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 240] Action: [Move to RIGHT ARM]\n", - "[Step 240] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 241] Action: [Move to RIGHT ARM]\n", - "[Step 241] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 242] Action: [Move to RIGHT ARM]\n", - "[Step 242] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 243] Action: [Move to RIGHT ARM]\n", - "[Step 243] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 244] Action: [Move to RIGHT ARM]\n", - "[Step 244] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 245] Action: [Move to RIGHT ARM]\n", - "[Step 245] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 246] Action: [Move to RIGHT ARM]\n", - "[Step 246] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 247] Action: [Move to RIGHT ARM]\n", - "[Step 247] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 248] Action: [Move to RIGHT ARM]\n", - "[Step 248] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 249] Action: [Move to RIGHT ARM]\n", - "[Step 249] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 250] Action: [Move to RIGHT ARM]\n", - "[Step 250] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 251] Action: [Move to RIGHT ARM]\n", - "[Step 251] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 252] Action: [Move to RIGHT ARM]\n", - "[Step 252] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 253] Action: [Move to RIGHT ARM]\n", - "[Step 253] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 254] Action: [Move to RIGHT ARM]\n", - "[Step 254] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 255] Action: [Move to RIGHT ARM]\n", - "[Step 255] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 256] Action: [Move to RIGHT ARM]\n", - "[Step 256] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 257] Action: [Move to RIGHT ARM]\n", - "[Step 257] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 258] Action: [Move to RIGHT ARM]\n", - "[Step 258] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 259] Action: [Move to RIGHT ARM]\n", - "[Step 259] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 260] Action: [Move to RIGHT ARM]\n", - "[Step 260] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 261] Action: [Move to RIGHT ARM]\n", - "[Step 261] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 262] Action: [Move to RIGHT ARM]\n", - "[Step 262] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 263] Action: [Move to RIGHT ARM]\n", - "[Step 263] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 264] Action: [Move to RIGHT ARM]\n", - "[Step 264] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 265] Action: [Move to RIGHT ARM]\n", - "[Step 265] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 266] Action: [Move to RIGHT ARM]\n", - "[Step 266] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 267] Action: [Move to RIGHT ARM]\n", - "[Step 267] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 268] Action: [Move to RIGHT ARM]\n", - "[Step 268] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 269] Action: [Move to RIGHT ARM]\n", - "[Step 269] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 270] Action: [Move to RIGHT ARM]\n", - "[Step 270] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 271] Action: [Move to RIGHT ARM]\n", - "[Step 271] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 272] Action: [Move to RIGHT ARM]\n", - "[Step 272] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 273] Action: [Move to RIGHT ARM]\n", - "[Step 273] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 274] Action: [Move to RIGHT ARM]\n", - "[Step 274] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 275] Action: [Move to RIGHT ARM]\n", - "[Step 275] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 276] Action: [Move to RIGHT ARM]\n", - "[Step 276] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 277] Action: [Move to RIGHT ARM]\n", - "[Step 277] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 278] Action: [Move to RIGHT ARM]\n", - "[Step 278] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 279] Action: [Move to RIGHT ARM]\n", - "[Step 279] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 280] Action: [Move to RIGHT ARM]\n", - "[Step 280] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 281] Action: [Move to RIGHT ARM]\n", - "[Step 281] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 282] Action: [Move to RIGHT ARM]\n", - "[Step 282] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 283] Action: [Move to RIGHT ARM]\n", - "[Step 283] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 284] Action: [Move to RIGHT ARM]\n", - "[Step 284] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 285] Action: [Move to RIGHT ARM]\n", - "[Step 285] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 286] Action: [Move to RIGHT ARM]\n", - "[Step 286] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 287] Action: [Move to RIGHT ARM]\n", - "[Step 287] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 288] Action: [Move to RIGHT ARM]\n", - "[Step 288] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 289] Action: [Move to RIGHT ARM]\n", - "[Step 289] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 290] Action: [Move to RIGHT ARM]\n", - "[Step 290] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 291] Action: [Move to RIGHT ARM]\n", - "[Step 291] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 292] Action: [Move to RIGHT ARM]\n", - "[Step 292] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 293] Action: [Move to RIGHT ARM]\n", - "[Step 293] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 294] Action: [Move to RIGHT ARM]\n", - "[Step 294] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 295] Action: [Move to RIGHT ARM]\n", - "[Step 295] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 296] Action: [Move to RIGHT ARM]\n", - "[Step 296] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 297] Action: [Move to RIGHT ARM]\n", - "[Step 297] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 298] Action: [Move to RIGHT ARM]\n", - "[Step 298] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 299] Action: [Move to RIGHT ARM]\n", - "[Step 299] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 300] Action: [Move to RIGHT ARM]\n", - "[Step 300] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 301] Action: [Move to RIGHT ARM]\n", - "[Step 301] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 302] Action: [Move to RIGHT ARM]\n", - "[Step 302] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 303] Action: [Move to RIGHT ARM]\n", - "[Step 303] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 304] Action: [Move to RIGHT ARM]\n", - "[Step 304] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 305] Action: [Move to RIGHT ARM]\n", - "[Step 305] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 306] Action: [Move to RIGHT ARM]\n", - "[Step 306] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 307] Action: [Move to RIGHT ARM]\n", - "[Step 307] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 308] Action: [Move to RIGHT ARM]\n", - "[Step 308] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 309] Action: [Move to RIGHT ARM]\n", - "[Step 309] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 310] Action: [Move to RIGHT ARM]\n", - "[Step 310] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 311] Action: [Move to RIGHT ARM]\n", - "[Step 311] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 312] Action: [Move to RIGHT ARM]\n", - "[Step 312] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 313] Action: [Move to RIGHT ARM]\n", - "[Step 313] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 314] Action: [Move to RIGHT ARM]\n", - "[Step 314] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 315] Action: [Move to RIGHT ARM]\n", - "[Step 315] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 316] Action: [Move to RIGHT ARM]\n", - "[Step 316] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 317] Action: [Move to RIGHT ARM]\n", - "[Step 317] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 318] Action: [Move to RIGHT ARM]\n", - "[Step 318] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 319] Action: [Move to RIGHT ARM]\n", - "[Step 319] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 320] Action: [Move to RIGHT ARM]\n", - "[Step 320] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 321] Action: [Move to RIGHT ARM]\n", - "[Step 321] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 322] Action: [Move to RIGHT ARM]\n", - "[Step 322] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 323] Action: [Move to RIGHT ARM]\n", - "[Step 323] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 324] Action: [Move to RIGHT ARM]\n", - "[Step 324] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 325] Action: [Move to RIGHT ARM]\n", - "[Step 325] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 326] Action: [Move to RIGHT ARM]\n", - "[Step 326] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 327] Action: [Move to RIGHT ARM]\n", - "[Step 327] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 328] Action: [Move to RIGHT ARM]\n", - "[Step 328] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 329] Action: [Move to RIGHT ARM]\n", - "[Step 329] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 330] Action: [Move to RIGHT ARM]\n", - "[Step 330] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 331] Action: [Move to RIGHT ARM]\n", - "[Step 331] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 332] Action: [Move to RIGHT ARM]\n", - "[Step 332] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 333] Action: [Move to RIGHT ARM]\n", - "[Step 333] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 334] Action: [Move to RIGHT ARM]\n", - "[Step 334] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 335] Action: [Move to RIGHT ARM]\n", - "[Step 335] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 336] Action: [Move to RIGHT ARM]\n", - "[Step 336] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 337] Action: [Move to RIGHT ARM]\n", - "[Step 337] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 338] Action: [Move to RIGHT ARM]\n", - "[Step 338] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 339] Action: [Move to RIGHT ARM]\n", - "[Step 339] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 340] Action: [Move to RIGHT ARM]\n", - "[Step 340] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 341] Action: [Move to RIGHT ARM]\n", - "[Step 341] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 342] Action: [Move to RIGHT ARM]\n", - "[Step 342] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 343] Action: [Move to RIGHT ARM]\n", - "[Step 343] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 344] Action: [Move to RIGHT ARM]\n", - "[Step 344] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 345] Action: [Move to RIGHT ARM]\n", - "[Step 345] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 346] Action: [Move to RIGHT ARM]\n", - "[Step 346] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 347] Action: [Move to RIGHT ARM]\n", - "[Step 347] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 348] Action: [Move to RIGHT ARM]\n", - "[Step 348] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 349] Action: [Move to RIGHT ARM]\n", - "[Step 349] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 350] Action: [Move to RIGHT ARM]\n", - "[Step 350] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 351] Action: [Move to RIGHT ARM]\n", - "[Step 351] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 352] Action: [Move to RIGHT ARM]\n", - "[Step 352] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 353] Action: [Move to RIGHT ARM]\n", - "[Step 353] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 354] Action: [Move to RIGHT ARM]\n", - "[Step 354] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 355] Action: [Move to RIGHT ARM]\n", - "[Step 355] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 356] Action: [Move to RIGHT ARM]\n", - "[Step 356] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 357] Action: [Move to RIGHT ARM]\n", - "[Step 357] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 358] Action: [Move to RIGHT ARM]\n", - "[Step 358] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 359] Action: [Move to RIGHT ARM]\n", - "[Step 359] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 360] Action: [Move to RIGHT ARM]\n", - "[Step 360] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 361] Action: [Move to RIGHT ARM]\n", - "[Step 361] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 362] Action: [Move to RIGHT ARM]\n", - "[Step 362] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 363] Action: [Move to RIGHT ARM]\n", - "[Step 363] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 364] Action: [Move to RIGHT ARM]\n", - "[Step 364] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 365] Action: [Move to RIGHT ARM]\n", - "[Step 365] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 366] Action: [Move to RIGHT ARM]\n", - "[Step 366] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 367] Action: [Move to RIGHT ARM]\n", - "[Step 367] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 368] Action: [Move to RIGHT ARM]\n", - "[Step 368] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 369] Action: [Move to RIGHT ARM]\n", - "[Step 369] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 370] Action: [Move to RIGHT ARM]\n", - "[Step 370] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 371] Action: [Move to RIGHT ARM]\n", - "[Step 371] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 372] Action: [Move to RIGHT ARM]\n", - "[Step 372] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 373] Action: [Move to RIGHT ARM]\n", - "[Step 373] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 374] Action: [Move to RIGHT ARM]\n", - "[Step 374] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 375] Action: [Move to RIGHT ARM]\n", - "[Step 375] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 376] Action: [Move to RIGHT ARM]\n", - "[Step 376] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 377] Action: [Move to RIGHT ARM]\n", - "[Step 377] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 378] Action: [Move to RIGHT ARM]\n", - "[Step 378] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 379] Action: [Move to RIGHT ARM]\n", - "[Step 379] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 380] Action: [Move to RIGHT ARM]\n", - "[Step 380] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 381] Action: [Move to RIGHT ARM]\n", - "[Step 381] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 382] Action: [Move to RIGHT ARM]\n", - "[Step 382] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 383] Action: [Move to RIGHT ARM]\n", - "[Step 383] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 384] Action: [Move to RIGHT ARM]\n", - "[Step 384] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 385] Action: [Move to RIGHT ARM]\n", - "[Step 385] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 386] Action: [Move to RIGHT ARM]\n", - "[Step 386] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 387] Action: [Move to RIGHT ARM]\n", - "[Step 387] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 388] Action: [Move to RIGHT ARM]\n", - "[Step 388] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 389] Action: [Move to RIGHT ARM]\n", - "[Step 389] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 390] Action: [Move to RIGHT ARM]\n", - "[Step 390] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 391] Action: [Move to RIGHT ARM]\n", - "[Step 391] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 392] Action: [Move to RIGHT ARM]\n", - "[Step 392] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 393] Action: [Move to RIGHT ARM]\n", - "[Step 393] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 394] Action: [Move to RIGHT ARM]\n", - "[Step 394] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 395] Action: [Move to RIGHT ARM]\n", - "[Step 395] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 396] Action: [Move to RIGHT ARM]\n", - "[Step 396] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 397] Action: [Move to RIGHT ARM]\n", - "[Step 397] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 398] Action: [Move to RIGHT ARM]\n", - "[Step 398] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 399] Action: [Move to RIGHT ARM]\n", - "[Step 399] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 400] Action: [Move to RIGHT ARM]\n", - "[Step 400] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 401] Action: [Move to RIGHT ARM]\n", - "[Step 401] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 402] Action: [Move to RIGHT ARM]\n", - "[Step 402] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 403] Action: [Move to RIGHT ARM]\n", - "[Step 403] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 404] Action: [Move to RIGHT ARM]\n", - "[Step 404] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 405] Action: [Move to RIGHT ARM]\n", - "[Step 405] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 406] Action: [Move to RIGHT ARM]\n", - "[Step 406] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 407] Action: [Move to RIGHT ARM]\n", - "[Step 407] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 408] Action: [Move to RIGHT ARM]\n", - "[Step 408] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 409] Action: [Move to RIGHT ARM]\n", - "[Step 409] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 410] Action: [Move to RIGHT ARM]\n", - "[Step 410] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 411] Action: [Move to RIGHT ARM]\n", - "[Step 411] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 412] Action: [Move to RIGHT ARM]\n", - "[Step 412] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 413] Action: [Move to RIGHT ARM]\n", - "[Step 413] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 414] Action: [Move to RIGHT ARM]\n", - "[Step 414] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 415] Action: [Move to RIGHT ARM]\n", - "[Step 415] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 416] Action: [Move to RIGHT ARM]\n", - "[Step 416] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 417] Action: [Move to RIGHT ARM]\n", - "[Step 417] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 418] Action: [Move to RIGHT ARM]\n", - "[Step 418] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 419] Action: [Move to RIGHT ARM]\n", - "[Step 419] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 420] Action: [Move to RIGHT ARM]\n", - "[Step 420] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 421] Action: [Move to RIGHT ARM]\n", - "[Step 421] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 422] Action: [Move to RIGHT ARM]\n", - "[Step 422] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 423] Action: [Move to RIGHT ARM]\n", - "[Step 423] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 424] Action: [Move to RIGHT ARM]\n", - "[Step 424] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 425] Action: [Move to RIGHT ARM]\n", - "[Step 425] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 426] Action: [Move to RIGHT ARM]\n", - "[Step 426] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 427] Action: [Move to RIGHT ARM]\n", - "[Step 427] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 428] Action: [Move to RIGHT ARM]\n", - "[Step 428] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 429] Action: [Move to RIGHT ARM]\n", - "[Step 429] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 430] Action: [Move to RIGHT ARM]\n", - "[Step 430] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 431] Action: [Move to RIGHT ARM]\n", - "[Step 431] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 432] Action: [Move to RIGHT ARM]\n", - "[Step 432] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 433] Action: [Move to RIGHT ARM]\n", - "[Step 433] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 434] Action: [Move to RIGHT ARM]\n", - "[Step 434] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 435] Action: [Move to RIGHT ARM]\n", - "[Step 435] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 436] Action: [Move to RIGHT ARM]\n", - "[Step 436] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 437] Action: [Move to RIGHT ARM]\n", - "[Step 437] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 438] Action: [Move to RIGHT ARM]\n", - "[Step 438] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 439] Action: [Move to RIGHT ARM]\n", - "[Step 439] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 440] Action: [Move to RIGHT ARM]\n", - "[Step 440] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 441] Action: [Move to RIGHT ARM]\n", - "[Step 441] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 442] Action: [Move to RIGHT ARM]\n", - "[Step 442] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 443] Action: [Move to RIGHT ARM]\n", - "[Step 443] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 444] Action: [Move to RIGHT ARM]\n", - "[Step 444] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 445] Action: [Move to RIGHT ARM]\n", - "[Step 445] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 446] Action: [Move to RIGHT ARM]\n", - "[Step 446] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 447] Action: [Move to RIGHT ARM]\n", - "[Step 447] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 448] Action: [Move to RIGHT ARM]\n", - "[Step 448] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 449] Action: [Move to RIGHT ARM]\n", - "[Step 449] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 450] Action: [Move to RIGHT ARM]\n", - "[Step 450] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 451] Action: [Move to RIGHT ARM]\n", - "[Step 451] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 452] Action: [Move to RIGHT ARM]\n", - "[Step 452] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 453] Action: [Move to RIGHT ARM]\n", - "[Step 453] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 454] Action: [Move to RIGHT ARM]\n", - "[Step 454] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 455] Action: [Move to RIGHT ARM]\n", - "[Step 455] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 456] Action: [Move to RIGHT ARM]\n", - "[Step 456] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 457] Action: [Move to RIGHT ARM]\n", - "[Step 457] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 458] Action: [Move to RIGHT ARM]\n", - "[Step 458] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 459] Action: [Move to RIGHT ARM]\n", - "[Step 459] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 460] Action: [Move to RIGHT ARM]\n", - "[Step 460] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 461] Action: [Move to RIGHT ARM]\n", - "[Step 461] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 462] Action: [Move to RIGHT ARM]\n", - "[Step 462] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 463] Action: [Move to RIGHT ARM]\n", - "[Step 463] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 464] Action: [Move to RIGHT ARM]\n", - "[Step 464] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 465] Action: [Move to RIGHT ARM]\n", - "[Step 465] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 466] Action: [Move to RIGHT ARM]\n", - "[Step 466] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 467] Action: [Move to RIGHT ARM]\n", - "[Step 467] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 468] Action: [Move to RIGHT ARM]\n", - "[Step 468] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 469] Action: [Move to RIGHT ARM]\n", - "[Step 469] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 470] Action: [Move to RIGHT ARM]\n", - "[Step 470] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 471] Action: [Move to RIGHT ARM]\n", - "[Step 471] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 472] Action: [Move to RIGHT ARM]\n", - "[Step 472] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 473] Action: [Move to RIGHT ARM]\n", - "[Step 473] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 474] Action: [Move to RIGHT ARM]\n", - "[Step 474] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 475] Action: [Move to RIGHT ARM]\n", - "[Step 475] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 476] Action: [Move to RIGHT ARM]\n", - "[Step 476] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 477] Action: [Move to RIGHT ARM]\n", - "[Step 477] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 478] Action: [Move to RIGHT ARM]\n", - "[Step 478] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 479] Action: [Move to RIGHT ARM]\n", - "[Step 479] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 480] Action: [Move to RIGHT ARM]\n", - "[Step 480] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 481] Action: [Move to RIGHT ARM]\n", - "[Step 481] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 482] Action: [Move to RIGHT ARM]\n", - "[Step 482] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 483] Action: [Move to RIGHT ARM]\n", - "[Step 483] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 484] Action: [Move to RIGHT ARM]\n", - "[Step 484] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 485] Action: [Move to RIGHT ARM]\n", - "[Step 485] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 486] Action: [Move to RIGHT ARM]\n", - "[Step 486] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 487] Action: [Move to RIGHT ARM]\n", - "[Step 487] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 488] Action: [Move to RIGHT ARM]\n", - "[Step 488] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 489] Action: [Move to RIGHT ARM]\n", - "[Step 489] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 490] Action: [Move to RIGHT ARM]\n", - "[Step 490] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 491] Action: [Move to RIGHT ARM]\n", - "[Step 491] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 492] Action: [Move to RIGHT ARM]\n", - "[Step 492] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 493] Action: [Move to RIGHT ARM]\n", - "[Step 493] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 494] Action: [Move to RIGHT ARM]\n", - "[Step 494] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 495] Action: [Move to RIGHT ARM]\n", - "[Step 495] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 496] Action: [Move to RIGHT ARM]\n", - "[Step 496] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 497] Action: [Move to RIGHT ARM]\n", - "[Step 497] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 498] Action: [Move to RIGHT ARM]\n", - "[Step 498] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 499] Action: [Move to RIGHT ARM]\n", - "[Step 499] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 500] Action: [Move to RIGHT ARM]\n", - "[Step 500] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 501] Action: [Move to RIGHT ARM]\n", - "[Step 501] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 502] Action: [Move to RIGHT ARM]\n", - "[Step 502] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 503] Action: [Move to RIGHT ARM]\n", - "[Step 503] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 504] Action: [Move to RIGHT ARM]\n", - "[Step 504] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 505] Action: [Move to RIGHT ARM]\n", - "[Step 505] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 506] Action: [Move to RIGHT ARM]\n", - "[Step 506] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 507] Action: [Move to RIGHT ARM]\n", - "[Step 507] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 508] Action: [Move to RIGHT ARM]\n", - "[Step 508] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 509] Action: [Move to RIGHT ARM]\n", - "[Step 509] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 510] Action: [Move to RIGHT ARM]\n", - "[Step 510] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 511] Action: [Move to RIGHT ARM]\n", - "[Step 511] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 512] Action: [Move to RIGHT ARM]\n", - "[Step 512] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 513] Action: [Move to RIGHT ARM]\n", - "[Step 513] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 514] Action: [Move to RIGHT ARM]\n", - "[Step 514] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 515] Action: [Move to RIGHT ARM]\n", - "[Step 515] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 516] Action: [Move to RIGHT ARM]\n", - "[Step 516] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 517] Action: [Move to RIGHT ARM]\n", - "[Step 517] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 518] Action: [Move to RIGHT ARM]\n", - "[Step 518] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 519] Action: [Move to RIGHT ARM]\n", - "[Step 519] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 520] Action: [Move to RIGHT ARM]\n", - "[Step 520] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 521] Action: [Move to RIGHT ARM]\n", - "[Step 521] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 522] Action: [Move to RIGHT ARM]\n", - "[Step 522] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 523] Action: [Move to RIGHT ARM]\n", - "[Step 523] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 524] Action: [Move to RIGHT ARM]\n", - "[Step 524] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 525] Action: [Move to RIGHT ARM]\n", - "[Step 525] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 526] Action: [Move to RIGHT ARM]\n", - "[Step 526] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 527] Action: [Move to RIGHT ARM]\n", - "[Step 527] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 528] Action: [Move to RIGHT ARM]\n", - "[Step 528] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 529] Action: [Move to RIGHT ARM]\n", - "[Step 529] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 530] Action: [Move to RIGHT ARM]\n", - "[Step 530] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 531] Action: [Move to RIGHT ARM]\n", - "[Step 531] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 532] Action: [Move to RIGHT ARM]\n", - "[Step 532] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 533] Action: [Move to RIGHT ARM]\n", - "[Step 533] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 534] Action: [Move to RIGHT ARM]\n", - "[Step 534] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 535] Action: [Move to RIGHT ARM]\n", - "[Step 535] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 536] Action: [Move to RIGHT ARM]\n", - "[Step 536] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 537] Action: [Move to RIGHT ARM]\n", - "[Step 537] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 538] Action: [Move to RIGHT ARM]\n", - "[Step 538] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 539] Action: [Move to RIGHT ARM]\n", - "[Step 539] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 540] Action: [Move to RIGHT ARM]\n", - "[Step 540] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 541] Action: [Move to RIGHT ARM]\n", - "[Step 541] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 542] Action: [Move to RIGHT ARM]\n", - "[Step 542] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 543] Action: [Move to RIGHT ARM]\n", - "[Step 543] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 544] Action: [Move to RIGHT ARM]\n", - "[Step 544] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 545] Action: [Move to RIGHT ARM]\n", - "[Step 545] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 546] Action: [Move to RIGHT ARM]\n", - "[Step 546] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 547] Action: [Move to RIGHT ARM]\n", - "[Step 547] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 548] Action: [Move to RIGHT ARM]\n", - "[Step 548] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 549] Action: [Move to RIGHT ARM]\n", - "[Step 549] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 550] Action: [Move to RIGHT ARM]\n", - "[Step 550] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 551] Action: [Move to RIGHT ARM]\n", - "[Step 551] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 552] Action: [Move to RIGHT ARM]\n", - "[Step 552] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 553] Action: [Move to RIGHT ARM]\n", - "[Step 553] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 554] Action: [Move to RIGHT ARM]\n", - "[Step 554] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 555] Action: [Move to RIGHT ARM]\n", - "[Step 555] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 556] Action: [Move to RIGHT ARM]\n", - "[Step 556] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 557] Action: [Move to RIGHT ARM]\n", - "[Step 557] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 558] Action: [Move to RIGHT ARM]\n", - "[Step 558] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 559] Action: [Move to RIGHT ARM]\n", - "[Step 559] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 560] Action: [Move to RIGHT ARM]\n", - "[Step 560] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 561] Action: [Move to RIGHT ARM]\n", - "[Step 561] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 562] Action: [Move to RIGHT ARM]\n", - "[Step 562] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 563] Action: [Move to RIGHT ARM]\n", - "[Step 563] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 564] Action: [Move to RIGHT ARM]\n", - "[Step 564] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 565] Action: [Move to RIGHT ARM]\n", - "[Step 565] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 566] Action: [Move to RIGHT ARM]\n", - "[Step 566] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 567] Action: [Move to RIGHT ARM]\n", - "[Step 567] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 568] Action: [Move to RIGHT ARM]\n", - "[Step 568] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 569] Action: [Move to RIGHT ARM]\n", - "[Step 569] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 570] Action: [Move to RIGHT ARM]\n", - "[Step 570] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 571] Action: [Move to RIGHT ARM]\n", - "[Step 571] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 572] Action: [Move to RIGHT ARM]\n", - "[Step 572] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 573] Action: [Move to RIGHT ARM]\n", - "[Step 573] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 574] Action: [Move to RIGHT ARM]\n", - "[Step 574] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 575] Action: [Move to RIGHT ARM]\n", - "[Step 575] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 576] Action: [Move to RIGHT ARM]\n", - "[Step 576] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 577] Action: [Move to RIGHT ARM]\n", - "[Step 577] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 578] Action: [Move to RIGHT ARM]\n", - "[Step 578] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 579] Action: [Move to RIGHT ARM]\n", - "[Step 579] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 580] Action: [Move to RIGHT ARM]\n", - "[Step 580] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 581] Action: [Move to RIGHT ARM]\n", - "[Step 581] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 582] Action: [Move to RIGHT ARM]\n", - "[Step 582] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 583] Action: [Move to RIGHT ARM]\n", - "[Step 583] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 584] Action: [Move to RIGHT ARM]\n", - "[Step 584] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 585] Action: [Move to RIGHT ARM]\n", - "[Step 585] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 586] Action: [Move to RIGHT ARM]\n", - "[Step 586] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 587] Action: [Move to RIGHT ARM]\n", - "[Step 587] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 588] Action: [Move to RIGHT ARM]\n", - "[Step 588] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 589] Action: [Move to RIGHT ARM]\n", - "[Step 589] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 590] Action: [Move to RIGHT ARM]\n", - "[Step 590] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 591] Action: [Move to RIGHT ARM]\n", - "[Step 591] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 592] Action: [Move to RIGHT ARM]\n", - "[Step 592] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 593] Action: [Move to RIGHT ARM]\n", - "[Step 593] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 594] Action: [Move to RIGHT ARM]\n", - "[Step 594] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 595] Action: [Move to RIGHT ARM]\n", - "[Step 595] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 596] Action: [Move to RIGHT ARM]\n", - "[Step 596] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 597] Action: [Move to RIGHT ARM]\n", - "[Step 597] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 598] Action: [Move to RIGHT ARM]\n", - "[Step 598] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 599] Action: [Move to RIGHT ARM]\n", - "[Step 599] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 600] Action: [Move to RIGHT ARM]\n", - "[Step 600] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 601] Action: [Move to RIGHT ARM]\n", - "[Step 601] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 602] Action: [Move to RIGHT ARM]\n", - "[Step 602] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 603] Action: [Move to RIGHT ARM]\n", - "[Step 603] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 604] Action: [Move to RIGHT ARM]\n", - "[Step 604] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 605] Action: [Move to RIGHT ARM]\n", - "[Step 605] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 606] Action: [Move to RIGHT ARM]\n", - "[Step 606] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 607] Action: [Move to RIGHT ARM]\n", - "[Step 607] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 608] Action: [Move to RIGHT ARM]\n", - "[Step 608] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 609] Action: [Move to RIGHT ARM]\n", - "[Step 609] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 610] Action: [Move to RIGHT ARM]\n", - "[Step 610] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 611] Action: [Move to RIGHT ARM]\n", - "[Step 611] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 612] Action: [Move to RIGHT ARM]\n", - "[Step 612] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 613] Action: [Move to RIGHT ARM]\n", - "[Step 613] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 614] Action: [Move to RIGHT ARM]\n", - "[Step 614] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 615] Action: [Move to RIGHT ARM]\n", - "[Step 615] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 616] Action: [Move to RIGHT ARM]\n", - "[Step 616] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 617] Action: [Move to RIGHT ARM]\n", - "[Step 617] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 618] Action: [Move to RIGHT ARM]\n", - "[Step 618] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 619] Action: [Move to RIGHT ARM]\n", - "[Step 619] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 620] Action: [Move to RIGHT ARM]\n", - "[Step 620] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 621] Action: [Move to RIGHT ARM]\n", - "[Step 621] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 622] Action: [Move to RIGHT ARM]\n", - "[Step 622] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 623] Action: [Move to RIGHT ARM]\n", - "[Step 623] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 624] Action: [Move to RIGHT ARM]\n", - "[Step 624] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 625] Action: [Move to RIGHT ARM]\n", - "[Step 625] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 626] Action: [Move to RIGHT ARM]\n", - "[Step 626] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 627] Action: [Move to RIGHT ARM]\n", - "[Step 627] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 628] Action: [Move to RIGHT ARM]\n", - "[Step 628] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 629] Action: [Move to RIGHT ARM]\n", - "[Step 629] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 630] Action: [Move to RIGHT ARM]\n", - "[Step 630] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 631] Action: [Move to RIGHT ARM]\n", - "[Step 631] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 632] Action: [Move to RIGHT ARM]\n", - "[Step 632] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 633] Action: [Move to RIGHT ARM]\n", - "[Step 633] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 634] Action: [Move to RIGHT ARM]\n", - "[Step 634] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 635] Action: [Move to RIGHT ARM]\n", - "[Step 635] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 636] Action: [Move to RIGHT ARM]\n", - "[Step 636] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 637] Action: [Move to RIGHT ARM]\n", - "[Step 637] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 638] Action: [Move to RIGHT ARM]\n", - "[Step 638] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 639] Action: [Move to RIGHT ARM]\n", - "[Step 639] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 640] Action: [Move to RIGHT ARM]\n", - "[Step 640] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 641] Action: [Move to RIGHT ARM]\n", - "[Step 641] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 642] Action: [Move to RIGHT ARM]\n", - "[Step 642] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 643] Action: [Move to RIGHT ARM]\n", - "[Step 643] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 644] Action: [Move to RIGHT ARM]\n", - "[Step 644] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 645] Action: [Move to RIGHT ARM]\n", - "[Step 645] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 646] Action: [Move to RIGHT ARM]\n", - "[Step 646] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 647] Action: [Move to RIGHT ARM]\n", - "[Step 647] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 648] Action: [Move to RIGHT ARM]\n", - "[Step 648] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 649] Action: [Move to RIGHT ARM]\n", - "[Step 649] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 650] Action: [Move to RIGHT ARM]\n", - "[Step 650] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 651] Action: [Move to RIGHT ARM]\n", - "[Step 651] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 652] Action: [Move to RIGHT ARM]\n", - "[Step 652] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 653] Action: [Move to RIGHT ARM]\n", - "[Step 653] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 654] Action: [Move to RIGHT ARM]\n", - "[Step 654] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 655] Action: [Move to RIGHT ARM]\n", - "[Step 655] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 656] Action: [Move to RIGHT ARM]\n", - "[Step 656] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 657] Action: [Move to RIGHT ARM]\n", - "[Step 657] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 658] Action: [Move to RIGHT ARM]\n", - "[Step 658] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 659] Action: [Move to RIGHT ARM]\n", - "[Step 659] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 660] Action: [Move to RIGHT ARM]\n", - "[Step 660] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 661] Action: [Move to RIGHT ARM]\n", - "[Step 661] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 662] Action: [Move to RIGHT ARM]\n", - "[Step 662] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 663] Action: [Move to RIGHT ARM]\n", - "[Step 663] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 664] Action: [Move to RIGHT ARM]\n", - "[Step 664] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 665] Action: [Move to RIGHT ARM]\n", - "[Step 665] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 666] Action: [Move to RIGHT ARM]\n", - "[Step 666] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 667] Action: [Move to RIGHT ARM]\n", - "[Step 667] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 668] Action: [Move to RIGHT ARM]\n", - "[Step 668] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 669] Action: [Move to RIGHT ARM]\n", - "[Step 669] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 670] Action: [Move to RIGHT ARM]\n", - "[Step 670] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 671] Action: [Move to RIGHT ARM]\n", - "[Step 671] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 672] Action: [Move to RIGHT ARM]\n", - "[Step 672] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 673] Action: [Move to RIGHT ARM]\n", - "[Step 673] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 674] Action: [Move to RIGHT ARM]\n", - "[Step 674] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 675] Action: [Move to RIGHT ARM]\n", - "[Step 675] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 676] Action: [Move to RIGHT ARM]\n", - "[Step 676] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 677] Action: [Move to RIGHT ARM]\n", - "[Step 677] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 678] Action: [Move to RIGHT ARM]\n", - "[Step 678] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 679] Action: [Move to RIGHT ARM]\n", - "[Step 679] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 680] Action: [Move to RIGHT ARM]\n", - "[Step 680] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 681] Action: [Move to RIGHT ARM]\n", - "[Step 681] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 682] Action: [Move to RIGHT ARM]\n", - "[Step 682] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 683] Action: [Move to RIGHT ARM]\n", - "[Step 683] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 684] Action: [Move to RIGHT ARM]\n", - "[Step 684] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 685] Action: [Move to RIGHT ARM]\n", - "[Step 685] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 686] Action: [Move to RIGHT ARM]\n", - "[Step 686] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 687] Action: [Move to RIGHT ARM]\n", - "[Step 687] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 688] Action: [Move to RIGHT ARM]\n", - "[Step 688] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 689] Action: [Move to RIGHT ARM]\n", - "[Step 689] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 690] Action: [Move to RIGHT ARM]\n", - "[Step 690] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 691] Action: [Move to RIGHT ARM]\n", - "[Step 691] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 692] Action: [Move to RIGHT ARM]\n", - "[Step 692] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 693] Action: [Move to RIGHT ARM]\n", - "[Step 693] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 694] Action: [Move to RIGHT ARM]\n", - "[Step 694] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 695] Action: [Move to RIGHT ARM]\n", - "[Step 695] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 696] Action: [Move to RIGHT ARM]\n", - "[Step 696] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 697] Action: [Move to RIGHT ARM]\n", - "[Step 697] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 698] Action: [Move to RIGHT ARM]\n", - "[Step 698] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 699] Action: [Move to RIGHT ARM]\n", - "[Step 699] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 700] Action: [Move to RIGHT ARM]\n", - "[Step 700] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 701] Action: [Move to RIGHT ARM]\n", - "[Step 701] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 702] Action: [Move to RIGHT ARM]\n", - "[Step 702] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 703] Action: [Move to RIGHT ARM]\n", - "[Step 703] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 704] Action: [Move to RIGHT ARM]\n", - "[Step 704] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 705] Action: [Move to RIGHT ARM]\n", - "[Step 705] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 706] Action: [Move to RIGHT ARM]\n", - "[Step 706] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 707] Action: [Move to RIGHT ARM]\n", - "[Step 707] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 708] Action: [Move to RIGHT ARM]\n", - "[Step 708] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 709] Action: [Move to RIGHT ARM]\n", - "[Step 709] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 710] Action: [Move to RIGHT ARM]\n", - "[Step 710] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 711] Action: [Move to RIGHT ARM]\n", - "[Step 711] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 712] Action: [Move to RIGHT ARM]\n", - "[Step 712] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 713] Action: [Move to RIGHT ARM]\n", - "[Step 713] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 714] Action: [Move to RIGHT ARM]\n", - "[Step 714] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 715] Action: [Move to RIGHT ARM]\n", - "[Step 715] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 716] Action: [Move to RIGHT ARM]\n", - "[Step 716] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 717] Action: [Move to RIGHT ARM]\n", - "[Step 717] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 718] Action: [Move to RIGHT ARM]\n", - "[Step 718] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 719] Action: [Move to RIGHT ARM]\n", - "[Step 719] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 720] Action: [Move to RIGHT ARM]\n", - "[Step 720] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 721] Action: [Move to RIGHT ARM]\n", - "[Step 721] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 722] Action: [Move to RIGHT ARM]\n", - "[Step 722] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 723] Action: [Move to RIGHT ARM]\n", - "[Step 723] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 724] Action: [Move to RIGHT ARM]\n", - "[Step 724] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 725] Action: [Move to RIGHT ARM]\n", - "[Step 725] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 726] Action: [Move to RIGHT ARM]\n", - "[Step 726] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 727] Action: [Move to RIGHT ARM]\n", - "[Step 727] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 728] Action: [Move to RIGHT ARM]\n", - "[Step 728] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 729] Action: [Move to RIGHT ARM]\n", - "[Step 729] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 730] Action: [Move to RIGHT ARM]\n", - "[Step 730] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 731] Action: [Move to RIGHT ARM]\n", - "[Step 731] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 732] Action: [Move to RIGHT ARM]\n", - "[Step 732] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 733] Action: [Move to RIGHT ARM]\n", - "[Step 733] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 734] Action: [Move to RIGHT ARM]\n", - "[Step 734] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 735] Action: [Move to RIGHT ARM]\n", - "[Step 735] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 736] Action: [Move to RIGHT ARM]\n", - "[Step 736] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 737] Action: [Move to RIGHT ARM]\n", - "[Step 737] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 738] Action: [Move to RIGHT ARM]\n", - "[Step 738] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 739] Action: [Move to RIGHT ARM]\n", - "[Step 739] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 740] Action: [Move to RIGHT ARM]\n", - "[Step 740] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 741] Action: [Move to RIGHT ARM]\n", - "[Step 741] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 742] Action: [Move to RIGHT ARM]\n", - "[Step 742] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 743] Action: [Move to RIGHT ARM]\n", - "[Step 743] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 744] Action: [Move to RIGHT ARM]\n", - "[Step 744] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 745] Action: [Move to RIGHT ARM]\n", - "[Step 745] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 746] Action: [Move to RIGHT ARM]\n", - "[Step 746] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 747] Action: [Move to RIGHT ARM]\n", - "[Step 747] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 748] Action: [Move to RIGHT ARM]\n", - "[Step 748] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 749] Action: [Move to RIGHT ARM]\n", - "[Step 749] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 750] Action: [Move to RIGHT ARM]\n", - "[Step 750] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 751] Action: [Move to RIGHT ARM]\n", - "[Step 751] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 752] Action: [Move to RIGHT ARM]\n", - "[Step 752] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 753] Action: [Move to RIGHT ARM]\n", - "[Step 753] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 754] Action: [Move to RIGHT ARM]\n", - "[Step 754] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 755] Action: [Move to RIGHT ARM]\n", - "[Step 755] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 756] Action: [Move to RIGHT ARM]\n", - "[Step 756] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 757] Action: [Move to RIGHT ARM]\n", - "[Step 757] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 758] Action: [Move to RIGHT ARM]\n", - "[Step 758] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 759] Action: [Move to RIGHT ARM]\n", - "[Step 759] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 760] Action: [Move to RIGHT ARM]\n", - "[Step 760] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 761] Action: [Move to RIGHT ARM]\n", - "[Step 761] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 762] Action: [Move to RIGHT ARM]\n", - "[Step 762] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 763] Action: [Move to RIGHT ARM]\n", - "[Step 763] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 764] Action: [Move to RIGHT ARM]\n", - "[Step 764] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 765] Action: [Move to RIGHT ARM]\n", - "[Step 765] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 766] Action: [Move to RIGHT ARM]\n", - "[Step 766] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 767] Action: [Move to RIGHT ARM]\n", - "[Step 767] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 768] Action: [Move to RIGHT ARM]\n", - "[Step 768] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 769] Action: [Move to RIGHT ARM]\n", - "[Step 769] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 770] Action: [Move to RIGHT ARM]\n", - "[Step 770] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 771] Action: [Move to RIGHT ARM]\n", - "[Step 771] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 772] Action: [Move to RIGHT ARM]\n", - "[Step 772] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 773] Action: [Move to RIGHT ARM]\n", - "[Step 773] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 774] Action: [Move to RIGHT ARM]\n", - "[Step 774] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 775] Action: [Move to RIGHT ARM]\n", - "[Step 775] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 776] Action: [Move to RIGHT ARM]\n", - "[Step 776] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 777] Action: [Move to RIGHT ARM]\n", - "[Step 777] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 778] Action: [Move to RIGHT ARM]\n", - "[Step 778] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 779] Action: [Move to RIGHT ARM]\n", - "[Step 779] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 780] Action: [Move to RIGHT ARM]\n", - "[Step 780] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 781] Action: [Move to RIGHT ARM]\n", - "[Step 781] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 782] Action: [Move to RIGHT ARM]\n", - "[Step 782] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 783] Action: [Move to RIGHT ARM]\n", - "[Step 783] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 784] Action: [Move to RIGHT ARM]\n", - "[Step 784] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 785] Action: [Move to RIGHT ARM]\n", - "[Step 785] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 786] Action: [Move to RIGHT ARM]\n", - "[Step 786] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 787] Action: [Move to RIGHT ARM]\n", - "[Step 787] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 788] Action: [Move to RIGHT ARM]\n", - "[Step 788] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 789] Action: [Move to RIGHT ARM]\n", - "[Step 789] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 790] Action: [Move to RIGHT ARM]\n", - "[Step 790] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 791] Action: [Move to RIGHT ARM]\n", - "[Step 791] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 792] Action: [Move to RIGHT ARM]\n", - "[Step 792] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 793] Action: [Move to RIGHT ARM]\n", - "[Step 793] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 794] Action: [Move to RIGHT ARM]\n", - "[Step 794] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 795] Action: [Move to RIGHT ARM]\n", - "[Step 795] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 796] Action: [Move to RIGHT ARM]\n", - "[Step 796] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 797] Action: [Move to RIGHT ARM]\n", - "[Step 797] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 798] Action: [Move to RIGHT ARM]\n", - "[Step 798] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 799] Action: [Move to RIGHT ARM]\n", - "[Step 799] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 800] Action: [Move to RIGHT ARM]\n", - "[Step 800] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 801] Action: [Move to RIGHT ARM]\n", - "[Step 801] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 802] Action: [Move to RIGHT ARM]\n", - "[Step 802] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 803] Action: [Move to RIGHT ARM]\n", - "[Step 803] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 804] Action: [Move to RIGHT ARM]\n", - "[Step 804] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 805] Action: [Move to RIGHT ARM]\n", - "[Step 805] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 806] Action: [Move to RIGHT ARM]\n", - "[Step 806] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 807] Action: [Move to RIGHT ARM]\n", - "[Step 807] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 808] Action: [Move to RIGHT ARM]\n", - "[Step 808] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 809] Action: [Move to RIGHT ARM]\n", - "[Step 809] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 810] Action: [Move to RIGHT ARM]\n", - "[Step 810] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 811] Action: [Move to RIGHT ARM]\n", - "[Step 811] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 812] Action: [Move to RIGHT ARM]\n", - "[Step 812] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 813] Action: [Move to RIGHT ARM]\n", - "[Step 813] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 814] Action: [Move to RIGHT ARM]\n", - "[Step 814] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 815] Action: [Move to RIGHT ARM]\n", - "[Step 815] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 816] Action: [Move to RIGHT ARM]\n", - "[Step 816] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 817] Action: [Move to RIGHT ARM]\n", - "[Step 817] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 818] Action: [Move to RIGHT ARM]\n", - "[Step 818] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 819] Action: [Move to RIGHT ARM]\n", - "[Step 819] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 820] Action: [Move to RIGHT ARM]\n", - "[Step 820] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 821] Action: [Move to RIGHT ARM]\n", - "[Step 821] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 822] Action: [Move to RIGHT ARM]\n", - "[Step 822] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 823] Action: [Move to RIGHT ARM]\n", - "[Step 823] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 824] Action: [Move to RIGHT ARM]\n", - "[Step 824] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 825] Action: [Move to RIGHT ARM]\n", - "[Step 825] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 826] Action: [Move to RIGHT ARM]\n", - "[Step 826] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 827] Action: [Move to RIGHT ARM]\n", - "[Step 827] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 828] Action: [Move to RIGHT ARM]\n", - "[Step 828] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 829] Action: [Move to RIGHT ARM]\n", - "[Step 829] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 830] Action: [Move to RIGHT ARM]\n", - "[Step 830] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 831] Action: [Move to RIGHT ARM]\n", - "[Step 831] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 832] Action: [Move to RIGHT ARM]\n", - "[Step 832] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 833] Action: [Move to RIGHT ARM]\n", - "[Step 833] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 834] Action: [Move to RIGHT ARM]\n", - "[Step 834] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 835] Action: [Move to RIGHT ARM]\n", - "[Step 835] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 836] Action: [Move to RIGHT ARM]\n", - "[Step 836] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 837] Action: [Move to RIGHT ARM]\n", - "[Step 837] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 838] Action: [Move to RIGHT ARM]\n", - "[Step 838] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 839] Action: [Move to RIGHT ARM]\n", - "[Step 839] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 840] Action: [Move to RIGHT ARM]\n", - "[Step 840] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 841] Action: [Move to RIGHT ARM]\n", - "[Step 841] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 842] Action: [Move to RIGHT ARM]\n", - "[Step 842] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 843] Action: [Move to RIGHT ARM]\n", - "[Step 843] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 844] Action: [Move to RIGHT ARM]\n", - "[Step 844] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 845] Action: [Move to RIGHT ARM]\n", - "[Step 845] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 846] Action: [Move to RIGHT ARM]\n", - "[Step 846] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 847] Action: [Move to RIGHT ARM]\n", - "[Step 847] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 848] Action: [Move to RIGHT ARM]\n", - "[Step 848] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 849] Action: [Move to RIGHT ARM]\n", - "[Step 849] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 850] Action: [Move to RIGHT ARM]\n", - "[Step 850] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 851] Action: [Move to RIGHT ARM]\n", - "[Step 851] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 852] Action: [Move to RIGHT ARM]\n", - "[Step 852] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 853] Action: [Move to RIGHT ARM]\n", - "[Step 853] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 854] Action: [Move to RIGHT ARM]\n", - "[Step 854] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 855] Action: [Move to RIGHT ARM]\n", - "[Step 855] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 856] Action: [Move to RIGHT ARM]\n", - "[Step 856] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 857] Action: [Move to RIGHT ARM]\n", - "[Step 857] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 858] Action: [Move to RIGHT ARM]\n", - "[Step 858] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 859] Action: [Move to RIGHT ARM]\n", - "[Step 859] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 860] Action: [Move to RIGHT ARM]\n", - "[Step 860] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 861] Action: [Move to RIGHT ARM]\n", - "[Step 861] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 862] Action: [Move to RIGHT ARM]\n", - "[Step 862] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 863] Action: [Move to RIGHT ARM]\n", - "[Step 863] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 864] Action: [Move to RIGHT ARM]\n", - "[Step 864] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 865] Action: [Move to RIGHT ARM]\n", - "[Step 865] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 866] Action: [Move to RIGHT ARM]\n", - "[Step 866] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 867] Action: [Move to RIGHT ARM]\n", - "[Step 867] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 868] Action: [Move to RIGHT ARM]\n", - "[Step 868] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 869] Action: [Move to RIGHT ARM]\n", - "[Step 869] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 870] Action: [Move to RIGHT ARM]\n", - "[Step 870] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 871] Action: [Move to RIGHT ARM]\n", - "[Step 871] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 872] Action: [Move to RIGHT ARM]\n", - "[Step 872] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 873] Action: [Move to RIGHT ARM]\n", - "[Step 873] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 874] Action: [Move to RIGHT ARM]\n", - "[Step 874] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 875] Action: [Move to RIGHT ARM]\n", - "[Step 875] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 876] Action: [Move to RIGHT ARM]\n", - "[Step 876] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 877] Action: [Move to RIGHT ARM]\n", - "[Step 877] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 878] Action: [Move to RIGHT ARM]\n", - "[Step 878] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 879] Action: [Move to RIGHT ARM]\n", - "[Step 879] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 880] Action: [Move to RIGHT ARM]\n", - "[Step 880] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 881] Action: [Move to RIGHT ARM]\n", - "[Step 881] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 882] Action: [Move to RIGHT ARM]\n", - "[Step 882] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 883] Action: [Move to RIGHT ARM]\n", - "[Step 883] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 884] Action: [Move to RIGHT ARM]\n", - "[Step 884] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 885] Action: [Move to RIGHT ARM]\n", - "[Step 885] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 886] Action: [Move to RIGHT ARM]\n", - "[Step 886] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 887] Action: [Move to RIGHT ARM]\n", - "[Step 887] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 888] Action: [Move to RIGHT ARM]\n", - "[Step 888] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 889] Action: [Move to RIGHT ARM]\n", - "[Step 889] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 890] Action: [Move to RIGHT ARM]\n", - "[Step 890] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 891] Action: [Move to RIGHT ARM]\n", - "[Step 891] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 892] Action: [Move to RIGHT ARM]\n", - "[Step 892] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 893] Action: [Move to RIGHT ARM]\n", - "[Step 893] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 894] Action: [Move to RIGHT ARM]\n", - "[Step 894] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 895] Action: [Move to RIGHT ARM]\n", - "[Step 895] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 896] Action: [Move to RIGHT ARM]\n", - "[Step 896] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 897] Action: [Move to RIGHT ARM]\n", - "[Step 897] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 898] Action: [Move to RIGHT ARM]\n", - "[Step 898] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 899] Action: [Move to RIGHT ARM]\n", - "[Step 899] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 900] Action: [Move to RIGHT ARM]\n", - "[Step 900] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 901] Action: [Move to RIGHT ARM]\n", - "[Step 901] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 902] Action: [Move to RIGHT ARM]\n", - "[Step 902] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 903] Action: [Move to RIGHT ARM]\n", - "[Step 903] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 904] Action: [Move to RIGHT ARM]\n", - "[Step 904] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 905] Action: [Move to RIGHT ARM]\n", - "[Step 905] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 906] Action: [Move to RIGHT ARM]\n", - "[Step 906] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 907] Action: [Move to RIGHT ARM]\n", - "[Step 907] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 908] Action: [Move to RIGHT ARM]\n", - "[Step 908] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 909] Action: [Move to RIGHT ARM]\n", - "[Step 909] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 910] Action: [Move to RIGHT ARM]\n", - "[Step 910] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 911] Action: [Move to RIGHT ARM]\n", - "[Step 911] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 912] Action: [Move to RIGHT ARM]\n", - "[Step 912] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 913] Action: [Move to RIGHT ARM]\n", - "[Step 913] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 914] Action: [Move to RIGHT ARM]\n", - "[Step 914] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 915] Action: [Move to RIGHT ARM]\n", - "[Step 915] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 916] Action: [Move to RIGHT ARM]\n", - "[Step 916] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 917] Action: [Move to RIGHT ARM]\n", - "[Step 917] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 918] Action: [Move to RIGHT ARM]\n", - "[Step 918] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 919] Action: [Move to RIGHT ARM]\n", - "[Step 919] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 920] Action: [Move to RIGHT ARM]\n", - "[Step 920] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 921] Action: [Move to RIGHT ARM]\n", - "[Step 921] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 922] Action: [Move to RIGHT ARM]\n", - "[Step 922] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 923] Action: [Move to RIGHT ARM]\n", - "[Step 923] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 924] Action: [Move to RIGHT ARM]\n", - "[Step 924] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 925] Action: [Move to RIGHT ARM]\n", - "[Step 925] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 926] Action: [Move to RIGHT ARM]\n", - "[Step 926] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 927] Action: [Move to RIGHT ARM]\n", - "[Step 927] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 928] Action: [Move to RIGHT ARM]\n", - "[Step 928] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 929] Action: [Move to RIGHT ARM]\n", - "[Step 929] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 930] Action: [Move to RIGHT ARM]\n", - "[Step 930] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 931] Action: [Move to RIGHT ARM]\n", - "[Step 931] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 932] Action: [Move to RIGHT ARM]\n", - "[Step 932] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 933] Action: [Move to RIGHT ARM]\n", - "[Step 933] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 934] Action: [Move to RIGHT ARM]\n", - "[Step 934] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 935] Action: [Move to RIGHT ARM]\n", - "[Step 935] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 936] Action: [Move to RIGHT ARM]\n", - "[Step 936] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 937] Action: [Move to RIGHT ARM]\n", - "[Step 937] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 938] Action: [Move to RIGHT ARM]\n", - "[Step 938] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 939] Action: [Move to RIGHT ARM]\n", - "[Step 939] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 940] Action: [Move to RIGHT ARM]\n", - "[Step 940] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 941] Action: [Move to RIGHT ARM]\n", - "[Step 941] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 942] Action: [Move to RIGHT ARM]\n", - "[Step 942] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 943] Action: [Move to RIGHT ARM]\n", - "[Step 943] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 944] Action: [Move to RIGHT ARM]\n", - "[Step 944] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 945] Action: [Move to RIGHT ARM]\n", - "[Step 945] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 946] Action: [Move to RIGHT ARM]\n", - "[Step 946] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 947] Action: [Move to RIGHT ARM]\n", - "[Step 947] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 948] Action: [Move to RIGHT ARM]\n", - "[Step 948] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 949] Action: [Move to RIGHT ARM]\n", - "[Step 949] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 950] Action: [Move to RIGHT ARM]\n", - "[Step 950] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 951] Action: [Move to RIGHT ARM]\n", - "[Step 951] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 952] Action: [Move to RIGHT ARM]\n", - "[Step 952] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 953] Action: [Move to RIGHT ARM]\n", - "[Step 953] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 954] Action: [Move to RIGHT ARM]\n", - "[Step 954] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 955] Action: [Move to RIGHT ARM]\n", - "[Step 955] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 956] Action: [Move to RIGHT ARM]\n", - "[Step 956] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 957] Action: [Move to RIGHT ARM]\n", - "[Step 957] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 958] Action: [Move to RIGHT ARM]\n", - "[Step 958] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 959] Action: [Move to RIGHT ARM]\n", - "[Step 959] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 960] Action: [Move to RIGHT ARM]\n", - "[Step 960] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 961] Action: [Move to RIGHT ARM]\n", - "[Step 961] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 962] Action: [Move to RIGHT ARM]\n", - "[Step 962] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 963] Action: [Move to RIGHT ARM]\n", - "[Step 963] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 964] Action: [Move to RIGHT ARM]\n", - "[Step 964] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 965] Action: [Move to RIGHT ARM]\n", - "[Step 965] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 966] Action: [Move to RIGHT ARM]\n", - "[Step 966] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 967] Action: [Move to RIGHT ARM]\n", - "[Step 967] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 968] Action: [Move to RIGHT ARM]\n", - "[Step 968] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 969] Action: [Move to RIGHT ARM]\n", - "[Step 969] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 970] Action: [Move to RIGHT ARM]\n", - "[Step 970] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 971] Action: [Move to RIGHT ARM]\n", - "[Step 971] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 972] Action: [Move to RIGHT ARM]\n", - "[Step 972] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 973] Action: [Move to RIGHT ARM]\n", - "[Step 973] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 974] Action: [Move to RIGHT ARM]\n", - "[Step 974] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 975] Action: [Move to RIGHT ARM]\n", - "[Step 975] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 976] Action: [Move to RIGHT ARM]\n", - "[Step 976] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 977] Action: [Move to RIGHT ARM]\n", - "[Step 977] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 978] Action: [Move to RIGHT ARM]\n", - "[Step 978] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 979] Action: [Move to RIGHT ARM]\n", - "[Step 979] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 980] Action: [Move to RIGHT ARM]\n", - "[Step 980] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 981] Action: [Move to RIGHT ARM]\n", - "[Step 981] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 982] Action: [Move to RIGHT ARM]\n", - "[Step 982] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 983] Action: [Move to RIGHT ARM]\n", - "[Step 983] Observation: [RIGHT ARM, Loss!, Null]\n", - "[Step 984] Action: [Move to RIGHT ARM]\n", - "[Step 984] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 985] Action: [Move to RIGHT ARM]\n", - "[Step 985] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 986] Action: [Move to RIGHT ARM]\n", - "[Step 986] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 987] Action: [Move to RIGHT ARM]\n", - "[Step 987] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 988] Action: [Move to RIGHT ARM]\n", - "[Step 988] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 989] Action: [Move to RIGHT ARM]\n", - "[Step 989] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 990] Action: [Move to RIGHT ARM]\n", - "[Step 990] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 991] Action: [Move to RIGHT ARM]\n", - "[Step 991] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 992] Action: [Move to RIGHT ARM]\n", - "[Step 992] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 993] Action: [Move to RIGHT ARM]\n", - "[Step 993] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 994] Action: [Move to RIGHT ARM]\n", - "[Step 994] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 995] Action: [Move to RIGHT ARM]\n", - "[Step 995] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 996] Action: [Move to RIGHT ARM]\n", - "[Step 996] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 997] Action: [Move to RIGHT ARM]\n", - "[Step 997] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 998] Action: [Move to RIGHT ARM]\n", - "[Step 998] Observation: [RIGHT ARM, Reward!, Null]\n", - "[Step 999] Action: [Move to RIGHT ARM]\n", - "[Step 999] Observation: [RIGHT ARM, Loss!, Null]\n" - ] - } - ], - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], "source": [ "plot_likelihood(agent.A[1][1:,:,0],'Final beliefs about reward contingencies under the condition that the reward condition is RIGHT ARM BETTER')\n", "plot_likelihood(A_gp[1][1:,:,0],'True reward contingencies under the condition that the reward condition is RIGHT ARM BETTER')\n", "\n", "plot_likelihood(agent.A[1][1:,:,1],'Final beliefs about reward contingencies under the condition that the reward condition is LEFT ARM BETTER')\n", "plot_likelihood(A_gp[1][1:,:,0],'True reward contingencies under the condition that the reward condition is LEFT ARM BETTER')\n" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T17:07:41.150298\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T17:07:41.380173\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T17:07:41.580477\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T17:07:41.816180\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": { - "scrolled": true - } + ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plot_likelihood(agent.A[2][1:,:,1],'Final beliefs about cue mapping')\n", "plot_likelihood(A_gp[2][1:,:,1],'True contingencies underlying the cue mapping')" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T17:07:55.588602\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-12T17:07:55.743561\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} + ] } ], "metadata": { + "interpreter": { + "hash": "24ee14d9f6452059a99d44b6cbd71d1bb479b0539b0360a6a17428ecea9f0810" + }, "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.10 64-bit ('pymdp_env': conda)" + "display_name": "Python 3.8.10 64-bit ('pymdp_env2': conda)", + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -2389,12 +262,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.10" - }, - "interpreter": { - "hash": "4144ffdb2ef81a5a74efd1d0bf9253d3fe81ec80475fd1008a839668d590b806" + "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/examples/B_matrix_demo.ipynb b/experimental/old_examples/B_matrix_demo.ipynb similarity index 100% rename from examples/B_matrix_demo.ipynb rename to experimental/old_examples/B_matrix_demo.ipynb diff --git a/examples/B_matrix_demo.py b/experimental/old_examples/B_matrix_demo.py similarity index 100% rename from examples/B_matrix_demo.py rename to experimental/old_examples/B_matrix_demo.py