122 lines
2.9 KiB
Python
122 lines
2.9 KiB
Python
|
|
import numpy as np
|
|
import pandas as pd
|
|
from .initialization import *
|
|
from .supportingFunctions import *
|
|
|
|
|
|
def startingBalance(params, step, sL, s, _input):
|
|
'''
|
|
Calculate agent starting balance every 30 days
|
|
'''
|
|
y = 'startingBalance'
|
|
network = s['network']
|
|
|
|
startingBalance = {}
|
|
|
|
timestep = s['timestep']
|
|
|
|
division = timestep % 31 == 0
|
|
|
|
if timestep == 1:
|
|
for i in clusters:
|
|
startingBalance[i] = network.nodes[i]['tokens']
|
|
elif division == True:
|
|
for i in clusters:
|
|
startingBalance[i] = network.nodes[i]['tokens']
|
|
else:
|
|
startingBalance = s['startingBalance']
|
|
x = startingBalance
|
|
|
|
return (y, x)
|
|
|
|
def update_30_day_spend(params, step, sL, s,_input):
|
|
'''
|
|
Aggregate agent spend. Refresh every 30 days.
|
|
'''
|
|
y = '30_day_spend'
|
|
network = s['network']
|
|
|
|
timestep = s['timestep']
|
|
|
|
division = timestep % 31 == 0
|
|
|
|
if division == True:
|
|
outflowSpend, inflowSpend = iterateEdges(network,'spend')
|
|
spend = outflowSpend
|
|
else:
|
|
spendOld = s['30_day_spend']
|
|
outflowSpend, inflowSpend = iterateEdges(network,'spend')
|
|
spend = DictionaryMergeAddition(spendOld,outflowSpend)
|
|
|
|
x = spend
|
|
return (y, x)
|
|
|
|
def redCrossDrop(params, step, sL, s, _input):
|
|
'''
|
|
Every 30 days, the red cross drips to the grassroots operator node
|
|
'''
|
|
y = 'operatorFiatBalance'
|
|
fiatBalance = s['operatorFiatBalance']
|
|
|
|
timestep = s['timestep']
|
|
|
|
division = timestep % redCrossDripFrequency == 0
|
|
|
|
if division == True:
|
|
fiatBalance = fiatBalance + drip
|
|
else:
|
|
pass
|
|
|
|
x = fiatBalance
|
|
return (y, x)
|
|
|
|
|
|
def clear_agent_activity(params,step,sL,s,_input):
|
|
'''
|
|
Clear agent activity from the previous timestep
|
|
'''
|
|
y = 'network'
|
|
network = s['network']
|
|
|
|
if s['timestep'] > 0:
|
|
outboundAgents = s['outboundAgents']
|
|
inboundAgents = s['inboundAgents']
|
|
|
|
try:
|
|
for i,j in zip(outboundAgents,inboundAgents):
|
|
network[i][j]['demand'] = 0
|
|
except:
|
|
pass
|
|
|
|
# Clear cic % demand edge weights
|
|
try:
|
|
for i,j in zip(outboundAgents,inboundAgents):
|
|
network[i][j]['fractionOfDemandInCIC'] = 0
|
|
except:
|
|
pass
|
|
|
|
|
|
# Clear utility edge types
|
|
try:
|
|
for i,j in zip(outboundAgents,inboundAgents):
|
|
network[i][j]['utility'] = 0
|
|
except:
|
|
pass
|
|
|
|
# Clear cic % spend edge weights
|
|
try:
|
|
for i,j in zip(outboundAgents,inboundAgents):
|
|
network[i][j]['fractionOfActualSpendInCIC'] = 0
|
|
except:
|
|
pass
|
|
# Clear spend edge types
|
|
try:
|
|
for i,j in zip(outboundAgents,inboundAgents):
|
|
network[i][j]['spend'] = 0
|
|
except:
|
|
pass
|
|
else:
|
|
pass
|
|
x = network
|
|
return (y,x) |