A first draft model macro-data recording function. The velocity and acceleration of the system.
import numpy as np
import redis
r = redis.Redis(decode_responses=True)
# Utility: Catch divide by zero error.
def zero_division(n, d):
return n / d if d else 0
"""
Used as input to the Central Bank 'policy_interest_rate' function.
"""
# Called by Government.
def pushBills(val):
def pushVelocity():
def pushAcceleration():
# Calculate acceleration of bills issued.
vel_bills_arr = np.array(r.lrange("bills:velocity", 0, 1), dtype=float) # Get last two entries.
acc_bills_arr = np.diff(vel_bills_arr) # The change in velocity.
r.lpush("bills:acceleration", float(acc_bills_arr))
return True
# Calculate velocity of bills issued.
bills_arr = np.array(r.lrange("bills:issued", 0 ,1), dtype=float) # Get last two entries.
national_income = float(r.get("national:income"))
vel_bills = zero_division(abs(float(np.diff(bills_arr))), national_income) * 100
r.lpush("bills:velocity", float(vel_bills))
return pushAcceleration()
# Push new amount of bills issued in this step.
r.lpush("bills:issued", val)
return pushVelocity()
# Called by Producer(s).
def addNatIncome(val):
old_national_income = float(r.get("national:income"))
new_national_income = old_national_income + float(val)
r.set("national:income", new_national_income)
return True