acc_vs_staked_ratio_pi.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from core.lottery import *
  2. import os
  3. import numpy
  4. from matplotlib import pyplot as plt
  5. os.system("rm log/f_output.hist; rm log/f_feedback.hist")
  6. RUNNING_TIME = int(input("running time:"))
  7. ERC20DRK=2.1*10**9
  8. NODES=1000
  9. plot = []
  10. EXPS=10
  11. for nodes in numpy.concatenate((numpy.array([1,5]), numpy.linspace(10,NODES, 10))):
  12. accs = []
  13. for _ in range(EXPS):
  14. darkies = []
  15. egalitarian = ERC20DRK/NODES
  16. darkies += [ Darkie(random.gauss(egalitarian, egalitarian*0.1), strategy=random_strategy(EPOCH_LENGTH)) for id in range(int(nodes)) ]
  17. #darkies += [Darkie() for _ in range(NODES*2)]
  18. airdrop = ERC20DRK
  19. dt = DarkfiTable(airdrop, RUNNING_TIME, CONTROLLER_TYPE_DISCRETE, kp=-0.0104, ki=-0.0366, kd=0.0384, r_kp=-2.53, r_ki=29.5, r_kd=53.77)
  20. #dt = DarkfiTable(airdrop, RUNNING_TIME, CONTROLLER_TYPE_DISCRETE, kp=-0.0104, ki=-0.0366, kd=0, r_kp=-2.53, r_ki=29.5, r_kd=0)
  21. for darkie in darkies:
  22. dt.add_darkie(darkie)
  23. acc, apy, reward, staked_ratio, apr = dt.background(rand_running_time=False)
  24. accs += [acc]
  25. effective_airdrop = 0
  26. for darkie in darkies:
  27. effective_airdrop+=darkie.stake
  28. effective_airdrop*=float(staked_ratio)
  29. stake_portion = effective_airdrop/airdrop*100
  30. print("network airdrop: {}, staked token: {}/{}% on {} nodes".format(airdrop, effective_airdrop, stake_portion, len(darkies)))
  31. avg_acc = sum(accs)/EXPS
  32. plot+=[(stake_portion, avg_acc)]
  33. plt.plot([x[0] for x in plot], [x[1] for x in plot])
  34. plt.xlabel('drk staked %')
  35. plt.ylabel('accuracy %')
  36. plt.savefig('img'+os.sep+'stake_pi.png')
  37. plt.show()