240 lines
22 KiB
Plaintext
240 lines
22 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# cadCAD Template: Robot and the Marbles - Part 2\n",
|
|
"\n",
|
|
"\n",
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# import libraries\n",
|
|
"import pandas as pd\n",
|
|
"import numpy as np\n",
|
|
"import matplotlib \n",
|
|
"from cadCAD.engine import ExecutionMode, ExecutionContext, Executor\n",
|
|
"import configBlank\n",
|
|
"from cadCAD import configs\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"exec_mode = ExecutionMode()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"single_proc: [<cadCAD.configuration.Configuration object at 0x1167ee7b8>]\n",
|
|
"[<cadCAD.configuration.Configuration object at 0x1167ee7b8>]\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<style scoped>\n",
|
|
" .dataframe tbody tr th:only-of-type {\n",
|
|
" vertical-align: middle;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe tbody tr th {\n",
|
|
" vertical-align: top;\n",
|
|
" }\n",
|
|
"\n",
|
|
" .dataframe thead th {\n",
|
|
" text-align: right;\n",
|
|
" }\n",
|
|
"</style>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" <th>box_A</th>\n",
|
|
" <th>box_B</th>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>run</th>\n",
|
|
" <th>timestep</th>\n",
|
|
" <th>substep</th>\n",
|
|
" <th></th>\n",
|
|
" <th></th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th rowspan=\"11\" valign=\"top\">1</th>\n",
|
|
" <th>0</th>\n",
|
|
" <th>0</th>\n",
|
|
" <td>10</td>\n",
|
|
" <td>0</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>9</td>\n",
|
|
" <td>1</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>8</td>\n",
|
|
" <td>2</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>7</td>\n",
|
|
" <td>3</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>6</td>\n",
|
|
" <td>4</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>5</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>6</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>5</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>7</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>5</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>8</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>5</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>9</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>5</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>10</th>\n",
|
|
" <th>1</th>\n",
|
|
" <td>5</td>\n",
|
|
" <td>5</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" box_A box_B\n",
|
|
"run timestep substep \n",
|
|
"1 0 0 10 0\n",
|
|
" 1 1 9 1\n",
|
|
" 2 1 8 2\n",
|
|
" 3 1 7 3\n",
|
|
" 4 1 6 4\n",
|
|
" 5 1 5 5\n",
|
|
" 6 1 5 5\n",
|
|
" 7 1 5 5\n",
|
|
" 8 1 5 5\n",
|
|
" 9 1 5 5\n",
|
|
" 10 1 5 5"
|
|
]
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Run Cad^2\n",
|
|
"\n",
|
|
"first_config = configs # only contains config1\n",
|
|
"single_proc_ctx = ExecutionContext(context=exec_mode.single_proc)\n",
|
|
"run = Executor(exec_context=single_proc_ctx, configs=first_config)\n",
|
|
"\n",
|
|
"raw_result, tensor_field = run.execute()\n",
|
|
"df = pd.DataFrame(raw_result)\n",
|
|
"df.set_index(['run', 'timestep', 'substep'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"df.plot('timestep', ['box_A', 'box_B'], grid=True, \n",
|
|
" colormap = 'RdYlGn',\n",
|
|
" xticks=list(df['timestep'].drop_duplicates()), \n",
|
|
" yticks=list(range(1+(df['box_A']+df['box_B']).max())));"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Because we have made it so that both robots read and update the state of the system at the same time, the equilibrium we had before (with 5 marbles in each box) is never reached. Instead, the system oscillates around that point."
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.7.0"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|