Skip to content

Instantly share code, notes, and snippets.

@jpn--
Created August 27, 2018 14:16
Show Gist options
  • Save jpn--/aa6dee82e6c567da952a9ac736a5393f to your computer and use it in GitHub Desktop.
Save jpn--/aa6dee82e6c567da952a9ac736a5393f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This workbook was used to probe the workbench example with different data formats,\n",
"to learn how it would respond and to set up the TMIP-EMAT to connect."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import ema_workbench"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\jnewman\\AppData\\Local\\Continuum\\anaconda3\\lib\\importlib\\_bootstrap.py:219: ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__\n",
" return f(*args, **kwds)\n"
]
}
],
"source": [
"%load_ext Cython"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import math\n",
"import numpy as np\n",
"from scipy.optimize import brentq"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"%%cython\n",
"\n",
"import numpy as np\n",
"from scipy.optimize import brentq\n",
"import math\n",
"\n",
"def get_antropogenic_release(\n",
" float xt, \n",
" float c1, \n",
" float c2, \n",
" float r1, \n",
" float r2, \n",
" float w1\n",
"):\n",
" '''\n",
"\n",
" Parameters\n",
" ----------\n",
" xt : float\n",
" polution in lake at time t\n",
" c1 : float\n",
" center rbf 1\n",
" c2 : float\n",
" center rbf 2\n",
" r1 : float\n",
" ratius rbf 1\n",
" r2 : float\n",
" ratius rbf 2\n",
" w1 : float\n",
" weight of rbf 1\n",
"\n",
" Returns\n",
" -------\n",
" float\n",
"\n",
" note:: w2 = 1 - w1\n",
"\n",
" '''\n",
"\n",
" rule = w1*(abs(xt-c1)/r1)**3+(1-w1)*(abs(xt-c2)/r2)**3\n",
" at1 = max(rule, 0.01)\n",
" at = min(at1, 0.1)\n",
"\n",
" return at\n",
" \n",
"def lake_model(\n",
" float b=0.42, \n",
" float q=2.0, \n",
" float mean=0.02,\n",
" float stdev=0.001, \n",
" float delta=0.98, \n",
" float alpha=0.4,\n",
" int nsamples=100, \n",
" int myears=100, \n",
" float c1=0.25,\n",
" float c2=0.25,\n",
" float r1=0.5,\n",
" float r2=0.5,\n",
" float w1=0.5,\n",
" seed=None, \n",
" attitude='', \n",
" int stars=0,\n",
" bint toxic=0,\n",
"):\n",
" '''runs the lake model for nsamples stochastic realisation using\n",
" specified random seed.\n",
"\n",
" Parameters\n",
" ----------\n",
" b : float\n",
" decay rate for P in lake (0.42 = irreversible)\n",
" q : float\n",
" recycling exponent\n",
" mean : float\n",
" mean of natural inflows\n",
" stdev : float\n",
" standard deviation of natural inflows\n",
" delta : float\n",
" future utility discount rate\n",
" alpha : float\n",
" utility from pollution\n",
" stars : int\n",
" something\n",
" attitude : str\n",
" feeling\n",
" \n",
" nsamples : int, optional\n",
" myears : int, optional\n",
" c1 : float\n",
" c2 : float\n",
" r1 : float\n",
" r2 : float\n",
" w1 : float\n",
" seed : int, optional\n",
" seed for the random number generator\n",
"\n",
" Returns\n",
" -------\n",
" tuple\n",
"\n",
" '''\n",
"\n",
" np.random.seed(seed)\n",
" Pcrit = brentq(lambda x: x**q/(1+x**q) - b*x, 0.01, 1.5)\n",
"\n",
" X = np.zeros((myears,))\n",
" average_daily_P = np.zeros((myears,))\n",
" reliability = 0.0\n",
" inertia = 0\n",
" utility = stars/100\n",
"\n",
" cdef int s, t\n",
" for s in range(nsamples):\n",
" X[0] = 0.0\n",
" decision = 0.1\n",
"\n",
" decisions = np.zeros(myears,)\n",
" decisions[0] = decision\n",
"\n",
" natural_inflows = np.random.lognormal(\n",
" math.log(mean**2 / math.sqrt(stdev**2 + mean**2)),\n",
" math.sqrt(math.log(1.0 + stdev**2 / mean**2)),\n",
" size=myears)\n",
"\n",
" for t in range(1, myears):\n",
"\n",
" # here we use the decision rule\n",
" decision = get_antropogenic_release(X[t-1], c1, c2, r1, r2, w1)\n",
" decisions[t] = decision\n",
"\n",
" X[t] = (1-b)*X[t-1] + X[t-1]**q/(1+X[t-1]**q) + decision + natural_inflows[t-1] + (1 if attitude=='Sadness' else 0) + (3 if toxic else 0)\n",
" average_daily_P[t] += X[t]/nsamples\n",
"\n",
" reliability += np.sum(X < (Pcrit + (0.01 if attitude=='Disgust' else 0.0)))/(nsamples*myears)\n",
" inertia += np.sum(np.absolute(np.diff(decisions)\n",
" < 0.02)) / (nsamples*myears*(1.3 if attitude=='Anger' else 1.0))\n",
" utility += np.sum(alpha*decisions*np.power(delta*(1.2 if attitude=='Fear' else 1.0),\n",
" np.arange(myears))) / nsamples\n",
" max_P = np.max(average_daily_P)\n",
" return max_P, utility, inertia, reliability"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from ema_workbench import (RealParameter, ScalarOutcome, Constant, Model, IntegerParameter, CategoricalParameter)\n",
"\n",
"model = Model('lakeproblem', function=lake_model)\n",
"\n",
"#specify uncertainties\n",
"model.uncertainties = [RealParameter('b', 0.1, 0.45),\n",
" RealParameter('q', 2.0, 4.5),\n",
" RealParameter('mean', 0.01, 0.05),\n",
" RealParameter('stdev', 0.001, 0.005),\n",
" RealParameter('delta', 0.93, 0.99),\n",
" IntegerParameter('stars', 0, 10),\n",
" CategoricalParameter('attitude', ['Joy', 'Sadness', 'Anger', 'Fear', 'Disgust']),\n",
" CategoricalParameter('toxic', [True, False]),\n",
" ]\n",
"\n",
"# set levers\n",
"model.levers = [RealParameter(\"c1\", -2, 2),\n",
" RealParameter(\"c2\", -2, 2),\n",
" RealParameter(\"r1\", 0, 2),\n",
" RealParameter(\"r2\", 0, 2),\n",
" RealParameter(\"w1\", 0, 1)]\n",
"\n",
"#specify outcomes\n",
"model.outcomes = [ScalarOutcome('max_P'),\n",
" ScalarOutcome('utility'),\n",
" ScalarOutcome('inertia'),\n",
" ScalarOutcome('reliability')]\n",
"\n",
"# override some of the defaults of the model\n",
"model.constants = [Constant('alpha', 0.41),\n",
" Constant('nsamples', 150),\n",
" Constant('myears', 100)]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from ema_workbench import SequentialEvaluator"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[MainProcess/INFO] performing 250 scenarios * 10 policies * 1 model(s) = 2500 experiments\n",
"[MainProcess/INFO] performing experiments sequentially\n",
"[MainProcess/INFO] 250 cases completed\n",
"[MainProcess/INFO] 500 cases completed\n",
"[MainProcess/INFO] 750 cases completed\n",
"[MainProcess/INFO] 1000 cases completed\n",
"[MainProcess/INFO] 1250 cases completed\n",
"[MainProcess/INFO] 1500 cases completed\n",
"[MainProcess/INFO] 1750 cases completed\n",
"[MainProcess/INFO] 2000 cases completed\n",
"[MainProcess/INFO] 2250 cases completed\n",
"[MainProcess/INFO] 2500 cases completed\n",
"[MainProcess/INFO] experiments finished\n"
]
}
],
"source": [
"from ema_workbench import (MultiprocessingEvaluator, ema_logging,\n",
" perform_experiments)\n",
"ema_logging.log_to_stderr(ema_logging.INFO)\n",
"\n",
"with SequentialEvaluator(model) as evaluator:\n",
" results = evaluator.perform_experiments(scenarios=250, policies=10)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(2500,)\n",
"['max_P', 'utility', 'inertia', 'reliability']\n"
]
}
],
"source": [
"experiments, outcomes = results\n",
"print(experiments.shape)\n",
"print(list(outcomes.keys()))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"('Fear', 0.14515008, 0.96964414, 0.02206437, 3.9101047, 10, 0.00102592, True, 1.9058623, 1.93412447, 0.64349526, 0.36807388, 0.46800475, 0, \"{'c1': 1.905862304093612, 'c2': 1.9341244729931457, 'r1': 0.6434952565916993, 'r2': 0.3680738772745887, 'w1': 0.4680047541677753}\", 'lakeproblem')"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"experiments[0]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"numpy.ndarray"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(experiments)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dtype([('attitude', 'O'), ('b', '<f8'), ('delta', '<f8'), ('mean', '<f8'), ('q', '<f8'), ('stars', '<i4'), ('stdev', '<f8'), ('toxic', 'O'), ('c1', '<f8'), ('c2', '<f8'), ('r1', '<f8'), ('r2', '<f8'), ('w1', '<f8'), ('scenario_id', 'O'), ('policy', 'O'), ('model', 'O')])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"experiments.dtype"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2500,)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outcomes['max_P'].shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PRIM"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\jnewman\\AppData\\Local\\Continuum\\anaconda3\\lib\\importlib\\_bootstrap.py:219: ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__\n",
" return f(*args, **kwds)\n",
"[MainProcess/INFO] 2500 points remaining, containing 83 cases of interest\n",
"C:\\Users\\jnewman\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\pandas\\core\\frame.py:6211: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version\n",
"of pandas will change to not sort by default.\n",
"\n",
"To accept the future behavior, pass 'sort=False'.\n",
"\n",
"To retain the current behavior and silence the warning, pass 'sort=True'.\n",
"\n",
" sort=sort)\n",
"[MainProcess/INFO] mean: 0.6384615384615384, mass: 0.052, coverage: 1.0, density: 0.6384615384615384 restricted_dimensions: 8\n"
]
}
],
"source": [
"from ema_workbench.analysis import prim\n",
"\n",
"x = experiments\n",
"y = outcomes['max_P'] <0.8\n",
"prim_alg = prim.Prim(x, y, threshold=0.6)\n",
"box1 = prim_alg.find_box()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"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>coverage</th>\n",
" <th>density</th>\n",
" <th>mass</th>\n",
" <th>mean</th>\n",
" <th>res dim</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.0</td>\n",
" <td>0.033200</td>\n",
" <td>1.000</td>\n",
" <td>0.033200</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.0</td>\n",
" <td>0.066400</td>\n",
" <td>0.500</td>\n",
" <td>0.066400</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.0</td>\n",
" <td>0.077570</td>\n",
" <td>0.428</td>\n",
" <td>0.077570</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.0</td>\n",
" <td>0.086458</td>\n",
" <td>0.384</td>\n",
" <td>0.086458</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.0</td>\n",
" <td>0.093258</td>\n",
" <td>0.356</td>\n",
" <td>0.093258</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1.0</td>\n",
" <td>0.103750</td>\n",
" <td>0.320</td>\n",
" <td>0.103750</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1.0</td>\n",
" <td>0.109211</td>\n",
" <td>0.304</td>\n",
" <td>0.109211</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1.0</td>\n",
" <td>0.115278</td>\n",
" <td>0.288</td>\n",
" <td>0.115278</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1.0</td>\n",
" <td>0.122059</td>\n",
" <td>0.272</td>\n",
" <td>0.122059</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1.0</td>\n",
" <td>0.129688</td>\n",
" <td>0.256</td>\n",
" <td>0.129688</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1.0</td>\n",
" <td>0.138333</td>\n",
" <td>0.240</td>\n",
" <td>0.138333</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>1.0</td>\n",
" <td>0.145614</td>\n",
" <td>0.228</td>\n",
" <td>0.145614</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>1.0</td>\n",
" <td>0.153704</td>\n",
" <td>0.216</td>\n",
" <td>0.153704</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>1.0</td>\n",
" <td>0.162745</td>\n",
" <td>0.204</td>\n",
" <td>0.162745</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>1.0</td>\n",
" <td>0.172917</td>\n",
" <td>0.192</td>\n",
" <td>0.172917</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>1.0</td>\n",
" <td>0.184444</td>\n",
" <td>0.180</td>\n",
" <td>0.184444</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>1.0</td>\n",
" <td>0.197619</td>\n",
" <td>0.168</td>\n",
" <td>0.197619</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>1.0</td>\n",
" <td>0.212821</td>\n",
" <td>0.156</td>\n",
" <td>0.212821</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>1.0</td>\n",
" <td>0.224324</td>\n",
" <td>0.148</td>\n",
" <td>0.224324</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>1.0</td>\n",
" <td>0.237143</td>\n",
" <td>0.140</td>\n",
" <td>0.237143</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>1.0</td>\n",
" <td>0.251515</td>\n",
" <td>0.132</td>\n",
" <td>0.251515</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>1.0</td>\n",
" <td>0.267742</td>\n",
" <td>0.124</td>\n",
" <td>0.267742</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>1.0</td>\n",
" <td>0.286207</td>\n",
" <td>0.116</td>\n",
" <td>0.286207</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>1.0</td>\n",
" <td>0.307407</td>\n",
" <td>0.108</td>\n",
" <td>0.307407</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>1.0</td>\n",
" <td>0.332000</td>\n",
" <td>0.100</td>\n",
" <td>0.332000</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>1.0</td>\n",
" <td>0.360870</td>\n",
" <td>0.092</td>\n",
" <td>0.360870</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>1.0</td>\n",
" <td>0.395238</td>\n",
" <td>0.084</td>\n",
" <td>0.395238</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>1.0</td>\n",
" <td>0.436842</td>\n",
" <td>0.076</td>\n",
" <td>0.436842</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>1.0</td>\n",
" <td>0.461111</td>\n",
" <td>0.072</td>\n",
" <td>0.461111</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>1.0</td>\n",
" <td>0.488235</td>\n",
" <td>0.068</td>\n",
" <td>0.488235</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>1.0</td>\n",
" <td>0.518750</td>\n",
" <td>0.064</td>\n",
" <td>0.518750</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>1.0</td>\n",
" <td>0.553333</td>\n",
" <td>0.060</td>\n",
" <td>0.553333</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>1.0</td>\n",
" <td>0.592857</td>\n",
" <td>0.056</td>\n",
" <td>0.592857</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>1.0</td>\n",
" <td>0.638462</td>\n",
" <td>0.052</td>\n",
" <td>0.638462</td>\n",
" <td>8</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" coverage density mass mean res dim\n",
"0 1.0 0.033200 1.000 0.033200 0\n",
"1 1.0 0.066400 0.500 0.066400 1\n",
"2 1.0 0.077570 0.428 0.077570 2\n",
"3 1.0 0.086458 0.384 0.086458 3\n",
"4 1.0 0.093258 0.356 0.093258 3\n",
"5 1.0 0.103750 0.320 0.103750 3\n",
"6 1.0 0.109211 0.304 0.109211 4\n",
"7 1.0 0.115278 0.288 0.115278 4\n",
"8 1.0 0.122059 0.272 0.122059 4\n",
"9 1.0 0.129688 0.256 0.129688 4\n",
"10 1.0 0.138333 0.240 0.138333 4\n",
"11 1.0 0.145614 0.228 0.145614 4\n",
"12 1.0 0.153704 0.216 0.153704 4\n",
"13 1.0 0.162745 0.204 0.162745 4\n",
"14 1.0 0.172917 0.192 0.172917 4\n",
"15 1.0 0.184444 0.180 0.184444 4\n",
"16 1.0 0.197619 0.168 0.197619 4\n",
"17 1.0 0.212821 0.156 0.212821 4\n",
"18 1.0 0.224324 0.148 0.224324 4\n",
"19 1.0 0.237143 0.140 0.237143 4\n",
"20 1.0 0.251515 0.132 0.251515 4\n",
"21 1.0 0.267742 0.124 0.267742 4\n",
"22 1.0 0.286207 0.116 0.286207 4\n",
"23 1.0 0.307407 0.108 0.307407 4\n",
"24 1.0 0.332000 0.100 0.332000 4\n",
"25 1.0 0.360870 0.092 0.360870 5\n",
"26 1.0 0.395238 0.084 0.395238 5\n",
"27 1.0 0.436842 0.076 0.436842 5\n",
"28 1.0 0.461111 0.072 0.461111 5\n",
"29 1.0 0.488235 0.068 0.488235 5\n",
"30 1.0 0.518750 0.064 0.518750 6\n",
"31 1.0 0.553333 0.060 0.553333 7\n",
"32 1.0 0.592857 0.056 0.592857 7\n",
"33 1.0 0.638462 0.052 0.638462 8"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"box1.peeling_trajectory"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"box1.show_tradeoff()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"coverage 1\n",
"density 0.436842\n",
"mass 0.076\n",
"mean 0.436842\n",
"res dim 5\n",
"Name: 27, dtype: object\n",
"\n",
" box 27 \\\n",
" min max \n",
"b 0.334947 0.449461 \n",
"toxic {False} {False} \n",
"attitude {Fear, Disgust, Anger, Joy} {Fear, Disgust, Anger, Joy} \n",
"mean 0.0100924 0.0425649 \n",
"stars 2 9 \n",
"\n",
" \n",
" qp values \n",
"b [2.5380927926662254e-26] \n",
"toxic [4.925354396321925e-09] \n",
"attitude [0.001659606639306864] \n",
"mean [0.001659606639306864] \n",
"stars [0.018541046196189775, 0.29452064086236085] \n",
"\n"
]
}
],
"source": [
"box1.inspect(27)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "unhashable type: 'set'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-19-cd02ff0e3ce5>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mfig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbox1\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow_pairs_scatter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ema_workbench\\analysis\\prim.py\u001b[0m in \u001b[0;36mshow_pairs_scatter\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 630\u001b[0m return _pair_wise_scatter(self.prim.x, self.prim.y, self.box_lim,\n\u001b[0;32m 631\u001b[0m sdutil._determine_restricted_dims(self.box_lim,\n\u001b[1;32m--> 632\u001b[1;33m self.prim.box_init))\n\u001b[0m\u001b[0;32m 633\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 634\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mwrite_ppt_to_stdout\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ema_workbench\\analysis\\prim.py\u001b[0m in \u001b[0;36m_pair_wise_scatter\u001b[1;34m(x, y, box_lim, restricted_dims)\u001b[0m\n\u001b[0;32m 162\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mn\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 163\u001b[0m ax.plot(x_1,\n\u001b[1;32m--> 164\u001b[1;33m [x_2[n], x_2[n]], c='r', linewidth=3)\n\u001b[0m\u001b[0;32m 165\u001b[0m ax.plot([x_1[n], x_1[n]],\n\u001b[0;32m 166\u001b[0m x_2, c='r', linewidth=3)\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\__init__.py\u001b[0m in \u001b[0;36minner\u001b[1;34m(ax, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1865\u001b[0m \u001b[1;34m\"the Matplotlib list!)\"\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mlabel_namer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1866\u001b[0m RuntimeWarning, stacklevel=2)\n\u001b[1;32m-> 1867\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1868\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1869\u001b[0m inner.__doc__ = _add_data_doc(inner.__doc__,\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py\u001b[0m in \u001b[0;36mplot\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1526\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnormalize_kwargs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_alias_map\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1527\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1528\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mline\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_lines\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1529\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd_line\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mline\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1530\u001b[0m \u001b[0mlines\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mline\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_base.py\u001b[0m in \u001b[0;36m_grab_next_args\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 404\u001b[0m \u001b[0mthis\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 405\u001b[0m \u001b[0margs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 406\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mseg\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_plot_args\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mthis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 407\u001b[0m \u001b[1;32myield\u001b[0m \u001b[0mseg\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 408\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_base.py\u001b[0m in \u001b[0;36m_plot_args\u001b[1;34m(self, tup, kwargs)\u001b[0m\n\u001b[0;32m 381\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mindex_of\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtup\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 382\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 383\u001b[1;33m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_xy_from_xy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 384\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 385\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcommand\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;34m'plot'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\axes\\_base.py\u001b[0m in \u001b[0;36m_xy_from_xy\u001b[1;34m(self, x, y)\u001b[0m\n\u001b[0;32m 214\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mxaxis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0myaxis\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 215\u001b[0m \u001b[0mbx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mupdate_units\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 216\u001b[1;33m \u001b[0mby\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0myaxis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mupdate_units\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 217\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 218\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcommand\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[1;34m'plot'\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\axis.py\u001b[0m in \u001b[0;36mupdate_units\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m 1467\u001b[0m \u001b[0mneednew\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconverter\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mconverter\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1468\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconverter\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mconverter\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1469\u001b[1;33m \u001b[0mdefault\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconverter\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdefault_units\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1470\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mdefault\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0munits\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1471\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_units\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdefault\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\category.py\u001b[0m in \u001b[0;36mdefault_units\u001b[1;34m(data, axis)\u001b[0m\n\u001b[0;32m 115\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_units\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mUnitData\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 116\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 117\u001b[1;33m \u001b[0maxis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0munits\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 118\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0munits\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 119\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m~\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\matplotlib\\category.py\u001b[0m in \u001b[0;36mupdate\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m 197\u001b[0m \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0matleast_1d\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mobject\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 198\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 199\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mval\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mOrderedDict\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfromkeys\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 200\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mval\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mVALID_TYPES\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 201\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"{val!r} is not a string\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mval\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mval\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mTypeError\u001b[0m: unhashable type: 'set'"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = box1.show_pairs_scatter()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:anaconda3]",
"language": "python",
"name": "conda-env-anaconda3-py"
},
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment