discrete_instance.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import os
  2. import numpy
  3. from core.strategy import *
  4. from core.lottery import *
  5. import matplotlib.pyplot as plt
  6. import scipy.stats as stats
  7. import math
  8. from draw import draw
  9. os.system("rm log/*_feedback.hist; rm log/*_output.hist")
  10. RUNNING_TIME = int(input("running time:"))
  11. NODES=100
  12. if __name__ == "__main__":
  13. egalitarian = ERC20DRK/NODES
  14. darkies = []
  15. for id in range(int(NODES)):
  16. darkie = Darkie(random.gauss(egalitarian, egalitarian*0.1), strategy=random_strategy())
  17. darkies += [darkie]
  18. #TODO try rpid with 0mint
  19. #darkies += [Darkie(0, strategy=LinearStrategy(EPOCH_LENGTH)) for _ in range(NODES)]
  20. airdrop = ERC20DRK
  21. effective_airdrop = 0
  22. for darkie in darkies:
  23. effective_airdrop+=darkie.stake
  24. print("network airdrop: {}, staked token: {}/{}% on {} nodes".format(airdrop, effective_airdrop, effective_airdrop/airdrop*100, len(darkies)))
  25. #dt = DarkfiTable(airdrop, RUNNING_TIME, CONTROLLER_TYPE_DISCRETE, kp=-0.010399999999938556, ki=-0.0365999996461878, kd=0.03840000000000491, r_kp=-2.53, r_ki=29.5, r_kd=53.77)
  26. dt = DarkfiTable(airdrop, RUNNING_TIME, CONTROLLER_TYPE_DISCRETE, kp=-0.010399999999938556, ki=-0.0365999996461878, kd=0.03840000000000491, r_kp=-0.63, r_ki=3.35, r_kd=-1.11)
  27. for darkie in darkies:
  28. dt.add_darkie(darkie)
  29. acc, avg_apy, avg_reward, stake_ratio, avg_apr = dt.background(rand_running_time=False)
  30. sum_zero_stake = sum([darkie.stake for darkie in darkies[NODES:]])
  31. print('acc: {}, avg(apr): {}, avg(reward): {}, stake_ratio: {}'.format(acc, avg_apr, avg_reward, stake_ratio))
  32. print('total stake of 0mint: {}, ratio: {}'.format(sum_zero_stake, sum_zero_stake/ERC20DRK))
  33. dt.write()
  34. aprs = []
  35. fortuners = 0.0
  36. for darkie in darkies:
  37. aprs += [float(darkie.apr_scaled_to_runningtime())]
  38. if darkie.initial_stake[-1] - darkie.initial_stake[0] > 0:
  39. fortuners+=1
  40. print('fortuners: {}'.format(str(fortuners/len(darkies))))
  41. # distribution of aprs
  42. aprs = sorted(aprs)
  43. mu = float(sum(aprs)/len(aprs))
  44. shifted_aprs = [apr - mu for apr in aprs]
  45. plt.plot([apr*100 for apr in aprs])
  46. plt.title('annual percentage return, avg: {:}'.format(mu*100))
  47. plt.savefig('img/apr_distribution.png')
  48. plt.show()
  49. variance = sum(shifted_aprs)/(len(aprs)-1)
  50. print('mu: {}, variance: {}'.format(str(mu), str(variance)))
  51. draw()