Aragon_Conviction_Voting/models/v3/Aragon_Conviction_Voting_Mo...

1589 lines
244 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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": "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) = (20, 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",
"Total execution time: 2.32s\n"
]
}
],
"source": [
"# Debug Cell\n",
"from model import config\n",
"from model.parts.sys_params import initial_values\n",
"from model.parts.utils import *\n",
"\n",
"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()"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"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 0x1176f12b0>,\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': 6898.924984951563,\n",
" 'sentiment': 0.4474268614587007}"
]
},
"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": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'type': 'proposal',\n",
" 'conviction': 0,\n",
" 'status': 'candidate',\n",
" 'age': 0,\n",
" 'funds_requested': 862.4400479725533,\n",
" 'trigger': inf}"
]
},
"execution_count": 10,
"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": 11,
"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": {
"scrolled": true
},
"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": 4,
"metadata": {
"collapsed": true,
"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",
"[{'alpha': 0.7937005259840998,\n",
" 'base_completion_rate': 45,\n",
" 'base_engagement_rate': 0.3,\n",
" 'base_failure_rate': 180,\n",
" 'beta': 0,\n",
" 'gamma': 0.001,\n",
" 'lowest_affinity_to_support': 0.3,\n",
" 'min_supp': 1,\n",
" 'rho': 0.0025,\n",
" 'sensitivity': 0.75,\n",
" 'tmin': 1}]\n"
]
},
{
"ename": "NameError",
"evalue": "name 'exit' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-4-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~/Projects/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/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 133\u001b[0m return single_proc_exec(\n\u001b[1;32m 134\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[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 135\u001b[0;31m \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[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 136\u001b[0m )\n\u001b[1;32m 137\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/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 35\u001b[0m )\n\u001b[1;32m 36\u001b[0m result = simulation_exec(\n\u001b[0;32m---> 37\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 38\u001b[0m )\n\u001b[1;32m 39\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/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 253\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 254\u001b[0m pipe_run = flatten(\n\u001b[0;32m--> 255\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 256\u001b[0m )\n\u001b[1;32m 257\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 246\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 247\u001b[0m first_timestep_per_run: List[Dict[str, Any]] = self.run_pipeline(\n\u001b[0;32m--> 248\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 249\u001b[0m )\n\u001b[1;32m 250\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/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 202\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 203\u001b[0m pipe_run: List[Dict[str, Any]] = self.state_update_pipeline(\n\u001b[0;32m--> 204\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 205\u001b[0m )\n\u001b[1;32m 206\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 178\u001b[0m states_list: List[Dict[str, Any]] = self.partial_state_update(\n\u001b[1;32m 179\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--> 180\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 181\u001b[0m )\n\u001b[1;32m 182\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/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 122\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 123\u001b[0m _input: Dict[str, Any] = self.policy_update_exception(\n\u001b[0;32m--> 124\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 125\u001b[0m )\n\u001b[1;32m 126\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 57\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 58\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 59\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 60\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 61\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/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/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 38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0mpprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msweep_dict\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 40\u001b[0;31m \u001b[0mexit\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 41\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 42\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;31mNameError\u001b[0m: name 'exit' is not defined"
]
}
],
"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": 2,
"metadata": {},
"outputs": [],
"source": [
"df= run.postprocessing(rdf,0)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>network</th>\n",
" <th>funds</th>\n",
" <th>sentiment</th>\n",
" <th>effective_supply</th>\n",
" <th>total_supply</th>\n",
" <th>fractionOfSupplyForVoting</th>\n",
" <th>fractionOfSupplyInPool</th>\n",
" <th>fractionOfProposalStages</th>\n",
" <th>fractionOfFundStages</th>\n",
" <th>simulation</th>\n",
" <th>...</th>\n",
" <th>age_all</th>\n",
" <th>conviction_all</th>\n",
" <th>triggers_all</th>\n",
" <th>conviction_share_of_trigger_all</th>\n",
" <th>percentageOfActiveProposals</th>\n",
" <th>percentageOfCompletedProposals</th>\n",
" <th>percentageOfKilledProposals</th>\n",
" <th>percentageOfActiveFundsRequested</th>\n",
" <th>percentageOfCompletedFundsRequested</th>\n",
" <th>percentageOfKilledFundsRequested</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...</td>\n",
" <td>4889.60</td>\n",
" <td>0.60</td>\n",
" <td>14020.01</td>\n",
" <td>22414.61</td>\n",
" <td>0.63</td>\n",
" <td>4.58</td>\n",
" <td>{'percentageOfActive': 0.0, 'percentageOfCompl...</td>\n",
" <td>{'percentageOfActiveFundsRequested': 0.0, 'per...</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>[1, 1, 1, 1, 1, 1, 1]</td>\n",
" <td>[1140.99452829493, 973.5581573746348, 238.7134...</td>\n",
" <td>[inf, inf, inf, inf, inf, inf, inf]</td>\n",
" <td>[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.14</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...</td>\n",
" <td>4912.02</td>\n",
" <td>0.60</td>\n",
" <td>14020.01</td>\n",
" <td>22437.03</td>\n",
" <td>0.62</td>\n",
" <td>4.57</td>\n",
" <td>{'percentageOfActive': 0.0, 'percentageOfCompl...</td>\n",
" <td>{'percentageOfActiveFundsRequested': 0.0, 'per...</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>[2, 2, 2, 2, 2, 2, 2, 1, 1]</td>\n",
" <td>[2178.391649954617, 1746.2717789589933, 428.18...</td>\n",
" <td>[inf, inf, inf, inf, nan, inf, inf, inf, inf]</td>\n",
" <td>[0.0, 0.0, 0.0, 0.0, nan, 0.0, 0.0, 0.0, 0.0]</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.33</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...</td>\n",
" <td>4934.45</td>\n",
" <td>0.60</td>\n",
" <td>14020.01</td>\n",
" <td>22459.46</td>\n",
" <td>0.62</td>\n",
" <td>4.55</td>\n",
" <td>{'percentageOfActive': 0.0, 'percentageOfCompl...</td>\n",
" <td>{'percentageOfActiveFundsRequested': 0.0, 'per...</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>[3, 3, 3, 3, 3, 3, 3, 2, 2]</td>\n",
" <td>[3001.7742910703023, 2359.5749868455773, 576.2...</td>\n",
" <td>[inf, inf, inf, inf, nan, inf, inf, nan, nan]</td>\n",
" <td>[0.0, 0.0, 0.0, 0.0, nan, 0.0, 0.0, nan, nan]</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.33</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...</td>\n",
" <td>4956.91</td>\n",
" <td>0.60</td>\n",
" <td>14020.01</td>\n",
" <td>22481.92</td>\n",
" <td>0.62</td>\n",
" <td>4.54</td>\n",
" <td>{'percentageOfActive': 0.0, 'percentageOfCompl...</td>\n",
" <td>{'percentageOfActiveFundsRequested': 0.0, 'per...</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>[4, 4, 4, 4, 4, 4, 4, 3, 3]</td>\n",
" <td>[3709.455194161197, 3028.521847490869, 700.333...</td>\n",
" <td>[inf, inf, inf, inf, nan, inf, inf, nan, nan]</td>\n",
" <td>[0.0, 0.0, 0.0, 0.0, nan, 0.0, 0.0, nan, nan]</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.33</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,...</td>\n",
" <td>4979.40</td>\n",
" <td>0.60</td>\n",
" <td>14020.01</td>\n",
" <td>22504.41</td>\n",
" <td>0.62</td>\n",
" <td>4.52</td>\n",
" <td>{'percentageOfActive': 0.0, 'percentageOfCompl...</td>\n",
" <td>{'percentageOfActiveFundsRequested': 0.0, 'per...</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>[5, 5, 5, 5, 5, 5, 5, 4, 4, 1, 1]</td>\n",
" <td>[4271.1418991733435, 3559.465322640449, 795.01...</td>\n",
" <td>[inf, inf, inf, inf, nan, inf, inf, nan, nan, ...</td>\n",
" <td>[0.0, 0.0, 0.0, 0.0, nan, 0.0, 0.0, nan, nan, ...</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.36</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.10</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 43 columns</p>\n",
"</div>"
],
"text/plain": [
" network funds sentiment \\\n",
"6 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4889.60 0.60 \n",
"12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4912.02 0.60 \n",
"18 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4934.45 0.60 \n",
"24 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4956.91 0.60 \n",
"30 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4979.40 0.60 \n",
"\n",
" effective_supply total_supply fractionOfSupplyForVoting \\\n",
"6 14020.01 22414.61 0.63 \n",
"12 14020.01 22437.03 0.62 \n",
"18 14020.01 22459.46 0.62 \n",
"24 14020.01 22481.92 0.62 \n",
"30 14020.01 22504.41 0.62 \n",
"\n",
" fractionOfSupplyInPool fractionOfProposalStages \\\n",
"6 4.58 {'percentageOfActive': 0.0, 'percentageOfCompl... \n",
"12 4.57 {'percentageOfActive': 0.0, 'percentageOfCompl... \n",
"18 4.55 {'percentageOfActive': 0.0, 'percentageOfCompl... \n",
"24 4.54 {'percentageOfActive': 0.0, 'percentageOfCompl... \n",
"30 4.52 {'percentageOfActive': 0.0, 'percentageOfCompl... \n",
"\n",
" fractionOfFundStages simulation ... \\\n",
"6 {'percentageOfActiveFundsRequested': 0.0, 'per... 0 ... \n",
"12 {'percentageOfActiveFundsRequested': 0.0, 'per... 0 ... \n",
"18 {'percentageOfActiveFundsRequested': 0.0, 'per... 0 ... \n",
"24 {'percentageOfActiveFundsRequested': 0.0, 'per... 0 ... \n",
"30 {'percentageOfActiveFundsRequested': 0.0, 'per... 0 ... \n",
"\n",
" age_all \\\n",
"6 [1, 1, 1, 1, 1, 1, 1] \n",
"12 [2, 2, 2, 2, 2, 2, 2, 1, 1] \n",
"18 [3, 3, 3, 3, 3, 3, 3, 2, 2] \n",
"24 [4, 4, 4, 4, 4, 4, 4, 3, 3] \n",
"30 [5, 5, 5, 5, 5, 5, 5, 4, 4, 1, 1] \n",
"\n",
" conviction_all \\\n",
"6 [1140.99452829493, 973.5581573746348, 238.7134... \n",
"12 [2178.391649954617, 1746.2717789589933, 428.18... \n",
"18 [3001.7742910703023, 2359.5749868455773, 576.2... \n",
"24 [3709.455194161197, 3028.521847490869, 700.333... \n",
"30 [4271.1418991733435, 3559.465322640449, 795.01... \n",
"\n",
" triggers_all \\\n",
"6 [inf, inf, inf, inf, inf, inf, inf] \n",
"12 [inf, inf, inf, inf, nan, inf, inf, inf, inf] \n",
"18 [inf, inf, inf, inf, nan, inf, inf, nan, nan] \n",
"24 [inf, inf, inf, inf, nan, inf, inf, nan, nan] \n",
"30 [inf, inf, inf, inf, nan, inf, inf, nan, nan, ... \n",
"\n",
" conviction_share_of_trigger_all \\\n",
"6 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] \n",
"12 [0.0, 0.0, 0.0, 0.0, nan, 0.0, 0.0, 0.0, 0.0] \n",
"18 [0.0, 0.0, 0.0, 0.0, nan, 0.0, 0.0, nan, nan] \n",
"24 [0.0, 0.0, 0.0, 0.0, nan, 0.0, 0.0, nan, nan] \n",
"30 [0.0, 0.0, 0.0, 0.0, nan, 0.0, 0.0, nan, nan, ... \n",
"\n",
" percentageOfActiveProposals percentageOfCompletedProposals \\\n",
"6 0.00 0.00 \n",
"12 0.00 0.00 \n",
"18 0.00 0.00 \n",
"24 0.00 0.00 \n",
"30 0.00 0.00 \n",
"\n",
" percentageOfKilledProposals percentageOfActiveFundsRequested \\\n",
"6 0.14 0.00 \n",
"12 0.33 0.00 \n",
"18 0.33 0.00 \n",
"24 0.33 0.00 \n",
"30 0.36 0.00 \n",
"\n",
" percentageOfCompletedFundsRequested percentageOfKilledFundsRequested \n",
"6 0.00 0.10 \n",
"12 0.00 0.10 \n",
"18 0.00 0.10 \n",
"24 0.00 0.10 \n",
"30 0.00 0.10 \n",
"\n",
"[5 rows x 43 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head(5)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1231eb128>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEGCAYAAABrQF4qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAYl0lEQVR4nO3dfZRU9Z3n8ffHBmR8yIjScdBmB8zAHkWwAxVWYhLRWRQ1Qh4mRncykXGiY2bZ7JyNLuSYg4HJ7saJE/fMhkwOYVgysxMlYXxoI4o4oxsXQSk4BOnmwQ4yayOjPUh8iKvQ5rt/3NtMUammq6GqC37zeZ1Tp+v+7u/W/dbl8unb91bdnyICMzNL10mNLsDMzOrLQW9mljgHvZlZ4hz0ZmaJc9CbmSVuSKMLKDdy5MgYM2ZMo8swMzuhbNy48Z8iornSvOMu6MeMGUOxWGx0GWZmJxRJ/9DXPJ+6MTNLnIPezCxxDnozs8Qdd+fozSwdBw8epKuri3feeafRpSRj+PDhtLS0MHTo0KqXcdCbWd10dXVx+umnM2bMGCQ1upwTXkSwb98+urq6GDt2bNXLVXXqRtJMSTskdUqa30ef6yR1SGqX9IO87TclbZK0OW+/terKzOyE984773DWWWc55GtEEmedddaA/0Lq94heUhOwGJgBdAEbJLVFREdJn3HAV4BLImK/pPfns/YC0yLiXUmnAVvzZV8eUJVmdsJyyNfW0WzPao7opwKdEbErIg4A9wGzy/rcDCyOiP0AEfFq/vNARLyb9zm5yvWZmVkNVRO85wIvlUx35W2lxgPjJa2VtF7SzN4ZkkZL2pK/xl2VjuYl3SKpKKnY3d098HdhZlYnmzdvZtWqVYem29ra+MY3vlHXdT711FM888wzNXu9Wh1hDwHGAdOBG4DvSToDICJeiohJwG8BN0o6u3zhiFgSEYWIKDQ3V/wGr5lZQ5QH/axZs5g/v+KlypppRNDvAUaXTLfkbaW6gLaIOBgRLwI7yYL/kPxIfivw0aMv18yser/4xS+45ppruOiii7jwwgtZsWIFGzdu5NJLL2XKlClceeWV7N27F4Dp06czb948pk6dyvjx43n66ac5cOAACxYsYMWKFbS2trJixQqWL1/O3LlzAZgzZw5f/OIXufjiiznvvPN46qmnuOmmmzj//POZM2fOoToef/xxpk2bxuTJk/nMZz7DW2+9BWS3fLnzzjuZPHkyEydOZPv27ezevZvvfve73HPPPbS2tvL0008f83ao5uOVG4BxksaSBfz1wL8r6/Mg2ZH8/5Q0kuxUzi5JLcC+iPh/kkYAHwHuOeaqzeyEs/DhdjpefqOmr3nBOe/jzmsn9Dn/scce45xzzuGRRx4B4PXXX+eqq67ioYceorm5mRUrVnDHHXewbNkyAHp6enjuuedYtWoVCxcu5IknnmDRokUUi0W+/e1vA7B8+fLD1rF//37WrVtHW1sbs2bNYu3atSxdupQPfehDbN68mZaWFr7+9a/zxBNPcOqpp3LXXXfxrW99iwULFgAwcuRINm3axHe+8x3uvvtuli5dyq233sppp53GbbfdVpPt1G/QR0SPpLnAaqAJWBYR7ZIWAcWIaMvnXSGpA3gPuD0i9kmaAfyZpAAE3B0Rz9ekcjOzfkycOJEvf/nLzJs3j49//OOMGDGCrVu3MmPGDADee+89Ro0adaj/pz71KQCmTJnC7t27q1rHtddeiyQmTpzI2WefzcSJEwGYMGECu3fvpquri46ODi655BIADhw4wLRp0yqu8/777z/m91xJVV+YiohVwKqytgUlzwP4T/mjtM8aYNKxl2lmJ7ojHXnXy/jx49m0aROrVq3iq1/9KpdffjkTJkxg3bp1FfuffPLJADQ1NdHT01PVOnqXOemkkw49753u6emhqamJGTNmcO+999ZsnQPljzuaWbJefvllTjnlFD73uc9x++238+yzz9Ld3X0o6A8ePEh7e/sRX+P000/nzTffPOoaLr74YtauXUtnZyeQXTfYuXNnXddZzkFvZsl6/vnnmTp1Kq2trSxcuJBFixaxcuVK5s2bx0UXXURra2u/n2657LLL6OjoOHQxdqCam5tZvnw5N9xwA5MmTWLatGls3779iMtce+21PPDAAzW7GKvsrMvxo1AohAceMUvDtm3bOP/88xtdRnIqbVdJGyOiUKm/j+jNzBLnoDczS5yD3szq6ng7PXyiO5rt6aA3s7oZPnw4+/btc9jXSO/96IcPHz6g5TzwiJnVTUtLC11dXfhmhbXTO8LUQDjozaxuhg4dOqCRkKw+fOrGzCxxDnozs8Q56M3MEuegNzNLnIPezCxxDnozs8Q56M3MEuegNzNLnIPezCxxDnozs8Q56M3MEuegNzNLnIPezCxxDnozs8Q56M3MEldV0EuaKWmHpE5J8/voc52kDkntkn6Qt7VKWpe3bZH02VoWb2Zm/et34BFJTcBiYAbQBWyQ1BYRHSV9xgFfAS6JiP2S3p/Pehv4fES8IOkcYKOk1RHx85q/EzMzq6iaI/qpQGdE7IqIA8B9wOyyPjcDiyNiP0BEvJr/3BkRL+TPXwZeBZprVbyZmfWvmqA/F3ipZLorbys1Hhgvaa2k9ZJmlr+IpKnAMOBnFebdIqkoqeixJc3MaqtWF2OHAOOA6cANwPckndE7U9Io4K+B34+IX5YvHBFLIqIQEYXmZh/wm5nVUjVBvwcYXTLdkreV6gLaIuJgRLwI7CQLfiS9D3gEuCMi1h97yWZmNhDVBP0GYJyksZKGAdcDbWV9HiQ7mkfSSLJTObvy/g8AfxURK2tWtZmZVa3foI+IHmAusBrYBvwwItolLZI0K++2GtgnqQN4Erg9IvYB1wEfA+ZI2pw/WuvyTszMrCJFRKNrOEyhUIhisdjoMszMTiiSNkZEodI8fzPWzCxxDnozs8Q56M3MEuegNzNLnIPezCxxDnozs8Q56M3MEuegNzNLnIPezCxxDnozs8Q56M3MEuegNzNLnIPezCxxDnozs8Q56M3MEuegNzNLnIPezCxxDnozs8Q56M3MEuegNzNLnIPezCxxDnozs8Q56M3MEuegNzNLXFVBL2mmpB2SOiXN76PPdZI6JLVL+kFJ+2OSfi7px7Uq2szMqjekvw6SmoDFwAygC9ggqS0iOkr6jAO+AlwSEfslvb/kJb4JnAL8YU0rNzOzqlRzRD8V6IyIXRFxALgPmF3W52ZgcUTsB4iIV3tnRMTfAW/WqF4zMxugaoL+XOClkumuvK3UeGC8pLWS1kuaOZAiJN0iqSip2N3dPZBFzcysH7W6GDsEGAdMB24AvifpjGoXjoglEVGIiEJzc3ONSjIzM6gu6PcAo0umW/K2Ul1AW0QcjIgXgZ1kwW9mZg1WTdBvAMZJGitpGHA90FbW50Gyo3kkjSQ7lbOrhnWamdlR6jfoI6IHmAusBrYBP4yIdkmLJM3Ku60G9knqAJ4Ebo+IfQCSngZ+BPy2pC5JV9bjjZiZWWWKiEbXcJhCoRDFYrHRZZiZnVAkbYyIQqV5/masmVniHPRmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWuKqCXtJMSTskdUqa30ef6yR1SGqX9IOS9hslvZA/bqxV4WZmVp0h/XWQ1AQsBmYAXcAGSW0R0VHSZxzwFeCSiNgv6f15+5nAnUABCGBjvuz+2r8VMzOrpN+gB6YCnRGxC0DSfcBsoKOkz83A4t4Aj4hX8/YrgTUR8Vq+7BpgJnBvbco/3MKH2+l4+Y16vLSZWd1dcM77uPPaCTV/3WpO3ZwLvFQy3ZW3lRoPjJe0VtJ6STMHsCySbpFUlFTs7u6uvnozM+tXNUf01b7OOGA60AL8RNLEaheOiCXAEoBCoRBHW0Q9fhOamZ3oqjmi3wOMLpluydtKdQFtEXEwIl4EdpIFfzXLmplZHVUT9BuAcZLGShoGXA+0lfV5kOxoHkkjyU7l7AJWA1dIGiFpBHBF3mZmZoOk31M3EdEjaS5ZQDcByyKiXdIioBgRbfxzoHcA7wG3R8Q+AEl/QvbLAmBR74VZMzMbHIo46lPidVEoFKJYLDa6DDOzE4qkjRFRqDTP34w1M0ucg97MLHEOejOzxDnozcwS56A3M0ucg97MLHEOejOzxDnozcwS56A3M0ucg97MLHEOejOzxDnozcwS56A3M0ucg97MLHEOejOzxDnozcwS56A3M0ucg97MLHEOejOzxDnozcwS56A3M0ucg97MLHEOejOzxDnozcwSV1XQS5opaYekTknzK8yfI6lb0ub88YWSeXdJ2po/PlvL4s3MrH9D+usgqQlYDMwAuoANktoioqOs64qImFu27DXAZKAVOBl4StKjEfFGTao3M7N+VXNEPxXojIhdEXEAuA+YXeXrXwD8JCJ6IuIXwBZg5tGVamZmR6OaoD8XeKlkuitvK/dpSVskrZQ0Om/7KTBT0imSRgKXAaPLF5R0i6SipGJ3d/cA34KZmR1JrS7GPgyMiYhJwBrg+wAR8TiwCngGuBdYB7xXvnBELImIQkQUmpuba1SSmZlBdUG/h8OPwlvytkMiYl9EvJtPLgWmlMz7LxHRGhEzAAE7j61kMzMbiGqCfgMwTtJYScOA64G20g6SRpVMzgK25e1Nks7Kn08CJgGP16JwMzOrTr+fuomIHklzgdVAE7AsItolLQKKEdEGfEnSLKAHeA2Yky8+FHhaEsAbwOcioqf2b8PMzPqiiGh0DYcpFApRLBYbXYaZ2QlF0saIKFSa52/GmpklzkFvZpY4B72ZWeIc9GZmiXPQm5klzkFvZpY4B72ZWeIc9GZmiXPQm5klzkFvZpY4B72ZWeIc9GZmiXPQm5klzkFvZpY4B72ZWeIc9GZmiXPQm5klzkFvZpY4B72ZWeIc9GZmiXPQm5klzkFvZpY4B72ZWeIc9GZmiasq6CXNlLRDUqek+RXmz5HULWlz/vhCybw/ldQuaZukP5ekWr4BMzM7siH9dZDUBCwGZgBdwAZJbRHRUdZ1RUTMLVv2w8AlwKS86f8AlwJPHWPdZmZWpWqO6KcCnRGxKyIOAPcBs6t8/QCGA8OAk4GhwCtHU6iZmR2daoL+XOClkumuvK3cpyVtkbRS0miAiFgHPAnszR+rI2Jb+YKSbpFUlFTs7u4e8JswM7O+1epi7MPAmIiYBKwBvg8g6beA84EWsl8Ol0v6aPnCEbEkIgoRUWhubq5RSWZmBtUF/R5gdMl0S952SETsi4h388mlwJT8+SeB9RHxVkS8BTwKTDu2ks3MbCCqCfoNwDhJYyUNA64H2ko7SBpVMjkL6D0983+BSyUNkTSU7ELsr5y6MTOz+un3UzcR0SNpLrAaaAKWRUS7pEVAMSLagC9JmgX0AK8Bc/LFVwKXA8+TXZh9LCIerv3bMDOzvigiGl3DYQqFQhSLxUaXYWZ2QpG0MSIKleb5m7FmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWOAe9mVniHPRmZolz0JuZJc5Bb2aWOAe9mVniqgp6STMl7ZDUKWl+hflzJHVL2pw/vpC3X1bStlnSO5I+Ues3YWZmfRvSXwdJTcBiYAbQBWyQ1BYRHWVdV0TE3NKGiHgSaM1f50ygE3i8FoWbmVl1qjminwp0RsSuiDgA3AfMPop1/Q7waES8fRTLmpnZUaom6M8FXiqZ7srbyn1a0hZJKyWNrjD/euDeSiuQdIukoqRid3d3FSWZmVm1anUx9mFgTERMAtYA3y+dKWkUMBFYXWnhiFgSEYWIKDQ3N9eoJDMzg+qCfg9QeoTekrcdEhH7IuLdfHIpMKXsNa4DHoiIg0dbqJmZHZ1qgn4DME7SWEnDyE7BtJV2yI/Ye80CtpW9xg30cdrGzMzqq99P3UREj6S5ZKddmoBlEdEuaRFQjIg24EuSZgE9wGvAnN7lJY0h+4vgf9e8ejMz65ciotE1HKZQKESxWGx0GWZmJxRJGyOiUGmevxlrZpY4B72ZWeIc9GZmiXPQm5kl7ri7GCupG/iHRtdxBCOBf2p0EUfg+o6N6zs2ru/YHEt9vxkRFb9xetwF/fFOUrGvK9vHA9d3bFzfsXF9x6Ze9fnUjZlZ4hz0ZmaJc9AP3JJGF9AP13dsXN+xcX3Hpi71+Ry9mVnifERvZpY4B72ZWeIc9GUkjZb0pKQOSe2S/mOFPtMlvV4y6PmCBtS5W9Lz+fp/5S5wyvx5PqD7FkmTB7G2f102KPwbkv64rM+gbkNJyyS9KmlrSduZktZIeiH/OaKPZW/M+7wg6cZBrO+bkrbn/34PSDqjj2WPuC/Usb6vSdpT8m94dR/LzpS0I98X5w9ifStKatstaXMfyw7G9quYK4O2D0aEHyUPYBQwOX9+OrATuKCsz3Tgxw2uczcw8gjzrwYeBQRcDDzboDqbgH8k+zJHw7Yh8DFgMrC1pO1Pgfn58/nAXRWWOxPYlf8ckT8fMUj1XQEMyZ/fVam+avaFOtb3NeC2Kv79fwacBwwDflr+/6le9ZXN/zNgQQO3X8VcGax90Ef0ZSJib0Rsyp+/STaISqUxco93s4G/isx64IyyAWIGy28DP4uIhn7bOSJ+QjZWQqnZ/POwl98HPlFh0SuBNRHxWkTsJxsqc+Zg1BcRj0dETz65nmx0t4boY/tVYyrQGRG7IuIAcB/Zdq+pI9UnSWSj3DVs8KMj5Mqg7IMO+iPIB035IPBshdnTJP1U0qOSJgxqYZkAHpe0UdItFeZXO6h7vfU5KDyN34ZnR8Te/Pk/AmdX6HO8bMebyP5Cq6S/faGe5uanlpb1cdrheNh+HwVeiYgX+pg/qNuvLFcGZR900PdB0mnA3wJ/HBFvlM3eRHYq4iLgfwAPDnZ9wEciYjJwFfDvJX2sATUckbKhJ2cBP6ow+3jYhodE9jfycflZY0l3kI3e9jd9dGnUvvAXwAeAVmAv2emR41F/Q5kO2vY7Uq7Ucx900FcgaSjZP8bfRMT95fMj4o2IeCt/vgoYKmnkYNYYEXvyn68CD5D9iVyq30HdB8FVwKaIeKV8xvGwDYFXek9n5T9frdCnodtR0hzg48Dv5kHwK6rYF+oiIl6JiPci4pfA9/pYb6O33xDgU8CKvvoM1vbrI1cGZR900JfJz+f9JbAtIr7VR5/fyPshaSrZdtw3iDWeKun03udkF+22lnVrAz6ff/rmYuD1kj8RB0ufR1KN3oa5NqD3Eww3Ag9V6LMauELSiPzUxBV5W91Jmgn8Z2BWRLzdR59q9oV61Vd6zeeTfax3AzBO0tj8L7zrybb7YPm3wPaI6Ko0c7C23xFyZXD2wXpeaT4RH8BHyP582gJszh9XA7cCt+Z95gLtZJ8gWA98eJBrPC9f90/zOu7I20trFLCY7BMPzwOFQa7xVLLg/vWStoZtQ7JfOHuBg2TnOP8AOAv4O+AF4AngzLxvAVhasuxNQGf++P1BrK+T7Nxs73743bzvOcCqI+0Lg1TfX+f71haywBpVXl8+fTXZp0x+Npj15e3Le/e5kr6N2H595cqg7IO+BYKZWeJ86sbMLHEOejOzxDnozcwS56A3M0ucg97MLHEOekuSpDMk/VH+/BxJK+u4rta+7txodjxw0FuqzgD+CCAiXo6I36njulrJPhNtdlzy5+gtSZJ675K4g+zLKOdHxIX5LQU+QfaFrnHA3WS3z/094F3g6oh4TdIHyL5w1gy8DdwcEdslfQa4E3gPeJ3sm5edwK+RfS39vwE/Jrt/z4XAUOBrEfFQvu5PAr9OdlOq/xURC+u8KcwY0ugCzOpkPnBhRLTmdwv8ccm8C8nuHjicLKTnRcQHJd0DfB7472SDNN8aES9I+jfAd4DLgQXAlRGxR9IZEXFA2aAphYiYCyDpvwJ/HxE3KRss5DlJT+Trnpqv/21gg6RHIqIug12Y9XLQ279ET0Z2T/A3Jb0OPJy3Pw9Myu8w+GHgR/nteABOzn+uBZZL+iHwKze8y10BzJJ0Wz49HPhX+fM1EbEPQNL9ZF+Nd9BbXTno7V+id0ue/7Jk+pdk/ydOAn4eEa3lC0bErfkR/jXARklTKry+gE9HxI7DGrPlys+V+typ1Z0vxlqq3iQbsm3AIrtP+Iv5+fje8Xcvyp9/ICKejYgFQDfZ7WPL17Ua+A8ld+f8YMm8Gfk4ob9Gdq1g7dHUaDYQDnpLUn56ZK2ywaK/eRQv8bvAH0jqvath7/B331Q2kPRW4Bmyux4+CVygbHDpzwJ/QnYRdouk9ny613Nk9yTfAvytz8/bYPCnbswGSf6pm0MXbc0Gi4/ozcwS5yN6M7PE+YjezCxxDnozs8Q56M3MEuegNzNLnIPezCxx/x8RWapqiPhvWgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"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": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x123269cf8>"
]
},
"execution_count": 5,
"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": [
"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": 1,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'affinities_plot' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m-----------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-1-4a61f53644c3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0maffinities_plot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'affinities_plot' is not defined"
]
}
],
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}