|
|
@@ -6,6 +6,7 @@ from core.darkie import *
|
|
|
from pid.cascade import *
|
|
|
from tqdm import tqdm
|
|
|
import random
|
|
|
+
|
|
|
class DarkfiTable:
|
|
|
def __init__(self, airdrop, running_time, controller_type=CONTROLLER_TYPE_DISCRETE, kp=0, ki=0, kd=0, dt=1, kc=0, ti=0, td=0, ts=0, debug=False, r_kp=0, r_ki=0, r_kd=0):
|
|
|
self.Sigma=airdrop
|
|
|
@@ -31,19 +32,15 @@ class DarkfiTable:
|
|
|
# random running time
|
|
|
rand_running_time = random.randint(1,self.running_time) if rand_running_time else self.running_time
|
|
|
self.running_time = rand_running_time
|
|
|
- #if rand_running_time and debug:
|
|
|
- #print("random running time: {}".format(self.running_time))
|
|
|
- #print('running time: {}'.format(self.running_time))
|
|
|
-
|
|
|
rt_range = tqdm(np.arange(0,self.running_time, 1))
|
|
|
+ merge_length = 0
|
|
|
for count in rt_range:
|
|
|
- #while count < self.running_time:
|
|
|
+ merge_length = 0
|
|
|
winners=0
|
|
|
f = self.secondary_pid.pid_clipped(float(feedback), debug)
|
|
|
|
|
|
if count%EPOCH_LENGTH == 0:
|
|
|
acc = self.secondary_pid.acc()
|
|
|
- #staked_ratio = self.avg_stake_ratio()
|
|
|
reward = self.primary_pid.pid_clipped(acc, debug)
|
|
|
self.rewards += [reward]
|
|
|
|
|
|
@@ -58,7 +55,7 @@ class DarkfiTable:
|
|
|
|
|
|
for i in range(len(self.darkies)):
|
|
|
winners += self.darkies[i].won_hist[-1]
|
|
|
- ###
|
|
|
+
|
|
|
self.winners +=[winners]
|
|
|
feedback = winners
|
|
|
if self.winners[-1]==1:
|
|
|
@@ -73,7 +70,7 @@ class DarkfiTable:
|
|
|
# resolve finalization
|
|
|
self.Sigma += self.rewards[-1]
|
|
|
# resync nodes
|
|
|
- merge_length = 0
|
|
|
+
|
|
|
for i in reversed(self.winners[:-1]):
|
|
|
if i !=1:
|
|
|
merge_length+=1
|
|
|
@@ -93,9 +90,9 @@ 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)*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))
|
|
|
+ rt_range.set_description('epoch: {}, fork: {} issuance {} DRK, acc: {}%, stake = {}%, sr: {}%, reward:{}, apr: {}%'.format(int(count/EPOCH_LENGTH), merge_length, round(self.Sigma,2), round(acc*100, 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()*100,2)))
|
|
|
#print('[2]stake: {}, sigma: {}, reward: {}'.format(total_stake, self.Sigma, self.rewards[-1]))
|
|
|
- assert(round(total_stake,1) <= round(self.Sigma,1))
|
|
|
+ #assert(round(total_stake,1) <= round(self.Sigma,1))
|
|
|
count+=1
|
|
|
self.end_time=time.time()
|
|
|
avg_reward = sum(self.rewards)/len(self.rewards)
|
|
|
@@ -112,7 +109,7 @@ class DarkfiTable:
|
|
|
return Num(sum([darkie.apr_scaled_to_runningtime() for darkie in self.darkies])/len(self.darkies))
|
|
|
|
|
|
def avg_stake_ratio(self):
|
|
|
- return sum([darkie.staked_tokens_ratio() for darkie in self.darkies])/len(self.darkies)
|
|
|
+ return sum([darkie.staked_tokens_ratio() for darkie in self.darkies]) / len(self.darkies)
|
|
|
|
|
|
def write(self):
|
|
|
elapsed=self.end_time-self.start_time
|