Преглед изворни кода

[research/lotterysim] plot apr as well as initial stake from log, before/after end of airdrop, fix apy index

ertosns пре 3 година
родитељ
комит
576940e3e5

+ 3 - 3
script/research/lotterysim/core/constants.py

@@ -36,9 +36,9 @@ REWARD_MAX_HP = Num(REWARD_MAX)
 
 ACC_WINDOW = 100
 
-BASE_L = 0.0001*L
+BASE_L = 0.00001*L
 BASE_L_HP = Num(BASE_L)
 
 # HEADSTART AIRDROP period ~ 1 month
-HEADSTART_AIRDROP=2880
-SLASHING_RATIO = 0.01
+HEADSTART_AIRDROP=2880# 28800
+SLASHING_RATIO = 0.000001

+ 3 - 3
script/research/lotterysim/core/darkie.py

@@ -20,7 +20,8 @@ class Darkie():
     def apy_scaled_to_runningtime(self, rewards):
         avg_apy = 0
         for idx, reward in enumerate(rewards):
-            current_epoch_staked_tokens = Num(self.strategy.staked_tokens_ratio[idx-1]) * Num(self.initial_stake[idx-1])
+            init_stake = Num(self.initial_stake[idx-1]) if len(self.initial_stake)>=idx else Num(self.initial_stake[-1])
+            current_epoch_staked_tokens = Num(self.strategy.staked_tokens_ratio[idx-1]) * init_stake
             avg_apy += (Num(reward) / current_epoch_staked_tokens) if current_epoch_staked_tokens!=0 else 0
         return avg_apy * Num(ONE_YEAR/(self.slot/EPOCH_LENGTH)) if self.slot  and self.initial_stake[0]>0 >0 else 0
 
@@ -37,7 +38,7 @@ class Darkie():
         #if self.slot%100==0:
             #print('stake: {}, initial stake: {}'.format(self.stake, initial_stake))
             #print(self.initial_stake)
-        apr = Num(self.stake - initial_stake) / Num(initial_stake) *  Num(ONE_YEAR/(self.slot/EPOCH_LENGTH)) if self.slot> 0 and initial_stake>0 else 0
+        apr = Num(self.stake - initial_stake) / Num(initial_stake) *  Num(ONE_YEAR/(self.slot)) if self.slot> 0 and initial_stake>0 else 0
         return apr
 
     def staked_tokens(self):
@@ -61,7 +62,6 @@ class Darkie():
         self.f = (Num(f) if hp else f)
         self.slot = count
 
-
     def run(self, hp=True):
         k=N_TERM
         def target(tune_parameter, stake):

+ 1 - 1
script/research/lotterysim/core/lottery.py

@@ -93,7 +93,7 @@ class DarkfiTable:
                             break
                     self.darkies[darkie_winning_idx].resync_stake(resync_reward)
                     self.Sigma += resync_reward
-            rt_range.set_description('epoch: {}, issuance {} DRK, acc: {}, stake = {}%, sr: {}%, reward:{}, apr: {}'.format(int(count/EPOCH_LENGTH), round(self.Sigma,2), round(acc,2), round(total_stake/self.Sigma*100 if self.Sigma>0 else 0,2), round(self.avg_stake_ratio()*100,2) , round(self.rewards[-1],2), round(self.avg_apr(),2)))
+            rt_range.set_description('epoch: {}, issuance {} DRK, acc: {}%, stake = {}%, sr: {}%, reward:{}, apr: {}%'.format(int(count/EPOCH_LENGTH), round(self.Sigma,2), round(acc,2)*100, round(total_stake/self.Sigma*100 if self.Sigma>0 else 0,2), round(self.avg_stake_ratio()*100,2) , round(self.rewards[-1],2), round(self.avg_apr(),2)*100))
             #print('[2]stake: {}, sigma: {}, reward: {}'.format(total_stake, self.Sigma, self.rewards[-1]))
             assert(round(total_stake,1) <= round(self.Sigma,1))
             count+=1

+ 18 - 2
script/research/lotterysim/plot_darkies.py

@@ -14,14 +14,30 @@ for darkie in glob.glob('log/darkie[0-9]*.log'):
         idx +=1
         if sum(initial_stake)!=0 :
             darkies += [(initial_stake, apr, idx)]
+# plot initial stake
 
 for darkie in darkies:
     plt.plot(darkie[0])
+    plt.title('initial stake')
+
+
+legends = []
+for darkie in darkies:
+    legend = ["darkie{}".format(darkie[2])]
+    legends +=[legend]
+plt.legend(legends)
+plt.savefig("log/plot_darkies_is.png")
+
+# plot apr
+
+for darkie in darkies:
+    plt.plot(darkie[1])
+    plt.title('apr')
+
 
 legends = []
 for darkie in darkies:
     legend = ["darkie{}".format(darkie[2])]
     legends +=[legend]
 plt.legend(legends)
-plt.savefig("log/plot_darkies.png")
-#plt.show()
+plt.savefig("log/plot_darkies_apr.png")

+ 4 - 3
script/research/lotterysim/primary_discrete_auto_crawler_pi.py

@@ -14,7 +14,7 @@ KP_SEARCH=-0.63
 KI_STEP=0.01
 KI_SEARCH=3.35
 
-RUNNING_TIME=1000
+RUNNING_TIME=5000
 NODES = 1000
 
 SHIFTING = 0.05
@@ -45,7 +45,7 @@ rand_running_time = args.rand_running_time
 debug = args.debug
 
 def experiment(controller_type=CONTROLLER_TYPE_DISCRETE, rkp=0, rki=0, distribution=[], hp=True):
-    dt = DarkfiTable(ERC20DRK, RUNNING_TIME, controller_type, kp=-0.010399999999938556, ki=-0.0365999996461878, kd=0, r_kp=rkp, r_ki=rki, r_kd=0)
+    dt = DarkfiTable(0, RUNNING_TIME, controller_type, kp=-0.010399999999938556, ki=-0.0365999996461878, kd=0, r_kp=rkp, r_ki=rki, r_kd=0)
     RND_NODES = random.randint(5, NODES) if randomize_nodes else NODES
     for idx in range(0,RND_NODES):
         darkie = Darkie(distribution[idx], strategy=random_strategy(EPOCH_LENGTH))
@@ -116,7 +116,8 @@ def crawler(crawl, range_multiplier, step=0.1):
             step*=10
     np.random.shuffle(crawl_range)
     crawl_range = tqdm(crawl_range)
-    distribution = [random.gauss(ERC20DRK/NODES, ERC20DRK/NODES*0.1) for i in range(NODES)]
+    #distribution =  [random.gauss(ERC20DRK/NODES, ERC20DRK/NODES*0.1) for i in range(NODES)]
+    distribution = [0 for i in range(NODES)]
     for i in crawl_range:
         kp = i if crawl==KP else highest_gain[0]
         ki = i if crawl==KI else highest_gain[1]