Aragon_Conviction_Voting/models/v3/Aragon_Conviction_Voting_Mo...

1228 lines
228 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Aragon Conviction Voting Model - Version 3\n",
"\n",
"New to this version 3 model are the following elements:\n",
"\n",
"* Adding the realism that not all participant tokens are being allocated to proposals at each timestep.\n",
"* Refactored parameters and system initialization to make more readable and consistent.\n",
"* Changed file structure and file names to align with emerging cadCAD standards.\n",
"* Making the distinction between effective and total supply.\n",
"* Refining alpha calculations to more accurately reflect the 1Hive implementation. Discussion of alpha and its relation to alpha in the contract and how it relates to the timescales\n",
"* Updated differential specification and write-up to respect new state variables\n",
"* Moved all unit denominations to Honey, the 1Hive governance token.\n",
"* Added system health metrics\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# An Introduction to Conviction Voting\n",
"\n",
"Conviction Voting is an approach to organizing a communities preferences into discrete decisions in the management of that communities resources. Strictly speaking conviction voting is less like voting and more like signal processing. Framing the approach and the initial algorithm design was done by Michael Zargham and published in a short research proposal [Social Sensor Fusion](https://github.com/BlockScience/conviction/blob/master/social-sensorfusion.pdf). This work is based on a dynamic resource allocation algorithm presented in Dr. Zargham's PhD Thesis.\n",
"\n",
"The work proceeded in collaboration with the Commons Stack, including expanding on the python implementation to makeup part of the Commons Simulator game. An implemention of Conviction Voting as a smart contract within the Aragon Framework was developed by 1Hive.org and is currently being used for community decision making for allocations of their community currency, Honey.\n",
"\n",
"\n",
"## The Word Problem\n",
"\n",
"Suppose a group of people want to coordinate to make a collective decision. Social dynamics such as discussions, signaling, and even changing ones mind based on feedback from others input play an important role in these processes. While the actual decision making process involves a lot of informal processes, in order to be fair the ultimate decision making process still requires a set of formal rules that the community collecively agrees to, which serves to functionally channel a plurality of preferences into a discrete outcomes. In our case we are interested in a procedure which supports asynchronous interactions, an provides visibility into likely outcomes prior to their resolution to serve as a driver of good faith, debate and healthy forms of coalition building. Furthermore, participations should be able to show support for multiple initiatives, and to vary the level of support shown. Participants have a quantity of signaling power which may be fixed or variable, homogenous or heterogenous. For the purpose of this document, we'll focus on the case where the discrete decisions to be made are decisions to allocate funds from a shared funding pool towards projects of interest to the community.\n",
"\n",
"## Converting to a Math Problem\n",
"\n",
"Let's start taking these words and constructing a mathematical representation that supports a design that meets the description above. To start we need to define participants.\n",
"\n",
"### Participants\n",
"Let $\\mathcal{A}$ be the set of participants. Consider a participant $a\\in \\mathcal{A}$. Any participant $a$ has some capacity to participate in the voting process through their token holdings $h[a]$. In a homogenous fixed token quantity system (like you might see in a democratic allocation of equal tokens per each participant), $h[a] = h$ for all $a\\in \\mathcal{A}$ where $h$ is a constant. The access control process managing how one becomes a participant determines the total supply of \"votes\" $S = \\sum_{a\\in \\mathcal{A}} = n\\cdot h$ where the number of participants is $n = |\\mathcal{A}|$. In a smart contract setting, the set $\\mathcal{A}$ is a set of addresses, and $h[a]$ is a quantity of tokens held by each address $a\\in \\mathcal{A}$. \n",
"\n",
"### Proposals & Shared Resources\n",
"Next, we introduce the idea of proposals. Consider a proposal $i\\in \\mathcal{C}$. Any proposal $i$ is associated with a request for resources $r[i]$. Those requested resources would be allocated from a constrained pool of communal resources currently totaling $R$. The pool of resources may become depleted because when a proposal $i$ passes the reserve is decremented by $R^+= R-r[i]$. Therefore it makes sense for us to consider what fraction of the shared resources are being request $\\mu_i = \\frac{r[i]}{R}$, which means that thre resource depletion from passing proposals can be bounded by requiring $\\mu_i < \\mu$ where $\\mu$ is a constant representing the maximum fraction of the shared resources which can be dispersed by any one proposal. In order for the system to be sustainable a source of new resources is required. In the case where $R$ is funding, new funding can come from revenues, donations, or in some DAO use cases minting tokens.\n",
"\n",
"### Participants Preferences for Proposals\n",
"\n",
"Most of the interesting information in this system is distributed amongst the participants and it manifests as preferences over the proposals. This can be visualized as a matrix $W\\in \\mathbb{R}^{n \\times m}$, with participants holding randomized affinities from -1 to +1 over all proposals.\n",
"![](https://i.imgur.com/Rk2BYKd.png)\n",
"\n",
"These private hidden signals drive discussions and voting actions. Each participant individually decides how to allocate their votes across the available proposals. Participant $a$ supports proposal $i$ by setting $x[a,i]>0$ but they are limited by their total token holdings $\\sum_{k\\in \\mathcal{C}} x[a,k] \\le h[a]$. Assuming each participant chooses a subset of the proposals to support, a support graph is formed.\n",
"![](https://i.imgur.com/KRh8tKn.png)\n",
"\n",
"## Aggregating Information\n",
"\n",
"In order to break out of the synchronous ad hoc voting model, a dynamical systems model of this system is introduced, which is explored further below.\n",
"\n",
"### Participants Allocate Voting Power\n",
"![](https://i.imgur.com/DZRDwk6.png)\n",
"\n",
"In the above diagram, we examine the participant view. Participant $a$ with holdings $h$ at time $t$ supports proposals $i$ and $j$ with $x$ conviction. The sum of all conviction asserted by participant $a$ is between 0 and the total holdings of participant $a$.\n",
"\n",
"### System Accounts Proposal Conviction\n",
"![](https://i.imgur.com/euAei5R.png)\n",
"\n",
"In the above diagram, we examine the proposal view. Proposal $j$ with total conviction $y$ at time $t$ is supported by participants $a$, $b$ and $c$ with $x$ conviction. The total conviction $y$ at time $t+1$ is equal to the total conviction at time $t$ decremented by an exponential decay $\\\\alpha$ plus the sum of all conviction from $k$ agents in time step $t$.\n",
"\n",
"### Understanding Alpha\n",
"Below are some graphs used to demonstrate, play with, and understand the shapes and choices for the $\\\\alpha$ parameter, which regulates the half life decay rate of the agent preference conviction growth and decay. Alpha from solidity code is defined as: \n",
"```uint256 _decay = 9999599; // 3 days halftime. halftime_alpha = (1/2)**(1/t)```\n",
"Half life associated with solidity code alpha (in number of blocks on xDai). \n",
"\n",
"The half-life of this system is defined by $T$ such that $y_T = y_0/2$ which satisfies the equation\n",
"\n",
"$\\frac{1}{2} = \\alpha^T$\n",
"\n",
"thus the Half life in epochs for a given $\\alpha$ is\n",
"\n",
"$T = \\log_\\alpha \\frac{1}{2} = -\\log_\\alpha 2$\n",
"\n",
"and conversely the $\\alpha$ which achieves a desired half-life $T$ is\n",
"\n",
"$\\alpha = 2^{-1/T} = \\frac{1}{\\sqrt[T]{2}}$\n",
"\n",
"Further note that the relationship between $T$ and $\\alpha$ is sensative to timescaling. Suppose we wanted a half-life of 3 days but our discrete time scale simulation has 1 day timesteps, then we must use $T = 3$ in the above equation to equal:\n",
"\n",
"$\\alpha = 2^{-1/3}$\n",
"\n",
"\n",
"See the [Deriving_Alpha](Deriving_Alpha.ipynb) notebook for more details around alpha and how it is derived.\n",
"\n",
"\n",
"## Converting Signals to Discrete Decisions\n",
"\n",
"Conviction can be considered like a fluctuating kinetic energy, with the Trigger function acting as a required activation energy for proposals to pass. This is the mechanism by which a continuous community preference turns into a discrete action event: passing a proposal. See [Trigger Function Explanation](Trigger_Function_Explanation.ipynb) for more details around the trigger function and how it works."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Resolving Passed Proposals\n",
"\n",
"![](images/stockflow_cv_trigger.png)\n",
"\n",
"This diagram shows the trigger function logic, which depends on token supply $S$, total resources available $R$ and total conviction $y$ at time $t$, as well as the proposal's requested resources $r$, the maximum share of funds a proposal can take ($\\beta$) and a tuning parameter for the trigger function ($\\rho$). Essentially, this function controls the maximum amount of funds that can be requested by a proposal ($\\beta$), using an equation resembling electron repulsion to ensure conviction increases massively beyond that point.\n",
"\n",
"## Social Systems Modeling\n",
"\n",
"In the conviction voting model, multiple graph structures are used to represent participants and proposals to represent a subjective, exploratory modeling of the social system interacting.\n",
"\n",
"### Sentiment\n",
"\n",
"Global Sentiment denotes the outside world appreciating the output of the community.\n",
"Local Sentiment denotes the agents within the system feeling good about the community.\n",
"Sentiment increases when proposals pass and work is completed in the community, and decreases when proposals fail and community progress stalls.\n",
"\n",
"### Relationships between Participants\n",
"\n",
"Edges from participant to participant denote influence (to represent subjective social influence) and are assigned randomly as mixing processes.\n",
"\n",
"### Relationships between Proposals\n",
"\n",
"Edges from proposal to proposal represent conflict, either positive or negative.\n",
"Some proposals are synergistic (passing one makes the other more desirable).\n",
"Some proposals are (partially) substitutable (passing one makes the other less desirable).\n",
"\n",
"\n",
"### Notion of Honey supply\n",
"#### Total supply = $S$\n",
"#### Effective supply = $E$, honey committed towards votes (whether for proposals or abstain)\n",
"#### Funding Pool = $F$, community funding pool where proposals are funded from\n",
"#### Other supply = $L$, effectively slack. Funds could be in cold storage, in liquidity pools or otherwise in any address not actively participating in conviction voting.\n",
"$$S = F + E + L$$ \n",
"\n",
"System has the right to do direct mints:\n",
"$$F^+ = F + minted tokens$$\n",
"$$S^+ = S + minted tokens$$\n",
"\n",
"The system may also see the arrival of new funds which come from outside supply and are donated to the funding pool:\n",
"$$L^+ = L - donated tokens$$\n",
"$$F^+ = F + donated tokens$$\n",
"\n",
"When tokens are added to a liquidity pool or cold wallet and removed from staking on proposals:\n",
"$$L^+ = L + tokens$$ \n",
"$$E^+ = E - tokens$$ \n",
"\n",
"When tokens are removed from a liquidity pool or cold wallet and staked towards proposals:\n",
"$$L^+ = L - tokens$$ \n",
"$$E^+ = E + tokens$$\n",
"\n",
"Tokens in $L$ or $E$ are defined at the level of the account holding them.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## cadCAD Overview\n",
"\n",
"In the cadCAD simulation [methodology](https://community.cadcad.org/t/differential-specification-syntax-key/31), we operate on four layers: **Policies, Mechanisms, States**, and **Metrics**. Information flows do not have explicit feedback loop unless noted. **Policies** determine the inputs into the system dynamics, and can come from user input, observations from the exogenous environment, or algorithms. **Mechanisms** are functions that take the policy decisions and update the States to reflect the policy level changes. **States** are variables that represent the system quantities at the given point in time, and **Metrics** are computed from state variables to assess the health of the system, essentially views on a complex data structure. Metrics can often be thought of as KPIs, or Key Performance Indicators. \n",
"\n",
"\n",
"At a more granular level, to setup a model, there are system conventions and configurations that must be [followed.](https://community.cadcad.org/t/introduction-to-simulation-configurations/34)\n",
"\n",
"The way to think of cadCAD modeling is analogous to machine learning pipelines which normally consist of multiple steps when training and running a deployed model. There is preprocessing, which includes segregating features between continuous and categorical, transforming or imputing data, and then instantiating, training, and running a machine learning model with specified hyperparameters. cadCAD modeling can be thought of in the same way as states, roughly translating into features, are fed into pipelines that have built-in logic to direct traffic between different mechanisms, such as scaling and imputation. Accuracy scores, ROC, etc. are analogous to the metrics that can be configured on a cadCAD model, specifying how well a given model is doing in meeting its objectives. The parameter sweeping capability of cadCAD can be thought of as a grid search, or way to find the optimal hyperparameters for a system by running through alternative scenarios. A/B style testing that cadCAD enables is used in the same way machine learning models are A/B tested, except out of the box, in providing a side by side comparison of muliple different models to compare and contrast performance. Utilizing the field of Systems Identification, dynamical systems models can be used to \"online learn\" by providing a feedback loop to generative system mechanisms. \n",
"\n",
"cadCAD models are micro founded with metrics being at the macro or the institutional level. If you are interested in insitutional dynamics, see Dr. Zargham's recent paper: [Voshmgir, Shermin and Zargham, Michael (2019) Foundations of Cryptoeconomic Systems. Working Paper Series / Institute for Cryptoeconomics / Interdisciplinary Research, 1. Research Institute for Cryptoeconomics, Vienna.](https://epub.wu.ac.at/7309/)\n",
"\n",
"\n",
"## Differential Specification \n",
"![](images/Aragon_v3.png)\n",
"\n",
"## File structure\n",
"* ```Aragon_Conviction_Voting_Model.ipynb```\n",
"* model\n",
"\n",
"In the model folder there exist 4 files and folder, the [```config.py```](model/config.py), [```partial_state_update_block.py```](model/partial_state_update_block.py), [```run.py```](model/run.py), and [```state_variables.py```](model/state_variables.py). The [```config.py```](model/config.py) contains the simulation configurations, aggregating the partial states, and the state variables. The [```partial_state_update_block.py```](model/partial_state_update_block.py) contains the partial state update blocks and how they update the state variables. [```state_variables.py```](model/state_variables.py) defines the state variables and [```run.py```](model/run.py) actually runs the simulation.\n",
"\n",
"The mechanisms of the model live within the parts subfolder as:\n",
"* [```system.py```](model/parts/system.py)\n",
"* [```participants.py```](model/parts/participants.py)\n",
"* [```proposals.py```](model/parts/proposals.py)\n",
"\n",
"The initial parameters and hyperparameters of the system are defined in [```sys_params.py```](model/sys_params.py) and helper functions, plots, trigger function, etc are in the [```utils.py```](model/utils.py).\n",
"\n",
"### Note:\n",
"When running this notebook simulation, be sure to run from \"Kernal\" -> \"Restart & Run All\"\n",
"\n",
"## Schema of the states \n",
"The model consists of a temporal in memory graph database called *network* containing nodes of type **Participant** and type **Proposal**. Participants will have *holdings* and *sentiment* and Proposals will have *funds_required, status* (candidate or active), and *conviction* The model as three kinds of edges:\n",
"* (Participant, participant), we labeled this edge type \"influencer\" and it contains information about how the preferences and sentiment of one participant influence another.\n",
"* (Proposal, Proposal), we labeled this edge type \"conflict\" and it contains information about how synergistic or anti-synergistic two proposals are; basically people are likely to support multiple things that have synergy (meaning once one is passed there is more utility from the other) but they are not likely to pass things that have antisynergy (meaning once one is passed there is less utility from the other).\n",
"* The edges between Participant and Proposal, which are described below.\n",
" \n",
"\n",
"Edges in the network go from nodes of type Participant to nodes of type Proposal with the edges having the key *type*, of which all will be set to *support*. Edges from participant $i$ to proposal $j$ will have the following additional characteristics:\n",
"* Each pairing (i,j) will have *affinity*, which determines how much $i$ likes or dislikes proposal $j$.\n",
"* Each participant $i$, assigns its $tokens$ over the edges (i,j) for all $j$ such that the summation of all $j$ such that ```Sum_j = network.edges[(i,j)]['tokens'] = network.nodes[i]['holdings']```. This value of tokens for participants on proposals must be less than or equal to the total number of tokens held by the participant.\n",
"* Each pairing (i,j) will have *conviction* local to that edge whose update at each timestep is computed using the value of *tokens* at that edge.\n",
"* Each proposal *j* will have a *conviction* which is equal to the sum of the conviction on its inbound edges: ```network.nodes[j]['conviction'] = Sum_i network.edges[(i,j)]['conviction']```. \n",
"\n",
"\n",
"The other state variables in the model are *funds*, *sentiment*, *effective_supply*, *total_supply*, and the metrics variables of: *fractionOfSupplyForVoting*, *fractionOfSupplyInPool*, *fractionOfProposalStages*, *fractionOfFundStages*.\n",
"\n",
"The system consists of 100 time steps without a parameter sweep or monte carlo.\n",
"\n",
" \n",
"## Partial State Update Blocks \n",
"\n",
"Each partial state update block is kind of a like a phase in a phased based board game. Everyone decides what to do and it reconciles all decisions. One timestep is a full turn, with each block being a phase of a timestep or turn. We will walk through the individaul Partial State update blocks one by one below."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```\n",
"{\n",
"# system.py: \n",
"'policies': { \n",
" 'random': driving_process\n",
"},\n",
"'variables': {\n",
" 'network': update_network,\n",
" 'effective_supply':increment_supply,\n",
"}\n",
"```\n",
"\n",
"To simulate the arrival of participants and proposal into the system, we have a driving process to represent the arrival of individual agents. We use a random uniform distribution generator, over [0, 1), to calculate the number of new participants. We then use an exponential distribution to calculate the particpant's tokens by using a loc of 0.0 and a scale of expected holdings, which is calculated by .1*supply/number of existing participants. We calculate the number of new proposals by \n",
"```\n",
"proposal_rate = 1/median_affinity * (1+total_funds_requested/funds)\n",
"rv2 = np.random.rand()\n",
"new_proposal = bool(rv2<1/proposal_rate)\n",
"```\n",
"The network state variable is updated to include the new participants and proposals, while the *effective_supply* state variable is updated for the addition of new particpant's funds. \n",
"```\n",
" {\n",
" 'policies': { \n",
" 'random': minting_rule\n",
" },\n",
" 'variables': {\n",
" 'total_supply': mint_to_supply,\n",
" 'funds':mint_to_funds,\n",
"\n",
" }\n",
"},\n",
"```\n",
"A behavior called *minting_rule* is included to record the general expansion of system supply every timestep. The *total_supply* and *funds* state variables are incrased with these minted values.\n",
"[To see the partial state update's code, click here](model/parts/system.py)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```\n",
"{\n",
" # participants.py \n",
" 'policies': {\n",
" 'completion': check_progress \n",
" },\n",
" 'variables': { \n",
" 'sentiment': update_sentiment_on_completion, #not completing projects decays sentiment, completing bumps it\n",
" 'network': complete_proposal\n",
" }\n",
"},\n",
"```\n",
"\n",
"In the next phase of the turn, [to see the logic code, click here](model/parts/participants.py), the *check_progress* behavior checks for the completion of previously funded proposals. The code calculates the completion and failure rates as follows:\n",
"\n",
"```\n",
"likelihood = 1.0/(base_completion_rate+np.log(grant_size))\n",
"\n",
"failure_rate = 1.0/(base_failure_rate+np.log(grant_size))\n",
"if np.random.rand() < likelihood:\n",
" completed.append(j)\n",
"elif np.random.rand() < failure_rate:\n",
" failed.append(j)\n",
"```\n",
"With the base_completion_rate being 100 and the base_failure_rate as 200. \n",
"\n",
"The mechanism then updates the respective *network* nodes and updates the sentiment variable on proposal completion. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```\n",
" # proposals.py\n",
" 'policies': {\n",
" 'release': trigger_function \n",
" },\n",
" 'variables': { \n",
" 'funds': decrement_funds, \n",
" 'sentiment': update_sentiment_on_release, #releasing funds can bump sentiment\n",
" 'network': update_proposals \n",
" }\n",
"},\n",
" ```\n",
" \n",
"The [trigger release function](model/parts/proposals.py) checks to see if each proposal passes or not. If a proposal passes, funds are decremented by the amount of the proposal, while the proposal's status is changed in the network object."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```\n",
"{ \n",
" # participants.py\n",
" 'policies': { \n",
" 'participants_act': participants_decisions\n",
" },\n",
" 'variables': {\n",
" 'network': update_tokens \n",
" }\n",
"}\n",
"```\n",
"\n",
"The Participants decide based on their affinity if which proposals they would like to support,[to see the logic code, click here](model/parts/participants.py). Proposals that participants have high affinity for receive more support and pledged tokens than proposals with lower affinity and sentiment. We then update everyone's holdings and their conviction for each proposal.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```\n",
" {\n",
" # metrics.py\n",
" 'policies': {\n",
" 'calculations': kpi_calculations\n",
" },\n",
" 'variables':{\n",
" 'fractionOfSupplyForVoting': kpi_fractionOfSupplyForVoting,\n",
" 'fractionOfSupplyInPool': kpi_fractionOfSupplyInPool,\n",
" 'fractionOfProposalStages':kpi_proposal_stages,\n",
" 'fractionOfFundStages': kpi_fractionOfFundStages\n",
" }\n",
" }\n",
"```\n",
"\n",
"In the Metrics section we create KPI's to calculate the system's health. To see the logic, [click here](model/parts/metrics.py)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model next steps\n",
"\n",
"The the model described above is the third iteration model that covers the core mechanisms of the Aragon Conviction Voting model. Below are next additional dynamics we can attend to enrich the model, and provide workstreams for subsequent iterations of this lab notebook.\n",
"\n",
"* Add a uniswap instance\n",
" * A next step to model the 1Hive ecosystem would be to model the Uniswap interface. With this interface, agents would be able to add or remove liquidity, buy or redeem Honey for more voting power, and ultimately enter or leave the system. \n",
"* Mixing of token holdings among participants\n",
" * Introducing heterogeneous token holdings would be another next step in creating a model more representative of the live system.\n",
"* Proposals which are good or no good together\n",
" * Introducing conflict \n",
"* Affects of outcomes on sentiment"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simulation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Configuration\n",
"Let's factor out into its own notebook where we review the config object and its partial state update blocks. We will initialize the network x object and pull out the simulation configuration, state_variables, and partial state update blocks from the [config.py](model/config.py)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/aclarkdata/anaconda3/lib/python3.7/site-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n",
" import pandas.util.testing as tm\n"
]
}
],
"source": [
"from model import config\n",
"from model.parts.sys_params import initial_values\n",
"from model.parts.utils import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"\n",
"# pull out configurations to illustrate\n",
"sim_config,state_variables,partial_state_update_blocks = config.get_configs()\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'policies': {'random': <function model.parts.system.driving_process(params, step, sL, s)>},\n",
" 'variables': {'network': <function model.parts.system.update_network(params, step, sL, s, _input)>,\n",
" 'effective_supply': <function model.parts.system.increment_supply(params, step, sL, s, _input)>}},\n",
" {'policies': {'random': <function model.parts.system.minting_rule(params, step, sL, s)>},\n",
" 'variables': {'total_supply': <function model.parts.system.mint_to_supply(params, step, sL, s, _input)>,\n",
" 'funds': <function model.parts.system.mint_to_funds(params, step, sL, s, _input)>}},\n",
" {'policies': {'completion': <function model.parts.participants.check_progress(params, step, sL, s)>},\n",
" 'variables': {'sentiment': <function model.parts.participants.update_sentiment_on_completion(params, step, sL, s, _input)>,\n",
" 'network': <function model.parts.participants.complete_proposal(params, step, sL, s, _input)>}},\n",
" {'policies': {'release': <function model.parts.proposals.trigger_function(params, step, sL, s)>},\n",
" 'variables': {'funds': <function model.parts.proposals.decrement_funds(params, step, sL, s, _input)>,\n",
" 'sentiment': <function model.parts.proposals.update_sentiment_on_release(params, step, sL, s, _input)>,\n",
" 'network': <function model.parts.proposals.update_proposals(params, step, sL, s, _input)>}},\n",
" {'policies': {'participants_act': <function model.parts.participants.participants_decisions(params, step, sL, s)>},\n",
" 'variables': {'network': <function model.parts.participants.update_tokens(params, step, sL, s, _input)>}},\n",
" {'policies': {'calculations': <function model.parts.metrics.kpi_calculations(params, step, sL, s)>},\n",
" 'variables': {'fractionOfSupplyForVoting': <function model.parts.metrics.kpi_fractionOfSupplyForVoting(params, step, sL, s, _input)>,\n",
" 'fractionOfSupplyInPool': <function model.parts.metrics.kpi_fractionOfSupplyInPool(params, step, sL, s, _input)>,\n",
" 'fractionOfProposalStages': <function model.parts.metrics.kpi_proposal_stages(params, step, sL, s, _input)>,\n",
" 'fractionOfFundStages': <function model.parts.metrics.kpi_fractionOfFundStages(params, step, sL, s, _input)>}}]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"partial_state_update_blocks"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Parameters\n",
"\n",
"Initial values are the starting values for the simulation."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'sentiment': 0.6,\n",
" 'n': 30,\n",
" 'm': 7,\n",
" 'funds': 4867.21,\n",
" 'supply': 22392.22,\n",
" 'params': {'beta': 0, 'rho': 0.0025, 'alpha': 0.7937005259840998}}"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"initial_values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$n$ is initial participants, whereas $m$ is initial proposals.\n",
"\n",
"Sim_config holds the global hyperparameters for the simulations"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'beta': 0,\n",
" 'rho': 0.0025,\n",
" 'alpha': 0.7937005259840998,\n",
" 'gamma': 0.001,\n",
" 'sensitivity': 0.75,\n",
" 'tmin': 1,\n",
" 'min_supp': 1,\n",
" 'base_completion_rate': 45,\n",
" 'base_failure_rate': 180,\n",
" 'base_engagement_rate': 0.3,\n",
" 'lowest_affinity_to_support': 0.3}"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sim_config[0]['M']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Initial state variable values"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'network': <networkx.classes.digraph.DiGraph at 0x7f42ba441490>,\n",
" 'funds': 4867.21,\n",
" 'sentiment': 0.6,\n",
" 'effective_supply': 14020.008000000002,\n",
" 'total_supply': 22392.22,\n",
" 'fractionOfSupplyForVoting': 0,\n",
" 'fractionOfSupplyInPool': 0,\n",
" 'fractionOfProposalStages': 0,\n",
" 'fractionOfFundStages': 0}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"state_variables"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Hyperparameter explanations:\n",
"* $\\beta$ = .2 Upper bound on share of funds dispersed in the example Trigger Function\n",
"* $\\rho$ = 0.002 Scale Parameter for the example Trigger Function\n",
"* $\\alpha$ : 0.79370 timescale set in days with 3 day halflife\n",
"* $\\gamma$: 0.001 The expansion of supply per per day\n",
"* sensitivity of participant decisions to changes in affinity \n",
"* tmin = 1 unit days; minimum periods passed before a proposal can pass\n",
"* min_supp = 50 number of tokens that must be stake for a proposal to be a candidate\n",
"* base_completion_rate: 45, expected number of days to complete a proposals.\n",
"* base_failure_rate: 180, expected number of days until a proposal will fail\n",
"* base_engagement_rate: 0.3, probability of being active on a certain day \n",
"* lowest_affinity_to_support: 0.3, lowest affinity to required to support a proposal\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Exploring the State Data Structure\n",
"\n",
"A graph is a type of temporal data structure that evolves over time. A graph $\\mathcal{G}(\\mathcal{V},\\mathcal{E})$ consists of vertices or nodes, $\\mathcal{V} = \\{1...\\mathcal{V}\\}$ and is connected by edges $\\mathcal{E} \\subseteq \\mathcal{V} \\times \\mathcal{V}$.\n",
"\n",
"See *Schema of the states* above for more details\n",
"\n",
"\n",
"Let's explore!"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# To explore our model prior to the simulation, we extract key components from our networkX object into lists.\n",
"proposals = get_nodes_by_type(state_variables['network'], 'proposal')\n",
"participants = get_nodes_by_type(state_variables['network'], 'participant')\n",
"supporters = get_edges_by_type(state_variables['network'], 'support')\n",
"influencers = get_edges_by_type(state_variables['network'], 'influence')\n",
"competitors = get_edges_by_type(state_variables['network'], 'conflict')"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'type': 'participant',\n",
" 'holdings': 933.6254065833094,\n",
" 'sentiment': 0.5274150705500527}"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#sample a participant\n",
"state_variables['network'].nodes[participants[0]]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Count of Participants')"
]
},
"execution_count": 9,
"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": [
"# Let's look at the distribution of participant holdings at the start of the sim\n",
"plt.hist([ state_variables['network'].nodes[i]['holdings'] for i in participants])\n",
"plt.title('Histogram of Participants Token Holdings')\n",
"plt.xlabel('Amount of Honey')\n",
"plt.ylabel('Count of Participants')\n"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/aclarkdata/anaconda3/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py:563: MatplotlibDeprecationWarning: \n",
"The iterable function was deprecated in Matplotlib 3.1 and will be removed in 3.3. Use np.iterable instead.\n",
" if not cb.iterable(width):\n",
"/home/aclarkdata/anaconda3/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py:660: MatplotlibDeprecationWarning: \n",
"The iterable function was deprecated in Matplotlib 3.1 and will be removed in 3.3. Use np.iterable instead.\n",
" if cb.iterable(node_size): # many node sizes\n"
]
},
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Participants Social Network')"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"nx.draw_spring(state_variables['network'], nodelist = participants, edgelist=influencers)\n",
"plt.title('Participants Social Network')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'type': 'proposal',\n",
" 'conviction': 0,\n",
" 'status': 'candidate',\n",
" 'age': 0,\n",
" 'funds_requested': 418.6228364308546,\n",
" 'trigger': inf}"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#lets look at proposals\n",
"state_variables['network'].nodes[proposals[0]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Proposals initially start without any conviction, and with the status of a candidate. If the proposal's amount of conviction is greater than it's trigger, then the proposal moves to active and it's funds requested are granted. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"All initial proposal start with 0 conviction and state 'candidate'we can simply examine the amounts of funds requested"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"funds_array = np.array([state_variables['network'].nodes[i]['funds_requested'] for i in proposals])\n",
"conviction_required = np.array([trigger_threshold(r, initial_values['funds'], initial_values['supply'], sim_config[0]['M']['alpha'],sim_config[0]['M']) for r in funds_array])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Amount of Honey requested(as a Fraction of Funds available)')"
]
},
"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.bar( proposals, funds_array/initial_values['funds'])\n",
"plt.title('Bar chart of Proposals Funds Requested')\n",
"plt.xlabel('Proposal identifier')\n",
"plt.ylabel('Amount of Honey requested(as a Fraction of Funds available)')"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Amount of Conviction')"
]
},
"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.bar( proposals, conviction_required)\n",
"plt.title('Bar chart of Proposals Conviction Required')\n",
"plt.xlabel('Proposal identifier')\n",
"plt.ylabel('Amount of Conviction')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Conviction is a concept that arises in the edges between participants and proposals in the initial conditions there are no votes yet so we can look at that later however, the voting choices are driven by underlying affinities which we can see now."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 55.73999999999998, 'Participant_id')"
]
},
"execution_count": 15,
"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": [
"m = len(proposals)\n",
"n = len(participants)\n",
"\n",
"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] = state_variables['network'].edges[(i,j)]['affinity']\n",
"\n",
"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",
" cmap = plt.cm.RdYlGn,\n",
" ax=ax)\n",
"\n",
"plt.title('Affinities between participants and proposals')\n",
"plt.ylabel('Proposal_id')\n",
"plt.xlabel('Participant_id')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Run simulation\n",
"\n",
"Now we will create the final system configuration, append the genesis states we created, and run our simulation."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" ___________ ____\n",
" ________ __ ___/ / ____/ | / __ \\\n",
" / ___/ __` / __ / / / /| | / / / /\n",
"/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n",
"\\___/\\__,_/\\__,_/\\____/_/ |_/_____/\n",
"by cadCAD\n",
"\n",
"Execution Mode: local_proc\n",
"Configuration Count: 1\n",
"Dimensions of the first simulation: (Timesteps, Params, Runs, Vars) = (100, 11, 1, 9)\n",
"Execution Method: local_simulations\n",
"SimIDs : [0]\n",
"SubsetIDs: [0]\n",
"Ns : [0]\n",
"ExpIDs : [0]\n",
"Execution Mode: single_threaded\n",
"[{'beta': 0, 'rho': 0.0025, 'alpha': 0.7937005259840998, 'gamma': 0.001, 'sensitivity': 0.75, 'tmin': 1, 'min_supp': 1, 'base_completion_rate': 45, 'base_failure_rate': 180, 'base_engagement_rate': 0.3, 'lowest_affinity_to_support': 0.3}]\n"
]
},
{
"ename": "TypeError",
"evalue": "list indices must be integers or slices, not str",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-16-bef6047fbb7f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun_line_magic\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'matplotlib'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'inline'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0mrdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m~/repos/Aragon_Conviction_Voting/models/v3/model/run.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m()\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0msimulation\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[0mlocal_mode_ctx\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[0;32m---> 20\u001b[0;31m \u001b[0mraw_system_events\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtensor_field\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msessions\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msimulation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;31m# Result System Events DataFrame\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mraw_system_events\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/__init__.py\u001b[0m in \u001b[0;36mexecute\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 151\u001b[0m simulations_results = self.exec_method(\n\u001b[1;32m 152\u001b[0m \u001b[0msim_executors\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvar_dict_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates_lists\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigs_structs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menv_processes_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSimIDs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mRunIDs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 153\u001b[0;31m \u001b[0mExpIDs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSubsetIDs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSubsetWindows\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moriginal_N\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 154\u001b[0m )\n\u001b[1;32m 155\u001b[0m \u001b[0mfinal_result\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_final_results\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msimulations_results\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpartial_state_updates\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meps\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msessions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mremote_threshold\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/execution.py\u001b[0m in \u001b[0;36mlocal_simulations\u001b[0;34m(simulation_execs, var_dict_list, states_lists, configs_structs, env_processes_list, Ts, SimIDs, Ns, ExpIDs, SubsetIDs, SubsetWindows, configured_n)\u001b[0m\n\u001b[1;32m 132\u001b[0m return single_proc_exec(\n\u001b[1;32m 133\u001b[0m \u001b[0msimulation_execs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvar_dict_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates_lists\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigs_structs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menv_processes_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSimIDs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mNs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 134\u001b[0;31m \u001b[0mExpIDs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSubsetIDs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSubsetWindows\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigured_n\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 135\u001b[0m )\n\u001b[1;32m 136\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mconfig_amt\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# and config_amt < remote_threshold:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/execution.py\u001b[0m in \u001b[0;36msingle_proc_exec\u001b[0;34m(simulation_execs, var_dict_list, states_lists, configs_structs, env_processes_list, Ts, SimIDs, Ns, ExpIDs, SubsetIDs, SubsetWindows, configured_n)\u001b[0m\n\u001b[1;32m 34\u001b[0m )\n\u001b[1;32m 35\u001b[0m result = simulation_exec(\n\u001b[0;32m---> 36\u001b[0;31m \u001b[0mvar_dict_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfig\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menv_processes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mT\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msim_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mN\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubset_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubset_window\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigured_n\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 37\u001b[0m )\n\u001b[1;32m 38\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mflatten\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/simulation.py\u001b[0m in \u001b[0;36msimulation\u001b[0;34m(self, sweep_dict, states_list, configs, env_processes, time_seq, simulation_id, run, subset_id, subset_window, configured_N, additional_objs)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 250\u001b[0m pipe_run = flatten(\n\u001b[0;32m--> 251\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0mexecute_run\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menv_processes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtime_seq\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 252\u001b[0m )\n\u001b[1;32m 253\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/simulation.py\u001b[0m in \u001b[0;36mexecute_run\u001b[0;34m(sweep_dict, states_list, configs, env_processes, time_seq, _run)\u001b[0m\n\u001b[1;32m 242\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 243\u001b[0m first_timestep_per_run: List[Dict[str, Any]] = self.run_pipeline(\n\u001b[0;32m--> 244\u001b[0;31m \u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates_list_copy\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menv_processes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtime_seq\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madditional_objs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 245\u001b[0m )\n\u001b[1;32m 246\u001b[0m \u001b[0;32mdel\u001b[0m \u001b[0mstates_list_copy\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/simulation.py\u001b[0m in \u001b[0;36mrun_pipeline\u001b[0;34m(self, sweep_dict, states_list, configs, env_processes, time_seq, run, additional_objs)\u001b[0m\n\u001b[1;32m 198\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mtime_step\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtime_seq\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 199\u001b[0m pipe_run: List[Dict[str, Any]] = self.state_update_pipeline(\n\u001b[0;32m--> 200\u001b[0;31m \u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msimulation_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfigs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menv_processes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtime_step\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madditional_objs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 201\u001b[0m )\n\u001b[1;32m 202\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/simulation.py\u001b[0m in \u001b[0;36mstate_update_pipeline\u001b[0;34m(self, sweep_dict, simulation_list, configs, env_processes, time_step, run, additional_objs)\u001b[0m\n\u001b[1;32m 174\u001b[0m states_list: List[Dict[str, Any]] = self.partial_state_update(\n\u001b[1;32m 175\u001b[0m \u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msub_step\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstates_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msimulation_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms_conf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp_conf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0menv_processes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtime_step\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 176\u001b[0;31m \u001b[0madditional_objs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 177\u001b[0m )\n\u001b[1;32m 178\u001b[0m \u001b[0msub_step\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/simulation.py\u001b[0m in \u001b[0;36mpartial_state_update\u001b[0;34m(self, sweep_dict, sub_step, sL, sH, state_funcs, policy_funcs, env_processes, time_step, run, additional_objs)\u001b[0m\n\u001b[1;32m 118\u001b[0m \u001b[0mlast_in_obj\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mDict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mAny\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdeepcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msL\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 119\u001b[0m _input: Dict[str, Any] = self.policy_update_exception(\n\u001b[0;32m--> 120\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_policy_input\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msub_step\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msH\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlast_in_obj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpolicy_funcs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madditional_objs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 121\u001b[0m )\n\u001b[1;32m 122\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/simulation.py\u001b[0m in \u001b[0;36mget_policy_input\u001b[0;34m(self, sweep_dict, sub_step, sL, s, funcs, additional_objs)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0mcol_results\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_col_results\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msub_step\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfuncs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 56\u001b[0m \u001b[0mkey_set\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreduce\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkeys\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcol_results\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0mnew_dict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mkey_set\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/simulation.py\u001b[0m in \u001b[0;36mget_col_results\u001b[0;34m(sweep_dict, sub_step, sL, s, funcs)\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msub_step\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madditional_objs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 42\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mpolicy_scope_tuner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0madditional_objs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfuncs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 43\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mcompose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minit_reduction_funct\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunct_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mval_list\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/simulation.py\u001b[0m in \u001b[0;36m<lambda>\u001b[0;34m(f)\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msub_step\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madditional_objs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 42\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mpolicy_scope_tuner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0madditional_objs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfuncs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 43\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mcompose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minit_reduction_funct\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunct_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mval_list\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/cadCAD/engine/simulation.py\u001b[0m in \u001b[0;36mpolicy_scope_tuner\u001b[0;34m(additional_objs, f)\u001b[0m\n\u001b[1;32m 37\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpolicy_scope_tuner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0madditional_objs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0madditional_objs\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 39\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msub_step\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 40\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msweep_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msub_step\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0madditional_objs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/repos/Aragon_Conviction_Voting/models/v3/model/parts/system.py\u001b[0m in \u001b[0;36mdriving_process\u001b[0;34m(params, step, sL, s)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[0mnew_proposal_ct\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mmedian_affinity\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 57\u001b[0;31m \u001b[0mexpected_request\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'beta'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'funds'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 58\u001b[0m \u001b[0mnew_proposal_requested\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mexpon\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrvs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mexpected_request\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscale\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mexpected_request\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mct\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_proposal_ct\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 59\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: list indices must be integers or slices, not str"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from model import run\n",
"pd.options.display.float_format = '{:.2f}'.format\n",
"\n",
"%matplotlib inline\n",
"\n",
"rdf = run.run()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After the simulation has run successfully, we perform some postprocessing to extract node and edge values from the network object and add as columns to the pandas dataframe. For the rdf, we take only the values at the last substep of each timestep in the simulation."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df= run.postprocessing(rdf,0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.head(5)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot('timestep','sentiment')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The above plot demonstrates system sentiment changing over time as proposals pass or fail."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot('timestep',['funds', 'candidate_funds'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the above graph, funds represent the total available funds, whereas candidate funds represent total funds requested by candidate proposals."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"affinities_plot(df)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The above matrix represents participant affinities towards proposals, ranging from -1 to +1."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot(x='timestep',y=['candidate_count','active_count','completed_count', 'killed_count', 'failed_count'],\n",
" kind='area')\n",
"plt.title('Proposal Status')\n",
"plt.ylabel('count of proposals')\n",
"plt.legend(ncol = 3,loc='upper center', bbox_to_anchor=(0.5, -0.15))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The above graph shows the number of various types of proposals at a range of timesteps. Ecosystems with more completed proposals will have higher overall agent sentiment than systems with more failed and killed proposals."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot(x='timestep',y=['candidate_funds','active_funds','completed_funds', 'killed_funds', 'failed_funds'], kind='area')\n",
"plt.title('Proposal Status weighted by funds requested')\n",
"plt.ylabel('Funds worth of proposals')\n",
"plt.legend(ncol = 3,loc='upper center', bbox_to_anchor=(0.5, -0.15))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The above graph shows the amount of funds requested by various types of proposals at a range of timesteps."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"nets = df.network.values"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"K = 0\n",
"N = 1\n",
"\n",
"snap_plot(nets[K:N], size_scale = 1/300,savefigs=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On the left side are participants, with the right side of the graph being the proposals. With this graph, we can see the links between the participants and the proposals that they support. The percentage on the right hand are the the amount of the required amount to pass that has been fulfilled.\n",
"\n",
"You can move the K and N to different points within the 100 timesteps, 0 indexed, to see how the model evolves overtime. \n",
"\n",
"As you can see with the plot above at the start of the simulation, no proposals have been formally supported yet. Below we can see a many interactions between agents and proposals."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"snap_plot(nets[80:81], size_scale = 1/300,savefigs=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot('timestep',['total_supply','funds'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot('timestep',['effective_supply'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As expected *effective_supply* is increasing with the arrival of new participants."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot('timestep',['participant_count'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Review system health metrics\n",
"\n",
"Below we will analysis system health metrics, such as fraction of supply used for voting, which is effective supply over total supply and percentage of proposals and requested funds in different stages. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot('timestep',['fractionOfSupplyForVoting'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot('timestep',['fractionOfSupplyInPool'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot('timestep',['percentageOfActiveProposals','percentageOfCompletedProposals','percentageOfKilledProposals'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.plot('timestep',['percentageOfActiveFundsRequested','percentageOfCompletedFundsRequested','percentageOfKilledFundsRequested'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusion\n",
"\n",
"We have created a conviction voting model that closely adheres to the 1Hive implementation. This notebook describes the use case, how the model works, and provides descriptions of how it fits together."
]
}
],
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}