{ "cells": [ { "cell_type": "markdown", "id": "49fac655-3b46-48f1-b9b2-320ba54dadc2", "metadata": {}, "source": [ "# Quickstart Guide\n", "\n", "What is better than getting into learning agents by letting them play Tic-Tac-Toe? After all, its a popcultural classic!\n", "\n", "## Setting up a Game of Tic-Tac-Toe\n", "\n", "In palaestrAI, everything is controlled through an experiment run file, so we first need to set up one. Experiment run files define agents, environment, when episodes terminate, and so on. You can read about this further in the documentation; for now, let's just accept the following YAML code as-is:" ] }, { "cell_type": "code", "execution_count": 1, "id": "28bc4cd5-74fc-475b-8885-2fb2f1872f2d", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:29:10.825988Z", "iopub.status.busy": "2025-04-26T21:29:10.825138Z", "iopub.status.idle": "2025-04-26T21:29:10.836582Z", "shell.execute_reply": "2025-04-26T21:29:10.835192Z" } }, "outputs": [], "source": [ "ttt_run = \"\"\"\n", "uid: A Training Match of Tic-Tac-Toe\n", "experiment_uid: Tic-Tac-Toe\n", "seed: 234247\n", "version: \"3.5\"\n", "schedule:\n", " - Training:\n", " environments:\n", " - environment:\n", " name: palaestrai_environments.tictactoe:TicTacToeEnvironment\n", " uid: tttenv\n", " params:\n", " twoplayer: true\n", " agents:\n", " - &player\n", " name: Player 1\n", " brain:\n", " name: harl:PPOBrain\n", " params:\n", " fc_dims: [2, 1]\n", " muscle:\n", " name: harl:PPOMuscle\n", " params: {}\n", " objective:\n", " name: palaestrai.agent.dummy_objective:DummyObjective\n", " params: {}\n", " sensors:\n", " - tttenv.Tile 1-1\n", " - tttenv.Tile 1-2\n", " - tttenv.Tile 1-3\n", " - tttenv.Tile 2-1\n", " - tttenv.Tile 2-2\n", " - tttenv.Tile 2-3\n", " - tttenv.Tile 3-1\n", " - tttenv.Tile 3-2\n", " - tttenv.Tile 3-3\n", " actuators:\n", " - tttenv.Field selector\n", " - <<: *player\n", " name: Player 2\n", " simulation:\n", " name: palaestrai.simulation:TakingTurns\n", " conditions:\n", " - name: palaestrai.experiment:AgentObjectiveTerminationCondition\n", " params:\n", " \"Player 1\":\n", " brain_avg1: 10.0\n", " \"Player 2\":\n", " brain_avg1: 10.0\n", " phase_config:\n", " mode: train\n", " worker: 3\n", "run_config: # Not a runTIME config\n", " condition:\n", " name: palaestrai.experiment:AgentObjectiveTerminationCondition\n", " params:\n", " \"Player 1\":\n", " phase_avg10: 5.0\n", " \"Player 2\":\n", " phase_avg10: 5.0\n", "\"\"\"" ] }, { "cell_type": "markdown", "id": "feebccc4-3dd9-49d9-abf7-2463326322eb", "metadata": {}, "source": [ "## Creating a Results Storage Database\n", "\n", "Later on see the results, we need to tell palaestrAI where it can store all results data. A convenient option is to use a local SQLite database, which we will enable and create here.\n", "\n", "palaestrAI will probably tell you that using SQLite is not ideal in terms of performance. For local experiments, this doesn't concern us, though." ] }, { "cell_type": "code", "execution_count": 2, "id": "4e4c7288-d8e5-46a4-9e77-50c3aa1e60d3", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:29:10.841934Z", "iopub.status.busy": "2025-04-26T21:29:10.841323Z", "iopub.status.idle": "2025-04-26T21:29:15.564827Z", "shell.execute_reply": "2025-04-26T21:29:15.563756Z" }, "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Importing from 'midas.tools.palaestrai' is deprecated! Use 'midas_palaestrai' instead!\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Importing from 'midas.tools.palaestrai' is deprecated! Use 'midas_palaestrai' instead!\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not create extension timescaledb and create hypertables: (sqlite3.OperationalError) near \"EXTENSION\": syntax error\n", "[SQL: CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8). Your database setup might lead to noticeable slowdowns with larger experiment runs. Please upgrade to PostgreSQL with TimescaleDB for the best performance.\n" ] } ], "source": [ "import palaestrai\n", "rconf = palaestrai.core.RuntimeConfig()\n", "rconf.reset()\n", "rconf.load({\"store_uri\": \"sqlite:///palaestrai.db\"})\n", "palaestrai.store.setup_database()" ] }, { "cell_type": "markdown", "id": "91706794-1da1-4d80-85e8-dcba0bc55724", "metadata": {}, "source": [ "## Learning the Game\n", "\n", "Now we can execute the training run defined above. The `palaestrai.execute()` command accepts a list of strings as well as an `io` object. If strings are given, it is assumed they are paths to YAML files; `io` objects are considered to provide access to the contests directly. Therefore, we use `io.StringIO` to access our YAML document defined above.\n", "\n", "`palaestrai.execute()` will now commence the training. It might take a while to run; after all, we want to traing until one of the agent avieves a consistently high average reward." ] }, { "cell_type": "code", "execution_count": 3, "id": "ac1b3930-b6ee-4e6d-be38-10ff938ca24c", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:29:15.569049Z", "iopub.status.busy": "2025-04-26T21:29:15.568302Z", "iopub.status.idle": "2025-04-26T21:39:00.381846Z", "shell.execute_reply": "2025-04-26T21:39:00.380083Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_actor', None, None, 2)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_actor', None, None, 1)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_critic', None, None, 2)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_critic', None, None, 1)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_actor', None, None, 2)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_actor', None, None, 1)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_critic', None, None, 2)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_critic', None, None, 1)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_actor', None, None, 2)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_actor', None, None, 1)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_critic', None, None, 2)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Could not dump to : (sqlite3.OperationalError) database is locked\n", "[SQL: INSERT INTO brain_states (walltime, state, tag, simtime_ticks, simtime_timestamp, agent_id) VALUES (CURRENT_TIMESTAMP, ?, ?, ?, ?, ?)]\n", "[parameters: (, 'ppo_critic', None, None, 1)]\n", "(Background on this error at: https://sqlalche.me/e/14/e3q8)\n" ] }, { "data": { "text/plain": [ "(['A Training Match of Tic-Tac-Toe'], )" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import io\n", "palaestrai.execute(io.StringIO(ttt_run))" ] }, { "cell_type": "markdown", "id": "d77b8742-ddaa-4325-8d59-ffbed01839e6", "metadata": {}, "source": [ "## Accessing Results\n", "\n", "palaestrAI offers a small convenience interface to access the data most people will want to see. The functions are part of he `palaestrai.store.query` package:" ] }, { "cell_type": "code", "execution_count": 4, "id": "d1486236-7dd5-4278-a8fb-5b4cb91c8fc1", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:39:00.388835Z", "iopub.status.busy": "2025-04-26T21:39:00.387501Z", "iopub.status.idle": "2025-04-26T21:39:00.395473Z", "shell.execute_reply": "2025-04-26T21:39:00.393666Z" } }, "outputs": [], "source": [ "import palaestrai.store.query as palq" ] }, { "cell_type": "markdown", "id": "30c7bdf1-026a-493f-97e3-28a97801bcd5", "metadata": {}, "source": [ "All these functions return pandas or dask dataframes, which makes them also useful in Jupyter notebooks. Let's first see what experiments our database has logged so far (there should be only one):" ] }, { "cell_type": "code", "execution_count": 5, "id": "86fa2bdf-cbcd-4f94-95be-1dbb936066f9", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:39:00.401887Z", "iopub.status.busy": "2025-04-26T21:39:00.401115Z", "iopub.status.idle": "2025-04-26T21:39:00.489988Z", "shell.execute_reply": "2025-04-26T21:39:00.488157Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
experiment_idexperiment_nameexperiment_documentexperiment_run_idexperiment_run_uidexperiment_run_documentexperiment_run_instance_idexperiment_run_instance_uidexperiment_run_phase_idexperiment_run_phase_uidexperiment_run_phase_mode
01Tic-Tac-ToeNone1A Training Match of Tic-Tac-Toe{'uid': 'A Training Match of Tic-Tac-Toe', 'ex...1d64ed154-ce8f-46fa-8563-a226f4d2ff941Trainingtrain
\n", "
" ], "text/plain": [ " experiment_id experiment_name experiment_document experiment_run_id \\\n", "0 1 Tic-Tac-Toe None 1 \n", "\n", " experiment_run_uid \\\n", "0 A Training Match of Tic-Tac-Toe \n", "\n", " experiment_run_document \\\n", "0 {'uid': 'A Training Match of Tic-Tac-Toe', 'ex... \n", "\n", " experiment_run_instance_id experiment_run_instance_uid \\\n", "0 1 d64ed154-ce8f-46fa-8563-a226f4d2ff94 \n", "\n", " experiment_run_phase_id experiment_run_phase_uid experiment_run_phase_mode \n", "0 1 Training train " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exps = palq.experiments_and_runs_configurations()\n", "exps" ] }, { "cell_type": "markdown", "id": "753650c2-c54a-4675-b94b-8ecd0fe15b95", "metadata": {}, "source": [ "Our two agents have competed for a number of episodes. Let's see their cumulative reward. For this, we have a query function called `muscles_cumulative_objective()`. Two things are of note here.\n", "\n", "First, palaestrAI names its agents “Muscles.” This naming is in contrast to the learning part, which is named “Brain.” You're probably asking yourself now “why the funny names?” The reason lies in palaestrAI's architecture, which tries to hide as much of the technical details of the actual execution as possible; so an agent's “Brain” and its “Muscles” are metaphores for the pure algorithm implementations.\n", "\n", "Second, you might notice the function parameter `like_dataframe`. Almost every query function has this. It allows you to pass a dataframe for filtering; palaestrAI then constructs the underlying SQL query according to the dataframe's columns. We're demonstrating one possible convenient application of this here. First, we got the list of all experiments, runs, and phases in the previous cell. Now, we use pandas' filtering to reduce the rows to those experiment runs we're interested in. This reduced dataframe can the be passed to our next query function: This way, we retrieve only the cumulative values for the phases we really want to analyize." ] }, { "cell_type": "code", "execution_count": 6, "id": "6d0853c5-31a4-4d46-b347-d80a202dee4b", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:39:00.495525Z", "iopub.status.busy": "2025-04-26T21:39:00.494601Z", "iopub.status.idle": "2025-04-26T21:39:01.829108Z", "shell.execute_reply": "2025-04-26T21:39:01.827912Z" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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Tvjnn39w4MABzJs3D5MmTSryC00fWVlZaNq0KbZv346zZ89iwIAB6N27N44fPw4gv3smNDQUH374IZKSkpCUlFRoeR1nZ2e8/vrriIqK0tq+fv16dOnSBfb29sjNzUV4eDicnJxw8OBBHDp0CI6OjujQoUOR/+svaOnSpVi4cCE+//xznDlzBuHh4XjjjTdw6dIlrXJjxozB6NGjcerUKYSGhqJz5864e/euzmM+ePAAr7zyCho3bowTJ05g165dSElJQbdu3aQyEyZMwNy5czF58mTExcUhKipKWo9Rc480rSo///xzoXN07doVd+/exb59+6Rt9+7dw65du9CrVy8A+f9G+vTpg+HDhyMuLg5fffUV1q5dqxXMGkOpzP9eKOr+WllZYdmyZTh37hzWrVuH33//HWPHjgUAODg4oEePHlizZo3Wa9asWYN33nkHTk5Oer+nMTExiI+PR3R0NH777Te96q5Wq/Hw4UNUqVJFa3vz5s1x/PjxYiclLhPGL+pecRiyvLzJnf9NiKnO+Y9Le81dGzKxzMxMERcXJzIzM59szE5/8jdQno/sdL3rHRERIfr376+1bd++fQKA2Lv3yd/tnDlzBACRkJAgbRs4cKAIDw+XngcEBIjFixdrHathw4Zi6tSpQgghFi5cKJ5//nmRk5NTqB7x8fECgIiOjtZZT02d7t+/L4QQIjIyUgwYMECrzMGDB4WVlZX2e6BDSedas2aNcHFx0dq2detWUfBjdurUqcLe3l6kpaVJ28LDw0VgYKBQqVTSttq1a4s5c+YIIYRITEwUAMSpU6ek/ffv3xcAxL59+3Repy6dOnUSo0ePlp63adNGDB8+XKvM08fZunWrcHR0FBkZGUKI/M9KOzs7sXPnTiGEEN9//72oXbu2UKvV0jGys7OFUqkUu3fvLrIuGr6+vmLWrFla21588UUxePBgrWufO3eutD83N1dUr15dzJs3T+f9mTFjhmjfvr3WMW/cuCEAiPj4eJGWliYUCoX4+uuvddZJ1/0WQoi+ffuKiIgI6fnT/wa++uor4evrK72Pr776qpg9e7bWMb7//nvh4+NTwl0pui73798Xb775pnB0dBTJyclCCN3/fgrasmWLqFq1qvT82LFjwtraWty6dUsIIURKSoqwsbER+/fvl+pY0nvat29f4eXlJbKzs/W+FiGEmDdvnnBz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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cumobj = palq.muscles_cumulative_objective(like_dataframe=exps.iloc[[-1]])\n", "cumobj[\n", " [\"agent_name\", \"muscle_actions_episode\", \"muscle_cumulative_objective\"]\n", "].set_index(\n", " \"muscle_actions_episode\"\n", ").pivot_table(\n", " columns=[\"agent_name\"],\n", " values=[\"muscle_cumulative_objective\"],\n", " index=[\"muscle_actions_episode\"]\n", ").plot()" ] }, { "cell_type": "markdown", "id": "f7a8e250-91db-47be-988f-371cab905009", "metadata": {}, "source": [ "## The Real Match\n", "\n", "Training time is over, let's have a real competition! We will now schedule a separate run, but no longer as training episode, but for testing. Our next experiment run definition instructs palaestrAI to load the previously trained agents. To make things interesting, we let the better player compete against itself:" ] }, { "cell_type": "code", "execution_count": 7, "id": "fb4a7982-562c-4cc9-a03c-2ae74aa557eb", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:39:01.834040Z", "iopub.status.busy": "2025-04-26T21:39:01.833397Z", "iopub.status.idle": "2025-04-26T21:39:01.842316Z", "shell.execute_reply": "2025-04-26T21:39:01.841293Z" } }, "outputs": [], "source": [ "best_player = cumobj[\n", " [\"agent_name\", \"muscle_cumulative_objective\"]\n", "].groupby(\n", " by=[\"agent_name\"]\n", ").sum().sort_values(\n", " by=[\"muscle_cumulative_objective\"]\n", ").index[-1]" ] }, { "cell_type": "code", "execution_count": 8, "id": "5767a748-044f-4f7d-8d26-69c325adc3ee", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:39:01.846674Z", "iopub.status.busy": "2025-04-26T21:39:01.846304Z", "iopub.status.idle": "2025-04-26T21:39:01.852885Z", "shell.execute_reply": "2025-04-26T21:39:01.851429Z" } }, "outputs": [], "source": [ "ttt_test = \"\"\"\n", "uid: Game of Tic-Tac-Toe\n", "experiment_uid: Tic-Tac-Toe\n", "seed: 234247\n", "version: \"3.5\"\n", "schedule:\n", " - Test:\n", " environments:\n", " - environment:\n", " name: palaestrai_environments.tictactoe:TicTacToeEnvironment\n", " uid: tttenv\n", " params:\n", " twoplayer: true\n", " invalid_turn_limit: -1\n", " agents:\n", " - &player\n", " name: Player 1\n", " brain:\n", " name: harl:PPOBrain\n", " params:\n", " fc_dims: [2, 1]\n", " muscle:\n", " name: harl:PPOMuscle\n", " params: {}\n", " objective:\n", " name: palaestrai.agent.dummy_objective:DummyObjective\n", " params: {}\n", " load:\n", " experiment_run: A Training Match of Tic-Tac-Toe \n", " agent: %(best_player)s\n", " phase: 0\n", " sensors:\n", " - tttenv.Tile 1-1\n", " - tttenv.Tile 1-2\n", " - tttenv.Tile 1-3\n", " - tttenv.Tile 2-1\n", " - tttenv.Tile 2-2\n", " - tttenv.Tile 2-3\n", " - tttenv.Tile 3-1\n", " - tttenv.Tile 3-2\n", " - tttenv.Tile 3-3\n", " actuators:\n", " - tttenv.Field selector\n", " - <<: *player\n", " name: Player 2\n", " load:\n", " experiment_run: A Training Match of Tic-Tac-Toe \n", " agent: %(best_player)s\n", " phase: 0\n", " simulation:\n", " name: palaestrai.simulation:TakingTurns\n", " conditions:\n", " - name: palaestrai.experiment:EnvironmentTerminationCondition\n", " params: {}\n", " phase_config:\n", " mode: test\n", " worker: 1\n", " episodes: 1\n", "run_config: # Not a runTIME config\n", " condition:\n", " name: palaestrai.experiment:VanillaRunGovernorTerminationCondition\n", " params: {}\n", "\n", "\"\"\" % {\"best_player\": best_player}" ] }, { "cell_type": "code", "execution_count": 9, "id": "15618aed-8391-4175-9a81-c8f6ac024d5a", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:39:01.857504Z", "iopub.status.busy": "2025-04-26T21:39:01.857120Z", "iopub.status.idle": "2025-04-26T21:40:09.532953Z", "shell.execute_reply": "2025-04-26T21:40:09.531502Z" } }, "outputs": [ { "data": { "text/plain": [ "(['Game of Tic-Tac-Toe'], )" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "palaestrai.execute(io.StringIO(ttt_test))" ] }, { "cell_type": "markdown", "id": "058feaa1-fba0-4fee-8844-d498ab963c6d", "metadata": {}, "source": [ "After we're done, let's examine the list of experiment runs again. We can now filter for `test` runs:" ] }, { "cell_type": "code", "execution_count": 10, "id": "701ac364-cd59-4886-abe8-b8e826b18d30", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:40:09.538229Z", "iopub.status.busy": "2025-04-26T21:40:09.537703Z", "iopub.status.idle": "2025-04-26T21:40:09.571903Z", "shell.execute_reply": "2025-04-26T21:40:09.570379Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
experiment_idexperiment_nameexperiment_documentexperiment_run_idexperiment_run_uidexperiment_run_documentexperiment_run_instance_idexperiment_run_instance_uidexperiment_run_phase_idexperiment_run_phase_uidexperiment_run_phase_mode
11Tic-Tac-ToeNone2Game of Tic-Tac-Toe{'uid': 'Game of Tic-Tac-Toe', 'experiment_uid...2d11b4a34-6507-4e4f-94fb-dcca264a79762Testtest
\n", "
" ], "text/plain": [ " experiment_id experiment_name experiment_document experiment_run_id \\\n", "1 1 Tic-Tac-Toe None 2 \n", "\n", " experiment_run_uid experiment_run_document \\\n", "1 Game of Tic-Tac-Toe {'uid': 'Game of Tic-Tac-Toe', 'experiment_uid... \n", "\n", " experiment_run_instance_id experiment_run_instance_uid \\\n", "1 2 d11b4a34-6507-4e4f-94fb-dcca264a7976 \n", "\n", " experiment_run_phase_id experiment_run_phase_uid experiment_run_phase_mode \n", "1 2 Test test " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "exps = palq.experiments_and_runs_configurations()\n", "exps[(exps.experiment_name == \"Tic-Tac-Toe\") & (exps.experiment_run_phase_mode == \"test\")]" ] }, { "cell_type": "markdown", "id": "a9f0462b-7cb2-49a1-af72-ea643e90d2ed", "metadata": {}, "source": [ "This time, we're not after cumulative scores as we've instructed palaestrAI to play one match only. Let's get the individual moves of each player. We're using the `muscle_actions()` query function now. Like any other query function, we can pass it a dataframe with values we want to query (via the `like_dataframe` parameter). In this case, we're interested only in the actions of the test run, so let's use pandas' filtering capabilities:" ] }, { "cell_type": "code", "execution_count": 11, "id": "188200df-da70-45a0-aa1d-5bc8f52fb5b0", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:40:09.576448Z", "iopub.status.busy": "2025-04-26T21:40:09.575973Z", "iopub.status.idle": "2025-04-26T21:40:09.827672Z", "shell.execute_reply": "2025-04-26T21:40:09.825984Z" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
muscle_action_walltimemuscle_action_simtimesrollout_worker_uidmuscle_sensor_readingsmuscle_actuator_setpointsmuscle_action_rewardsmuscle_action_objectivemuscle_action_doneagent_idagent_uidagent_nameexperiment_run_phase_idexperiment_run_phase_uidexperiment_run_phase_configurationexperiment_run_instance_uidexperiment_run_idexperiment_run_uidexperiment_idexperiment_name
muscle_action_id
10522025-04-26 21:39:51.236292{'tttenv': {'simtime_ticks': 0, 'simtime_times...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=0, space=Discrete(3),...[ActuatorInformation(value=2, space=Discrete(9...[RewardInformation(value=[1.], space=Box(low=[...1.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10532025-04-26 21:39:51.313104{'tttenv': {'simtime_ticks': 1, 'simtime_times...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=0, space=Discrete(3),...[ActuatorInformation(value=0, space=Discrete(9...[RewardInformation(value=[1.], space=Box(low=[...1.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10542025-04-26 21:39:51.377685{'tttenv': {'simtime_ticks': 2, 'simtime_times...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=6, space=Discrete(9...[RewardInformation(value=[1.], space=Box(low=[...1.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10552025-04-26 21:39:51.431586{'tttenv': {'simtime_ticks': 3, 'simtime_times...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=1, space=Discrete(9...[RewardInformation(value=[1.], space=Box(low=[...1.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10562025-04-26 21:39:51.478556{'tttenv': {'simtime_ticks': 4, 'simtime_times...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=8, space=Discrete(9...[RewardInformation(value=[1.], space=Box(low=[...1.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10572025-04-26 21:39:51.572816{'tttenv': {'simtime_ticks': 5, 'simtime_times...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=7, space=Discrete(9...[RewardInformation(value=[1.], space=Box(low=[...1.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10582025-04-26 21:39:51.635500{'tttenv': {'simtime_ticks': 6, 'simtime_times...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=6, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10592025-04-26 21:39:51.682877{'tttenv': {'simtime_ticks': 7, 'simtime_times...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=0, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10602025-04-26 21:39:51.726250{'tttenv': {'simtime_ticks': 8, 'simtime_times...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=1, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10612025-04-26 21:39:51.763554{'tttenv': {'simtime_ticks': 9, 'simtime_times...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=5, space=Discrete(9...[RewardInformation(value=[1.], space=Box(low=[...1.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10622025-04-26 21:39:51.803152{'tttenv': {'simtime_ticks': 10, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=2, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10632025-04-26 21:39:51.843948{'tttenv': {'simtime_ticks': 11, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=7, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10642025-04-26 21:39:51.881714{'tttenv': {'simtime_ticks': 12, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=2, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10652025-04-26 21:39:51.913860{'tttenv': {'simtime_ticks': 13, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=0, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10662025-04-26 21:39:51.948376{'tttenv': {'simtime_ticks': 14, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=2, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10672025-04-26 21:39:51.980944{'tttenv': {'simtime_ticks': 15, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=2, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10682025-04-26 21:39:52.045097{'tttenv': {'simtime_ticks': 16, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=5, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10692025-04-26 21:39:52.078511{'tttenv': {'simtime_ticks': 17, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=2, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10702025-04-26 21:39:52.228608{'tttenv': {'simtime_ticks': 18, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=6, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10712025-04-26 21:39:52.260869{'tttenv': {'simtime_ticks': 19, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=1, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10722025-04-26 21:39:52.295799{'tttenv': {'simtime_ticks': 20, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=0, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10732025-04-26 21:39:52.333874{'tttenv': {'simtime_ticks': 21, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=6, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10742025-04-26 21:39:52.442603{'tttenv': {'simtime_ticks': 22, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=1, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10752025-04-26 21:39:52.482419{'tttenv': {'simtime_ticks': 23, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=5, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10762025-04-26 21:39:52.536087{'tttenv': {'simtime_ticks': 24, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=8, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10772025-04-26 21:39:52.587534{'tttenv': {'simtime_ticks': 25, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=2, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10782025-04-26 21:39:52.618585{'tttenv': {'simtime_ticks': 26, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=8, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10792025-04-26 21:39:52.660326{'tttenv': {'simtime_ticks': 27, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=0, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10802025-04-26 21:39:52.692892{'tttenv': {'simtime_ticks': 28, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=5, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10812025-04-26 21:39:52.723946{'tttenv': {'simtime_ticks': 29, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=0, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10822025-04-26 21:39:52.754750{'tttenv': {'simtime_ticks': 30, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=5, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0False3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10832025-04-26 21:39:52.785736{'tttenv': {'simtime_ticks': 32, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=4, space=Discrete(9...[RewardInformation(value=[10.], space=Box(low=...10.0True3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10842025-04-26 21:39:52.789901{'tttenv': {'simtime_ticks': 31, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=6, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0True4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10852025-04-26 21:39:52.827342{'tttenv': {'simtime_ticks': 33, 'simtime_time...AgentConductor-d4d27e.Player 1-fbba4f[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=0, space=Discrete(9...[RewardInformation(value=[10.], space=Box(low=...10.0True3AgentConductor-d4d27ePlayer 12Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
10862025-04-26 21:39:52.828217{'tttenv': {'simtime_ticks': 33, 'simtime_time...AgentConductor-251a3b.Player 2-a9c664[SensorInformation(value=1, space=Discrete(3),...[ActuatorInformation(value=1, space=Discrete(9...[RewardInformation(value=[-100.], space=Box(lo...-100.0True4AgentConductor-251a3bPlayer 22Test{'mode': 'test', 'worker': 1, 'episodes': 1}d11b4a34-6507-4e4f-94fb-dcca264a79762Game of Tic-Tac-Toe1Tic-Tac-Toe
\n", "
" ], "text/plain": [ " muscle_action_walltime \\\n", "muscle_action_id \n", "1052 2025-04-26 21:39:51.236292 \n", "1053 2025-04-26 21:39:51.313104 \n", "1054 2025-04-26 21:39:51.377685 \n", "1055 2025-04-26 21:39:51.431586 \n", "1056 2025-04-26 21:39:51.478556 \n", "1057 2025-04-26 21:39:51.572816 \n", "1058 2025-04-26 21:39:51.635500 \n", "1059 2025-04-26 21:39:51.682877 \n", "1060 2025-04-26 21:39:51.726250 \n", "1061 2025-04-26 21:39:51.763554 \n", "1062 2025-04-26 21:39:51.803152 \n", "1063 2025-04-26 21:39:51.843948 \n", "1064 2025-04-26 21:39:51.881714 \n", "1065 2025-04-26 21:39:51.913860 \n", "1066 2025-04-26 21:39:51.948376 \n", "1067 2025-04-26 21:39:51.980944 \n", "1068 2025-04-26 21:39:52.045097 \n", "1069 2025-04-26 21:39:52.078511 \n", "1070 2025-04-26 21:39:52.228608 \n", "1071 2025-04-26 21:39:52.260869 \n", "1072 2025-04-26 21:39:52.295799 \n", "1073 2025-04-26 21:39:52.333874 \n", "1074 2025-04-26 21:39:52.442603 \n", "1075 2025-04-26 21:39:52.482419 \n", "1076 2025-04-26 21:39:52.536087 \n", "1077 2025-04-26 21:39:52.587534 \n", "1078 2025-04-26 21:39:52.618585 \n", "1079 2025-04-26 21:39:52.660326 \n", "1080 2025-04-26 21:39:52.692892 \n", "1081 2025-04-26 21:39:52.723946 \n", "1082 2025-04-26 21:39:52.754750 \n", "1083 2025-04-26 21:39:52.785736 \n", "1084 2025-04-26 21:39:52.789901 \n", "1085 2025-04-26 21:39:52.827342 \n", "1086 2025-04-26 21:39:52.828217 \n", "\n", " muscle_action_simtimes \\\n", "muscle_action_id \n", "1052 {'tttenv': {'simtime_ticks': 0, 'simtime_times... \n", "1053 {'tttenv': {'simtime_ticks': 1, 'simtime_times... \n", "1054 {'tttenv': {'simtime_ticks': 2, 'simtime_times... \n", "1055 {'tttenv': {'simtime_ticks': 3, 'simtime_times... \n", "1056 {'tttenv': {'simtime_ticks': 4, 'simtime_times... \n", "1057 {'tttenv': {'simtime_ticks': 5, 'simtime_times... \n", "1058 {'tttenv': {'simtime_ticks': 6, 'simtime_times... \n", "1059 {'tttenv': {'simtime_ticks': 7, 'simtime_times... \n", "1060 {'tttenv': {'simtime_ticks': 8, 'simtime_times... \n", "1061 {'tttenv': {'simtime_ticks': 9, 'simtime_times... \n", "1062 {'tttenv': {'simtime_ticks': 10, 'simtime_time... \n", "1063 {'tttenv': {'simtime_ticks': 11, 'simtime_time... \n", "1064 {'tttenv': {'simtime_ticks': 12, 'simtime_time... \n", "1065 {'tttenv': {'simtime_ticks': 13, 'simtime_time... \n", "1066 {'tttenv': {'simtime_ticks': 14, 'simtime_time... \n", "1067 {'tttenv': {'simtime_ticks': 15, 'simtime_time... \n", "1068 {'tttenv': {'simtime_ticks': 16, 'simtime_time... \n", "1069 {'tttenv': {'simtime_ticks': 17, 'simtime_time... \n", "1070 {'tttenv': {'simtime_ticks': 18, 'simtime_time... \n", "1071 {'tttenv': {'simtime_ticks': 19, 'simtime_time... \n", "1072 {'tttenv': {'simtime_ticks': 20, 'simtime_time... \n", "1073 {'tttenv': {'simtime_ticks': 21, 'simtime_time... \n", "1074 {'tttenv': {'simtime_ticks': 22, 'simtime_time... \n", "1075 {'tttenv': {'simtime_ticks': 23, 'simtime_time... \n", "1076 {'tttenv': {'simtime_ticks': 24, 'simtime_time... \n", "1077 {'tttenv': {'simtime_ticks': 25, 'simtime_time... \n", "1078 {'tttenv': {'simtime_ticks': 26, 'simtime_time... \n", "1079 {'tttenv': {'simtime_ticks': 27, 'simtime_time... \n", "1080 {'tttenv': {'simtime_ticks': 28, 'simtime_time... \n", "1081 {'tttenv': {'simtime_ticks': 29, 'simtime_time... \n", "1082 {'tttenv': {'simtime_ticks': 30, 'simtime_time... \n", "1083 {'tttenv': {'simtime_ticks': 32, 'simtime_time... \n", "1084 {'tttenv': {'simtime_ticks': 31, 'simtime_time... \n", "1085 {'tttenv': {'simtime_ticks': 33, 'simtime_time... \n", "1086 {'tttenv': {'simtime_ticks': 33, 'simtime_time... \n", "\n", " rollout_worker_uid \\\n", "muscle_action_id \n", "1052 AgentConductor-d4d27e.Player 1-fbba4f \n", "1053 AgentConductor-251a3b.Player 2-a9c664 \n", "1054 AgentConductor-d4d27e.Player 1-fbba4f \n", "1055 AgentConductor-251a3b.Player 2-a9c664 \n", "1056 AgentConductor-d4d27e.Player 1-fbba4f \n", "1057 AgentConductor-251a3b.Player 2-a9c664 \n", "1058 AgentConductor-d4d27e.Player 1-fbba4f \n", "1059 AgentConductor-251a3b.Player 2-a9c664 \n", "1060 AgentConductor-d4d27e.Player 1-fbba4f \n", "1061 AgentConductor-251a3b.Player 2-a9c664 \n", "1062 AgentConductor-d4d27e.Player 1-fbba4f \n", "1063 AgentConductor-251a3b.Player 2-a9c664 \n", "1064 AgentConductor-d4d27e.Player 1-fbba4f \n", "1065 AgentConductor-251a3b.Player 2-a9c664 \n", "1066 AgentConductor-d4d27e.Player 1-fbba4f \n", "1067 AgentConductor-251a3b.Player 2-a9c664 \n", "1068 AgentConductor-d4d27e.Player 1-fbba4f \n", "1069 AgentConductor-251a3b.Player 2-a9c664 \n", "1070 AgentConductor-d4d27e.Player 1-fbba4f \n", "1071 AgentConductor-251a3b.Player 2-a9c664 \n", "1072 AgentConductor-d4d27e.Player 1-fbba4f \n", "1073 AgentConductor-251a3b.Player 2-a9c664 \n", "1074 AgentConductor-d4d27e.Player 1-fbba4f \n", "1075 AgentConductor-251a3b.Player 2-a9c664 \n", "1076 AgentConductor-d4d27e.Player 1-fbba4f \n", "1077 AgentConductor-251a3b.Player 2-a9c664 \n", "1078 AgentConductor-d4d27e.Player 1-fbba4f \n", "1079 AgentConductor-251a3b.Player 2-a9c664 \n", "1080 AgentConductor-d4d27e.Player 1-fbba4f \n", "1081 AgentConductor-251a3b.Player 2-a9c664 \n", "1082 AgentConductor-d4d27e.Player 1-fbba4f \n", "1083 AgentConductor-d4d27e.Player 1-fbba4f \n", "1084 AgentConductor-251a3b.Player 2-a9c664 \n", "1085 AgentConductor-d4d27e.Player 1-fbba4f \n", "1086 AgentConductor-251a3b.Player 2-a9c664 \n", "\n", " muscle_sensor_readings \\\n", "muscle_action_id \n", "1052 [SensorInformation(value=0, space=Discrete(3),... \n", "1053 [SensorInformation(value=0, space=Discrete(3),... \n", "1054 [SensorInformation(value=1, space=Discrete(3),... \n", "1055 [SensorInformation(value=1, space=Discrete(3),... \n", "1056 [SensorInformation(value=1, space=Discrete(3),... \n", "1057 [SensorInformation(value=1, space=Discrete(3),... \n", "1058 [SensorInformation(value=1, space=Discrete(3),... \n", "1059 [SensorInformation(value=1, space=Discrete(3),... \n", "1060 [SensorInformation(value=1, space=Discrete(3),... \n", "1061 [SensorInformation(value=1, space=Discrete(3),... \n", "1062 [SensorInformation(value=1, space=Discrete(3),... \n", "1063 [SensorInformation(value=1, space=Discrete(3),... \n", "1064 [SensorInformation(value=1, space=Discrete(3),... \n", "1065 [SensorInformation(value=1, space=Discrete(3),... \n", "1066 [SensorInformation(value=1, space=Discrete(3),... \n", "1067 [SensorInformation(value=1, space=Discrete(3),... \n", "1068 [SensorInformation(value=1, space=Discrete(3),... \n", "1069 [SensorInformation(value=1, space=Discrete(3),... \n", "1070 [SensorInformation(value=1, space=Discrete(3),... \n", "1071 [SensorInformation(value=1, space=Discrete(3),... \n", "1072 [SensorInformation(value=1, space=Discrete(3),... \n", "1073 [SensorInformation(value=1, space=Discrete(3),... \n", "1074 [SensorInformation(value=1, space=Discrete(3),... \n", "1075 [SensorInformation(value=1, space=Discrete(3),... \n", "1076 [SensorInformation(value=1, space=Discrete(3),... \n", "1077 [SensorInformation(value=1, space=Discrete(3),... \n", "1078 [SensorInformation(value=1, space=Discrete(3),... \n", "1079 [SensorInformation(value=1, space=Discrete(3),... \n", "1080 [SensorInformation(value=1, space=Discrete(3),... \n", "1081 [SensorInformation(value=1, space=Discrete(3),... \n", "1082 [SensorInformation(value=1, space=Discrete(3),... \n", "1083 [SensorInformation(value=1, space=Discrete(3),... \n", "1084 [SensorInformation(value=1, space=Discrete(3),... \n", "1085 [SensorInformation(value=1, space=Discrete(3),... \n", "1086 [SensorInformation(value=1, space=Discrete(3),... \n", "\n", " muscle_actuator_setpoints \\\n", "muscle_action_id \n", "1052 [ActuatorInformation(value=2, space=Discrete(9... \n", "1053 [ActuatorInformation(value=0, space=Discrete(9... \n", "1054 [ActuatorInformation(value=6, space=Discrete(9... \n", "1055 [ActuatorInformation(value=1, space=Discrete(9... \n", "1056 [ActuatorInformation(value=8, space=Discrete(9... \n", "1057 [ActuatorInformation(value=7, space=Discrete(9... \n", "1058 [ActuatorInformation(value=6, space=Discrete(9... \n", "1059 [ActuatorInformation(value=0, space=Discrete(9... \n", "1060 [ActuatorInformation(value=1, space=Discrete(9... \n", "1061 [ActuatorInformation(value=5, space=Discrete(9... \n", "1062 [ActuatorInformation(value=2, space=Discrete(9... \n", "1063 [ActuatorInformation(value=7, space=Discrete(9... \n", "1064 [ActuatorInformation(value=2, space=Discrete(9... \n", "1065 [ActuatorInformation(value=0, space=Discrete(9... \n", "1066 [ActuatorInformation(value=2, space=Discrete(9... \n", "1067 [ActuatorInformation(value=2, space=Discrete(9... \n", "1068 [ActuatorInformation(value=5, space=Discrete(9... \n", "1069 [ActuatorInformation(value=2, space=Discrete(9... \n", "1070 [ActuatorInformation(value=6, space=Discrete(9... \n", "1071 [ActuatorInformation(value=1, space=Discrete(9... \n", "1072 [ActuatorInformation(value=0, space=Discrete(9... \n", "1073 [ActuatorInformation(value=6, space=Discrete(9... \n", "1074 [ActuatorInformation(value=1, space=Discrete(9... \n", "1075 [ActuatorInformation(value=5, space=Discrete(9... \n", "1076 [ActuatorInformation(value=8, space=Discrete(9... \n", "1077 [ActuatorInformation(value=2, space=Discrete(9... \n", "1078 [ActuatorInformation(value=8, space=Discrete(9... \n", "1079 [ActuatorInformation(value=0, space=Discrete(9... \n", "1080 [ActuatorInformation(value=5, space=Discrete(9... \n", "1081 [ActuatorInformation(value=0, space=Discrete(9... \n", "1082 [ActuatorInformation(value=5, space=Discrete(9... \n", "1083 [ActuatorInformation(value=4, space=Discrete(9... \n", "1084 [ActuatorInformation(value=6, space=Discrete(9... \n", "1085 [ActuatorInformation(value=0, space=Discrete(9... \n", "1086 [ActuatorInformation(value=1, space=Discrete(9... \n", "\n", " muscle_action_rewards \\\n", "muscle_action_id \n", "1052 [RewardInformation(value=[1.], space=Box(low=[... \n", "1053 [RewardInformation(value=[1.], space=Box(low=[... \n", "1054 [RewardInformation(value=[1.], space=Box(low=[... \n", "1055 [RewardInformation(value=[1.], space=Box(low=[... \n", "1056 [RewardInformation(value=[1.], space=Box(low=[... \n", "1057 [RewardInformation(value=[1.], space=Box(low=[... \n", "1058 [RewardInformation(value=[-100.], space=Box(lo... \n", "1059 [RewardInformation(value=[-100.], space=Box(lo... \n", "1060 [RewardInformation(value=[-100.], space=Box(lo... \n", "1061 [RewardInformation(value=[1.], space=Box(low=[... \n", "1062 [RewardInformation(value=[-100.], space=Box(lo... \n", "1063 [RewardInformation(value=[-100.], space=Box(lo... \n", "1064 [RewardInformation(value=[-100.], space=Box(lo... \n", "1065 [RewardInformation(value=[-100.], space=Box(lo... \n", "1066 [RewardInformation(value=[-100.], space=Box(lo... \n", "1067 [RewardInformation(value=[-100.], space=Box(lo... \n", "1068 [RewardInformation(value=[-100.], space=Box(lo... \n", "1069 [RewardInformation(value=[-100.], space=Box(lo... \n", "1070 [RewardInformation(value=[-100.], space=Box(lo... \n", "1071 [RewardInformation(value=[-100.], space=Box(lo... \n", "1072 [RewardInformation(value=[-100.], space=Box(lo... \n", "1073 [RewardInformation(value=[-100.], space=Box(lo... \n", "1074 [RewardInformation(value=[-100.], space=Box(lo... \n", "1075 [RewardInformation(value=[-100.], space=Box(lo... \n", "1076 [RewardInformation(value=[-100.], space=Box(lo... \n", "1077 [RewardInformation(value=[-100.], space=Box(lo... \n", "1078 [RewardInformation(value=[-100.], space=Box(lo... \n", "1079 [RewardInformation(value=[-100.], space=Box(lo... \n", "1080 [RewardInformation(value=[-100.], space=Box(lo... \n", "1081 [RewardInformation(value=[-100.], space=Box(lo... \n", "1082 [RewardInformation(value=[-100.], space=Box(lo... \n", "1083 [RewardInformation(value=[10.], space=Box(low=... \n", "1084 [RewardInformation(value=[-100.], space=Box(lo... \n", "1085 [RewardInformation(value=[10.], space=Box(low=... \n", "1086 [RewardInformation(value=[-100.], space=Box(lo... \n", "\n", " muscle_action_objective muscle_action_done agent_id \\\n", "muscle_action_id \n", "1052 1.0 False 3 \n", "1053 1.0 False 4 \n", "1054 1.0 False 3 \n", "1055 1.0 False 4 \n", "1056 1.0 False 3 \n", "1057 1.0 False 4 \n", "1058 -100.0 False 3 \n", "1059 -100.0 False 4 \n", "1060 -100.0 False 3 \n", "1061 1.0 False 4 \n", "1062 -100.0 False 3 \n", "1063 -100.0 False 4 \n", "1064 -100.0 False 3 \n", "1065 -100.0 False 4 \n", "1066 -100.0 False 3 \n", "1067 -100.0 False 4 \n", "1068 -100.0 False 3 \n", "1069 -100.0 False 4 \n", "1070 -100.0 False 3 \n", "1071 -100.0 False 4 \n", "1072 -100.0 False 3 \n", "1073 -100.0 False 4 \n", "1074 -100.0 False 3 \n", "1075 -100.0 False 4 \n", "1076 -100.0 False 3 \n", "1077 -100.0 False 4 \n", "1078 -100.0 False 3 \n", "1079 -100.0 False 4 \n", "1080 -100.0 False 3 \n", "1081 -100.0 False 4 \n", "1082 -100.0 False 3 \n", "1083 10.0 True 3 \n", "1084 -100.0 True 4 \n", "1085 10.0 True 3 \n", "1086 -100.0 True 4 \n", "\n", " agent_uid agent_name experiment_run_phase_id \\\n", "muscle_action_id \n", "1052 AgentConductor-d4d27e Player 1 2 \n", "1053 AgentConductor-251a3b Player 2 2 \n", "1054 AgentConductor-d4d27e Player 1 2 \n", "1055 AgentConductor-251a3b Player 2 2 \n", "1056 AgentConductor-d4d27e Player 1 2 \n", "1057 AgentConductor-251a3b Player 2 2 \n", "1058 AgentConductor-d4d27e Player 1 2 \n", "1059 AgentConductor-251a3b Player 2 2 \n", "1060 AgentConductor-d4d27e Player 1 2 \n", "1061 AgentConductor-251a3b Player 2 2 \n", "1062 AgentConductor-d4d27e Player 1 2 \n", "1063 AgentConductor-251a3b Player 2 2 \n", "1064 AgentConductor-d4d27e Player 1 2 \n", "1065 AgentConductor-251a3b Player 2 2 \n", "1066 AgentConductor-d4d27e Player 1 2 \n", "1067 AgentConductor-251a3b Player 2 2 \n", "1068 AgentConductor-d4d27e Player 1 2 \n", "1069 AgentConductor-251a3b Player 2 2 \n", "1070 AgentConductor-d4d27e Player 1 2 \n", "1071 AgentConductor-251a3b Player 2 2 \n", "1072 AgentConductor-d4d27e Player 1 2 \n", "1073 AgentConductor-251a3b Player 2 2 \n", "1074 AgentConductor-d4d27e Player 1 2 \n", "1075 AgentConductor-251a3b Player 2 2 \n", "1076 AgentConductor-d4d27e Player 1 2 \n", "1077 AgentConductor-251a3b Player 2 2 \n", "1078 AgentConductor-d4d27e Player 1 2 \n", "1079 AgentConductor-251a3b Player 2 2 \n", "1080 AgentConductor-d4d27e Player 1 2 \n", "1081 AgentConductor-251a3b Player 2 2 \n", "1082 AgentConductor-d4d27e Player 1 2 \n", "1083 AgentConductor-d4d27e Player 1 2 \n", "1084 AgentConductor-251a3b Player 2 2 \n", "1085 AgentConductor-d4d27e Player 1 2 \n", "1086 AgentConductor-251a3b Player 2 2 \n", "\n", " experiment_run_phase_uid \\\n", "muscle_action_id \n", "1052 Test \n", "1053 Test \n", "1054 Test \n", "1055 Test \n", "1056 Test \n", "1057 Test \n", "1058 Test \n", "1059 Test \n", "1060 Test \n", "1061 Test \n", "1062 Test \n", "1063 Test \n", "1064 Test \n", "1065 Test \n", "1066 Test \n", "1067 Test \n", "1068 Test \n", "1069 Test \n", "1070 Test \n", "1071 Test \n", "1072 Test \n", "1073 Test \n", "1074 Test \n", "1075 Test \n", "1076 Test \n", "1077 Test \n", "1078 Test \n", "1079 Test \n", "1080 Test \n", "1081 Test \n", "1082 Test \n", "1083 Test \n", "1084 Test \n", "1085 Test \n", "1086 Test \n", "\n", " experiment_run_phase_configuration \\\n", "muscle_action_id \n", "1052 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1053 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1054 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1055 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1056 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1057 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1058 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1059 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1060 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1061 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1062 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1063 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1064 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1065 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1066 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1067 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1068 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1069 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1070 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1071 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1072 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1073 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1074 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1075 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1076 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1077 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1078 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1079 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1080 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1081 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1082 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1083 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1084 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1085 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "1086 {'mode': 'test', 'worker': 1, 'episodes': 1} \n", "\n", " experiment_run_instance_uid experiment_run_id \\\n", "muscle_action_id \n", "1052 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1053 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1054 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1055 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1056 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1057 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1058 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1059 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1060 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1061 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1062 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1063 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1064 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1065 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1066 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1067 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1068 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1069 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1070 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1071 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1072 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1073 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1074 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1075 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1076 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1077 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1078 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1079 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1080 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1081 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1082 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1083 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1084 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1085 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "1086 d11b4a34-6507-4e4f-94fb-dcca264a7976 2 \n", "\n", " experiment_run_uid experiment_id experiment_name \n", "muscle_action_id \n", "1052 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1053 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1054 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1055 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1056 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1057 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1058 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1059 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1060 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1061 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1062 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1063 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1064 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1065 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1066 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1067 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1068 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1069 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1070 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1071 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1072 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1073 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1074 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1075 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1076 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1077 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1078 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1079 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1080 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1081 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1082 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1083 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1084 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1085 Game of Tic-Tac-Toe 1 Tic-Tac-Toe \n", "1086 Game of Tic-Tac-Toe 1 Tic-Tac-Toe " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ma = palq.muscle_actions(\n", " like_dataframe=exps[(exps.experiment_name == \"Tic-Tac-Toe\") & (exps.experiment_run_phase_mode == \"test\")].iloc[[-1]])\n", "ma" ] }, { "cell_type": "markdown", "id": "d9fe6351-663f-46fa-a75d-55c598f2b7d4", "metadata": {}, "source": [ "With the help of matplotlib, we can even visualize what the agents have done. The following function turns the state of the board into a matplotlib plot.\n", "\n", "Note that the players still occasionally make invalid moves; for this quickstart tutorial, the number of training episodes is simply not big enough. So we simply filter those moves and present the condensed version, but the effect is that sometimes it appears is if a player was skipped: It wasn't, it simply tried to place its mark at a position where another mark already existed." ] }, { "cell_type": "code", "execution_count": 12, "id": "2bef88ca-5e50-4af5-9e15-cc9b5d902b92", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:40:09.832900Z", "iopub.status.busy": "2025-04-26T21:40:09.832379Z", "iopub.status.idle": "2025-04-26T21:40:09.844168Z", "shell.execute_reply": "2025-04-26T21:40:09.842399Z" } }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "def render_tic_tac_toe(board):\n", " fig, ax = plt.subplots(figsize=(4,4))\n", " # Draw grid lines\n", " for i in range(1, 3):\n", " ax.plot([i, i], [0, 3], color='black', linewidth=2)\n", " ax.plot([0, 3], [i, i], color='black', linewidth=2)\n", " # Place X and O\n", " for idx, val in enumerate(board):\n", " row, col = divmod(idx, 3)\n", " x = col + 0.5\n", " y = 2.5 - row\n", " if val == 1:\n", " ax.text(x, y, 'O', fontsize=36, ha='center', va='center', color='blue')\n", " elif val == 2:\n", " ax.text(x, y, 'X', fontsize=36, ha='center', va='center', color='red')\n", " ax.set_xlim(0, 3)\n", " ax.set_ylim(0, 3)\n", " ax.set_xticks([])\n", " ax.set_yticks([])\n", " ax.set_aspect('equal')\n", " plt.show()" ] }, { "cell_type": "markdown", "id": "4cf9d17c-33ba-45f1-8e45-299de4b04f4a", "metadata": {}, "source": [ "Each agent's sensor readings contain the complete board state. As the sensor readings are logged as part of the `muscle_actions()` query—which basically gives us trajectories—, we can iterate over all moves and render the Tic-Tac-Toe board now. Enjoy!" ] }, { "cell_type": "code", "execution_count": 13, "id": "f919659a-17b1-4db2-acea-fa1d5c785c82", "metadata": { "execution": { "iopub.execute_input": "2025-04-26T21:40:09.850297Z", "iopub.status.busy": "2025-04-26T21:40:09.849774Z", "iopub.status.idle": "2025-04-26T21:40:10.642110Z", "shell.execute_reply": "2025-04-26T21:40:10.640622Z" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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J8pD6+lXVZxxxvzjGFHuQaxbV/8Y0FNOKc93Pec58193C3X8IfZUJ5xQPq73ne8sozlfBx9cPjlx7VpxpMucf37E7bfXjq1eXf/s6/k44oiID3ygduyhhzr65H1XBTIi4nnPKz8LOfm88332md25wz32KD/jePPNEbfe2viD6NDRbr+9DORUS5eW71pP/zjIfF16af2trn70o/JQuwN1xSF2I3vtVb7Dfd555S+xO+8sLxh4+OHyEHzp0vKqmOc+t3xz5vnPb/WMoclWr258a6qF1N/fVU+069pATrXbbuUNJtxkApiLrjvEBlgoAgmQEEiAhEACJAQSICGQAAmBBEgIJEBCIAESAgmQEEiAhEACJAQSICGQAAmBBEgIJEBCIAESAgmQEEiAhEACJAQSICGQAAmBBEgIJEBCIAESAgmQEEiAhEACJAQSICGQAAmBBEgIJEBCIAESAgmQEEiAxA5zWXjVqlVRqWhqOxkbG9v6dWhoqMWzYZLXpX1Vq9VZL9tTFEWxrYUmJiaiv79/uyYF0E7Gx8ejr69vxmXmtAc5MDBgD7LNjI2NRbVajUqlEgMDA62eDk/xurSvarW6dQ9/W+YUyOHh4W0Wl8U1NDQUGzZsiIGBgRgZGWn1dHiK16V9zeWI2O4gQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARICCZAQSICEQAIkBBIgIZAACYEESAgkQEIgARI7zGXhVatWRaWiqe1kbGxs69ehoaEWz4ZJXpf2Va1WZ71sT1EUxbYWmpiYiP7+/u2aFEA7GR8fj76+vhmXmdMe5MDAgD3INjM2NhbVajUqlUoMDAy0ejo8xevSvqrV6tY9/G2ZUyCHh4e3WVwW19DQUGzYsCEGBgZiZGSk1dPhKV6X9jWXI2K7gwAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAQiABEgIJkBBIgIRAAiQEEiAhkAAJgQRICCRAYofZLFQURURETExMNHUyzF21Wt361evTPrwu7Wvy9Zjs2kx6ilksNTIyEitWrNj+mQG0ifXr18fQ0NCMy8wqkNVqNUZHR6O3tzd6enoWbIIAi60oiti8eXMsX748KpWZzzLOKpAA/4u8SQOQEEiAhEACJAQSICGQAAmBBEgIJEDi/wDD2xv+tzr0/wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUgAAAFICAYAAAAyFGczAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAFDxJREFUeJzt3X1sXXUdx/FPb7cOJm0HiO62nTjDcAPGoMjDQMWZAE5UgmIiBsdTRoANRJ4dM8PJZAM2GEE2RMIgBoHxpCBESAQNJohugoylEpdJ1rUb3ZDewUa79f7847fOnp77bXvb+3DOue9Xslz6vef8zq/3x/30/O49D1XOOScAQEiq3B0AgKgiIAHAQEACgIGABAADAQkABgISAAwEJAAYCEgAMIwaykLZbFZtbW2qra1VVVVVsfsEAEXjnNOOHTvU0NCgVGrgfcQhBWRbW5smTJhQkM4BQBRs2rRJTU1NAy4zpICsra3d12BdXd3Ie4aCmTx5strb25VOp9XS0lLu7mAvxiW6MpmMJkyYsC/XBjKkgOydVtfV1RGQEdM7RUilUoxNhDAu0TeUjwv5kgYADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADKPK3YFSeP996a23pI0b/X/v3CnV1Eh1ddKhh0qTJ0sTJ5a7l5WJsUGUJTYg//1v6eGHpaeflt5+W3Ju4OUbGqQzz5TOO0/68pdL08dKxdiU2YIF0sKFwdpJJ0mvvipVVw+/XeekM86QXnopWL/ySmn58uG3W05uCDo7O50k19nZOZTFy+rdd5373vecS6Wc8yOW/78TT3Tuz38u928yNI2NjU6Sa2xsLHdXBlVJYxPpcenudu6YY8Iv7uLFI2v3F78It3n44c7t3FmYfhdIPnmWqM8g779fOuII6dFHpWx2+O389a/SqadKl18udXcXrn+VjLGJkNGjpYce8p9l9LVggd+lH44NG6Trrw/Wqqv9dvbff3htRkAiptjOSXPnSvfem/v5VEo6+WTpS1+S0mnpU5+SMhmprU1at0564QXpo4/Cba5YIb3xhvT889K4ccX+LZKJsYmoo4/2gXjTTf+vdXVJ558vvfaaNCqPaMhm/Xr9B+raa/3UPc4KvUtaDrNn556O1dQ4N2+ec21tA6+/c6dzDz/s3Pjxuds57jjnMpnS/C75ivRUzlXu2ER9XJxzzu3Z49wJJ4Rf1J/+NL92brst3MZRRznX1VWcfo9QPnkW+4C8447cb5ypU51bvz6/tj74wLnvfz93e9/6lnPZbHF+h5GI8huxkscmyuMSsH69c/vtF3xBR4927h//GNr669Y5N2ZMeP01a4ra7ZGomIB84w0/Fv3fMEcf7VxHx/Da7Olx7vzzc78R7723oN0viKi+ESt9bKI6Ljnl+ks2derge4C7dzvX3Bxe9+abS9PvYaqYgDzxxPDYHHKIc1u3jqzdnh7nTjst3HZtrXPvvVeYvhdKVN+IlT42UR2XnHp6nDvllPCL+uMfD7zeggXhdZqbfXBGWEV8i/273/lvNPtbvtx/0D8SqZR0333S2LHB+o4d0pIlI2u7EjA2MZNKSatWhV/U226TXn899zpr1kiLFgVrY8b4A1zz+YIn4mIbkLmOOz31VOnccwvT/sSJ4aMWJH+4ys6dhdlGUjE2MXTYYeG/MD09/tvpjz8O1ru6pFmzpD17gvWFC6UjjyxuP0sslgH57rvSyy+H65ddVtjtzJ4dPrEgk5GefLKw20kSxibG5syRZswI1lpagocCSdL8+dL69cHa9OnSNdcUt39lEMuAfO45/4FHXwcfLJ19dmG309Agff3rubeP3BibGKuqkh58UKqtDdbvusufhij5x2XLgs+PHesPCB/JaYoRFcuAfOWVcO2rXw2fGFAIX/tauJZrDwkeYxNzhx4qLV0arGWz0gUXSO+95x/7nwq1eLE0aVKpelhSsQzINWvCteOPL862vvCFcK2jQ2ptLc724o6xSYDZs/1FJ/rasEGaNs0/9jVjhj9VKqFiF5Dd3dJ//hOu53qzFMK0af7U1f7+9a/ibC/OGJsEeeCB8DmcW7YEf66t9VPyqqqSdavUYheQmzeHP+OSpMbG4mxvzBj/GVp/mzYVZ3txxtgkSGPj4JcoW7rUT8kTLHYB+f77uev19cXbZq62//vf4m0vrhibhJk1Szr99NzPzZzpp+IJF7uA3LUrd72YV3TJ1bbVj0rG2CTMtm3Sm2/mfu6cc0rblzKJXUCWQ66PWHJNJVF6jE0RXX65tHVr7uduvNF/I5ZwsQtI69qbnZ3F2+YHH4Rr/c/KAmOTKI8+Kq1ebT/f0eEPLE+42AXkgQfmrud6oxRKrratflQyxiYhtmzJHX79P/BdvXrgEE2A2AVkY2PuaVVbW3G2190tbd8erjc1FWd7ccbYJMQll4S/cbv0Un9IT39z5iR6qh27gBwzJveRBX//e3G2989/Srt3h+uf/3xxthdnjE0CrFolPftssDZxonT77f580f5XHOno8J9VJlTsAlKSmpvDtb/9rTjbytXuJz8pTZhQnO3FHWMTY62t0lVXBWu952cfcID/+Z57pPHjg8s88YT0+OMl6WKpxTIgv/KVcO2PfyzOXe7+8Idwrf8FT/B/jE2MXXxx+Bu1K67w16rrddBB0sqV4XXnzPHnaidMLAPyG98I17Ztk37728JuZ8sW6fe/H9r24TE2MbVypfTii8HapEnSrbeGlz3rLOm884K1bdsSOdWOZUBOnBj8o9ZrxYrCbudXvwpfE7SuTvrOdwq7nSRhbGJo40bpuuuCNesq473uvtvfp7evJ5+UHnusKF0sl1gGpCRdeWW49vLLhfso5N13/VWc+rv4YukTnyjMNpKKsYkR56QLL5Q+/DBYv/pqf8Nyy4EH+ntf9Dd3brKm2oW+yU2pZLP+nsj97xn06U8P/655vXp6nDvjjOjfGMq5aN4cirGJ5rjkdOed4RdzyhTndu0a2vqzZoXX//a3i9rlkaqIm3ZVVfk/YP3vD7R1q3TaafaFEwbjnD8MLNcXAEuWSIccMrx2KwljExPvvCPNmxesVVf7q4Pvt9/Q2li+3F/eva+nnvJn4iRBoRO31BYvzn2f5GnTnGtpya+tzk7nfvCD+Nyc3rlo76lU8thEeVycc87t2ePcSSeFX8x58/Jv67nnwu0cfLBzW7YUvt8FUDH3xe514YW53zg1Nc7Nnz/4OO3a5dyvf+1cQ0Pudo47zrlMpjS/S76i/kas1LGJ+ri4W28Nv5hTpzrX1TW89i64INze2WcXts8Fkk+eVTk3+LVPMpmM6uvr1dnZqbq6umLu0A5LNuvPhLr//tzPp1LSF7/o/6XT/t7MmYzU3i699Zb0wgvhz6h7TZ8uPf98cS/ZNRJNTU3avHmzGhsb1RrBew1U6thEelzWrZOOOy54cOro0f5m5sceO7w2P/hAOuoof9Xkvh55pHD3+y2QvPKs0IlbTvfe69z+++fe0xjOv0svde7jj8v9Ww0s8nsqe1Xa2ER2XLq7nWtuDr+gN9888raffz4WU+2K+JIml8su87fr/e53/Z7JcB1/vL8734oV/vxijBxjExGLFklr1wZrzc3he18Px8yZ0kUXBWvbt/spREwlKiAl6bOf9cfb9d7v/IgjhnZPofHj/XF0r7wivf567oOdMTKMTZmtXesDsq+aGv+tdf9DDoZr2bLw5ZSeecZPtWMoEZ9BDmb7dn/ll40b/SEmu3b5/y/q6qTPfEaaMkX63OfK3cvhifRnXUOQ1LGJ+7gkWT55VqA/G9F28MH+IgZcyCB6GBtEWeKm2ABQKAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwjMpn4cmTJyuVIlOjpL29fd9jU1NTmXuDXoxLdGWz2SEvW+Wcc4MtlMlkVF9fP6JOAUCUdHZ2qq6ubsBl8tqDTKfT7EFGTHt7u7LZrFKplNLpdLm7g70Yl+jKZrP79vAHk1dAtrS0DJq4KK2mpiZt3rxZ6XRara2t5e4O9mJcoiufGTG7gwBgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwDAqn4UnT56sVIpMjZL29vZ9j01NTWXuDXoxLtGVzWaHvGyVc84NtlAmk1F9ff2IOgUAUdLZ2am6uroBl8lrDzKdTrMHGTHt7e3KZrNKpVJKp9Pl7g72YlyiK5vN7tvDH0xeAdnS0jJo4qK0mpqatHnzZqXTabW2tpa7O9iLcYmufGbE7A4CgIGABAADAQkABgISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABAADAQkABgISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABAADAQkABgISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABAADAQkAhvgH5IIFUlVV8N/06VJPz8jadU46/fRw2z/8YWH6DSDy4h+Q8+dLxxwTrL32mnTHHSNrd8UK6aWXgrXDD5cWLx5ZuwBiI/4BOXq09NBDUk1NsL5ggfT228Nrc8MG6frrg7Xqar+d/fcfXpsAYif+ASlJRx/tA7Gvri7p/POlPXvyayub9et99FGwfu210kknjayfAGIlGQEpSTfcIJ1wQrC2Zo3085/n187SpdJf/hKsHXWUtHDhyPoHIHaSE5DV1dKqVdJ++wXrt9wivfHG0Np4+23pJz8J1qwpPIDES05AStKUKT4Q+9q9W5o1S+ruHnjdPXv8cl1dwfpNN0nNzYXtJ4BYSFZAStKPfiSdckqw9tZb0s03D7zeLbdIa9cGa83NPiABVKTkBWQq5afaY8cG67fdJr3+eu511qyRFi0K1saMkR5+WBo1qijdBBB9yQtISTrsMGnJkmCtp8d/O/3xx8F6V5efWvf/tnvhQunII4vbTwCRlsyAlKQ5c6QZM4K1lpbwlHn+fGn9+mBt+nTpmmuK2z8AkZfcgKyqkh58UKqtDdbvukt69VX/36++Ki1bFnx+7Fj/rXV1dUm6CSC6khuQknToof64xr6yWemCC6T33vOP2Wzw+cWLpUmTStVDABGW7ICUpNmzpTPOCNY2bJCmTfOPfc2YIc2dW7q+AYi05AekJD3wgDRuXLC2ZUvw59paPyWvqipZtwBEW2UEZGOjtHz5wMssXeqn5ACwV2UEpOQP5Tn99NzPzZzpp+IA0EflBOS2bdKbb+Z+7pxzStsXALFQOQF5+eXS1q25n7vxRqmjo7T9ARB5lRGQjz4qrV5tP9/R4Q8sB4A+kh+QW7bkDr/6+uDPq1cPHKIAKk7yA/KSS6T33w/WLr3UH9LT35w5TLUB7JPsgFy1Snr22WBt4kTp9tuls8+Wzj03+FxHh/+sEgCU5IBsbZWuuipY6z0/+4AD/M/33CONHx9c5oknpMcfL0kXAURbcgPy4oulzs5g7YorpFNP/f/PBx0krVwZXnfOHH+uNoCKlsyAXLlSevHFYG3SJOnWW8PLnnWWdN55wdq2bUy1ASQwIDdulK67LlizrjLe6+67pXQ6WHvySemxx4rSRQDxkKyAdE668ELpww+D9auvlk4+2V7vwAOl++4L1+fOZaoNVLBkBeTy5dKf/hSsTZki/exng6/7zW/687X72rZNuuyywvUPQKwkJyDfeUeaNy9Yq672Vwfvf69sy/LlUkNDsPbUU/5MHAAVJxkB2XtDrl27gvUbbpCOP37o7YwbJ/3yl+H63Ln2edwAEisZAXn77dJrrwVrU6dKCxbk39aZZ/pbMfS1fTtTbaACxT8g160LB+Ho0X5qXVMzvDbvvNNfZLevp5+WfvOb4bUHIJbiHZC7d/updXd3sH7TTdKxxw6/3XHjpPvvD9evuIKpNlBB4h2QixZJa9cGa83N4XtfD8fMmdJFFwVr27f7C10AqAjxDci1a31A9lVT46fWo0YVZhvLlklNTcHaM89IjzxSmPYBRFqBkqQMmpv9FLuY6uulTZuKuw0AkRXfPUgAKDICEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGEYNZSHnnCQpk8kUtTPIXzab3ffI+EQH4xJdvePRm2sDqXJDWKq1tVUTJkwYec8AICI2bdqkpqamAZcZUkBms1m1tbWptrZWVVVVBesgAJSac047duxQQ0ODUqmBP2UcUkACQCXiSxoAMBCQAGAgIAHAQEACgIGABAADAQkABgISAAz/Ayi5HuxkFSm4AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUgAAAFICAYAAAAyFGczAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAFKlJREFUeJzt3X9sVfX9x/FXb6Eosy3q3Lht+ToWcaAiWucPdJtjiTrmNuPmkrk4/BWMCjrn7yELjskEFRTjBOeMaBan4q9Np5km0y0ucW4wnUg6M8IMpQULzhYFW+j9fP/4UOzpue/23vb+OOfc5yNpSt/33M/59H74vHrOvedHlXPOCQAQkip3BwAgqghIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMo3JZKJPJqK2tTbW1taqqqip2nwCgaJxz2rFjhxoaGpRKDb6NmFNAtrW1acKECQXpHABEwaZNm9TU1DToMjkFZG1t7b4G6+rqRt4zFMzkyZPV3t6udDqtlpaWcncHezEu0dXV1aUJEybsy7XB5BSQfbvVdXV1BGTE9O0ipFIpxiZCGJfoy+XtQj6kAQADAQkABgISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABAADAQkABgISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABAADAQkABgISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABADDqHJ3oBTef1966y1p40b/7507pZoaqa5OOvRQafJkaeLEcveyMjE2iLLEBuR//iM9/LD09NPS229Lzg2+fEODdOaZ0nnnSV/5Smn6WKkYmzJbsEBauDBYO+kk6dVXperq4bfrnHTGGdJLLwXrV14pLV8+/HbLyeWgs7PTSXKdnZ25LF5W777r3Pe/71wq5Zwfsfy/TjzRub/8pdy/SW4aGxudJNfY2FjurgypksYm0uPS0+PcMceEX9zFi0fW7i9/GW7z8MOd27mzMP0ukHzyLFHvQd5/v3TEEdKjj0qZzPDb+dvfpFNPlS6/XOrpKVz/KhljEyGjR0sPPeTfy+hvwQK/ST8cGzZI118frFVX+/Xsv//w2oyAROxiOyfNnSvde2/2x1Mp6eSTpS9/WUqnpc98RurqktrapHXrpBdekD76KNzmihXSG29Izz8vjRtX7N8imRibiDr6aB+IN930Sa27Wzr/fOm116RReURDJuOfN3Cgrr3W77rHWaE3Scth9uzsu2M1Nc7Nm+dcW9vgz9+507mHH3Zu/Pjs7Rx3nHNdXaX5XfIV6V05V7ljE/Vxcc45t2ePcyecEH5Rf/az/Nq57bZwG0cd5Vx3d3H6PUL55FnsA/KOO7JPnKlTnVu/Pr+2PvjAuR/8IHt73/62c5lMcX6HkYjyRKzksYnyuASsX+/cfvsFX9DRo5375z9ze/66dc6NGRN+/po1Re32SFRMQL7xhh+LgRPm6KOd6+gYXpu9vc6df372iXjvvQXtfkFEdSJW+thEdVyyyvaXbOrUobcAd+92rrk5/Nybby5Nv4epYgLyxBPDY3PIIc5t3Tqydnt7nTvttHDbtbXOvfdeYfpeKFGdiJU+NlEdl6x6e5075ZTwi/qTnwz+vAULws9pbvbBGWEV8Sn273/vP9EcaPly/0b/SKRS0n33SWPHBus7dkhLloys7UrA2MRMKiWtWhV+UW+7TXr99ezPWbNGWrQoWBszxh/gms8HPBEX24DMdtzpqadK555bmPYnTgwftSD5w1V27izMOpKKsYmhww4L/4Xp7fWfTn/8cbDe3S3NmiXt2ROsL1woHXlkcftZYrEMyHfflV5+OVy/7LLCrmf27PCJBV1d0pNPFnY9ScLYxNicOdKMGcFaS0vwUCBJmj9fWr8+WJs+XbrmmuL2rwxiGZDPPeff8Ojv4IOls88u7HoaGqRvfCP7+pEdYxNjVVXSgw9KtbXB+l13+dMQJf992bLg42PH+gPCR3KaYkTFMiBfeSVc+9rXwicGFMLXvx6uZdtCgsfYxNyhh0pLlwZrmYx0wQXSe+/57wNPhVq8WJo0qVQ9LKlYBuSaNeHa8ccXZ11f/GK41tEhtbYWZ31xx9gkwOzZ/qIT/W3YIE2b5r/3N2OGP1UqoWIXkD090n//G65nmyyFMG2aP3V1oH//uzjrizPGJkEeeCB8DueWLcGfa2v9LnlVVcm6VWqxC8jNm8PvcUlSY2Nx1jdmjH8PbaBNm4qzvjhjbBKksXHoS5QtXep3yRMsdgH5/vvZ6/X1xVtntrb/97/irS+uGJuEmTVLOv307I/NnOl3xRMudgG5a1f2ejGv6JKtbasflYyxSZht26Q338z+2DnnlLYvZRK7gCyHbG+xZNuVROkxNkV0+eXS1q3ZH7vxRv+JWMLFLiCta292dhZvnR98EK4NPCsLjE2iPPqotHq1/XhHhz+wPOFiF5AHHpi9nm2iFEq2tq1+VDLGJiG2bMkefgPf8F29evAQTYDYBWRjY/bdqra24qyvp0favj1cb2oqzvrijLFJiEsuCX/iduml/pCegebMSfSuduwCcsyY7EcW/OMfxVnfv/4l7d4drn/hC8VZX5wxNgmwapX07LPB2sSJ0u23+/NFB15xpKPDv1eZULELSElqbg7X/v734qwrW7uf/rQ0YUJx1hd3jE2MtbZKV10VrPWdn33AAf7ne+6Rxo8PLvPEE9Ljj5eki6UWy4D86lfDtT/9qTh3ufvjH8O1gRc8wScYmxi7+OLwJ2pXXOGvVdfnoIOklSvDz50zx5+rnTCxDMhvfjNc27ZN+t3vCrueLVukP/wht/XDY2xiauVK6cUXg7VJk6Rbbw0ve9ZZ0nnnBWvbtiVyVzuWATlxYvCPWp8VKwq7nl//OnxN0Lo66bvfLex6koSxiaGNG6XrrgvWrKuM97n7bn+f3v6efFJ67LGidLFcYhmQknTlleHayy8X7q2Qd9/1V3Ea6OKLpU99qjDrSCrGJkacky68UPrww2D96qv9DcstBx7o730x0Ny5ydrVLvRNbkolk/H3RB54z6DPfnb4d83r09vr3BlnRP/GUM5F8+ZQjE00xyWrO+8Mv5hTpji3a1duz581K/z873ynqF0eqYq4aVdVlf8DNvD+QFu3SqedZl84YSjO+cPAsn0AsGSJdMghw2u3kjA2MfHOO9K8ecFadbW/Ovh+++XWxvLl/vLu/T31lD8TJwkKnbiltnhx9vskT5vmXEtLfm11djr3wx/G5+b0zkV7S6WSxybK4+Kcc27PHudOOin8Ys6bl39bzz0Xbufgg53bsqXw/S6Airkvdp8LL8w+cWpqnJs/f+hx2rXLud/8xrmGhuztHHecc11dpfld8hX1iVipYxP1cXG33hp+MadOda67e3jtXXBBuL2zzy5snwsknzyrcm7oa590dXWpvr5enZ2dqqurK+YG7bBkMv5MqPvvz/54KiV96Uv+K53292bu6pLa26W33pJeeCH8HnWf6dOl558v7iW7RqKpqUmbN29WY2OjWiN4r4FKHZtIj8u6ddJxxwUPTh092t/M/Nhjh9fmBx9IRx3lr5rc3yOPFO5+vwWSV54VOnHL6d57ndt//+xbGsP5uvRS5z7+uNy/1eAiv6WyV6WNTWTHpafHuebm8At6880jb/v552Oxq10RH9Jkc9ll/na93/ue3zIZruOP93fnW7HCn1+MkWNsImLRImnt2mCtuTl87+vhmDlTuuiiYG37dr8LEVOJCkhJ+tzn/PF2ffc7P+KI3O4pNH68P47ulVek11/PfrAzRoaxKbO1a31A9ldT4z+1HnjIwXAtWxa+nNIzz/hd7RhKxHuQQ9m+3V/5ZeNGf4jJrl3+/0VdnfR//ydNmSJ9/vPl7uXwRPq9rhwkdWziPi5Jlk+eFejPRrQdfLC/iAEXMogexgZRlrhdbAAoFAISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABAADAQkABgISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABAADAQkABgISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABAADAQkABgISAAwEJAAYCEgAMBCQAGAgIAHAQEACgIGABAADAQkABgISAAwEJAAYRuWz8OTJk5VKkalR0t7evu97U1NTmXuDPoxLdGUymZyXrXLOuaEW6urqUn19/Yg6BQBR0tnZqbq6ukGXyWsLMp1OswUZMe3t7cpkMkqlUkqn0+XuDvZiXKIrk8ns28IfSl4B2dLSMmTiorSampq0efNmpdNptba2lrs72Itxia589ojZHAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAMBCQAGAhIADAQkABgICABwEBAAoCBgAQAAwEJAIZR+Sw8efJkpVJkapS0t7fv+97U1FTm3qAP4xJdmUwm52WrnHNuqIW6urpUX18/ok4BQJR0dnaqrq5u0GXy2oJMp9NsQUZMe3u7MpmMUqmU0ul0ubuDvRiX6MpkMvu28IeSV0C2tLQMmbgoraamJm3evFnpdFqtra3l7g72YlyiK589YjYHAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAEP8A3LBAqmqKvg1fbrU2zuydp2TTj893PaPflSYfgPlwpzJWfwDcv586ZhjgrXXXpPuuGNk7a5YIb30UrB2+OHS4sUjaxcoN+ZMzuIfkKNHSw89JNXUBOsLFkhvvz28NjdskK6/Plirrvbr2X//4bUJRAVzJmfxD0hJOvpoP7j9dXdL558v7dmTX1uZjH/eRx8F69deK5100sj6CUQFcyYnyQhISbrhBumEE4K1NWukX/wiv3aWLpX++tdg7aijpIULR9Y/IGqYM0NKTkBWV0urVkn77Res33KL9MYbubXx9tvST38arFm7I0DcMWeGlJyAlKQpU/zg9rd7tzRrltTTM/hz9+zxy3V3B+s33SQ1Nxe2n0BUMGcGlayAlKQf/1g65ZRg7a23pJtvHvx5t9wirV0brDU3+8EGkow5Y0peQKZSfrdh7Nhg/bbbpNdfz/6cNWukRYuCtTFjpIcflkaNKko3gchgzpiSF5CSdNhh0pIlwVpvr/+k7eOPg/Xubr+bMPCTu4ULpSOPLG4/gahgzmSVzICUpDlzpBkzgrWWlvDm//z50vr1wdr06dI11xS3f0DUMGdCkhuQVVXSgw9KtbXB+l13Sa++6v/96qvSsmXBx8eO9Z/AVVeXpJtAZDBnQpIbkJJ06KH+GK3+Mhnpgguk997z3zOZ4OOLF0uTJpWqh0C0MGcCkh2QkjR7tnTGGcHahg3StGn+e38zZkhz55aub0AUMWf2SX5AStIDD0jjxgVrW7YEf66t9bsXVVUl6xYQWcwZSZUSkI2N0vLlgy+zdKnfvQDAnNmrMgJS8oclnH569sdmzvS7FQA+wZypoIDctk16883sj51zTmn7AsQBc6aCAvLyy6WtW7M/duONUkdHafsDRB1zpkIC8tFHpdWr7cc7OvxBsgA85oykSgjILVuyD2R9ffDn1asH/w8BVArmzD7JD8hLLpHefz9Yu/RSf3jCQHPmVMRuAzAo5sw+yQ7IVaukZ58N1iZOlG6/XTr7bOncc4OPdXT4912ASsWcCUhuQLa2SlddFaz1nWt6wAH+53vukcaPDy7zxBPS44+XpItApDBnQpIbkBdfLHV2BmtXXCGdeuonPx90kLRyZfi5c+b4806BSsKcCUlmQK5cKb34YrA2aZJ0663hZc86SzrvvGBt27ZE7zYAIcyZrJIXkBs3StddF6xZV0zuc/fdUjodrD35pPTYY0XpIhApzBlTsgLSOenCC6UPPwzWr75aOvlk+3kHHijdd1+4PnduIncbgH2YM4NKVkAuXy79+c/B2pQp0s9/PvRzv/Utf+5pf9u2SZddVrj+AVHDnBlUcgLynXekefOCtepqf6Xjgff9tSxfLjU0BGtPPeXPKgCShjkzpGQEZN/NhXbtCtZvuEE6/vjc2xk3TvrVr8L1uXPtc1KBOGLO5CQZAXn77dJrrwVrU6dKCxbk39aZZ/rLyve3fXuidhsA5kxu4h+Q69aFB3X0aL+bUFMzvDbvvNNfMLS/p5+Wfvvb4bUHRAlzJmfxDsjdu/1uQk9PsH7TTdKxxw6/3XHjpPvvD9evuCIRuw2oYMyZvMQ7IBctktauDdaam8P38R2OmTOliy4K1rZv9yftA3HFnMlLfANy7Vo/2P3V1PjdhFGjCrOOZcukpqZg7ZlnpEceKUz7QCkxZ/JWoFelDJqb/e5CMdXXS5s2FXcdQKkwZ/IW3y1IACgyAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABgISAAwEJAAYCAgAcBAQAKAgYAEAAMBCQAGAhIADAQkABhG5bKQc06S1NXVVdTOIH+ZTGbfd8YnOhiX6Oobj75cG0yVy2Gp1tZWTZgwYeQ9A4CI2LRpk5qamgZdJqeAzGQyamtrU21traqqqgrWQQAoNeecduzYoYaGBqVSg7/LmFNAAkAl4kMaADAQkABgICABwEBAAoCBgAQAAwEJAAYCEgAM/w8ZEToLeDIPxAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUgAAAFICAYAAAAyFGczAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGTlJREFUeJzt3XlsHOX9x/GPN4ch4DU0QGOvUxpUSjhCqEOAlB9HkIDSA5QCUkHcKJQQoAc9AxKUgghnmx4JNFAO0RYKlNJSUFsJaMsf5Ug4EiLTFoU0PhKcQHZTEuLE+/398eDg8cxje9ez3tnd90uyTJ6dfZ5n9+H5eGZ3Zp46MzMBAEJS5e4AACQVAQkAHgQkAHgQkADgQUACgAcBCQAeBCQAeBCQAOAxdjgb5fN5dXZ2qqGhQXV1daXuEwCUjJlp8+bNam5uVio1+D7isAKys7NTkydPjqVzAJAEa9euVUtLy6DbDCsgGxoadlaYTqdH3jPEZurUqerq6lJTU5Pa2trK3R18iHFJrlwup8mTJ+/MtcEMKyD7DqvT6TQBmTB9hwipVIqxSRDGJfmG83EhX9IAgAcBCQAeBCQAeBCQAOBBQAKABwEJAB4EJAB4EJAA4EFAAoAHAQkAHgQkAHgQkADgQUACgAcBCQAeBCQAeBCQAOBBQAKABwEJAB4EJAB4EJAA4EFAAoAHAQkAHgQkAHgQkADgQUACgMfYcndgNLz7rrRihbR6tfvvLVuk8eOldFrad19p6lRpypRy97I2MTZIsqoNyP/8R3rgAenxx6U33pDMBt++uVn6whekc86Rjj12dPpYqxibMrv2Wun664NlRx0lPf+8NGZM8fWaSSefLP31r8HyK6+UFi0qvt5ysmHIZrMmybLZ7HA2L6s1a8y+8hWzVMrMjVjhP0ceafb3v5f7lQxPJpMxSZbJZMrdlSHV0tgkelx6eswOOyz85i5cOLJ6f/7zcJ2f/rTZli3x9DsmheRZVX0GuXSpdNBB0kMPSfl88fW88IJ03HHSZZdJPT3x9a+WMTYJMm6cdP/97rOM/q691u3SF+Ott6TvfCdYNmaMa2fXXYurMwGq4hDbTLr8cmnx4ujHUynps5+VjjlGamqS9tlHyuWkzk5p5Urp6ael998P17lkifTqq9JTT0l77FHqV1GdGJuEOvRQF4hXX/1R2bZt0vnnS//8pzS2gGjI593zBg7Ut77lDt0rWdy7pOUwd2704dj48WYLFph1dg7+/C1bzB54wGzSpOh6Zswwy+VG57UUKtGHcla7Y5P0cTEzsx07zI44Ivym/uAHhdVzyy3hOg45xGzbttL0e4QKybOKD8jbboueONOmma1aVVhdmzaZnX12dH2nnmqWz5fmNYxEkidiLY9NksclYNUqs112Cb6h48aZvfLK8J6/cqVZfX34+cuWlbTbI1EzAfnqq24sBk6YQw816+4urs7eXrPzz4+eiIsXx9r9WCR1Itb62CR1XCJF/SWbNm3oPcDt281aW8PPve660el3kWomII88Mjw2e+9ttn79yOrt7TU78cRw3Q0NZu+8E0/f45LUiVjrY5PUcYnU22t29NHhN/X73x/8eddeG35Oa6sLzgSriW+x//AH943mQIsWuQ/6RyKVku66S5owIVi+ebN0880jq7sWMDYVJpWS7rsv/Kbecov04ovRz1m2TLrxxmBZfb07wbWQL3gSrmIDMuq80+OOk846K576p0wJn7UgudNVtmyJp41qxdhUoE99KvwXprfXfTv9wQfB8m3bpPPOk3bsCJZff7108MGl7ecoq8iAXLNGevbZcPm8efG2M3du+MKCXE567LF426kmjE0Fmz9fmj07WNbWFjwVSJKuuUZatSpYNmuWdNVVpe1fGVRkQD75pPvAo7+JE6U5c+Jtp7lZ+vzno9tHNMamgtXVSffeKzU0BMt//GN3GaLkft9xR/DxCRPcCeEjuUwxoSoyIJ97Llx2wgnhCwPi8LnPhcui9pDgMDYVbt99pdtvD5bl89IFF0jvvON+D7wUauFCaf/9R6uHo6oiA3LZsnDZzJmlaevww8Nl3d1Se3tp2qt0jE0VmDvX3XSiv7fekqZPd7/7mz3bXSpVpSouIHt6pLffDpdHTZY4TJ/uLl0d6M03S9NeJWNsqsg994Sv4Vy3LvjvhgZ3SF5XN2rdGm0VF5AdHeHPuCQpkylNe/X17jO0gdauLU17lYyxqSKZzNC3KLv9dndIXsUqLiDffTe6vLGxdG1G1f3ee6Vrr1IxNlXmvPOkk06KfuyUU9yheJWruIDcujW6vJR3dImq29ePWsbYVJkNG6TXXot+7IwzRrcvZVJxAVkOUR+xRB1KYvQxNiV02WXS+vXRj33ve+4bsSpXcQHpu/dmNlu6NjdtCpcNvCoLjE1Veegh6ZFH/I93d7sTy6tcxQXknntGl0dNlLhE1e3rRy1jbKrEunXR4TfwA99HHhk8RKtAxQVkJhN9WNXZWZr2enqkjRvD5S0tpWmvkjE2VeKSS8LfuF16qTulZ6D586v6ULviArK+PvrMgpdfLk17r78ubd8eLj/ggNK0V8kYmypw333SH/8YLJsyRbr1Vne96MA7jnR3u88qq1TFBaQktbaGy156qTRtRdW7117S5Mmlaa/SMTYVrL1d+vrXg2V912fvvrv7989+Jk2aFNzm0Uel3/52VLo42ioyII8/Plz2zDOlWeXuz38Olw284Qk+wthUsIsvDn+jdsUV7l51fT72MenOO8PPnT/fXatdZSoyIL/4xXDZhg3SE0/E2866ddKf/jS89uEwNhXqzjulv/wlWLb//tJNN4W3Pe006ZxzgmUbNlTloXZFBuSUKcE/an2WLIm3nbvvDt8TNJ2WTj893naqCWNTgVavlr797WCZ7y7jfX7yE7dOb3+PPSY9/HBJulguFRmQknTlleGyZ5+N76OQNWvcXZwGuvhiabfd4mmjWjE2FcRMuvBC6X//C5Z/85tuwXKfPfd0a18MdPnl1XWoHfciN6Mln3drIg9cM+jjHy9+1bw+vb1mJ5+c/IWhzJK5OBRjk8xxifSjH4XfzAMPNNu6dXjPP++88PO//OWSdnmkamLRrro69wds4PpA69dLJ57ov3HCUMzcaWBRXwDcfLO0997F1VtLGJsK8a9/SQsWBMvGjHF3B99ll+HVsWiRu717f7/7nbsSpxrEnbijbeHC6HWSp083a2srrK5s1uzccytncXqzZO+p1PLYJHlczMxsxw6zo44Kv5kLFhRe15NPhuuZONFs3br4+x2DmlkXu8+FF0ZPnPHjza65Zuhx2rrV7MEHzZqbo+uZMcMslxud11KopE/EWh2bpI+L3XRT+M2cNs1s27bi6rvggnB9c+bE2+eYFJJndWZD3/skl8upsbFR2WxW6XS6lDu0Rcnn3ZVQS5dGP55KSf/3f+6nqcmtzZzLSV1d0ooV0tNPhz+j7jNrlvTUU6W9ZddItLS0qKOjQ5lMRu0JXGugVscm0eOycqU0Y0bw5NRx49xi5p/5THF1btokHXKIu2tyf7/+dXzr/cakoDyLO3HLafFis113jd7TKObn0kvNPvig3K9qcInfU/lQrY1NYselp8estTX8hl533cjrfuqpijjUrokvaaLMm+eW6z3zTLdnUqyZM93qfEuWuOuLMXKMTULceKO0fHmwrLU1vPZ1MU45RbroomDZxo3uEKJCVVVAStInP+nOt+tb7/ygg4a3ptCkSe48uueek158MfpkZ4wMY1Nmy5e7gOxv/Hj3rfXAUw6Kdccd4dsp/f737lC7AlXFZ5BD2bjR3fll9Wp3isnWre7/i3Ra+sQnpAMPlPbbr9y9LE6iP+sahmodm0ofl2pWSJ7F9Gcj2SZOdDcx4EYGycPYIMmq7hAbAOJCQAKABwEJAB4EJAB4EJAA4EFAAoAHAQkAHgQkAHgQkADgQUACgAcBCQAeBCQAeBCQAOBBQAKABwEJAB4EJAB4EJAA4EFAAoAHAQkAHgQkAHgQkADgQUACgAcBCQAeBCQAeBCQAOBBQAKABwEJAB4EJAB4EJAA4EFAAoAHAQkAHgQkAHgQkADgQUACgAcBCQAeYwvZeOrUqUqlyNQk6erq2vm7paWlzL1BH8YlufL5/LC3rTMzG2qjXC6nxsbGEXUKAJIkm80qnU4Puk1Be5BNTU3sQSZMV1eX8vm8UqmUmpqayt0dfIhxSa58Pr9zD38oBQVkW1vbkImL0dXS0qKOjg41NTWpvb293N3BhxiX5CrkiJjdQQDwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwGNsIRtPnTpVqRSZmiRdXV07f7e0tJS5N+jDuCRXPp8f9rZ1ZmZDbZTL5dTY2DiiTgFAkmSzWaXT6UG3KWgPsqmpiT3IhOnq6lI+n1cqlVJTU1O5u4MPMS7Jlc/nd+7hD6WggGxraxsycTG6Wlpa1NHRoaamJrW3t5e7O/gQ45JchRwRszsIAB4EJAB4EJAA4EFAAoAHAQkAHgQkAHgQkADgQUACgAcBCQAeBCQAeBCQAOBBQAKABwEJAB4EJAB4EJAA4EFAAoAHAQkAHgQkAHgQkADgQUACgAcBCQAeBCQAeBCQAOBBQAKABwEJAB5jy90B1LZ335VWrJBWr3b/vWWLNH68lE5L++4rTZ0qTZlS7l6iVhGQGHX/+Y/0wAPS449Lb7whmQ2+fXOz9IUvSOecIx177Oj0EZCq4RD72mulurrgz6xZUm/vyOo1k046KVz3174WT79r0H//K511lnTAAdIPfyitXDl0OEpSZ6e0dKl03HHSUUdJ//hH6fta1Zgzw2fDkM1mTZJls9nhbD66enrMDjvMzA3PRz8LF46s3p//PFznpz9ttmVLPP2OSSaTMUmWyWTK3ZVB/eIXZrvtFn5Li/mpqzObN89s27Zyvyq/RI9Ljc+ZQvKszmzov+G5XE6NjY3KZrNKp9OlzuzCvf66NHOm1NPzUVl9vbRsmXTwwYXX99Zb0vTp0vvvf1Q2Zoz0/PNuFyZBWlpa1NHRoUwmo/b29nJ3J8RMuvxyafHi6MdTKemzn5WOOUZqapL22UfK5dxe48qV0tNPB4ehv1mzpKeekvbYo2TdL1rSx6WW50xBeRZ34pbNjTeG/3rNmGG2fXth9fT2mh19dLiu7363NP0eoUTvqZjZ3LnRe4Hjx5stWGDW2Tn487dsMXvgAbNJk6LrmTHDLJcbnddSiKSPi5nV7JwpJM+qJyB37DA74ojwIP3gB4XVc8st4ToOOSSxx3NJnoi33RYdatOmma1aVVhdmzaZnX12dH2nnmqWz5fmNRQryeOyU43OmdoMSDM363bZJThQ48aZvfLK8J6/cqVZfX34+cuWlbTbI5HUifjqq+6tGzhvDj3UrLu7uDp7e83OPz86JBcvjrX7I5bUcQmpwTlTSJ5V/rfY/R14oHTDDcGy7dul884LftYSZccOt922bcHyq6+WWlvj7WcN+OpX3Vvf3957S3/9q7TXXsXVmUpJv/yldOKJ4ce++12pu7u4emsac2ZQ1RWQkvSNb0hHHx0sW7FCuu66wZ93ww3S8uXBstZWN9goyB/+IL3wQrh80SL3JcxIpFLSXXdJEyYEyzdvlm6+eWR11yzmjF/cu6SJ8O9/m02YENztHzPG7IUXord/+WWzsWOD29fXu8OHhEviodwJJ4QPgY87Lt42rrsu3EY6bfb++/G2U6wkjsugamjO1O4hdp9PfSq8O9HbK51/vvTBB8HybdvcYcKOHcHy668v7nSHGrdmjfTss+HyefPibWfuXHcWSX+5nPTYY/G2UzOYM5GqMyAlaf58afbsYFlbW3j3/5prpFWrgmWzZklXXVXa/lWpJ590uxP9TZwozZkTbzvNzdLnPx/dPorEnAmp3oCsq5PuvVdqaAiW//jH7uRVyf2+447g4xMmSPffH949wbA891y47IQT3A0o4va5z4XLovZeMUzMmZDqDUjJ3Q7m9tuDZfm8dMEF0jvvuN/5fPDxhQul/fcfrR5WnWXLwmUzZ5amrcMPD5d1d0tJvHClYjBnAqo7ICX3YdXJJwfL+i6LeuutYPns2e66OBSlp0d6++1weVSQxWH6dGncuHD5m2+Wpr2awZzZqfoDUpLuuSd8we66dcF/NzS4w4u6ulHrVrXp6Ah//ihJmUxp2quvd59vDrR2bWnaqynMGUm1EpCZjDsJbzC33+4OL1C0d9+NLm9sLF2bUXW/917p2qsZzBlJtRKQkjst4aSToh875RR3WIER2bo1uryUd9uJqtvXDxSIOVNDAblhg/Taa9GPnXHG6PYFsYk6uhv6Bn4YFuZMDQXkZZdJ69dHP/a973Ehbwx23TW6PJstXZubNoXLBl6GiCIxZ2okIB96SHrkEf/j3d3uJFmMyJ57RpdHhVhcour29QMFYM5IqoWAXLcueiAHfrr/yCOD/w+BIWUy0Ye8nZ2laa+nR9q4MVze0lKa9moGc2an6g/ISy4Jf7166aXu9ISB5s+vicOGUqmvj/5S8+WXS9Pe66+Hb6kmuUXBMALMmZ2qOyDvu0/64x+DZVOmSLfe6i4OPuus4GPd3e5zFxQt6jaAL71Umrai6t1rL2ny5NK0VxOYMwHVG5Dt7dLXvx4s67vWdPfd3b9/9jNp0qTgNo8+Kv32t6PSxWp0/PHhsmeeGfreq8X485/DZQPvtYACMGdCqjcgL744/PXpFVe4xZX7fOxj0p13hp87f7677hQF++IXw2UbNkhPPBFvO+vWSX/60/DaxzAxZ0KqMyDvvFP6y1+CZfvvL910U3jb006TzjknWLZhQ1UfNpTSlCnB+dRnyZJ427n77vDtCNNp6fTT422nZjBnIlVfQK5eLX3728GyVMp9tuI7Qe4nP3GLMvf32GPSww+XpIvV7sorw2XPPhvfUdiaNe4GMgNdfLG0227xtFFTmDNe1RWQZtKFF0r/+1+w/JvfdKvT++y5p1voZKDLL6/Kw4ZSmzNHmjEjXH7llW5HYyTyebcgWP/16SV334Tvf39kddck5sygqisgFy2S/va3YNmBB0o//OHQz/3Sl9y1p/1t2BD/WgE1oK7OzZ2xY4Pl69e7FQl9N7UYipk7AyXqy5mbb3arJqJAzJnBxb3ITdm8+abZrruGFx168cXh1/Hee2bNzeHVoH7zm5J1e6SSvDjUwoXRa1hPn27W1lZYXdms2bnnRtd36qlm+XxJXkLRkjwuO9XonCkkz6ojIHfsMDvqqPAgLVhQeF1PPhmuZ+JEs3Xr4u93DJI+ES+8MDrUxo83u+aaod/WrVvNHnwweg5KZjNmmOVyo/NaCpH0canlOVN7AXnTTeEBmjbNbNu24uq74IJwfXPmxNvnmCR9Ivb2ms2dGx1uklkqZXbssW5e/vSnZg8/bLZ0qdn115udeabZ7rv7nztrltuBSaKkj0stz5naCsgVK9zuSP+BGTfObPny4ut87z2zTCY84L/+dWzdjkviJ+KHFi8OH82N5OfSS80++KDcr8ov0eNS43OmdtbF3r7drds78DKNq6+WPvOZ4uvdYw9p6dJw+RVX+G//hEHNm+dWCj3zTHcGSbFmznQrJy5Z4q79RoGYMwWp7IC88UZp+fJgWWtreB3fYpxyinTRRcGyjRvdRfsoyic/6c6F7Ftq+aCDhrecyaRJ7hzH556TXnwx+kR0DBNzpiB1ZkPffzmXy6mxsVHZbFbpdHo0+jW05culI48MXk4xfrxbd/SQQ+JpI5t1dQ1cR/RXv5LOPjueNkaopaVFHR0dymQyaq/A9U43bnR35Vm92p3+s3WrG8Z0WvrEJ9wZJ/vtV+5eFi6R48KckVRYno0d9NEka22NvtdVnBobWSKvxCZOdDeY4CYTo4A5U7DKPsQGgBIiIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABAAPAhIAPAhIAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQADwISADwISADwICABwIOABACPscPZyMwkSblcrqSdQeHy+fzO34xPcjAuydU3Hn25Npg6G8ZW7e3tmjx58sh7BgAJsXbtWrW0tAy6zbACMp/Pq7OzUw0NDaqrq4utgwAw2sxMmzdvVnNzs1KpwT9lHFZAAkAt4ksaAPAgIAHAg4AEAA8CEgA8CEgA8CAgAcCDgAQAj/8HpolPUM2l2/wAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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L/J7Kp+L29xEdl6am40ZM8b7C3344a63vWpVXhxqx+JDGj8zZ9rlem++2e6Z5GrsWLs635Il9vpidB1zExHz5kkbNmTWxozxrn2di2uvlb797czanj32ECJPFVRAStI559jz7VrXOx8xonNrCg0ebM+jW7tWWrfO/2RndA1z08M2bLABebK+fe2n1m1POcjVk096b6f0n/9pD7XzUEG8B9mRPXvsnV+2bbOnmBw+bP+/SCals86Shg+Xzj23p0eZm0i/19UJhTo3+T4vhSybPAvoz0a0DRxob2LAjQyih7lBlBXcITYABIWABAAHAhIAHAhIAHAgIAHAgYAEAAcCEgAcCEgAcCAgAcCBgAQABwISABwISABwICABwIGABAAHAhIAHAhIAHAgIAHAgYAEAAcCEgAcCEgAcCAgAcCBgAQABwISABwISABwICABwIGABAAHAhIAHAhIAHAgIAHAgYAEAAcCEgAcCEgAcCAgAcCBgAQABwISABx6Z/PkYcOGKZEgU6Nk586dJ75XVlb28GjQinmJrnQ63ennFhljTEdPSqVSKi0t7dKgACBKmpqalEwm231OVnuQZWVl7EFGzM6dO5VOp5VIJFRWVtbTw8HnmJfoSqfTJ/bwO5JVQNbU1HSYuOhelZWVqqurU1lZmWpra3t6OPgc8xJd2RwRszsIAA4EJAA4EJAA4EBAAoADAQkADgQkADgQkADgQEACgAMBCQAOBCQAOBCQAOBAQAKAAwEJAA4EJAA4EJAA4EBAAoADAQkADgQkADgQkADgQEACgAMBCQAOBCQAOBCQAOBAQAKAQ++eHgCAaNq7V9q8Wdq2zf73oUNS375SMimdfbY0bJhUVdXTowwXAQnghI8+kpYvl159VfrgA8mY9p9fXi5df700ebJ02WXdM8buxCE2AP31r9Itt0jnnSc9+qi0ZUvH4ShJ9fXSsmXShAnSuHHSn/4U/li7EwEJxNyyZdKIEdILL0jpdO7tvPOODcq775aam4MbX0/iEBuIKWOk2bOlxYv9H08kpIsvli69VCork848U0ql7F7jli3S6tXSwYPeNpcskTZulFatkk4/PeyfIlwEJBBTd91l9x7b6ttX+t73bHiWlblff/iw9Mor0g9+IDU0ZD723/8t/e3fSmvWSCUlwY67O3GIDcTQwoX+4ThypN37mzev/XCUpH79pNtu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sWPtyolLlthrv5Eltpms5HdAzpsnbdiQWRszxruOby6uvVb69rcza3v22Iv2kZNzzrHnQrYutTxiROeWMxk82J7juHattG6d/4no6CS2mawUGdPx/ZdTqZRKS0vV1NSkZDLZHePq2IYN0kUXZV5O0bevXXf0/POD6aOpybbVdh3R3/5WuvXWYProosrKStXV1amiokK1ebje6Z499q4827bZ038OH7bTmExKZ51lzzg599yeHmX2IjkvbDOSssuz3u0+GmVjxvjf6ypIpaUskReygQPtDSa4yUQ3YJvJWn4fYgNAiAhIAHAgIAHAgYAEAAcCEgAcCEgAcCAgAcCBgAQABwISABwISABwICABwIGABAAHAhIAHAhIAHAgIAHAgYAEAAcCEgAcCEgAcCAgAcCBgAQABwISABwISABwICABwIGABAAHAhIAHAhIAHAgIAHAgYAEAAcCEgAcCEgAcCAgAcCBgAQABwISABwISABwICABwKF3Z55kjJEkpVKpUAeD7KXT6RPfmZ/oYF6iq3U+WnOtPUWmE8+qra3VkCFDuj4yAIiIHTt2qLKyst3ndCog0+m06uvrVVJSoqKiosAGCADdzRijAwcOqLy8XIlE++8ydiogASCO+JAGABwISABwICABwIGABAAHAhIAHAhIAHAgIAHA4f8BT8KS6U/QREgAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "board_states = list(\n", " ma[ma.muscle_action_objective > 0]\n", " .muscle_sensor_readings\n", " .apply(lambda x: [s.value for s in x])\n", ")\n", "for state in board_states:\n", " render_tic_tac_toe(state)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.9" } }, "nbformat": 4, "nbformat_minor": 5 }