1319 lines
158 KiB
Plaintext
1319 lines
158 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from cadCAD.engine import ExecutionMode, ExecutionContext, Executor\n",
|
|
"from cadCAD.configuration import Configuration\n",
|
|
"import networkx as nx\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import numpy as np\n",
|
|
"import scipy.stats as sts\n",
|
|
"import pandas as pd\n",
|
|
"import seaborn as sns\n",
|
|
"import matplotlib.colors as colors\n",
|
|
"import matplotlib.cm as cmx\n",
|
|
"\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"#import conviction files\n",
|
|
"from conviction_helpers import *\n",
|
|
"from conviction_system_logic import *"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"This notebook uses the differential games framework developed by BlockScience. It is currently in private beta, and building towards a full open source release.\n",
|
|
"\n",
|
|
"**Description:**\n",
|
|
"\n",
|
|
"cadCAD is a Python library that assists in the processes of designing, testing and validating complex systems through simulation. At its core, cadCAD is a differential games engine that supports parameter sweeping and Monte Carlo analyses and can be easily integrated with other scientific computing Python modules and data science workflows.\n",
|
|
"\n",
|
|
"To learn more about cadCAD, follow our [tutorial series](https://github.com/BlockScience/cadCAD-Tutorials/tree/master/01%20Tutorials)\n",
|
|
"\n",
|
|
"**Installing cadCAD:**\n",
|
|
"\n",
|
|
"cadCAD is in private beta. Tokens are issued to participants. Replace `<TOKEN>` in the installation URL below\n",
|
|
"```bash\n",
|
|
"pip3 install cadCAD --extra-index-url https://<TOKEN>@repo.fury.io/blockscience/\n",
|
|
"```\n",
|
|
"\n",
|
|
"If you'd like to participate in the beta program, contact cadcad [at] block [dot] science.\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#THIS policy is one of the main paramters of this system!\n",
|
|
"\n",
|
|
"#maximum share of funds a proposal can take\n",
|
|
"default_beta = .2 #later we should set this to be param so we can sweep it\n",
|
|
"# tuning param for the trigger function\n",
|
|
"default_rho = default_beta**2\n",
|
|
"\n",
|
|
"def trigger_threshold(requested, funds, supply, beta=default_beta , rho=default_rho):\n",
|
|
" \n",
|
|
" share = requested/funds\n",
|
|
" if share < beta:\n",
|
|
" return rho*supply/(beta-share)**2\n",
|
|
" else: \n",
|
|
" return np.inf"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/Users/Zargham/Documents/GitHub/conviction/conviction_helpers.py:96: RuntimeWarning: divide by zero encountered in log10\n",
|
|
" demo_data_Z0[sof_ind,ts_ind] = np.log10(trigger)\n",
|
|
"/Users/Zargham/Documents/GitHub/conviction/conviction_helpers.py:98: RuntimeWarning: invalid value encountered in double_scalars\n",
|
|
" demo_data_Z2[sof_ind,ts_ind] = trigger/tc #share of maximum possible conviction\n",
|
|
"/Users/Zargham/Documents/GitHub/conviction/conviction_helpers.py:99: RuntimeWarning: invalid value encountered in double_scalars\n",
|
|
" demo_data_Z3[sof_ind,ts_ind] = np.log10(trigger/tc)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"dict1 = trigger_sweep('token_supply',trigger_threshold)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Text(0.15940000000000001, 1008990000.0, 'fixed alpha = 0.5')"
|
|
]
|
|
},
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 720x360 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"trigger_plotter(dict1['share_of_funds'],\n",
|
|
" dict1['log10_trigger'], \n",
|
|
" 'log10_trigger',\n",
|
|
" dict1['total_supply'],\n",
|
|
" 'Token Supply')\n",
|
|
"axis = plt.axis()\n",
|
|
"plt.text(.2*axis[0]+.8*axis[1],axis[-1]*1.01, 'fixed alpha = 0.5')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"dict2 = trigger_sweep('alpha',trigger_threshold)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"dict_keys(['log10_trigger', 'trigger', 'share_of_max_conv', 'log10_share_of_max_conv', 'alpha', 'share_of_funds'])"
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"dict2.keys()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 720x360 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"trigger_plotter(dict2['share_of_funds'],\n",
|
|
" dict2['log10_share_of_max_conv'], \n",
|
|
" 'Log10 Share of Conviction Required to Pass',\n",
|
|
" dict2['alpha'],\n",
|
|
" 'alpha')\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"n= 25 #initial participants\n",
|
|
"m= 3 #initial proposals\n",
|
|
"\n",
|
|
"initial_sentiment = .5\n",
|
|
"\n",
|
|
"network, initial_funds, initial_supply, total_requested = initialize_network(n,m,total_funds_given_total_supply,trigger_threshold)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Note from Kris, consider: substitutibility of proposals st when a substitute passes, affinity for the others goes away; this will make the process more realistic because proposals will end up never passing.\n",
|
|
"\n",
|
|
"implementation notes:\n",
|
|
"- create substitutability matrix (proposal x proposal)\n",
|
|
"- update accounting when thing pass: change affinities and should affect sentiments\n",
|
|
"- define a new 'type' of proposals for tracking 'dead' ones (no longer candidates = zero tokens in support)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"proposals = get_nodes_by_type(network, 'proposal')\n",
|
|
"participants = get_nodes_by_type(network, 'participant')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{'type': 'proposal',\n",
|
|
" 'conviction': 0,\n",
|
|
" 'status': 'candidate',\n",
|
|
" 'age': 0,\n",
|
|
" 'funds_requested': 44422.72592566299,\n",
|
|
" 'trigger': inf}"
|
|
]
|
|
},
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"#sample proposal\n",
|
|
"network.nodes[proposals[0]]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{'type': 'participant',\n",
|
|
" 'holdings': 583.4204491141511,\n",
|
|
" 'sentiment': 0.13785461223155082}"
|
|
]
|
|
},
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"#sample participant\n",
|
|
"network.nodes[participants[0]]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"{'affinity': 0.18493514019369206, 'tokens': 0, 'conviction': 0}"
|
|
]
|
|
},
|
|
"execution_count": 12,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"#sample relationship participant to proposal\n",
|
|
"network.edges[(participants[0],proposals[0])]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Explore the data created in initial conditions!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Text(0.5, 1.0, 'Histogram of Participants Token Holdings')"
|
|
]
|
|
},
|
|
"execution_count": 13,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"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": [
|
|
"plt.hist([ network.nodes[i]['holdings'] for i in participants])\n",
|
|
"plt.title('Histogram of Participants Token Holdings')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Text(0.5, 1.0, 'Histogram of Proposals Funds Requested')"
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"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": [
|
|
"plt.hist([ network.nodes[i]['funds_requested'] for i in proposals])\n",
|
|
"plt.title('Histogram of Proposals Funds Requested')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Text(0.5, 1.0, 'Histogram of Affinities between Participants and Proposals')"
|
|
]
|
|
},
|
|
"execution_count": 15,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"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": [
|
|
"plt.hist([ network.edges[e]['affinity'] for e in network.edges])\n",
|
|
"plt.title('Histogram of Affinities between Participants and Proposals')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Text(0.5, 1.0, 'Histogram of Affinities between Participants and Proposals weighted by holdings')"
|
|
]
|
|
},
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfUAAAEICAYAAABGRG3WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xu4HVV9xvHvS2K4Q0CCQhIISKQGvGEKtKJQYyUEJdhCGyoSMJoWwaqlFlArCKJ4xVJFRUEuKiFNVaKgEJGLNwKhUBSQciRAQgIEcyGIIIFf/1hrJ3N29t5nn+Scs3PWeT/Ps5/sWbNmZq01a+Y3s2bOjiICMzMzG/w263QBzMzMrG84qJuZmRXCQd3MzKwQDupmZmaFcFA3MzMrhIO6mZlZIfokqEu6W9IhfbGuwUrS2yUtkvSUpNduwPIvkXSzpNWSPq/km5JWSLpV0hsk3dfmulrmlbRbLuew3pazxTrHSQpJw/tqnUNNu8dR3nd7DkCRNgmSzpT0rU6Xoz908rjp5TnlEEmL+7EsLdef22ivPtjO8ZJ+voHLtuyHkh6U9Ob8/cOSvrGh5dwYPQb1akErad0aJiL2iYgbe1hP6Sf9zwEnR8Q2EXFHoww5UD8g6Z4Gs2cCTwDbRcQpwEHAXwNjImL/iPhZROzdTkHq89bvw4h4OJfz+V7Ur98Mhr6RTzov5IC6WtJ9kk7YiPVdIukT1bR2jqOcb5uIeGBDt92uRsf+pqav98tQ0ptzSk8a9eehLCI+GRHv7sS2ixl+3wQCwu7A3T3keSOwM7CnpD9vsPw9se7XgHYHHoyIP/RtMW0jLImIbYDtgFOBr0ua0NuV9OUIiQFt7pdN4Bxh1v8iouUHeBB4c13a8cDPG+UB9gcWAE8CjwFfyOkPAwE8lT9/Qbqo+CjwEPA4cBmwfWW9x+V5vwf+vW47ZwJzgG/lbb07b/tXwEpgKfAlYERlfQG8F7gfWA2cDbwsL/MkMLuav67ODcsKbJ7rE8AfgN+1aMuLgW8D3wW+VEm/BHgO+FNe1z8CzwDP5+mPA4cAi+va/F+Bu4BVwJXAFnne2rzA5cALwB/zuv4NGJfLOzzn2R64KLfZI8AngGF53l7ATXkbTwBXNqlbbZ0zgSV5XafUtd9pwO/y/pwN7NiibzwEvC7PPzbPn5Cn3w18v6f15vkHAr/MfeJ/gUMq827MfeAXuT9cB+zUpH7d2j+nLQOOyt//C3g0t9PNwD51+/crwDW5j8ys298/aHAcDQM+nOu1GrgdGFvpx3tV1v1VYF7OdxOwe2Xb/wEsIvXv24E3VOadmdvrsrzs3cDEFv1mC9Lx9vvcnrcBL2nSXrV9shq4B3h7/fmDNLq1AlgIHFaZv0eux+pcry8B3+rtfmFdn5xB6mM35/lH5LquzH3gFXXH1em5zCuAb5KPqzz/PUAXsByYC+ya0wWcRzo3rCIdl/vmeYcDd+R9sAg4s8FxM7zSNg/kui8E3tGgzlvk/bJTnv4osIY0ygfp+P1i/r55bueHSefjrwJbNmo7YL9cztWk/nwl8IlqXuCUXMelwAl5XrP+vCvw33l/LAT+ubKtLUl9d0Vu6w/V78e6Ogfwz7ltngA+Szr2N8/74pWVvDvn9hnVYD3H07rv7Zr36/K8n99Td7x8qzL9TtbFp4+wfnz6Vt0+np73wxPAR+ra4tJcnntJx1p1v5xKOi+vBu4DJjVrp4jol6D+K+Cd+fs2wIGNOm9Oe1duuD1z3u8Cl+d5E3IHOQgYkXfCc3WN9hxwZN65WwKvI53Eh+ft3Qt8oK5jzCVd0e8DPAtcn7e/PalzTW/SDk3LWn+ibbL8VqSDegrwt3nHVi84LiEfQE3a+BDWD+q3kjrhjrmu/9Qi75sr0932BfB94GvA1qQD4lbgH/O8K0gddjPSyeSgJvWrrfOKvJ5Xkg7m2v76AHALMIZ0IH4NuKJF37iMfFEAXEgKECdW5n2wjfWOJh1wU3L5/zpPj8rzb8zrfTmp/9wInNukfmvbNK/r7aT+t3elf2yby/BF4M66fbsKeH2lHbvt7wbH0YeAXwN7kwLGq4EX1/e1vJ7VpFGgzUlBvNpvjgVeTDomTiFdeNQu/s4kXTxOIV1EfAq4pUW/+UfgB6S+PIx0vG3XpL2OJvXNzYC/J13M7FLp28+RAuQw4ETShaAq55Av5Pq8Mdevx6Bev19Y168uI/XJLfO+/kPuCy8inUC7yMdirvNvgLGk4+oXrAtsbyIdt/vlsv0n6y4UDiVdNI3M++sVlfoeQjoeNgNeRQquR9b3/VzGJ1nXp3ahcnFYV++bgb/N368j9ePDKvPenr9/kXTO25HUP38AfKpB240gBaj353b5G1KQrgb1NcBZef4U4Glghybnr81ye3wsr3tPUkA+NM8/F/hZLtfY3OY9BfUbcv7dgP8D3p3nXQB8upL3/eQLiwbrOZ7Wfe+mvL4tgNeQzmGTKsdLLVDX4lPtuPtCbp9WQf3rpD74alLseUWlLW4CdiCdx+6q7Je9SReCu1bW9bJm7RTRflB/inRVW/s8TfOgfjPpznKnuvXUKlY9cV8PvLcyvXdu8OG5M1xRmbcVqZNVG+3mHsr+AeB7dR3j9ZXp24FTK9OfJ1/hNlhX07LWn2ibLH9s7iDDcydYSfe7l0vofVA/tjL9GeCrLfI2DOrAS3IH27Iy/xjghvz9MlJQHdNDW9fW+Wd1Zboof7+XyhUm6YRV29eN+sYMYG5l2XcDs/L0Q8B+baz3VCoXXnn+teQLN1IQ/2hl3nuBHzep3yGkO9eVpKv4O4FpTfKOzPXZvrJvL6vL021/NziO7gOmNll/fVCfVZm3DWmEZ2yTZVcAr64cQz+pzJsA/LFFv3kXadTjVa36QpPt3lmrD6lvd9Ud2wG8lHTCXgNsXZn/HVoH9Yb7pdKv9qzk/3dgdmV6M9Jd0CGVOv9TZf4U8ugbaTTrM3Vt/VzezptIgeZAYLMe2uKLwHkNjsWtcz3+lsrx2GQdZwPn5+UeJQWyc6ncxZMuLv5AJQiQRsEW1p8nSMHpEXJwy2k/p3tQ/yPdj9HHWXfTdgndz18HAA/Xlfl04Jv5+wPA5Mq8mfQc1Kv53wtcX9nWolq7k0aK/67Jeo6ned8bSzp2tq3M/xRwSeV4qQXqj9H9uNua9eNTfVAfU8l/K+v66dqLnTz97sp+2Su385uBF7VzrLX7TP3IiBhZ++QGbWYG6Wr4t5Juk/TWFnl3JZ2gax5iXaDZlbSjAIiIp0l3WVWLqhOSXi7ph5IelfQk8ElS5656rPL9jw2mt9mAsrZjOulksiYiniXd6U9vc9lmHq18f5rmZW9ld9KV91JJKyWtJN3t7pzn/xvp5HBrfjv7XT2sr7pPHiK1W20736ts417SAdSs/W4C3iDppaQr6iuB10saRxpVubON9e4OHF2bl+cfRAr8Nb1pwyX5GNgxIl4TEbMgPSOXdK6k3+V+92DOX+17i+pX1oOxpLuvdlSPk6dIwW3XXLZTJN0raVWu//Z15aqv/xYtnj1fTroomiVpiaTPSHpRo4ySjpN0Z6Xd92223XxsQ2r7XYEV0f1dkupx10jD/VJRbftux3FEvJDnj26Sv9qH65d9inROGh0RPyU9Jvgy8JikCyVtByDpAEk3SFomaRXwT6x/XiLX+e/z/KWSrpb0Z03qfBMp0O5HGtGZBxxMuqjoiogngFGkoHV7ZT/8OKfX2xV4JHIkadAOAL+PiDWV6VbHy+7ArnXH3odZd7x3O7/T8z6uL8/a/RIR80kXLwfn9tqLNDrRTKu+tzwiVtdtp9o3aurj0x9YPz413S7d266+Larr7SLdnJ4JPC5plqRdaaHPX5SLiPsj4hhSUPg0MEfS1qQrlXpLSDu/pnaV/hjpmc2Y2gxJW5KGEbttrm76K8BvgfERsR2pE2nDa9N2WVuSNIZ0JX9svuB4lPTMb4qk9Q7uftCo7WsWke7Ud6pcuG0XEfsARMSjEfGeiNiVNPx6QQ9/WjK28n03UrvVtnNY9eIwIraIiEcalS935qdJz9Fuzgfao6Qr+p/nk3FP611EulOvzts6Is5t2Vq99w/AVNLV9PakK3Po3vfq69hqn0Aq+8va3P7aNpe0DWmIcomkN5BGK/6ONEw6kvQYoN1jolsZI+K5iPh4REwA/hJ4K+m9l24k7U4aajyZ9MhgJGl4tZ3tLgV2yOeMmt3aLG8z1Xp0O44lidR+j1TyNOvD9ctuTTonPQIQEedHxOtIj/ZeTnqEAmmkYS5p9GR70nPthm0REddGxF+TLjx/S2rHRn5JGi18O3BTRNyTy3o4KeBDelTwR9IQfq3/bx/ppcJ6S4HRuT0atUNP6vvzItKIQPXY2zYiplS2V9/OPWm2XyA9kz6W9Jx7TkQ804uy1ywBdpS0bd12HmmQt1v5JW3F+vGpXd1iHXXtHhHfiYiDSH0vSHG1qT4P6pKOlTQqn3RX5uTnSUPPL5CerdRcAXxQ0h75ZPRJ0otYa0gvwb1N0l9KGkEa0u/ppLAt6ZnUU/mK7cQ+q1jrsvbknaShub1Jz2leQzroF5OGuvvbY3Rv97UiYinpmdznJW0naTNJL5N0MICko/NFCaSh2yDtz2b+XdJWkvYBTiDdYUM6kZ2TT/hIGiVpap7XqG9AOjmdzLqT1I110z2t91ukPnRovpveIv8JVPUA6gvbki6Mfk+6M/pkG8s03SfZN4CzJY1X8ipJzU4aUyQdlI+Ts4H5EbEol2sN+bGPpI+R3idpV7cySvorSa/Mb+8/SRp6btQXahfxy/JyJ5Du1HsUEQ+Rhk8/LmmEpIOAt/WizD2ZDRwuaVIeZTiFtO9+WclzkqQxknYk3RjU+vB3gBMkvUbS5qT9PD8iHpT05/mO/EWku8bai66Q9sPyiHhG0v6ki8D1KP1WxRH5YuFZ0mPPhsdavsO8HTiJdcfDL0kX3jflPC+QLgrOk7Rz3sZoSYc2WOWv8rZOljQ8H0P7N27Chur7863Ak5JOlbRlPv721bq/+pkNnC5ph3w8vq+NbXwo5x9LetxwZWXe5aQLnGNJjwx7LR8zvwQ+lc8VryKNPH+7QfY5wFsrx91ZbHg8rbbFaNI5DgBJe0t6U+5vz5Au0lr+KXJ//EnbZOBuSU+RXtqZFhHP5E54DvCLPBxzIOlt8MtJz+EX5kK/DyAi7s7fZ5GuZFaTni0822Lb/0o6YFaTOvOVLfL2VtOytmE6cEG+6137IQWkjR2Cb8engI/mdv/XBvOPI73MUnvjdw7rhqj/HJif9+dc4P0RsbDFtm4ivXh0PfC5iLgup/9HXv46SatJL7cdAGtPUPV9o7aubUlt3mi6p/UuIt1Bf5gUYBaR7p76ut9fRhqme4TUhre0scxFwIRc3+83mP8F0sF+HSmAXkR6yaaR7wBnkIbdXwe8I6dfC/yIdEH5EKnP9uYxQH2/eSmpbzxJesxxE+nCqZt81/h5UqB4jPSS2C96sd1/IO3D5bleG3SSbiQi7iOd+P+TdCf7NuBtEfGnSrbvkNr9gfz5RF72etIz+f8mnZNeBkzLy2xHOuesYN0b0Z/L894LnJX758dI+7WRzUgXGUtIdT+Y1o86byI9Oru1Ml1/fJxKOh5vUXo09BPSzUU3uf5/QwpiK0lt9ENan2+ruvXnSL+B8TbSDcxCUlt/gzSSBekm7aE87zrSubUnV5EuZO4Ers7brJV/MfA/pIvJn7VZ5kaOIY20LQG+B5wREfPqM+X4dBKprywl7fcN/XGes/KyC0n7Zw7r2n1z0rsST5BGKncmnc+aqr3xt8nLd8crSUPrrYKK2ZAh6RLSSzUf7XRZSiDpQdJb1T/pdFk6TdJ80su33+x0Wdoh6WLS+xWD+liQdCLpZvjgDVl+k/7xGUlvy0O5W5Ouen/NupeQzMysj0g6WNJL8/D7dNKf3/240+Vqh9ILtH9D5e59sJC0i6TX50efe5NGa763oevbpIM6aeh0Sf6MJ129DI6hBTOzwWVv0g80rSIFlqPyOzebNElnk17E/OwgHcUdQfqLo9XAT0mPGS7Y0JUNmuF3MzMza21Tv1M3MzOzNvk/OOhDO+20U4wbN67TxTAzG1Ruv/32JyKi0Y/iWC85qPehcePGsWDBgk4Xw8xsUJHUzi/KWRs8/G5mZlYIB3UzM7NCOKibmZkVwkHdzMysEA7qZmZmhXBQNzMzK4SDupmZWSEc1M3MzArhoG5mZlYI/6LcJmTcaVd3ZLsPnnt4R7ZrZmZ9y3fqZmZmhXBQNzMzK4SDupmZWSEc1M3MzArhoG5mZlYIB3UzM7NCOKibmZkVwkHdzMysEA7qZmZmhXBQNzMzK4SDupmZWSEc1M3MzArhoG5mZlaIQRvUJV0s6XFJv6mkfVbSbyXdJel7kkZW5p0uqUvSfZIOraRPzmldkk6rpO8hab6k+yVdKWnEwNXOzMys9wZtUAcuASbXpc0D9o2IVwH/B5wOIGkCMA3YJy9zgaRhkoYBXwYOAyYAx+S8AJ8GzouI8cAKYEb/VsfMzGzjDNqgHhE3A8vr0q6LiDV58hZgTP4+FZgVEc9GxEKgC9g/f7oi4oGI+BMwC5gqScCbgDl5+UuBI/u1QmZmZhtp0Ab1NrwL+FH+PhpYVJm3OKc1S38xsLJygVBLX4+kmZIWSFqwbNmyPiy+mZlZ7xQZ1CV9BFgDfLuW1CBbbED6+okRF0bExIiYOGrUqA0prpmZWZ8Y3ukC9DVJ04G3ApMiohaIFwNjK9nGAEvy90bpTwAjJQ3Pd+vV/GZmZpukou7UJU0GTgWOiIinK7PmAtMkbS5pD2A8cCtwGzA+v+k+gvQy3dx8MXADcFRefjpw1UDVw8zMbEMM2qAu6QrgV8DekhZLmgF8CdgWmCfpTklfBYiIu4HZwD3Aj4GTIuL5fBd+MnAtcC8wO+eFdHHwL5K6SM/YLxrA6pmZmfXaoB1+j4hjGiQ3DbwRcQ5wToP0a4BrGqQ/QHo73szMbFAYtHfqZmZm1p2DupmZWSEc1M3MzArhoG5mZlYIB3UzM7NCOKibmZkVwkHdzMysEA7qZmZmhXBQNzMzK8Sg/UU5s40x7rSrO7LdB889vCPbNbOhwXfqZmZmhXBQNzMzK4SDupmZWSEc1M3MzArhoG5mZlYIB3UzM7NCOKibmZkVwkHdzMysEA7qZmZmhXBQNzMzK4SDupmZWSEc1M3MzAoxaIO6pIslPS7pN5W0HSXNk3R//neHnC5J50vqknSXpP0qy0zP+e+XNL2S/jpJv87LnC9JA1tDMzOz3hm0QR24BJhcl3YacH1EjAeuz9MAhwHj82cm8BVIFwHAGcABwP7AGbULgZxnZmW5+m2ZmZltUgZtUI+Im4HldclTgUvz90uBIyvpl0VyCzBS0i7AocC8iFgeESuAecDkPG+7iPhVRARwWWVdZmZmm6RBG9SbeElELAXI/+6c00cDiyr5Fue0VumLG6SvR9JMSQskLVi2bFmfVMLMzGxDlBbUm2n0PDw2IH39xIgLI2JiREwcNWrURhTRzMxs45QW1B/LQ+fkfx/P6YuBsZV8Y4AlPaSPaZBuZma2ySotqM8Fam+wTweuqqQfl9+CPxBYlYfnrwXeImmH/ILcW4Br87zVkg7Mb70fV1mXmZnZJml4pwuwoSRdARwC7CRpMekt9nOB2ZJmAA8DR+fs1wBTgC7gaeAEgIhYLuls4Lac76yIqL18dyLpDfstgR/lj5mZ2SZr0Ab1iDimyaxJDfIGcFKT9VwMXNwgfQGw78aU0czMbCCVNvxuZmY2ZDmom5mZFcJB3czMrBAO6mZmZoVwUDczMyuEg7qZmVkhHNTNzMwK4aBuZmZWCAd1MzOzQjiom5mZFcJB3czMrBAO6mZmZoVwUDczMyuEg7qZmVkhHNTNzMwK4aBuZmZWCAd1MzOzQjiom5mZFcJB3czMrBAO6mZmZoVwUDczMyuEg7qZmVkhHNTNzMwKUWRQl/RBSXdL+o2kKyRtIWkPSfMl3S/pSkkjct7N83RXnj+usp7Tc/p9kg7tVH3MzMzaUVxQlzQa+GdgYkTsCwwDpgGfBs6LiPHACmBGXmQGsCIi9gLOy/mQNCEvtw8wGbhA0rCBrIuZmVlvFBfUs+HAlpKGA1sBS4E3AXPy/EuBI/P3qXmaPH+SJOX0WRHxbEQsBLqA/Qeo/GZmZr1WXFCPiEeAzwEPk4L5KuB2YGVErMnZFgOj8/fRwKK87Jqc/8XV9AbLrCVppqQFkhYsW7as7ytkZmbWpuGdLkBfk7QD6S57D2Al8F/AYQ2yRm2RJvOapXdPiLgQuBBg4sSJ6803s6Fn3GlXd2zbD557eMe2bZ1X3J068GZgYUQsi4jngO8CfwmMzMPxAGOAJfn7YmAsQJ6/PbC8mt5gGTMzs01OiUH9YeBASVvlZ+OTgHuAG4Cjcp7pwFX5+9w8TZ7/04iInD4tvx2/BzAeuHWA6mBmZtZrxQ2/R8R8SXOA/wHWAHeQhsevBmZJ+kROuygvchFwuaQu0h36tLyeuyXNJl0QrAFOiojnB7QyZmZmvVBcUAeIiDOAM+qSH6DB2+sR8QxwdJP1nAOc0+cFNDMz6wdFBnXrHb/UY2ZWhhKfqZuZmQ1JDupmZmaFcFA3MzMrhIO6mZlZIRzUzczMCuGgbmZmVggHdTMzs0I4qJuZmRXCQd3MzKwQDupmZmaFcFA3MzMrhIO6mZlZIRzUzczMCuH/pc3M+pX/F0CzgeM7dTMzs0I4qJuZmRXCQd3MzKwQDupmZmaFcFA3MzMrhIO6mZlZIRzUzczMCuGgbmZmVogig7qkkZLmSPqtpHsl/YWkHSXNk3R//neHnFeSzpfUJekuSftV1jM9579f0vTO1cjMzKxnRQZ14D+AH0fEnwGvBu4FTgOuj4jxwPV5GuAwYHz+zAS+AiBpR+AM4ABgf+CM2oWAmZnZpqi4oC5pO+CNwEUAEfGniFgJTAUuzdkuBY7M36cCl0VyCzBS0i7AocC8iFgeESuAecDkAayKmZlZrxQX1IE9gWXANyXdIekbkrYGXhIRSwHyvzvn/KOBRZXlF+e0ZundSJopaYGkBcuWLev72piZmbWpxKA+HNgP+EpEvBb4A+uG2htRg7Rokd49IeLCiJgYERNHjRq1IeU1MzPrEyX+L22LgcURMT9PzyEF9cck7RIRS/Pw+uOV/GMry48BluT0Q+rSb+zHcg9JnfwfvMzMSlPcnXpEPAoskrR3TpoE3APMBWpvsE8Hrsrf5wLH5bfgDwRW5eH5a4G3SNohvyD3lpxmZma2SSrxTh3gfcC3JY0AHgBOIF3AzJY0A3gYODrnvQaYAnQBT+e8RMRySWcDt+V8Z0XE8oGrgpmZWe8UGdQj4k5gYoNZkxrkDeCkJuu5GLi4b0tnZmbWP4obfjczMxuqHNTNzMwK4aBuZmZWCAd1MzOzQjiom5mZFcJB3czMrBAO6mZmZoVwUDczMyuEg7qZmVkhHNTNzMwK4aBuZmZWCAd1MzOzQjiom5mZFcJB3czMrBAO6mZmZoVwUDczMyuEg7qZmVkhHNTNzMwK4aBuZmZWCAd1MzOzQjiom5mZFcJB3czMrBDFBnVJwyTdIemHeXoPSfMl3S/pSkkjcvrmeborzx9XWcfpOf0+SYd2piZmZmbtKTaoA+8H7q1Mfxo4LyLGAyuAGTl9BrAiIvYCzsv5kDQBmAbsA0wGLpA0bIDKbmZm1mtFBnVJY4DDgW/kaQFvAubkLJcCR+bvU/M0ef6knH8qMCsino2IhUAXsP/A1MDMzKz3igzqwBeBfwNeyNMvBlZGxJo8vRgYnb+PBhYB5Pmrcv616Q2WWUvSTEkLJC1YtmxZX9fDzMysbcUFdUlvBR6PiNuryQ2yRg/zWi2zLiHiwoiYGBETR40a1evympmZ9ZXhnS5AP3g9cISkKcAWwHakO/eRkobnu/ExwJKcfzEwFlgsaTiwPbC8kl5TXcbMzGyTU9ydekScHhFjImIc6UW3n0bEO4AbgKNytunAVfn73DxNnv/TiIicPi2/Hb8HMB64dYCqYWZm1msl3qk3cyowS9IngDuAi3L6RcDlkrpId+jTACLibkmzgXuANcBJEfH8wBfbzMysPUUH9Yi4Ebgxf3+ABm+vR8QzwNFNlj8HOKf/SmhmZtZ3iht+NzMzG6oc1M3MzApR9PC7ma0z7rSrO10EM+tnvlM3MzMrhIO6mZlZIRzUzczMCuGgbmZmVggHdTMzs0I4qJuZmRXCQd3MzKwQDupmZmaFcFA3MzMrhIO6mZlZIRzUzczMCuGgbmZmVggHdTMzs0I4qJuZmRXCQd3MzKwQDupmZmaFcFA3MzMrhIO6mZlZIRzUzczMCuGgbmZmVojigrqksZJukHSvpLslvT+n7yhpnqT787875HRJOl9Sl6S7JO1XWdf0nP9+SdM7VSczM7N2FBfUgTXAKRHxCuBA4CRJE4DTgOsjYjxwfZ4GOAwYnz8zga9AuggAzgAOAPYHzqhdCJiZmW2KigvqEbE0Iv4nf18N3AuMBqYCl+ZslwJH5u9TgcsiuQUYKWkX4FBgXkQsj4gVwDxg8gBWxczMrFeGd7oA/UnSOOC1wHzgJRGxFFLgl7RzzjYaWFRZbHFOa5Zev42ZpDt8dtttt76tgJlZL4077eqObPfBcw/vyHatu+Lu1GskbQP8N/CBiHiyVdYGadEivXtCxIURMTEiJo4aNWrDCmtmZtYHigzqkl5ECujfjojv5uTH8rA6+d/Hc/piYGxl8THAkhbpZmZmm6Tiht8lCbgIuDcivlCZNReYDpyb/72qkn6ypFmkl+JW5eH5a4FPVl6Oewtw+kDUwcz6RqeGos06pbigDrweeCfwa0l35rQPk4L5bEkzgIeBo/O8a4ApQBfwNHACQEQsl3Q2cFvOd1ZELB+YKpiZmfVecUE9In5O4+fhAJMa5A/gpCbruhi4uO9KZ2Zm1n+KfKZuZmY2FDmom5mZFcJB3czMrBAO6mZmZoVwUDczMyuEg7qZmVkhHNTNzMwK4aBuZmZWCAd1MzOzQjiom5mZFcJB3czMrBAO6mZmZoVwUDczMyuEg7qZmVkhHNTNzMwK4aBuZmYQymZWAAAEn0lEQVRWCAd1MzOzQjiom5mZFcJB3czMrBDDO10As6Fk3GlXd7oIZlYw36mbmZkVwkHdzMysEA7qZmZmhXBQ74GkyZLuk9Ql6bROl8fMzKwZB/UWJA0DvgwcBkwAjpE0obOlMjMza8xBvbX9ga6IeCAi/gTMAqZ2uExmZmYN+U/aWhsNLKpMLwYOqGaQNBOYmSefknTfRmxvJ+CJjVh+MHKdh46hWO8hU2d9eu3XDanz7n1amCHMQb01NUiLbhMRFwIX9snGpAURMbEv1jVYuM5Dx1Cst+tsA83D760tBsZWpscASzpUFjMzs5Yc1Fu7DRgvaQ9JI4BpwNwOl8nMzKwhD7+3EBFrJJ0MXAsMAy6OiLv7cZN9Mow/yLjOQ8dQrLfrbANKEdFzLjMzM9vkefjdzMysEA7qZmZmhXBQH2A9/eyspM0lXZnnz5c0buBL2ffaqPe/SLpH0l2Srpc06P9utd2fGJZ0lKSQNOj/DKidOkv6u7yv75b0nYEuY39oo3/vJukGSXfkPj6lE+XsS5IulvS4pN80mS9J5+c2uUvSfgNdxiEpIvwZoA/pZbvfAXsCI4D/BSbU5Xkv8NX8fRpwZafLPUD1/itgq/z9xMFe73bqnPNtC9wM3AJM7HS5B2A/jwfuAHbI0zt3utwDVO8LgRPz9wnAg50udx/U+43AfsBvmsyfAvyI9HsfBwLzO13mofDxnfrAaudnZ6cCl+bvc4BJkhr9CM5g0mO9I+KGiHg6T95C+k2Awazdnxg+G/gM8MxAFq6ftFPn9wBfjogVABHx+ACXsT+0U+8Atsvft6eA37uIiJuB5S2yTAUui+QWYKSkXQamdEOXg/rAavSzs6Ob5YmINcAq4MUDUrr+0069q2aQrvAHsx7rLOm1wNiI+OFAFqwftbOfXw68XNIvJN0iafKAla7/tFPvM4FjJS0GrgHeNzBF66jeHvfWB/x36gOrx5+dbTPPYNN2nSQdC0wEDu7XEvW/lnWWtBlwHnD8QBVoALSzn4eThuAPIY3G/EzSvhGxsp/L1p/aqfcxwCUR8XlJfwFcnuv9Qv8Xr2NKPJdt8nynPrDa+dnZtXkkDScN1bUa4hoM2vq5XUlvBj4CHBERzw5Q2fpLT3XeFtgXuFHSg6RnjnMH+cty7fbvqyLiuYhYCNxHCvKDWTv1ngHMBoiIXwFbkP7jk5L5Z7Y7wEF9YLXzs7Nzgen5+1HATyO/dTKI9VjvPBT9NVJAL+E5a8s6R8SqiNgpIsZFxDjSewRHRMSCzhS3T7TTv79PeikSSTuRhuMfGNBS9r126v0wMAlA0itIQX3ZgJZy4M0FjstvwR8IrIqIpZ0uVOk8/D6AosnPzko6C1gQEXOBi0hDc12kO/RpnStx32iz3p8FtgH+K78X+HBEHNGxQm+kNutclDbrfC3wFkn3AM8DH4qI33eu1BuvzXqfAnxd0gdJQ9DHD/aLdUlXkB6j7JTfFTgDeBFARHyV9O7AFKALeBo4oTMlHVr8M7FmZmaF8PC7mZlZIRzUzczMCuGgbmZmVggHdTMzs0I4qJuZmRXCQd3MzKwQDupmZmaF+H9qXe3UQEgdJAAAAABJRU5ErkJggg==\n",
|
|
"text/plain": [
|
|
"<Figure size 432x288 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.hist([ network.edges[e]['affinity'] for e in network.edges], weights = [network.nodes[e[0]]['holdings']for e in network.edges],alpha = 1)\n",
|
|
"plt.title('Histogram of Affinities between Participants and Proposals weighted by holdings')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"affinities = np.empty((n,m))\n",
|
|
"for i_ind in range(n):\n",
|
|
" for j_ind in range(m):\n",
|
|
" i = participants[i_ind]\n",
|
|
" j = proposals[j_ind]\n",
|
|
" affinities[i_ind][j_ind] = network.edges[(i,j)]['affinity']"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Text(0.5, 106.33200000000001, 'participant_id')"
|
|
]
|
|
},
|
|
"execution_count": 18,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 1440x360 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"dims = (20, 5)\n",
|
|
"fig, ax = plt.subplots(figsize=dims)\n",
|
|
"\n",
|
|
"sns.heatmap(affinities.T,\n",
|
|
" xticklabels=participants,\n",
|
|
" yticklabels=proposals,\n",
|
|
" square=True,\n",
|
|
" cbar=True,\n",
|
|
" ax=ax)\n",
|
|
"\n",
|
|
"plt.title('affinities between participants and proposals')\n",
|
|
"plt.ylabel('proposal_id')\n",
|
|
"plt.xlabel('participant_id')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[0.5, 0.9]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"#power of 1 token forever\n",
|
|
"conviction_capactity = [2,10]\n",
|
|
"alpha = [1-1/cc for cc in conviction_capactity]\n",
|
|
"print(alpha)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"params= {\n",
|
|
" 'sensitivity': [.75],\n",
|
|
" 'tmin': [7], #unit days; minimum periods passed before a proposal can pass\n",
|
|
" 'sentiment_decay': [.001], #termed mu in the state update function\n",
|
|
" 'alpha': alpha,\n",
|
|
" 'base_completion_rate': [10],\n",
|
|
" 'trigger_func': [trigger_threshold]\n",
|
|
" }"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
|
|
"# Settings of general simulation parameters, unrelated to the system itself\n",
|
|
"# `T` is a range with the number of discrete units of time the simulation will run for;\n",
|
|
"# `N` is the number of times the simulation will be run (Monte Carlo runs)\n",
|
|
"time_periods_per_run = 250\n",
|
|
"monte_carlo_runs = 1\n",
|
|
"\n",
|
|
"simulation_parameters = {\n",
|
|
" 'T': range(time_periods_per_run),\n",
|
|
" 'N': monte_carlo_runs,\n",
|
|
" 'M': params\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"initial_conditions = {'network':network,\n",
|
|
" 'supply': initial_supply,\n",
|
|
" 'funds':initial_funds,\n",
|
|
" 'sentiment': initial_sentiment}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
|
|
"# The Partial State Update Blocks\n",
|
|
"partial_state_update_blocks = [\n",
|
|
" { \n",
|
|
" 'policies': { \n",
|
|
" #new proposals or new participants\n",
|
|
" 'random': driving_process\n",
|
|
" },\n",
|
|
" 'variables': {\n",
|
|
" 'network': update_network,\n",
|
|
" 'funds':increment_funds,\n",
|
|
" 'supply':increment_supply\n",
|
|
" }\n",
|
|
" },\n",
|
|
" {\n",
|
|
" 'policies': {\n",
|
|
" 'completion': check_progress #see if any of the funded proposals completes\n",
|
|
" },\n",
|
|
" 'variables': { # The following state variables will be updated simultaneously\n",
|
|
" 'sentiment': update_sentiment_on_completion, #note completing decays sentiment, completing bumps it\n",
|
|
" 'network': complete_proposal #book-keeping\n",
|
|
" }\n",
|
|
" },\n",
|
|
" {\n",
|
|
" 'policies': {\n",
|
|
" 'release': trigger_function #check each proposal to see if it passes\n",
|
|
" },\n",
|
|
" 'variables': { # The following state variables will be updated simultaneously\n",
|
|
" 'funds': decrement_funds, #funds expended\n",
|
|
" 'sentiment': update_sentiment_on_release, #releasing funds can bump sentiment\n",
|
|
" 'network': update_proposals #reset convictions, and participants sentiments\n",
|
|
" #update based on affinities\n",
|
|
" }\n",
|
|
" },\n",
|
|
" { \n",
|
|
" 'policies': { \n",
|
|
" 'participants_act': participants_decisions, #high sentiment, high affinity =>buy\n",
|
|
" #low sentiment, low affinities => burn\n",
|
|
" #assign tokens to top affinities\n",
|
|
" },\n",
|
|
" 'variables': {\n",
|
|
" 'supply': update_supply,\n",
|
|
" 'network': update_tokens #update everyones holdings \n",
|
|
" #and their conviction for each proposal\n",
|
|
" }\n",
|
|
" }\n",
|
|
"]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # \n",
|
|
"# The configurations above are then packaged into a `Configuration` object\n",
|
|
"config = Configuration(initial_state=initial_conditions, #dict containing variable names and initial values\n",
|
|
" partial_state_update_blocks=partial_state_update_blocks, #dict containing state update functions\n",
|
|
" sim_config=simulation_parameters #dict containing simulation parameters\n",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"metadata": {
|
|
"scrolled": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"multi_proc: [<cadCAD.configuration.Configuration object at 0x1a19f78a20>]\n"
|
|
]
|
|
},
|
|
{
|
|
"ename": "TypeError",
|
|
"evalue": "'NoneType' object is not iterable",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
|
|
"\u001b[0;32m<ipython-input-25-e357dc78e741>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mrun\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mExecutor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexec_context\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mexec_context\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mconfigs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mexecutor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mExecutor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexec_context\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# Pass the configuration object inside an array\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0mraw_result\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtensor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexecutor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# The `main()` method returns a tuple; its first elements contains the raw results\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
|
"\u001b[0;31mTypeError\u001b[0m: 'NoneType' object is not iterable"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"from cadCAD.engine import ExecutionMode, ExecutionContext, Executor\n",
|
|
"from cadCAD.configuration import append_configs\n",
|
|
"from cadCAD import configs\n",
|
|
"\n",
|
|
"# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #\n",
|
|
"# The configurations above are then packaged into a `Configuration` object\n",
|
|
"config = append_configs(\n",
|
|
" initial_state=initial_conditions, #dict containing variable names and initial values\n",
|
|
" partial_state_update_blocks=partial_state_update_blocks, #dict containing state update functions\n",
|
|
" sim_configs=simulation_parameters #dict containing simulation parameters\n",
|
|
")\n",
|
|
"\n",
|
|
"exec_mode = ExecutionMode()\n",
|
|
"exec_context = ExecutionContext(context=exec_mode.multi_proc)\n",
|
|
"run = Executor(exec_context=exec_context, configs=configs)\n",
|
|
"executor = Executor(exec_context, configs) # Pass the configuration object inside an array\n",
|
|
"raw_result, tensor = executor.execute() # The `execute()` method returns a tuple; its first elements contains the raw results"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df = pd.DataFrame(raw_result)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df.tail(5)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df.supply.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df.sentiment.plot()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df.plot(x='timestep', y='funds')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def pad(vec, length,fill=True):\n",
|
|
" \n",
|
|
" if fill:\n",
|
|
" padded = np.zeros(length,)\n",
|
|
" else:\n",
|
|
" padded = np.empty(length,)\n",
|
|
" padded[:] = np.nan\n",
|
|
" \n",
|
|
" for i in range(len(vec)):\n",
|
|
" padded[i]= vec[i]\n",
|
|
" \n",
|
|
" return padded\n",
|
|
"\n",
|
|
"def make2D(key, data, fill=False):\n",
|
|
" maxL = data[key].apply(len).max()\n",
|
|
" newkey = 'padded_'+key\n",
|
|
" data[newkey] = data[key].apply(lambda x: pad(x,maxL,fill))\n",
|
|
" reshaped = np.array([a for a in data[newkey].values])\n",
|
|
" \n",
|
|
" return reshaped"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df['conviction'] = df.network.apply(lambda g: np.array([g.nodes[j]['conviction'] for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='candidate']))\n",
|
|
"df['candidate_count'] = df.network.apply(lambda g: len([j for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='candidate']))\n",
|
|
"df['candidate_funds'] = df.network.apply(lambda g: np.sum([g.nodes[j]['funds_requested'] for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='candidate']))\n",
|
|
"df['candidate_funds_requested'] = df.network.apply(lambda g: np.array([g.nodes[j]['funds_requested'] for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='candidate']))\n",
|
|
"df['active_count'] = df.network.apply(lambda g: len([j for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='active']))\n",
|
|
"df['active_funds'] = df.network.apply(lambda g: np.sum([g.nodes[j]['funds_requested'] for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='active']))\n",
|
|
"df['completed_count'] = df.network.apply(lambda g: len([j for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='completed']))\n",
|
|
"df['completed_funds'] = df.network.apply(lambda g: np.sum([g.nodes[j]['funds_requested'] for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='completed']))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df['funds_requested'] = df.network.apply(lambda g: np.array([g.nodes[j]['funds_requested'] for j in get_nodes_by_type(g, 'proposal')]))\n",
|
|
"df['share_of_funds_requested'] = df.candidate_funds_requested/df.funds\n",
|
|
"\n",
|
|
"df['share_of_funds_requested_all'] = df.funds_requested/df.funds"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df['triggers'] = df.network.apply(lambda g: np.array([g.nodes[j]['trigger'] for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='candidate' ]))\n",
|
|
"df['conviction_share_of_trigger'] = df.conviction/df.triggers\n",
|
|
"df['age'] = df.network.apply(lambda g: np.array([g.nodes[j]['age'] for j in get_nodes_by_type(g, 'proposal') if g.nodes[j]['status']=='candidate' ]))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"df['age_all'] = df.network.apply(lambda g: np.array([g.nodes[j]['age'] for j in get_nodes_by_type(g, 'proposal') ]))\n",
|
|
"df['conviction_all'] = df.network.apply(lambda g: np.array([g.nodes[j]['conviction'] for j in get_nodes_by_type(g, 'proposal') ]))\n",
|
|
"df['triggers_all'] = df.network.apply(lambda g: np.array([g.nodes[j]['trigger'] for j in get_nodes_by_type(g, 'proposal') ]))\n",
|
|
"\n",
|
|
"df['conviction_share_of_trigger_all'] = df.conviction_all/df.triggers_all"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf= df[df.substep==4].copy()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"last_net= df.network.values[-1]\n",
|
|
"last_props=get_nodes_by_type(last_net, 'proposal')\n",
|
|
"M = len(last_props)\n",
|
|
"last_parts=get_nodes_by_type(last_net, 'participant')\n",
|
|
"N = len(last_parts)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"affinities = np.empty((N,M))\n",
|
|
"for i_ind in range(N):\n",
|
|
" for j_ind in range(M):\n",
|
|
" i = last_parts[i_ind]\n",
|
|
" j = last_props[j_ind]\n",
|
|
" affinities[i_ind][j_ind] = last_net.edges[(i,j)]['affinity']"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"dims = (100, 25)\n",
|
|
"fig, ax = plt.subplots(figsize=dims)\n",
|
|
"\n",
|
|
"sns.heatmap(affinities,\n",
|
|
" yticklabels=last_parts,\n",
|
|
" xticklabels=last_props,\n",
|
|
" square=True,\n",
|
|
" cbar=True,\n",
|
|
" ax=ax)\n",
|
|
"\n",
|
|
"plt.title('affinities between participants and proposals')\n",
|
|
"plt.xlabel('proposal_id')\n",
|
|
"plt.ylabel('participant_id')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#working on deduplicating colors\n",
|
|
"#\n",
|
|
"#last_props=get_nodes_by_type(last_net, 'proposal')\n",
|
|
"#M = len(last_props)\n",
|
|
"\n",
|
|
"#cm = plt.get_cmap('gist_rainbow')\n",
|
|
"#c= [cm(1.*j/M) for j in range(M)] "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"make2D('age_all', rdf)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.plot(rdf.timestep,make2D('age_all', rdf))\n",
|
|
"plt.title('check age')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.plot(x='timestep',y=['candidate_count','active_count','completed_count'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"rdf.plot(x='timestep',y=['candidate_funds','active_funds','completed_funds'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.semilogy(rdf.timestep,make2D('conviction_all', rdf))\n",
|
|
"plt.title('conviction by proposal')\n",
|
|
"plt.xlabel('time $t$')\n",
|
|
"plt.ylabel('conviction')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.semilogy(make2D('age_all', rdf),make2D('conviction_all', rdf))\n",
|
|
"plt.title('conviction by proposal')\n",
|
|
"plt.xlabel('proposal age')\n",
|
|
"plt.ylabel('conviction')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.plot(rdf.timestep,make2D('share_of_funds_requested_all', rdf))\n",
|
|
"plt.title('share_of_funds_requested by proposal')\n",
|
|
"plt.xlabel('time $t$')\n",
|
|
"plt.ylabel('share_of_funds_requested')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.semilogy(make2D('age_all', rdf),make2D('share_of_funds_requested_all', rdf))\n",
|
|
"plt.title('share_of_funds_requested by proposal')\n",
|
|
"plt.xlabel('proposal age')\n",
|
|
"plt.ylabel('share_of_funds_requested')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.loglog(make2D('share_of_funds_requested_all', rdf), make2D('conviction_all', rdf), '.')\n",
|
|
"plt.ylabel('conviction')\n",
|
|
"plt.xlabel('share_of_funds_requested')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.semilogy(make2D('age_all', rdf), make2D('triggers_all', rdf))\n",
|
|
"plt.ylabel('triggers')\n",
|
|
"plt.xlabel('proposal_age')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.loglog(make2D('conviction_all', rdf), make2D('triggers_all', rdf))\n",
|
|
"a = plt.axis()\n",
|
|
"plt.loglog(a[:2],a[2:], 'k',alpha=.5 )\n",
|
|
"plt.ylabel('triggers')\n",
|
|
"plt.xlabel('conviction')\n",
|
|
"plt.title('phase: Triggers & Conviction')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.semilogy(rdf.timestep,make2D('conviction_share_of_trigger_all', rdf))\n",
|
|
"plt.title('conviction_share_of_trigger')\n",
|
|
"plt.xlabel('time $t$')\n",
|
|
"plt.ylabel('conviction_share_of_trigger')\n",
|
|
"plt.hlines(1,0,T, linestyle='--')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plt.semilogy(make2D('age_all', rdf), make2D('conviction_share_of_trigger_all', rdf))\n",
|
|
"plt.ylabel('triggers')\n",
|
|
"plt.xlabel('proposal_age')\n",
|
|
"plt.hlines(1,0,T, linestyle='--')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"pos = {}\n",
|
|
"for ind in range(N):\n",
|
|
" i = last_parts[ind] \n",
|
|
" pos[i] = np.array([0, 2*ind-N])\n",
|
|
"\n",
|
|
"for ind in range(M):\n",
|
|
" j = last_props[ind] \n",
|
|
" pos[j] = np.array([1, 2*N/M *ind-N])\n",
|
|
"\n",
|
|
"#for i in last_parts:\n",
|
|
"#for j in last_props:\n",
|
|
" "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"edges = [e for e in last_net.edges]\n",
|
|
"max_tok = np.max([last_net.edges[e]['tokens'] for e in edges])\n",
|
|
"\n",
|
|
"E = len(edges)\n",
|
|
"\n",
|
|
"node_color = np.empty((M+N,4))\n",
|
|
"node_size = np.empty(M+N)\n",
|
|
"\n",
|
|
"edge_color = np.empty((E,4))\n",
|
|
"cm = plt.get_cmap('Reds')\n",
|
|
"\n",
|
|
"cNorm = colors.Normalize(vmin=0, vmax=max_tok)\n",
|
|
"scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"size_scale = 1/500\n",
|
|
"node_label = {}\n",
|
|
"\n",
|
|
"for j in last_props:\n",
|
|
" node_size[j] = last_net.nodes[j]['funds_requested']*size_scale\n",
|
|
" if last_net.nodes[j]['status']==\"candidate\":\n",
|
|
" node_color[j] = colors.to_rgba('blue')\n",
|
|
" trigger = last_net.nodes[j]['trigger']\n",
|
|
" #print(trigger)\n",
|
|
" conviction = last_net.nodes[j]['conviction']\n",
|
|
" #print(conviction)\n",
|
|
" percent_of_trigger = str(int(100*conviction/trigger))+'%'\n",
|
|
" #age = last_net.nodes[j]['age']\n",
|
|
" node_label[j] = str(percent_of_trigger)\n",
|
|
" elif last_net.nodes[j]['status']==\"active\":\n",
|
|
" node_color[j] = colors.to_rgba('orange')\n",
|
|
" node_label[j] = ''\n",
|
|
" elif last_net.nodes[j]['status']==\"completed\":\n",
|
|
" node_color[j] = colors.to_rgba('green')\n",
|
|
" node_label[j] = ''\n",
|
|
"\n",
|
|
"for i in last_parts: \n",
|
|
" node_size[i] = last_net.nodes[i]['holdings']*size_scale\n",
|
|
" node_color[i] = colors.to_rgba('red')\n",
|
|
" node_label[i] = ''\n",
|
|
"\n",
|
|
"included_edges = []\n",
|
|
"for ind in range(E):\n",
|
|
" e = edges[ind]\n",
|
|
" tokens = last_net.edges[e]['tokens']\n",
|
|
" if tokens >0:\n",
|
|
" included_edges.append(e)\n",
|
|
" #print(tokens)\n",
|
|
" edge_color[ind] = scalarMap.to_rgba(tokens)\n",
|
|
"\n",
|
|
"iE = len(included_edges)\n",
|
|
"included_edge_color = np.empty((iE,4))\n",
|
|
"for ind in range(iE):\n",
|
|
" e = included_edges[ind]\n",
|
|
" tokens = last_net.edges[e]['tokens']\n",
|
|
" included_edge_color[ind] = scalarMap.to_rgba(tokens)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"nx.draw(last_net,\n",
|
|
" pos=pos, \n",
|
|
" node_size = node_size, \n",
|
|
" node_color = node_color, \n",
|
|
" edge_color = included_edge_color, \n",
|
|
" edgelist=included_edges,\n",
|
|
" labels = node_label)\n",
|
|
"plt.title('Tokens Staked by Partipants to Proposals')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"nets = rdf.network.values"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def snap_plot(nets, size_scale = 1/500, ani = False, dims = (20,20), savefigs=False ):\n",
|
|
" \n",
|
|
" last_net= df.network.values[-1]\n",
|
|
" last_props=get_nodes_by_type(last_net, 'proposal')\n",
|
|
" M = len(last_props)\n",
|
|
" last_parts=get_nodes_by_type(last_net, 'participant')\n",
|
|
" N = len(last_parts)\n",
|
|
" pos = {}\n",
|
|
" \n",
|
|
" for ind in range(N):\n",
|
|
" i = last_parts[ind] \n",
|
|
" pos[i] = np.array([0, 2*ind-N])\n",
|
|
"\n",
|
|
" for ind in range(M):\n",
|
|
" j = last_props[ind] \n",
|
|
" pos[j] = np.array([1, 2*N/M *ind-N])\n",
|
|
" \n",
|
|
" if ani:\n",
|
|
" figs = []\n",
|
|
" fig, ax = plt.subplots(figsize=dims)\n",
|
|
" \n",
|
|
" if savefigs:\n",
|
|
" counter = 0\n",
|
|
" length = 10\n",
|
|
" import string\n",
|
|
" unique_id = ''.join([np.random.choice(list(string.ascii_letters + string.digits)) for _ in range(length)])\n",
|
|
" for net in nets:\n",
|
|
" edges = [e for e in net.edges]\n",
|
|
" max_tok = np.max([net.edges[e]['tokens'] for e in edges])\n",
|
|
"\n",
|
|
" E = len(edges)\n",
|
|
" \n",
|
|
" net_props = get_nodes_by_type(net, 'proposal')\n",
|
|
" net_parts = get_nodes_by_type(net, 'participant')\n",
|
|
" net_node_label ={}\n",
|
|
" \n",
|
|
" num_nodes = len([node for node in net.nodes])\n",
|
|
" \n",
|
|
" node_color = np.empty((num_nodes,4))\n",
|
|
" node_size = np.empty(num_nodes)\n",
|
|
"\n",
|
|
" edge_color = np.empty((E,4))\n",
|
|
" cm = plt.get_cmap('Reds')\n",
|
|
"\n",
|
|
" cNorm = colors.Normalize(vmin=0, vmax=max_tok)\n",
|
|
" scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm)\n",
|
|
" \n",
|
|
" \n",
|
|
"\n",
|
|
" for j in net_props:\n",
|
|
" node_size[j] = net.nodes[j]['funds_requested']*size_scale\n",
|
|
" if net.nodes[j]['status']==\"candidate\":\n",
|
|
" node_color[j] = colors.to_rgba('blue')\n",
|
|
" trigger = net.nodes[j]['trigger'] \n",
|
|
" conviction = net.nodes[j]['conviction']\n",
|
|
" percent_of_trigger = \" \"+str(int(100*conviction/trigger))+'%'\n",
|
|
" net_node_label[j] = str(percent_of_trigger)\n",
|
|
" elif net.nodes[j]['status']==\"active\":\n",
|
|
" node_color[j] = colors.to_rgba('orange')\n",
|
|
" net_node_label[j] = ''\n",
|
|
" elif net.nodes[j]['status']==\"completed\":\n",
|
|
" node_color[j] = colors.to_rgba('green')\n",
|
|
" net_node_label[j] = ''\n",
|
|
"\n",
|
|
" for i in net_parts: \n",
|
|
" node_size[i] = net.nodes[i]['holdings']*size_scale\n",
|
|
" node_color[i] = colors.to_rgba('red')\n",
|
|
" net_node_label[i] = ''\n",
|
|
"\n",
|
|
" included_edges = []\n",
|
|
" for ind in range(E):\n",
|
|
" e = edges[ind]\n",
|
|
" tokens = net.edges[e]['tokens']\n",
|
|
" if tokens >0:\n",
|
|
" included_edges.append(e)\n",
|
|
" edge_color[ind] = scalarMap.to_rgba(tokens)\n",
|
|
"\n",
|
|
" iE = len(included_edges)\n",
|
|
" included_edge_color = np.empty((iE,4))\n",
|
|
" for ind in range(iE):\n",
|
|
" e = included_edges[ind]\n",
|
|
" tokens = net.edges[e]['tokens']\n",
|
|
" included_edge_color[ind] = scalarMap.to_rgba(tokens)\n",
|
|
" \n",
|
|
" nx.draw(net,\n",
|
|
" pos=pos, \n",
|
|
" node_size = node_size,\n",
|
|
" node_color = node_color, \n",
|
|
" edge_color = included_edge_color, \n",
|
|
" edgelist=included_edges,\n",
|
|
" labels = net_node_label)\n",
|
|
" plt.title('Tokens Staked by Partipants to Proposals')\n",
|
|
" if ani:\n",
|
|
" nx.draw(net,\n",
|
|
" pos=pos, \n",
|
|
" node_size = node_size,\n",
|
|
" node_color = node_color, \n",
|
|
" edge_color = included_edge_color, \n",
|
|
" edgelist=included_edges,\n",
|
|
" labels = net_node_label, ax=ax)\n",
|
|
" figs.append(fig)\n",
|
|
" \n",
|
|
" else:\n",
|
|
" nx.draw(net,\n",
|
|
" pos=pos, \n",
|
|
" node_size = node_size,\n",
|
|
" node_color = node_color, \n",
|
|
" edge_color = included_edge_color, \n",
|
|
" edgelist=included_edges,\n",
|
|
" labels = net_node_label)\n",
|
|
" plt.title('Tokens Staked by Partipants to Proposals')\n",
|
|
" if savefigs:\n",
|
|
" plt.savefig(unique_id+'_fig'+str(counter)+'.png')\n",
|
|
" counter = counter+1\n",
|
|
" plt.show()\n",
|
|
" \n",
|
|
" if ani:\n",
|
|
" False\n",
|
|
" #anim = animation.ArtistAnimation(fig, , interval=50, blit=True, repeat_delay=1000)\n",
|
|
" #plt.show()\n",
|
|
" "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"scrolled": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"snap_plot(nets, ani=False, savefigs=False)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#totally failing at animating by trying to save a sequence of figures.\n",
|
|
"#snap_plot(nets, ani=True)\n",
|
|
"\n",
|
|
"#saving the images to files works so there is almost the option to compile a video from the images"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"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.6.8"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|