├── Offload_Strategy.py ├── README.md ├── RL_DDQN.py ├── RL_DQN.py ├── RL_DuelingDQN.py ├── RL_PRDQN.py ├── dataset ├── edgeResources-melbCBD.csv └── users-melbcbd-generated.csv ├── main.py ├── results ├── DuelingDQN10loss.png ├── DuelingDQN10loss.svg └── _DuelingDQN10.csv ├── sysModel.py ├── userNum ├── ACTION_DuelingDQN10_mec0_2_50.data ├── ACTION_DuelingDQN10_mec1_4_50.data ├── ACTION_DuelingDQN10_mec2_6_50.data ├── ACTION_DuelingDQN10_mec3_8_50.data ├── ACTION_PRDQN10_mec0_2_50.data ├── ACTION_PRDQN10_mec1_4_50.data ├── ACTION_PRDQN10_mec2_6_50.data ├── ACTION_PRDQN10_mec3_8_50.data ├── ACTION_offline3_10_mec0_2_50.data ├── ACTION_offline3_10_mec1_4_50.data ├── ACTION_offline3_10_mec2_6_50.data ├── ACTION_offline3_10_mec3_8_50.data ├── ACTION_online3_10_mec0_2_50.data ├── ACTION_online3_10_mec1_4_50.data ├── ACTION_online3_10_mec2_6_50.data ├── ACTION_online3_10_mec3_8_50.data ├── JOB_DuelingDQN10_mec0_250.data ├── JOB_DuelingDQN10_mec0_450.data ├── JOB_DuelingDQN10_mec0_650.data ├── JOB_DuelingDQN10_mec0_850.data ├── JOB_PRDQN10_mec0_250.data ├── JOB_PRDQN10_mec0_450.data ├── JOB_PRDQN10_mec0_650.data ├── JOB_PRDQN10_mec0_850.data ├── JOB_offline3_10_rho_2.data ├── JOB_offline3_10_rho_4.data ├── JOB_offline3_10_rho_6.data ├── JOB_offline3_10_rho_8.data ├── JOB_online3_10_rho_2.data ├── JOB_online3_10_rho_4.data ├── JOB_online3_10_rho_6.data ├── JOB_online3_10_rho_8.data ├── USER_DuelingDQN10_mec0_250.data ├── USER_DuelingDQN10_mec1_450.data ├── USER_DuelingDQN10_mec2_650.data ├── USER_DuelingDQN10_mec3_850.data ├── USER_PRDQN10_mec0_250.data ├── USER_PRDQN10_mec1_450.data ├── USER_PRDQN10_mec2_650.data ├── USER_PRDQN10_mec3_850.data ├── USER_offline3_10_mec0_250.data ├── USER_offline3_10_mec1_450.data ├── USER_offline3_10_mec2_650.data ├── USER_offline3_10_mec3_850.data ├── USER_online3_10_mec0_250.data ├── USER_online3_10_mec1_450.data ├── USER_online3_10_mec2_650.data └── USER_online3_10_mec3_850.data └── usermove ├── user_0.data ├── user_1.data ├── user_2.data ├── user_3.data ├── user_4.data ├── user_5.data ├── user_6.data ├── user_7.data ├── user_8.data └── user_9.data /Offload_Strategy.py: -------------------------------------------------------------------------------- 1 | """ 2 | offloading strategy 3 | """ 4 | import sysModel 5 | # from RL_DQN import DQN 6 | # from RL_DDQN import DDQN 7 | from RL_DuelingDQN import DuelingDQN 8 | # from RL_PRDQN import PRDQN 9 | import simpy 10 | import random 11 | import xlwt 12 | import numpy as np 13 | 14 | userNum = 10 15 | mecNum = 4 16 | pen = 1 17 | # name = 'DQN' 18 | # name = 'DDQN' 19 | name = 'DuelingDQN' 20 | # name = 'PRDQN' 21 | simTime = 800 22 | 23 | LEPI = 100 # episode 24 | jobDuration= 30 25 | 26 | 27 | 28 | def other_job(env, repairman): 29 | while True: 30 | done_in = jobDuration 31 | while done_in: 32 | with repairman.request(priority=2) as req: 33 | yield req 34 | try: 35 | start = env.now 36 | yield env.timeout(done_in) 37 | done_in = 0 38 | except simpy.Interrupt: 39 | done_in -= env.now - start 40 | 41 | 42 | 43 | class OFFLOAD(object): 44 | def __init__(self): 45 | self.name = name 46 | self.action_space = [str(i) for i in range(2)] 47 | self.n_actions = userNum # 0-local,1-offload 48 | self.n_features = 7 # system state - getstate 49 | self.RL = DuelingDQN(self.n_actions, self.n_features, 50 | learning_rate=0.03, 51 | reward_decay=0.4, 52 | e_greedy=0.9, # exploration 53 | replace_target_iter=200, 54 | memory_size=20000, 55 | # output_graph=True 56 | ) 57 | self.done = True 58 | self.stepcount = 0 59 | 60 | def reset(self): 61 | self.done = True 62 | self.stepcount = 0 63 | 64 | def printLost(self): 65 | self.RL.plot_lost(self.name, self.n_actions) 66 | 67 | def refreshstep(self, mec_, env_): 68 | while True: 69 | yield env_.timeout(mec_.TIMER) 70 | mec_.sysTime = env_.now 71 | jobpool = [] 72 | for Jr in mec_.jobPool: 73 | userID = Jr[0] 74 | jobID = Jr[1] 75 | onejob = mec_.ul.userList[userID].jobList[jobID] 76 | 77 | if onejob.jobRunLeft > mec_.TIMER: 78 | jobpool.append((userID, jobID)) 79 | mec_.ul.userList[userID].jobList[jobID].jobRunLeft = mec_.ul.userList[userID].jobList[ 80 | jobID].jobRunLeft - mec_.TIMER 81 | else: 82 | mec_.SYS_CPU -= (mec_.ul.userList[userID].jobCPU / mec_.RHO) 83 | mec_.ul.userList[userID].jobrefresh(env_, mec_.ul.userList[userID].jobList[jobID]) 84 | mec_.offloadJob.append(mec_.ul.userList[userID].jobList[jobID]) 85 | 86 | mec_.ul.userList[userID].jobList[jobID].jobAge = env_.now - mec_.ul.userList[userID].jobList[ 87 | jobID].jobAge 88 | mec_.Age += mec_.ul.userList[userID].jobList[jobID].jobAge 89 | mec_.Run += mec_.ul.userList[userID].jobList[jobID].jobRun 90 | mec_.commTime += mec_.ul.userList[userID].jobList[jobID].jobTT 91 | mec_.Throughout += 1 92 | 93 | failrate = mec_.Failure / mec_.Throughout 94 | 95 | score = mec_.ul.userList[userID].jobList[jobID].jobRun / mec_.ul.userList[userID].jobList[ 96 | jobID].jobCEnergy 97 | 98 | if (mec_.ul.userList[userID].jobList[jobID].jobAge > mec_.ul.userList[userID].jobList[ 99 | jobID].jobRun): 100 | mec_.SCORE = -abs(score) * (1 - failrate) 101 | mec_.ul.userList[userID].jobList[jobID].jobState = 'FL' 102 | mec_.Failure += 1 103 | else: 104 | mec_.SCORE = score * (1 - failrate) 105 | mec_.ul.userList[userID].jobList[jobID].jobState = 'CP' 106 | mec_.REWARD += mec_.SCORE 107 | 108 | mec_.priorityList[userID] = mec_.ACTION 109 | mec_.ul.userList[userID].userPriority[mec_.ID] = mec_.ACTION 110 | 111 | 112 | mec_.jobPool = jobpool 113 | 114 | def step(self, mec_, env_): 115 | counter = 0 116 | while True: 117 | counter += 1 118 | yield env_.timeout(mec_.TIMER) 119 | 120 | if (mec_.CHANNEL - mec_.channelUsed <= 1) or (mec_.sysCPU > 0.9): 121 | mec_.SCORE = -abs(mec_.SCORE) 122 | yield env_.timeout(mec_.TIMER * mec_.Delta) 123 | continue 124 | else: 125 | observation = mec_.getstate() 126 | mec_.ACTION = self.RL.choose_action(observation) 127 | if (counter < userNum * 5) or (counter % 10 == 0): 128 | pkey = random.sample([i for i in range(userNum)], k=mec_.ACTION) 129 | else: 130 | plist = sorted(mec_.priorityList.items(), key=lambda i: i[1], reverse=True) 131 | pkey = [plist[i][0] for i in range(len(plist))][:mec_.ACTION] 132 | for i in range(len(pkey)): 133 | userID = pkey[i] 134 | mec_.offloadOne(env_, userID) 135 | observation_ = mec_.getstate() 136 | reward = mec_.SCORE 137 | 138 | self.RL.store_transition(observation, mec_.ACTION, reward, observation_) 139 | if (self.stepcount > 40) and (self.stepcount % 4 == 0): 140 | self.RL.learn() 141 | observation = observation_ 142 | self.stepcount += 1 143 | 144 | def update(self, ql,RDSEED, uLng, uLat, sLng, sLat, 145 | rList): 146 | self.reset() 147 | for episode in range(LEPI): 148 | self.reset() 149 | print("episode %d step count %d" % (episode, self.stepcount)) 150 | random.seed(RDSEED) 151 | ul = sysModel.UL() 152 | 153 | for i in range(ul.userNum): 154 | user = sysModel.User(i) 155 | user.usersetting(uLng[i], uLat[i]) 156 | user.usercreat() 157 | ul.userList.append(user) 158 | 159 | mec_l = sysModel.MEC_L() 160 | rho = 2 161 | for j in range(mec_l.mecNum): 162 | mec = sysModel.MEC(j, ul) 163 | mec.setMEC(sLng[j], sLat[j], rho + j * 2, 50, rList[j]) 164 | mec_l.mecList.append(mec) 165 | 166 | env = simpy.Environment() 167 | repairman = simpy.PreemptiveResource(env, capacity=1) 168 | 169 | env.process(ul.mobile(env, mec_l)) # user mobile 170 | 171 | edgeservers = [sysModel.SIMRUN(env, i, ql,repairman) 172 | for i in mec_l.mecList] 173 | env.process(other_job(env,repairman)) 174 | env.run(until=simTime) 175 | self.reset() 176 | 177 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is the code for unpublished papers. Note:(The title of the paper will be attached afterwards) 2 | # Installation 3 | _____ 4 | - Python 3.8 5 | - SimPy, You can install SimPy easily via pip _: 6 | ```sh 7 | $ pip install -U simpy 8 | ``` 9 | - tensoflow 1 version 10 | 11 | # launch 12 | ____ 13 | The startup program simply runs the main function directly, then adjusts the number of edge servers and users in the participating environment by changing the global variable parameters,such as simulation time `simeTime`, the processing speed of edge server `rho`, Edge server cache pool `buffer`, the cache pool indicates that the server reads unloaded tasks from the queue pool. The implement of offloading algorithm by changing different `name` in Offloading_Strategy.py file. 14 | The simulation has two parts, one is `Simulation_NONRL` without reinforcement learning, and the other is `Simulation_RL` with reinforcement learning.The fault module uses SimPy discrete event simulation to represent the interruption of the edge server. When the server resources fail instantaneously, an interval of event recovery occurs. After recovery, priority is given to the tasks performed before the interruption. 15 | 16 | # Code structure 17 | ______ 18 | - `./dataset` :contains edgeResources-melbCBD.csv and users-melbdbd-generated.csv files from [EUA datasets](https://github.com/PhuLai/eua-dataset). 19 | - `./results`: Dueling DQN algorithm results 20 | - `./userName`: Recording the results of different reinforcement learning algorithms on different edge servers with different users 21 | - `./usermove`: Recording the latitude and longitude of random movements of users 22 | - `Offloading_Strategy.py`: repsents the offloading strategy of user 23 | - `RL_DDQN.py`:represents the Double Deep-Q Network algorithm 24 | - `RL_DQN.py`:represents the Deep Q network alogrithm 25 | - `RL_Dueling DQN.py`: represents the Dueling Deep Q network algorithm 26 | - `RL_PRDQN.py`: represents the Deep Q network with the priority experience replay 27 | - `main.py`: task offloading main function with fault tolerance 28 | - `sysMpdel.py`:Includes task generation, user movement, edge server resources, edge server fault recovery. 29 | -------------------------------------------------------------------------------- /RL_DDQN.py: -------------------------------------------------------------------------------- 1 | """ 2 | The double DQN 3 | Using Tensorflow: 1.0 4 | """ 5 | 6 | import numpy as np 7 | import tensorflow.compat.v1 as tf 8 | tf.disable_v2_behavior() 9 | import matplotlib.pyplot as plt 10 | import pandas as pd 11 | np.random.seed(15) 12 | 13 | class DDQN: 14 | def __init__( 15 | self, 16 | n_actions, 17 | n_features, 18 | learning_rate=0.005, 19 | reward_decay=0.9, 20 | e_greedy=0.9, 21 | replace_target_iter=200, 22 | memory_size=3000, 23 | batch_size=32, 24 | e_greedy_increment=None, 25 | output_graph=False, 26 | double_q=True, 27 | sess=None, 28 | ): 29 | self.n_actions = n_actions 30 | self.n_features = n_features 31 | self.lr = learning_rate 32 | self.gamma = reward_decay 33 | self.epsilon_max = e_greedy 34 | self.replace_target_iter = replace_target_iter 35 | self.memory_size = memory_size 36 | self.batch_size = batch_size 37 | self.epsilon_increment = e_greedy_increment 38 | self.epsilon = 0 if e_greedy_increment is not None else self.epsilon_max 39 | 40 | self.double_q = double_q # decide to use double q or not 41 | 42 | self.learn_step_counter = 0 43 | self.memory = np.zeros((self.memory_size, n_features*2+2)) 44 | self._build_net() 45 | e_params = tf.get_collection('eval_net_params') 46 | t_params = tf.get_collection('target_net_params') 47 | self.replace_target_op = [tf.assign(t, e) for t, e in zip(t_params, e_params)] 48 | 49 | if sess is None: 50 | self.sess = tf.Session() 51 | self.sess.run(tf.global_variables_initializer()) 52 | else: 53 | self.sess = sess 54 | if output_graph: 55 | tf.summary.FileWriter("logs/", self.sess.graph) 56 | self.loss_his = [] 57 | 58 | def _build_net(self): 59 | def build_layers(s, c_names, n_l1, n_l2, w_initializer, b_initializer): 60 | with tf.variable_scope('l1'): 61 | w1 = tf.get_variable('w1', [self.n_features, n_l1], initializer=w_initializer, collections=c_names) 62 | b1 = tf.get_variable('b1', [1, n_l1], initializer=b_initializer, collections=c_names) 63 | l1 = tf.nn.relu(tf.matmul(s, w1) + b1) 64 | with tf.variable_scope('h1'): 65 | wh1 = tf.get_variable('wh1', [n_l1, 100], initializer=w_initializer, collections=c_names) 66 | bh1 = tf.get_variable('bh1', [1, 100], initializer=b_initializer, collections=c_names) 67 | lh1 = tf.nn.relu(tf.matmul(l1, wh1) + bh1) 68 | 69 | with tf.variable_scope('h2'): 70 | wh2 = tf.get_variable('wh2', [100, n_l2], initializer=w_initializer, collections=c_names) 71 | bh2 = tf.get_variable('bh2', [1, n_l2], initializer=b_initializer, collections=c_names) 72 | lh2 = tf.nn.relu(tf.matmul(lh1, wh2) + bh2) 73 | 74 | with tf.variable_scope('l2'): 75 | w2 = tf.get_variable('w2', [n_l2, self.n_actions], initializer=w_initializer, collections=c_names) 76 | b2 = tf.get_variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names) 77 | out = tf.matmul(lh2, w2) + b2 78 | return out 79 | 80 | # ------------------ build evaluate_net ------------------ 81 | self.s = tf.placeholder(tf.float32, [None, self.n_features], name='s') # input 82 | self.q_target = tf.placeholder(tf.float32, [None, self.n_actions], name='Q_target') # for calculating loss 83 | 84 | with tf.variable_scope('eval_net'): 85 | c_names, n_l1, n_l2, w_initializer, b_initializer = \ 86 | ['eval_net_params', tf.GraphKeys.GLOBAL_VARIABLES], 20,20, \ 87 | tf.random_normal_initializer(0., 0.3), tf.constant_initializer(0.1) # config of layers 88 | 89 | self.q_eval = build_layers(self.s, c_names, n_l1, n_l2, w_initializer, b_initializer) 90 | 91 | with tf.variable_scope('loss'): 92 | self.loss = tf.reduce_mean(tf.squared_difference(self.q_target, self.q_eval)) 93 | with tf.variable_scope('train'): 94 | self._train_op = tf.train.AdamOptimizer(self.lr).minimize(self.loss) 95 | 96 | # ------------------ build target_net ------------------ 97 | self.s_ = tf.placeholder(tf.float32, [None, self.n_features], name='s_') # input 98 | with tf.variable_scope('target_net'): 99 | c_names = ['target_net_params', tf.GraphKeys.GLOBAL_VARIABLES] 100 | 101 | self.q_next = build_layers(self.s_, c_names, n_l1, n_l2, w_initializer, b_initializer) 102 | 103 | def store_transition(self, s, a, r, s_): 104 | if not hasattr(self, 'memory_counter'): 105 | self.memory_counter = 0 106 | transition = np.hstack((s, [a, r], s_)) 107 | index = self.memory_counter % self.memory_size 108 | self.memory[index, :] = transition 109 | self.memory_counter += 1 110 | 111 | def choose_action(self, observation): 112 | observation = observation[np.newaxis, :] 113 | actions_value = self.sess.run(self.q_eval, feed_dict={self.s: observation}) 114 | action = np.argmax(actions_value) 115 | 116 | if not hasattr(self, 'q'): # record action value it gets 117 | self.q = [] 118 | self.running_q = 0 119 | self.running_q = self.running_q * 0.99 + 0.01 * np.max(actions_value) 120 | self.q.append(self.running_q) 121 | 122 | if np.random.uniform() > self.epsilon: # choosing action 123 | action = np.random.randint(0, self.n_actions) 124 | return action 125 | 126 | def learn(self): 127 | if self.learn_step_counter % self.replace_target_iter == 0: 128 | self.sess.run(self.replace_target_op) 129 | print('\ntarget_params_replaced\n') 130 | 131 | if self.memory_counter > self.memory_size: 132 | sample_index = np.random.choice(self.memory_size, size=self.batch_size) 133 | else: 134 | sample_index = np.random.choice(self.memory_counter, size=self.batch_size) 135 | batch_memory = self.memory[sample_index, :] 136 | 137 | q_next, q_eval4next = self.sess.run( 138 | [self.q_next, self.q_eval], 139 | feed_dict={self.s_: batch_memory[:, -self.n_features:], # next observation 140 | self.s: batch_memory[:, -self.n_features:]}) # next observation 141 | q_eval = self.sess.run(self.q_eval, {self.s: batch_memory[:, :self.n_features]}) 142 | 143 | q_target = q_eval.copy() 144 | 145 | batch_index = np.arange(self.batch_size, dtype=np.int32) 146 | eval_act_index = batch_memory[:, self.n_features].astype(int) 147 | reward = batch_memory[:, self.n_features + 1] 148 | 149 | if self.double_q: 150 | max_act4next = np.argmax(q_eval4next, 151 | axis=1) # the action that brings the highest value is evaluated by q_eval 152 | selected_q_next = q_next[batch_index, max_act4next] # Double DQN, select q_next depending on above actions 153 | else: 154 | selected_q_next = np.max(q_next, axis=1) # the natural DQN 155 | 156 | q_target[batch_index, eval_act_index] = reward + self.gamma * selected_q_next 157 | 158 | _, self.loss_ = self.sess.run([self._train_op, self.loss], 159 | feed_dict={self.s: batch_memory[:, :self.n_features], 160 | self.q_target: q_target}) 161 | self.loss_his.append(self.loss_) 162 | 163 | self.epsilon = self.epsilon + self.epsilon_increment if self.epsilon < self.epsilon_max else self.epsilon_max 164 | self.learn_step_counter += 1 165 | 166 | # 在这里设置输出的文件 167 | def plot_lost(self, name='DDQN', userNum='5'): 168 | data = pd.DataFrame(self.loss_his, 169 | index=np.arange(len(self.loss_his)), 170 | columns=['loss']) 171 | data.to_csv('./results/' + 172 | '_' + name + str(userNum) + '.csv') 173 | 174 | plt.plot(np.arange(len(self.loss_his)), self.loss_his) 175 | plt.ylabel('Loss') 176 | plt.xlabel('training steps') 177 | plt.savefig('./results/' + 178 | name + str(userNum) + 'loss.svg', format='svg', dpi=400) 179 | plt.savefig('./results/' + 180 | name + str(userNum) + 'loss.png', format='png', dpi=400) 181 | plt.show() -------------------------------------------------------------------------------- /RL_DQN.py: -------------------------------------------------------------------------------- 1 | """ 2 | Deep Q Network offloading strategy 3 | running environment is Tensorfow 1.0 4 | """ 5 | import numpy as np 6 | import tensorflow.compat.v1 as tf 7 | tf.disable_v2_behavior() 8 | import matplotlib.pyplot as plt 9 | import pandas as pd 10 | 11 | np.random.seed(15) 12 | 13 | class DQN: 14 | def __init__( 15 | self, 16 | n_actions, 17 | n_features, 18 | learning_rate=0.01, 19 | reward_decay=0.9, 20 | e_greedy=0.9, 21 | replace_target_iter=100, 22 | memory_size=500, 23 | batch_size=32, 24 | e_greedy_increment=None, 25 | output_graph=False, 26 | ): 27 | self.n_actions = n_actions 28 | self.n_features = n_features 29 | self.lr = learning_rate 30 | self.gamma = reward_decay 31 | self.epsilon_max = e_greedy 32 | self.replace_target_iter = replace_target_iter 33 | self.memory_size = memory_size 34 | self.batch_size = batch_size 35 | self.epsilon_increment = e_greedy_increment 36 | self.epsilon = 0 if e_greedy_increment is not None else self.epsilon_max 37 | 38 | # total learning step 39 | self.learn_step_counter = 0 40 | 41 | # initialize zero memory [s, a, r, s_] 42 | self.memory = np.zeros((self.memory_size, n_features * 2 + 2)) 43 | 44 | # consist of [target_net, evaluate_net] 45 | self._build_net() 46 | e_params = tf.get_collection('eval_net_params') 47 | t_params = tf.get_collection('target_net_params') 48 | 49 | # Parameter substitution 50 | self.replace_target_op = [tf.assign(t, e) for t, e in zip(t_params, e_params)] 51 | 52 | self.sess = tf.Session() 53 | 54 | if output_graph: 55 | tf.summary.FileWriter("logs/", self.sess.graph) 56 | 57 | self.sess.run(tf.global_variables_initializer()) 58 | self.loss_his = [] # historical loss value 59 | 60 | def _build_net(self): 61 | # ------------------ build evaluate_net ------------------ 62 | self.s = tf.placeholder(tf.float32, [None, self.n_features], name='s') # input 63 | self.q_target = tf.placeholder(tf.float32, [None, self.n_actions], name='Q_target') # for calculating loss 64 | with tf.variable_scope('eval_net'): 65 | # c_names(collections_names) are the collections to store variables 66 | c_names, n_l1, n_l2, w_initializer, b_initializer = \ 67 | ['eval_net_params', tf.GraphKeys.GLOBAL_VARIABLES], 20, 20, \ 68 | tf.random_normal_initializer(0., 0.3), tf.constant_initializer(0.1) # config of layers 69 | 70 | # first layer. collections is used later when assign to target net 71 | with tf.variable_scope('l1'): 72 | w1 = tf.get_variable('w1', [self.n_features, n_l1], initializer=w_initializer, collections=c_names) 73 | b1 = tf.get_variable('b1', [1, n_l1], initializer=b_initializer, collections=c_names) 74 | l1 = tf.nn.relu(tf.matmul(self.s, w1) + b1) 75 | 76 | # hidden layer1. collections is used later when assign to target net 77 | with tf.variable_scope('lm1'): 78 | wm1 = tf.get_variable('wm1', [n_l1, 100], initializer=w_initializer, collections=c_names) 79 | bm1 = tf.get_variable('bm1', [1, 100], initializer=b_initializer, collections=c_names) 80 | lm1 = tf.nn.relu(tf.matmul(l1, wm1) + bm1) 81 | 82 | # hidden layer2. collections is used later when assign to target net 83 | with tf.variable_scope('lm2'): 84 | wm2 = tf.get_variable('wm2', [100, n_l2], initializer=w_initializer, collections=c_names) 85 | bm2 = tf.get_variable('bm2', [1, n_l2], initializer=b_initializer, collections=c_names) 86 | lm2 = tf.nn.relu(tf.matmul(lm1, wm2) + bm2) 87 | 88 | # final layer. collections is used later when assign to target net 89 | with tf.variable_scope('l2'): 90 | w2 = tf.get_variable('w2', [n_l2, self.n_actions], initializer=w_initializer, collections=c_names) 91 | b2 = tf.get_variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names) 92 | self.q_eval = tf.matmul(lm2, w2) + b2 93 | 94 | with tf.variable_scope('loss'): 95 | self.loss = tf.reduce_mean(tf.squared_difference(self.q_target, self.q_eval)) 96 | with tf.variable_scope('train'): 97 | self._train_op = tf.train.AdamOptimizer(self.lr).minimize(self.loss) 98 | 99 | # ------------------ build target_net ------------------ 100 | self.s_ = tf.placeholder(tf.float32, [None, self.n_features], name='s_') # input 101 | with tf.variable_scope('target_net'): 102 | # c_names(collections_names) are the collections to store variables 103 | c_names = ['target_net_params', tf.GraphKeys.GLOBAL_VARIABLES] 104 | 105 | # first layer. collections is used later when assign to target net 106 | with tf.variable_scope('l1'): 107 | w1 = tf.get_variable('w1', [self.n_features, n_l1], initializer=w_initializer, collections=c_names) 108 | b1 = tf.get_variable('b1', [1, n_l1], initializer=b_initializer, collections=c_names) 109 | l1 = tf.nn.relu(tf.matmul(self.s_, w1) + b1) 110 | 111 | # hidden layer1. collections is used later when assign to target net 112 | with tf.variable_scope('lm1'): 113 | wm1 = tf.get_variable('wm1', [n_l1, 100], initializer=w_initializer, collections=c_names) 114 | bm1 = tf.get_variable('bm1', [1, 100], initializer=b_initializer, collections=c_names) 115 | lm1 = tf.nn.relu(tf.matmul(l1, wm1) + bm1) 116 | 117 | # hidden layer2. collections is used later when assign to target net 118 | with tf.variable_scope('lm2'): 119 | wm2 = tf.get_variable('wm2', [100, n_l2], initializer=w_initializer, collections=c_names) 120 | bm2 = tf.get_variable('bm2', [1, n_l2], initializer=b_initializer, collections=c_names) 121 | lm2 = tf.nn.relu(tf.matmul(lm1, wm2) + bm2) 122 | 123 | # final layer. collections is used later when assign to target net 124 | with tf.variable_scope('l2'): 125 | w2 = tf.get_variable('w2', [n_l1, self.n_actions], initializer=w_initializer, collections=c_names) 126 | b2 = tf.get_variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names) 127 | self.q_next = tf.matmul(lm2, w2) + b2 128 | 129 | def store_transition(self, s, a, r, s_): 130 | if not hasattr(self, 'memory_counter'): 131 | self.memory_counter = 0 132 | 133 | transition = np.hstack((s, [a, r], s_)) 134 | 135 | # replace the old memory with new memory 136 | index = self.memory_counter % self.memory_size 137 | self.memory[index, :] = transition 138 | 139 | self.memory_counter += 1 140 | 141 | def choose_action(self, observation): 142 | # to have batch dimension when feed into tf placeholder 143 | observation = observation[np.newaxis, :] 144 | 145 | if np.random.uniform() < self.epsilon: 146 | # forward feed the observation and get q value for every actions 147 | actions_value = self.sess.run(self.q_eval, feed_dict={self.s: observation}) 148 | action = np.argmax(actions_value) 149 | else: 150 | action = np.random.randint(0, self.n_actions) 151 | return action 152 | 153 | def learn(self): 154 | # check to replace target parameters 155 | if self.learn_step_counter % self.replace_target_iter == 0: 156 | self.sess.run(self.replace_target_op) 157 | print('\ntarget_params_replaced\n') 158 | 159 | # sample batch memory from all memory 160 | if self.memory_counter > self.memory_size: 161 | sample_index = np.random.choice(self.memory_size, size=self.batch_size) 162 | else: 163 | sample_index = np.random.choice(self.memory_counter, size=self.batch_size) 164 | batch_memory = self.memory[sample_index, :] 165 | 166 | q_next, q_eval = self.sess.run( 167 | [self.q_next, self.q_eval], 168 | feed_dict={ 169 | self.s_: batch_memory[:, -self.n_features:], # fixed params 170 | self.s: batch_memory[:, :self.n_features], # newest params 171 | }) 172 | 173 | # change q_target w.r.t q_eval's action 174 | q_target = q_eval.copy() 175 | 176 | batch_index = np.arange(self.batch_size, dtype=np.int32) 177 | eval_act_index = batch_memory[:, self.n_features].astype(int) 178 | reward = batch_memory[:, self.n_features + 1] 179 | 180 | q_target[batch_index, eval_act_index] = reward + self.gamma * np.max(q_next, axis=1) 181 | 182 | _, self.loss_ = self.sess.run([self._train_op, self.loss], 183 | feed_dict={self.s: batch_memory[:, :self.n_features], 184 | self.q_target: q_target}) 185 | self.loss_his.append(self.loss_) 186 | 187 | # increasing epsilon 188 | self.epsilon = self.epsilon + self.epsilon_increment if self.epsilon < self.epsilon_max else self.epsilon_max 189 | self.learn_step_counter += 1 190 | 191 | def plot_lost(self, name='DQN', userNum='5'): 192 | data = pd.DataFrame(self.loss_his, 193 | index=np.arange(len(self.loss_his)), 194 | columns=['loss']) 195 | data.to_csv('./results/' + 196 | '_' + name + str(userNum) + '.csv') 197 | 198 | plt.plot(np.arange(len(self.loss_his)), self.loss_his) 199 | plt.ylabel('Loss') 200 | plt.xlabel('training steps') 201 | plt.savefig('./results/' + 202 | name + str(userNum) + 'loss.svg', format='svg', dpi=400) 203 | plt.savefig('./results/' + 204 | name + str(userNum) + 'loss.png', format='png', dpi=400) 205 | plt.show() 206 | -------------------------------------------------------------------------------- /RL_DuelingDQN.py: -------------------------------------------------------------------------------- 1 | """ 2 | The Dueling DQN 3 | """ 4 | 5 | import numpy as np 6 | import pandas as pd 7 | import matplotlib.pyplot as plt 8 | import tensorflow.compat.v1 as tf 9 | tf.disable_v2_behavior() 10 | 11 | np.random.seed(15) 12 | # tf.set_random_seed(1) 13 | 14 | 15 | class DuelingDQN: 16 | def __init__( 17 | self, 18 | n_actions, 19 | n_features, 20 | learning_rate=0.1, # initial value =0.001 21 | reward_decay=0.9, 22 | e_greedy=0.9, 23 | replace_target_iter=200, 24 | memory_size=500, 25 | batch_size=32, 26 | e_greedy_increment=None, 27 | output_graph=False, 28 | dueling=True, 29 | sess=None, 30 | ): 31 | self.n_actions = n_actions 32 | self.n_features = n_features 33 | self.lr = learning_rate 34 | self.gamma = reward_decay 35 | self.epsilon_max = e_greedy 36 | self.replace_target_iter = replace_target_iter 37 | self.memory_size = memory_size 38 | self.batch_size = batch_size 39 | self.epsilon_increment = e_greedy_increment 40 | self.epsilon = 0 if e_greedy_increment is not None else self.epsilon_max 41 | 42 | self.dueling = dueling # whether to use dueling DQN 43 | 44 | self.learn_step_counter = 0 45 | self.memory = np.zeros((self.memory_size, n_features * 2 + 2)) 46 | self._build_net() 47 | e_params = tf.get_collection('eval_net_params') 48 | t_params = tf.get_collection('target_net_params') 49 | self.replace_target_op = [tf.assign(t, e) for t, e in zip(t_params, e_params)] 50 | 51 | if sess is None: 52 | self.sess = tf.Session() 53 | self.sess.run(tf.global_variables_initializer()) 54 | else: 55 | self.sess = sess 56 | if output_graph: 57 | tf.summary.FileWriter("logs/", self.sess.graph) 58 | self.loss_his = [] 59 | 60 | 61 | def _build_net(self): 62 | def build_layers(s, c_names, n_l1, n_l2,w_initializer, b_initializer): 63 | with tf.variable_scope('l1'): 64 | w1 = tf.get_variable('w1', [self.n_features, n_l1], initializer=w_initializer, collections=c_names) 65 | b1 = tf.get_variable('b1', [1, n_l1], initializer=b_initializer, collections=c_names) 66 | l1 = tf.nn.relu(tf.matmul(s, w1) + b1) 67 | with tf.variable_scope('h1'): 68 | wh1 = tf.get_variable('wh1', [n_l1, 100], initializer=w_initializer, collections=c_names) 69 | bh1 = tf.get_variable('bh1', [1, 100], initializer=b_initializer, collections=c_names) 70 | lh1 = tf.nn.relu(tf.matmul(l1, wh1) + bh1) 71 | with tf.variable_scope('h2'): 72 | wh2 = tf.get_variable('wh2', [100, n_l2], initializer=w_initializer, collections=c_names) 73 | bh2 = tf.get_variable('bh2', [1, n_l2], initializer=b_initializer, collections=c_names) 74 | lh2 = tf.nn.relu(tf.matmul(lh1, wh2) + bh2) 75 | 76 | if self.dueling: 77 | # Dueling DQN 78 | with tf.variable_scope('Value'): 79 | w2 = tf.get_variable('w2', [n_l2, 1], initializer=w_initializer, collections=c_names) 80 | b2 = tf.get_variable('b2', [1, 1], initializer=b_initializer, collections=c_names) 81 | self.V = tf.matmul(lh2, w2) + b2 82 | 83 | with tf.variable_scope('Advantage'): 84 | w2 = tf.get_variable('w2', [n_l2, self.n_actions], initializer=w_initializer, collections=c_names) 85 | b2 = tf.get_variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names) 86 | self.A = tf.matmul(lh2, w2) + b2 87 | 88 | with tf.variable_scope('Q'): 89 | out = self.V + (self.A - tf.reduce_mean(self.A, axis=1, keep_dims=True)) # Q = V(s) + A(s,a) 90 | else: 91 | with tf.variable_scope('Q'): 92 | w2 = tf.get_variable('w2', [n_l2, self.n_actions], initializer=w_initializer, collections=c_names) 93 | b2 = tf.get_variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names) 94 | out = tf.matmul(lh2, w2) + b2 95 | 96 | return out 97 | 98 | # ------------------ build evaluate_net ------------------ 99 | self.s = tf.placeholder(tf.float32, [None, self.n_features], name='s') # input 100 | self.q_target = tf.placeholder(tf.float32, [None, self.n_actions], name='Q_target') # for calculating loss 101 | with tf.variable_scope('eval_net'): 102 | c_names, n_l1, n_l2, w_initializer, b_initializer = \ 103 | ['eval_net_params', tf.GraphKeys.GLOBAL_VARIABLES], 20, 20, \ 104 | tf.random_normal_initializer(0., 0.3), tf.constant_initializer(0.1) # config of layers 105 | 106 | self.q_eval = build_layers(self.s, c_names, n_l1, n_l2, w_initializer, b_initializer) 107 | 108 | with tf.variable_scope('loss'): 109 | self.loss = tf.reduce_mean(tf.squared_difference(self.q_target, self.q_eval)) 110 | with tf.variable_scope('train'): 111 | self._train_op = tf.train.AdamOptimizer(self.lr).minimize(self.loss) 112 | 113 | # ------------------ build target_net ------------------ 114 | self.s_ = tf.placeholder(tf.float32, [None, self.n_features], name='s_') # input 115 | with tf.variable_scope('target_net'): 116 | c_names = ['target_net_params', tf.GraphKeys.GLOBAL_VARIABLES] 117 | 118 | self.q_next = build_layers(self.s_, c_names, n_l1,n_l2, w_initializer, b_initializer) 119 | 120 | def store_transition(self, s, a, r, s_): 121 | if not hasattr(self, 'memory_counter'): 122 | self.memory_counter = 0 123 | transition = np.hstack((s, [a, r], s_)) 124 | index = self.memory_counter % self.memory_size 125 | self.memory[index, :] = transition 126 | self.memory_counter += 1 127 | 128 | def choose_action(self, observation): 129 | observation = observation[np.newaxis, :] 130 | if np.random.uniform() < self.epsilon: # choosing action 131 | actions_value = self.sess.run(self.q_eval, feed_dict={self.s: observation}) 132 | action = np.argmax(actions_value) 133 | else: 134 | action = np.random.randint(0, self.n_actions) 135 | return action 136 | 137 | def learn(self): 138 | if self.learn_step_counter % self.replace_target_iter == 0: 139 | self.sess.run(self.replace_target_op) 140 | print('\ntarget_params_replaced\n') 141 | 142 | sample_index = np.random.choice(self.memory_size, size=self.batch_size) 143 | batch_memory = self.memory[sample_index, :] 144 | 145 | q_next = self.sess.run(self.q_next, feed_dict={self.s_: batch_memory[:, -self.n_features:]}) # next observation 146 | q_eval = self.sess.run(self.q_eval, {self.s: batch_memory[:, :self.n_features]}) 147 | 148 | q_target = q_eval.copy() 149 | 150 | batch_index = np.arange(self.batch_size, dtype=np.int32) 151 | eval_act_index = batch_memory[:, self.n_features].astype(int) 152 | reward = batch_memory[:, self.n_features + 1] 153 | 154 | q_target[batch_index, eval_act_index] = reward + self.gamma * np.max(q_next, axis=1) 155 | 156 | self._, self.loss_ = self.sess.run([self._train_op, self.loss], 157 | feed_dict={self.s: batch_memory[:, :self.n_features], 158 | self.q_target: q_target}) 159 | 160 | self.loss_his.append(self.loss_) 161 | 162 | self.epsilon = self.epsilon + self.epsilon_increment if self.epsilon < self.epsilon_max else self.epsilon_max 163 | self.learn_step_counter += 1 164 | 165 | def plot_lost(self, name='DuelingDQN', userNum='5'): 166 | data = pd.DataFrame(self.loss_his, 167 | index=np.arange(len(self.loss_his)), 168 | columns=['loss']) 169 | data.to_csv('./results/' + 170 | '_' + name + str(userNum) + '.csv') 171 | 172 | plt.plot(np.arange(len(self.loss_his)), self.loss_his) 173 | plt.ylabel('loss') 174 | plt.xlabel('training steps') 175 | plt.savefig('./results/' + 176 | name + str(userNum) + 'loss.svg', format='svg', dpi=400) 177 | plt.savefig('./results/' + 178 | name + str(userNum) + 'loss.png', format='png', dpi=400) 179 | plt.show() 180 | 181 | 182 | 183 | 184 | 185 | -------------------------------------------------------------------------------- /RL_PRDQN.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import pandas as pd 3 | 4 | """ 5 | DQN with prioritized experience replay 6 | """ 7 | 8 | import numpy as np 9 | import matplotlib.pyplot as plt 10 | import pandas as pd 11 | import tensorflow.compat.v1 as tf 12 | tf.disable_v2_behavior() 13 | 14 | np.random.seed(15) 15 | 16 | 17 | # tf.set_random_seed(1) 18 | 19 | 20 | class SumTree(object): 21 | """ 22 | Describe the data with the priority in the tree 23 | """ 24 | data_pointer = 0 25 | 26 | def __init__(self, capacity): 27 | self.capacity = capacity # for all priority values 28 | self.tree = np.zeros(2 * capacity - 1) 29 | 30 | self.data = np.zeros(capacity, dtype=object) # for all transitions 31 | 32 | 33 | def add(self, p, data): 34 | tree_idx = self.data_pointer + self.capacity - 1 35 | self.data[self.data_pointer] = data # update data_frame 36 | self.update(tree_idx, p) # update tree_frame 37 | 38 | self.data_pointer += 1 39 | if self.data_pointer >= self.capacity: # replace when exceed the capacity 40 | self.data_pointer = 0 41 | 42 | def update(self, tree_idx, p): 43 | change = p - self.tree[tree_idx] 44 | self.tree[tree_idx] = p 45 | # then propagate the change through tree 46 | while tree_idx != 0: # this method is faster than the recursive loop in the reference code 47 | tree_idx = (tree_idx - 1) // 2 48 | self.tree[tree_idx] += change 49 | 50 | def get_leaf(self, v): 51 | parent_idx = 0 52 | while True: # the while loop is faster than the method in the reference code 53 | cl_idx = 2 * parent_idx + 1 # this leaf's left and right kids 54 | cr_idx = cl_idx + 1 55 | if cl_idx >= len(self.tree): # reach bottom, end search 56 | leaf_idx = parent_idx 57 | break 58 | else: # downward search, always search for a higher priority node 59 | if v <= self.tree[cl_idx]: 60 | parent_idx = cl_idx 61 | else: 62 | v -= self.tree[cl_idx] 63 | parent_idx = cr_idx 64 | 65 | data_idx = leaf_idx - self.capacity + 1 66 | return leaf_idx, self.tree[leaf_idx], self.data[data_idx] 67 | 68 | @property 69 | def total_p(self): 70 | return self.tree[0] # the root 71 | 72 | 73 | class Memory(object): # stored as ( s, a, r, s_ ) in SumTree 74 | """ 75 | https://github.com/jaara/AI-blog/blob/master/Seaquest-DDQN-PER.py 76 | """ 77 | epsilon = 0.01 # small amount to avoid zero priority 78 | alpha = 0.6 # [0~1] convert the importance of TD error to priority 79 | beta = 0.4 # importance-sampling, from initial value increasing to 1 80 | beta_increment_per_sampling = 0.001 81 | abs_err_upper = 1. # clipped abs error 82 | 83 | def __init__(self, capacity): 84 | self.tree = SumTree(capacity) 85 | 86 | def store(self, transition): 87 | max_p = np.max(self.tree.tree[-self.tree.capacity:]) 88 | if max_p == 0: 89 | max_p = self.abs_err_upper 90 | self.tree.add(max_p, transition) # set the max p for new p 91 | 92 | def sample(self, n): 93 | b_idx, b_memory, ISWeights = np.empty((n,), dtype=np.int32), np.empty((n, self.tree.data[0].size)), np.empty( 94 | (n, 1)) 95 | pri_seg = self.tree.total_p / n # priority segment 96 | self.beta = np.min([1., self.beta + self.beta_increment_per_sampling]) # max = 1 97 | 98 | min_prob = np.min(self.tree.tree[-self.tree.capacity:]) / self.tree.total_p # for later calculate ISweight 99 | for i in range(n): 100 | a, b = pri_seg * i, pri_seg * (i + 1) 101 | v = np.random.uniform(a, b) 102 | idx, p, data = self.tree.get_leaf(v) 103 | prob = p / self.tree.total_p 104 | if min_prob == 0: 105 | ISWeights[i, 0] = np.power(prob / 0.0001, -self.beta) 106 | else: 107 | ISWeights[i, 0] = np.power(prob / min_prob, -self.beta) 108 | b_idx[i], b_memory[i, :] = idx, data 109 | return b_idx, b_memory, ISWeights 110 | 111 | def batch_update(self, tree_idx, abs_errors): 112 | abs_errors += self.epsilon # convert to abs and avoid 0 113 | clipped_errors = np.minimum(abs_errors, self.abs_err_upper) 114 | ps = np.power(clipped_errors, self.alpha) 115 | for ti, p in zip(tree_idx, ps): 116 | self.tree.update(ti, p) 117 | 118 | 119 | class PRDQN(object): 120 | def __init__( 121 | self, 122 | n_actions, 123 | n_features, 124 | learning_rate=0.005, 125 | reward_decay=0.9, 126 | e_greedy=0.9, 127 | replace_target_iter=500, 128 | memory_size=10000, 129 | batch_size=32, 130 | e_greedy_increment=0.05, 131 | output_graph=False, 132 | prioritized=True, 133 | sess=None, 134 | ): 135 | self.n_actions = n_actions 136 | self.n_features = n_features 137 | self.lr = learning_rate 138 | self.gamma = reward_decay 139 | self.epsilon_max = e_greedy 140 | self.replace_target_iter = replace_target_iter 141 | self.memory_size = memory_size 142 | self.batch_size = batch_size 143 | self.epsilon_increment = e_greedy_increment 144 | self.epsilon = 0.1 if e_greedy_increment is not None else self.epsilon_max 145 | 146 | self.prioritized = True # decide to use double q or not 147 | 148 | self.learn_step_counter = 0 149 | 150 | self._build_net() 151 | e_params = tf.get_collection('eval_net_params') 152 | t_params = tf.get_collection('target_net_params') 153 | self.replace_target_op = [tf.assign(t, e) for t, e in zip(t_params, e_params)] 154 | 155 | if self.prioritized: 156 | self.memory = Memory(capacity=memory_size) 157 | else: 158 | self.memory = np.zeros((self.memory_size, n_features * 2 + 2)) 159 | 160 | if sess is None: 161 | self.sess = tf.Session() 162 | self.sess.run(tf.global_variables_initializer()) 163 | else: 164 | self.sess = sess 165 | 166 | if output_graph: 167 | tf.summary.FileWriter("logs/", self.sess.graph) 168 | 169 | self.loss_his = [] 170 | 171 | def _build_net(self): 172 | def build_layers(s, c_names, n_l1, n_l2, w_initializer, b_initializer, trainable): 173 | with tf.variable_scope('l1'): 174 | w1 = tf.get_variable('w1', [self.n_features, n_l1], initializer=w_initializer, collections=c_names, 175 | trainable=trainable) 176 | b1 = tf.get_variable('b1', [1, n_l1], initializer=b_initializer, collections=c_names, 177 | trainable=trainable) 178 | l1 = tf.nn.relu(tf.matmul(s, w1) + b1) 179 | with tf.variable_scope('h1'): 180 | wh1 = tf.get_variable('wh1', [n_l1, 100], initializer=w_initializer, collections=c_names) 181 | bh1 = tf.get_variable('bh1', [1, 100], initializer=b_initializer, collections=c_names) 182 | lh1 = tf.nn.relu(tf.matmul(l1, wh1) + bh1) 183 | 184 | with tf.variable_scope('h2'): 185 | wh2 = tf.get_variable('wh2', [100, n_l2], initializer=w_initializer, collections=c_names) 186 | bh2 = tf.get_variable('bh2', [1, n_l2], initializer=b_initializer, collections=c_names) 187 | lh2 = tf.nn.relu(tf.matmul(lh1, wh2) + bh2) 188 | 189 | with tf.variable_scope('l2'): 190 | w2 = tf.get_variable('w2', [n_l2, self.n_actions], initializer=w_initializer, collections=c_names) 191 | b2 = tf.get_variable('b2', [1, self.n_actions], initializer=b_initializer, collections=c_names) 192 | out = tf.matmul(lh2, w2) + b2 193 | return out 194 | 195 | # ------------------ build evaluate_net ------------------ 196 | self.s = tf.placeholder(tf.float32, [None, self.n_features], name='s') # input 197 | self.q_target = tf.placeholder(tf.float32, [None, self.n_actions], name='Q_target') # for calculating loss 198 | if self.prioritized: 199 | self.ISWeights = tf.placeholder(tf.float32, [None, 1], name='IS_weights') 200 | with tf.variable_scope('eval_net'): 201 | c_names, n_l1, n_l2, w_initializer, b_initializer = \ 202 | ['eval_net_params', tf.GraphKeys.GLOBAL_VARIABLES], 20, 20,\ 203 | tf.random_normal_initializer(0., 0.3), tf.constant_initializer(0.1) # config of layers 204 | 205 | self.q_eval = build_layers(self.s, c_names, n_l1,n_l2, w_initializer, b_initializer, True) 206 | 207 | with tf.variable_scope('loss'): 208 | if self.prioritized: 209 | self.abs_errors = tf.reduce_sum(tf.abs(self.q_target - self.q_eval), axis=1) # for updating Sumtree 210 | self.loss = tf.reduce_mean(self.ISWeights * tf.squared_difference(self.q_target, self.q_eval)) 211 | else: 212 | self.loss = tf.reduce_mean(tf.squared_difference(self.q_target, self.q_eval)) 213 | with tf.variable_scope('train'): 214 | self._train_op = tf.train.AdamOptimizer(self.lr).minimize(self.loss) 215 | 216 | # ------------------ build target_net ------------------ 217 | self.s_ = tf.placeholder(tf.float32, [None, self.n_features], name='s_') # input 218 | with tf.variable_scope('target_net'): 219 | c_names = ['target_net_params', tf.GraphKeys.GLOBAL_VARIABLES] 220 | self.q_next = build_layers(self.s_, c_names, n_l1,n_l2, w_initializer, b_initializer, False) 221 | 222 | def store_transition(self, s, a, r, s_): 223 | if self.prioritized: # prioritized replay 224 | transition = np.hstack((s, [a, r], s_)) 225 | self.memory.store(transition) # have high priority for newly arrived transition 226 | else: # random replay 227 | if not hasattr(self, 'memory_counter'): 228 | self.memory_counter = 0 229 | transition = np.hstack((s, [a, r], s_)) 230 | index = self.memory_counter % self.memory_size 231 | self.memory[index, :] = transition 232 | self.memory_counter += 1 233 | 234 | def choose_action(self, observation): 235 | observation = observation[np.newaxis, :] 236 | if np.random.uniform() < self.epsilon: 237 | 238 | actions_value = self.sess.run(self.q_eval, feed_dict={self.s: observation}) 239 | action = np.argmax(actions_value) 240 | else: 241 | action = np.random.randint(0, self.n_actions) 242 | return action 243 | 244 | def learn(self): 245 | if self.learn_step_counter % self.replace_target_iter == 0: 246 | self.sess.run(self.replace_target_op) 247 | print('\ntarget_params_replaced\n') 248 | 249 | if self.prioritized: 250 | tree_idx, batch_memory, ISWeights = self.memory.sample(self.batch_size) 251 | else: 252 | sample_index = np.random.choice(self.memory_size, size=self.batch_size) 253 | batch_memory = self.memory[sample_index, :] 254 | 255 | q_next, q_eval = self.sess.run( 256 | [self.q_next, self.q_eval], 257 | feed_dict={self.s_: batch_memory[:, -self.n_features:], 258 | self.s: batch_memory[:, :self.n_features]}) 259 | 260 | q_target = q_eval.copy() 261 | batch_index = np.arange(self.batch_size, dtype=np.int32) 262 | eval_act_index = batch_memory[:, self.n_features].astype(int) 263 | reward = batch_memory[:, self.n_features + 1] 264 | 265 | q_target[batch_index, eval_act_index] = reward + self.gamma * np.max(q_next, axis=1) 266 | 267 | if self.prioritized: 268 | _, abs_errors, self.loss_ = self.sess.run([self._train_op, self.abs_errors, self.loss], 269 | feed_dict={self.s: batch_memory[:, :self.n_features], 270 | self.q_target: q_target, 271 | self.ISWeights: ISWeights}) 272 | self.memory.batch_update(tree_idx, abs_errors) # update priority 273 | else: 274 | _, self.loss_ = self.sess.run([self._train_op, self.loss], 275 | feed_dict={self.s: batch_memory[:, :self.n_features], 276 | self.q_target: q_target}) 277 | 278 | self.loss_his.append(self.loss_) 279 | 280 | self.epsilon = self.epsilon + self.epsilon_increment if self.epsilon < self.epsilon_max else self.epsilon_max 281 | self.learn_step_counter += 1 282 | 283 | def plot_lost(self, name='PRDQN', userNum='5'): 284 | data = pd.DataFrame(self.loss_his, 285 | index=np.arange(len(self.loss_his)), 286 | columns=['loss']) 287 | data.to_csv('./results/' + 288 | '_' + name + str(userNum) + '.csv') 289 | 290 | plt.plot(np.arange(len(self.loss_his)), self.loss_his) 291 | plt.ylabel('loss') 292 | plt.xlabel('training steps') 293 | plt.savefig('./results/' + 294 | name + str(userNum) + 'loss.svg', format='svg', dpi=400) 295 | plt.savefig('./results/' + 296 | name + str(userNum) + 'loss.png', format='png', dpi=400) 297 | plt.show() 298 | 299 | 300 | 301 | -------------------------------------------------------------------------------- /dataset/edgeResources-melbCBD.csv: -------------------------------------------------------------------------------- 1 | ID,Latitude,Longitude,Block,Level,Parent,State,Details 2 | 0,-37.8136,144.9631,0,0,-1,VIC,DataCenter 3 | 1,-37.813946,144.954633,1,1,0,VIC,Block1 Proxy 4 | 2,-37.816762,144.955915,2,1,0,VIC,Block2 Proxy 5 | 3,-37.818903,144.95694,3,1,0,VIC,Block3 Proxy 6 | 4,-37.812591,144.959656,4,1,0,VIC,Block4 Proxy 7 | 5,-37.815423,144.960901,5,1,0,VIC,Block5 Proxy 8 | 6,-37.817443,144.961784,6,1,0,VIC,Block6 Proxy 9 | 7,-37.811136,144.964557,7,1,0,VIC,Block7 Proxy 10 | 8,-37.813741,144.965706,8,1,0,VIC,Block8 Proxy 11 | 9,-37.815953,144.96675,9,1,0,VIC,Block9 Proxy 12 | 10,-37.809728,144.969459,10,1,0,VIC,Block10 Proxy 13 | 11,-37.812124,144.970587,11,1,0,VIC,Block11 Proxy 14 | 12,-37.814584,144.971705,12,1,0,VIC,Block12 Proxy 15 | 13,-37.81517,144.97476,12,2,12,VIC,Spring and Flinders ucell Optus North West corner Spring and Flinders St MELBOURNE 16 | 14,-37.81524,144.95256,1,2,1,VIC,Optus Minicell - Lon_Spencer Corner Spencer and Lonsdale St MELBOURNE 17 | 15,-37.81239,144.9712,11,2,11,VIC,136 Exhibition St MELBOURNE 18 | 16,-37.81679,144.96918,9,2,9,VIC,Federation Square North -V 164A Flinders Street MELBOURNE 19 | 17,-37.81808,144.95692,3,2,3,VIC,KING ST (3144 REPLACEMENT) -V 530 Collins Street MELBOURNE 20 | 18,-37.811269,144.957909,4,2,4,VIC,Empire Apartments 402-408 La Trobe Street MELBOURNE 21 | 19,-37.809081,144.96893,10,2,10,VIC,CMTS Site 287-293 Exhibition St MELBOURNE 22 | 20,-37.81285,144.955026,1,2,1,VIC,CGU Bldg 485 La Trobe Street MELBOURNE 23 | 21,-37.816356,144.962313,6,2,6,VIC,360 Collins St Collins Wales Building MELBOURNE 24 | 22,-37.818071,144.957211,3,2,3,VIC,Stock Exchange Bldg 530 Collins Street MELBOURNE 25 | 23,-37.818202,144.954367,2,2,2,VIC,625 Lt Collins St MELBOURNE 26 | 24,-37.814225,144.971971,12,2,12,VIC,ANZ Bank Tower 55 Collins Street MELBOURNE 27 | 25,-37.815975,144.955905,2,2,2,VIC,Bourke Place 600 Bourke Street MELBOURNE 28 | 26,-37.815493,144.956714,2,2,2,VIC,Marland House 570 Bourke Street MELBOURNE 29 | 27,-37.81852,144.957141,3,2,3,VIC,Rialto Towers 525 Collins Street MELBOURNE 30 | 28,-37.817303,144.962344,6,2,6,VIC,367 Collins Street Optus Centre MELBOURNE 31 | 29,-37.818162,144.959934,6,2,6,VIC,Optus Site National Mutual Building 447 Collins St MELBOURNE 32 | 30,-37.813381,144.959612,4,2,4,VIC,CMTS Site 235 Queen St MELBOURNE 33 | 31,-37.812084,144.967997,11,2,11,VIC,CMTS Site 180 Russell St MELBOURNE 34 | 32,-37.818494,144.957705,3,2,3,VIC,Optus Site Rialto 525 Collins Street MELBOURNE 35 | 33,-37.812122,144.97071,11,2,11,VIC,Optus Site CBD123 Cnr Bourkr & Exhibition Streets MELBOURNE 36 | 34,-37.811625,144.964919,7,2,7,VIC,Optus Site Lonsdale/Swanston 253 Lonsdale St MELBOURNE 37 | 35,-37.814263,144.972105,12,2,12,VIC,Optus Site 101 Collins St (Pac Dun) 101 Collins St MELBOURNE 38 | 36,-37.815549,144.966686,9,2,9,VIC,Optus Site Collins & Swanston Cnr Collins & Swanston Sts MELBOURNE 39 | 37,-37.818166,144.964831,6,2,6,VIC,Optus Site Flinders/Elizabeth 1 Elizabeth St MELBOURNE 40 | 38,-37.817384,144.959217,6,2,6,VIC,Optus Site Melbourne City West 454 Collins St MELBOURNE 41 | 39,-37.814896,144.971668,12,2,12,VIC,Optus Site Collins PLace/ANZ Tower 55 Collins St MELBOURNE 42 | 40,-37.811126,144.962116,5,2,5,VIC,Optus Site Melbourne Central Tower 360 Elizabeth St MELBOURNE 43 | 41,-37.818656,144.956626,3,2,3,VIC,Optus Site Minicell - King & Collins 539-557 Collins St MELBOURNE 44 | 42,-37.817261,144.962515,6,2,6,VIC,Optus Site Bridge Information Systems 360 Collins St MELBOURNE 45 | 43,-37.812845,144.968248,11,2,11,VIC,Optus Site Bourke/Russell 175 Bourke St MELBOURNE 46 | 44,-37.811978,144.962388,5,2,5,VIC,Optus Site Lonsdale/Elizabeth Elizabeth & Lonsdale MELBOURNE 47 | 45,-37.812723,144.960164,4,2,4,VIC,Optus Site Queen St 250 Queen St MELBOURNE 48 | 46,-37.813463,144.973217,12,2,12,VIC,Optus Site Minicell - Spring & Collins 14-16 Collins St MELBOURNE 49 | 47,-37.810996,144.967095,7,2,7,VIC,Optus Site Minicell - Lonsdale & Russell 177-183 Lonsdale St MELBOURNE 50 | 48,-37.82091,144.955155,3,2,3,VIC,Optus Site Minicell - Flinders and Spencer 2 Spencer St MELBOURNE 51 | 49,-37.820123,144.957552,3,2,3,VIC,Optus Site Minicell - King & Flinders King & Flinders St MELBOURNE 52 | 50,-37.812899,144.959886,4,2,4,VIC,Optus Site Lonsdale/Queen 250 Queen St MELBOURNE 53 | 51,-37.811678,144.962783,7,2,7,VIC,Optus Site CBD North 360 Elizabeth St MELBOURNE 54 | 52,-37.819576,144.95985,3,2,3,VIC,Optus Site Flinders/William 1 William St MELBOURNE 55 | 53,-37.817069,144.961828,6,2,6,VIC,Optus Site Minicell - Collins & Queen 379 Collins St MELBOURNE 56 | 54,-37.818218,144.960705,6,2,6,VIC,Optus Sire Minicell - Market & Flinders 50 Market St MELBOURNE 57 | 55,-37.809885,144.963286,7,2,7,VIC,Optus Site Museum Station Cnr Latrobe and Elizabeth Sts MELBOURNE 58 | 56,-37.812799,144.954686,1,2,1,VIC,Optus Site CGU Centre 485 Latrobe Street MELBOURNE 59 | 57,-37.811928,144.956414,1,2,1,VIC,Optus Site Flagstaff Station 433 Latrobe Street MELBOURNE 60 | 58,-37.816011,144.972058,12,2,12,VIC,Optus Site Minicell-Flinders & Exhibition 82 Flinders Street MELBOURNE 61 | 59,-37.814431,144.954653,1,2,1,VIC,Optus Site Minicell - Lonsdale & King 600-610 Lonsdale St MELBOURNE 62 | 60,-37.810382,144.971223,10,2,10,VIC,Optus Site TAC Building 222 Exhibition Street MELBOURNE 63 | 61,-37.816467,144.958334,2,2,2,VIC,Optus Site BHP House 140 William Street MELBOURNE 64 | 62,-37.815777,144.970508,12,2,12,VIC,Optus Site BHP Petroleum Plaza 120 Collins Street MELBOURNE 65 | 63,-37.812578,144.965314,8,2,8,VIC,Optus Site Minicell - Little Bourke & Swa Ltl Bourke & Swanston St MELBOURNE 66 | 64,-37.81607,144.957254,2,2,2,VIC,Optus Site Minicell - Bourke & William 121 William St MELBOURNE 67 | 65,-37.814398,144.96632,8,2,8,VIC,Optus Site Minicell - Town Hall 134-142 Swanston Street MELBOURNE 68 | 66,-37.813963,144.957301,1,2,1,VIC,Optus Site Minicell - Lonsdale & William Lonsdale & William Streets MELBOURNE 69 | 67,-37.817779,144.955969,2,2,2,VIC,99 King Street MELBOURNE 70 | 68,-37.818018,144.964596,6,2,6,VIC,1 Elizabeth Street cnr Flinders St MELBOURNE 71 | 69,-37.812857,144.96843,11,2,11,VIC,Optus/Telstra Site cnr Russell & Bourke Sts MELBOURNE 72 | 70,-37.811627,144.965056,7,2,7,VIC,CMTS Site cnr Swanston & Lonsdale Sts MELBOURNE 73 | 71,-37.816122,144.964421,9,2,9,VIC,Optus/Telstra Site cnr Collins & Elizabeth Sts MELBOURNE 74 | 72,-37.813447,144.966028,8,2,8,VIC,Optus Site cnr Bourke & Swanston Sts MELBOURNE 75 | 73,-37.815488,144.966824,9,2,9,VIC,cnr Collins & Swanston Streets Westin Hotel MELBOURNE 76 | 74,-37.814765,144.969286,12,2,12,VIC,Telstra/Optus Site cnr Russell & Collins Sts MELBOURNE 77 | 75,-37.812088,144.970836,11,2,11,VIC,Optus/Telstra Site cnr Bourke & Exhibition Sts MELBOURNE 78 | 76,-37.816206,144.966634,9,2,9,VIC,Optus/Vodafone Site 55 Swanston Walk MELBOURNE 79 | 77,-37.819471,144.960069,6,2,6,VIC,Optus Site 1 William St MELBOURNE 80 | 78,-37.810219,144.9618,5,2,5,VIC,Optus/Telstra Site cnr Elizabeth & La Trobe Sts MELBOURNE 81 | 79,-37.809538,144.964091,7,2,7,VIC,Optus/Telstra Site cnr Swanston & La Trobe Sts MELBOURNE 82 | 80,-37.812653,144.956622,1,2,1,VIC,Nubrick House 271 William Street MELBOURNE 83 | 81,-37.811251,144.964157,7,2,7,VIC,Legacy House 283 Swanston Street MELBOURNE 84 | 82,-37.81354,144.971421,12,2,12,VIC,Level 6 / 161 Collins Street MELBOURNE 85 | 83,-37.809969,144.97078,10,2,10,VIC,Telstra/Vodafone Site 43 Lonsdale St MELBOURNE 86 | 84,-37.809264,144.971708,10,2,10,VIC,Casselden Place 2 Lonsdale St MELBOURNE 87 | 85,-37.812711,144.959971,4,2,4,VIC,Optus Site 250 Queen St MELBOURNE 88 | 86,-37.81653,144.961967,6,2,6,VIC,394 Collins St MELBOURNE 89 | 87,-37.815387,144.968815,9,2,9,VIC,161 Collins St Carpark MELBOURNE 90 | 88,-37.81751,144.959237,6,2,6,VIC,Vodafone Microcell Cnr Collins & William Streets MELBOURNE 91 | 89,-37.814257,144.96337,8,2,8,VIC,Vodafone Microcell Cnr Bourke & Elizabeth Streets MELBOURNE 92 | 90,-37.809041,144.971828,10,2,10,VIC,Level 33 Casselden Place 235 Spring Street MELBOURNE 93 | 91,-37.820744,144.955485,3,2,3,VIC,Hotham Hotel 2 Spencer St MELBOURNE 94 | 92,-37.817483,144.959445,6,2,6,VIC,Optus Site 454 Collins St MELBOURNE 95 | 93,-37.812934,144.952075,1,2,1,VIC,Optus Site 318-326 Spencer St MELBOURNE 96 | 94,-37.812343,144.954135,1,2,1,VIC,Optus Site 450 LaTrobe St MELBOURNE 97 | 95,-37.811533,144.972614,11,2,11,VIC,Optus Site 10 Bourke St MELBOURNE 98 | 96,-37.813573,144.973404,12,2,12,VIC,Optus Site 14-16 Collins St MELBOURNE 99 | 97,-37.815793,144.958295,5,2,5,VIC,Optus Site AMP Square 121 William St MELBOURNE 100 | 98,-37.818474,144.956805,3,2,3,VIC,Optus Site 539-557 Collins St MELBOURNE 101 | 99,-37.814395,144.963537,8,2,8,VIC,S/E Cnr Bourke & Elizabeth Sts MELBOURNE 102 | 100,-37.815891,144.958861,5,2,5,VIC,140 William Street MELBOURNE 103 | 101,-37.815195,144.974409,12,2,12,VIC,Optus microcell - Cnr Spring St & Flinders St MELBOURNE 104 | 102,-37.815371,144.973076,12,2,12,VIC,8 Exhibition St MELBOURNE 105 | 103,-37.818151,144.96081,6,2,6,VIC,BTS Site 38465D Treasure Funds House 50 Market Street MELBOURNE 106 | 104,-37.814905,144.954913,1,2,1,VIC,225 King Street MELBOURNE 107 | 105,-37.812379,144.956402,1,2,1,VIC,Upper Flagstaff Station MELBOURNE 108 | 106,-37.816822,144.963209,6,2,6,VIC,333 Collins Street MELBOURNE 109 | 107,-37.815309,144.969476,12,2,12,VIC,Hyatt Hotel 123 Collins St MELBOURNE 110 | 108,-37.809356,144.970729,10,2,10,VIC,50 Lonsdale St MELBOURNE 111 | 109,-37.811313,144.972958,11,2,11,VIC,Parliament Underground Station MELBOURNE 112 | 110,-37.810641,144.970534,10,2,10,VIC,222 Exhibition St MELBOURNE 113 | 111,-37.810911,144.96269,5,2,5,VIC,cnr Elizabeth & La Trobe Streets MELBOURNE 114 | 112,-37.810065,144.963281,7,2,7,VIC,Optus/Vodafone Site 6/211 La Trobe St MELBOURNE 115 | 113,-37.811398,144.972672,11,2,11,VIC,20-30 Bourke St MELBOURNE 116 | 114,-37.816891,144.961957,6,2,6,VIC,Optus/Telstra Site cnr Collins & Queen Sts MELBOURNE 117 | 115,-37.813545,144.971705,12,2,12,VIC,Optus/Telstra Site cnr Collins & Exhibition Sts MELBOURNE 118 | 116,-37.814265,144.971685,12,2,12,VIC,CMTS Site Penthouse 71 Collins St MELBOURNE 119 | 117,-37.814484,144.9635,8,2,8,VIC,Optus/Vodafone Site 341-357 Bourke St MELBOURNE 120 | 118,-37.813167,144.965468,8,2,8,VIC,Vodafone Site 195 Swanston St MELBOURNE 121 | 119,-37.81922,144.958485,3,2,3,VIC,452-470 Flinders Street MELBOURNE 122 | 120,-37.815858,144.954818,2,2,2,VIC,Citipower House 628 Bourke Street MELBOURNE 123 | 121,-37.816217,144.970928,12,2,12,VIC,Wilson Parking 114 Flinders Street MELBOURNE 124 | 122,-37.810269,144.969863,10,2,10,VIC,Optus Minicell SE Cnr Exhibition St and Lonsdale St MELBOURNE 125 | 123,-37.819101,144.954229,3,2,3,VIC,Optus Minicell NE Cnr Spencer St and Collins St MELBOURNE 126 | 124,-37.811022,144.959234,4,2,4,VIC,Optus Minicell SE Cnr Queen St and Latrobe St MELBOURNE 127 | 125,-37.81215,144.961955,4,2,4,VIC,Optus Rooftop Site Mitchell House 283 Elizabeth Street MELBOURNE 128 | 126,-37.816496,144.96509,9,2,9,VIC,Customer Site 271 Collins Street MELBOURNE 129 | 127,-37.815296,144.958369,5,2,5,VIC,Optus Rooftop Site 520 Bourke Street MELBOURNE 130 | 128,-37.81631,144.964351,9,2,9,VIC,Optus Rooftop Site 287 Collins Street MELBOURNE 131 | 129,-37.817386,144.96123,6,2,6,VIC,Telstra IBC 401 Collins St MELBOURNE 132 | 130,-37.813175,144.952919,1,2,1,VIC,Vodafone Site Building C William Angliss Institute 555 La Trobe Street MELBOURNE VIC 3000 133 | -------------------------------------------------------------------------------- /dataset/users-melbcbd-generated.csv: -------------------------------------------------------------------------------- 1 | Latitude,Longitude 2 | -37.814619463998895,144.9744434939978 3 | -37.81013955044752,144.97045445740824 4 | -37.81989155597466,144.9573050094399 5 | -37.81452358749519,144.95363194415222 6 | -37.8141,144.963 7 | -37.811659660777174,144.96590852785317 8 | -37.81378490910957,144.95921393207493 9 | -37.81208430778482,144.957673808202 10 | -37.81490830722213,144.9702766021266 11 | -37.81524915678738,144.97314159073107 12 | -37.81048976870829,144.96983246885642 13 | -37.81511905228891,144.9672319773706 14 | -37.8193757585424,144.96072703660153 15 | -37.81493990503614,144.9571064400715 16 | -37.814904232143626,144.95946785250575 17 | -37.81234195524841,144.95747264257747 18 | -37.81255101130159,144.96912121560823 19 | -37.81297799000399,144.96500386189254 20 | -37.81563593894615,144.96891885702712 21 | -37.81421732717906,144.96868620157775 22 | -37.81149843916813,144.9578509039312 23 | -37.81755323848202,144.96367939894515 24 | -37.813824367361065,144.95564249481137 25 | -37.817498900730406,144.95733373953922 26 | -37.81441433608599,144.9642030290308 27 | -37.816684767377666,144.96055280996944 28 | -37.80976480029159,144.96655091362402 29 | -37.81820164875195,144.9628227548919 30 | -37.81775821439796,144.95905833648234 31 | -37.815433858078045,144.97034870559295 32 | -37.81443729389206,144.96424442351238 33 | -37.812450481188876,144.96022544074387 34 | -37.815087858661,144.95659154982727 35 | -37.8164818671844,144.95680394658794 36 | -37.816569308643416,144.9626349885918 37 | -37.818182093424454,144.95543464721993 38 | -37.81093407686694,144.97118109207815 39 | -37.80981442880433,144.97104036325564 40 | -37.811771085862645,144.96878837649064 41 | -37.81314036967468,144.97219005323734 42 | -37.81845411218166,144.95560243873098 43 | -37.81760284771435,144.96534032696024 44 | -37.813022761188186,144.9574379303582 45 | -37.811961461674116,144.9579335102344 46 | -37.81631295711501,144.95487360390817 47 | -37.8106196747047,144.9661532277868 48 | -37.81890017710286,144.95657280630863 49 | -37.81620548287361,144.9562963703685 50 | -37.8173763955731,144.95820971641513 51 | -37.81246959159245,144.96517473073592 52 | -37.815304486875384,144.9738353504629 53 | -37.81559015745049,144.95788746072122 54 | -37.81515321268496,144.95435551507467 55 | -37.811980895709056,144.96101188554448 56 | -37.81583784531715,144.95679194150858 57 | -37.818227809023234,144.9620497057267 58 | -37.809754250865566,144.9653089392123 59 | -37.81601483284959,144.96218720038516 60 | -37.81824729720168,144.9578825765743 61 | -37.811690699132114,144.97294130730833 62 | -37.81030772364256,144.96345193649725 63 | -37.81501646921105,144.961033078234 64 | -37.81598274837344,144.9703759077961 65 | -37.81005285239337,144.97245976295855 66 | -37.81662369177466,144.96199326088728 67 | -37.815506644006085,144.9588669118137 68 | -37.80832559873856,144.97105692378244 69 | -37.81529290140387,144.95819806648439 70 | -37.815402331519664,144.96862113084708 71 | -37.82042269544211,144.95559218965195 72 | -37.81636319456922,144.95751846846986 73 | -37.811145064205704,144.95869015467085 74 | -37.81491219230061,144.96724534437865 75 | -37.812813970245486,144.95964232785457 76 | -37.81609271823536,144.95951465145652 77 | -37.814427289506646,144.9618602060885 78 | -37.8152880608233,144.95755665867134 79 | -37.812623691007296,144.9543199827372 80 | -37.81434477944883,144.9661723156081 81 | -37.813411726044,144.96334480438233 82 | -37.81863462959422,144.9541237604893 83 | -37.814614125765715,144.95940436068446 84 | -37.811872870641636,144.95990644900323 85 | -37.813596393660625,144.96566203666927 86 | -37.816649611039466,144.96243824678535 87 | -37.813837494013086,144.96786005164765 88 | -37.810271092264315,144.96148562136437 89 | -37.81728078918926,144.95470628845717 90 | -37.810730245012316,144.96464952572057 91 | -37.80937911411694,144.96661695158255 92 | -37.815423655167294,144.97112054876663 93 | -37.81428209774935,144.95580192926346 94 | -37.81398983143549,144.9552640190384 95 | -37.812690479642654,144.97001928056926 96 | -37.81704270963471,144.96574598037978 97 | -37.80993435421895,144.96803170289266 98 | -37.81336629000091,144.9652675712844 99 | -37.81207635849776,144.95890686602672 100 | -37.81386380787004,144.9671532039937 101 | -37.815256314325616,144.96706991446212 102 | -37.81022841398234,144.965625273269 103 | -37.815828118346055,144.97014914520236 104 | -37.81282402330063,144.96708700509325 105 | -37.813533856350006,144.97089686575208 106 | -37.81710028921741,144.96664165101868 107 | -37.813610086086776,144.96382407169256 108 | -37.816162429752154,144.95515855845323 109 | -37.81343832758531,144.95432055525242 110 | -37.81381423822018,144.95681981996265 111 | -37.812196730917165,144.95846412345497 112 | -37.81685255856487,144.96583133280848 113 | -37.81077185583469,144.96176723915445 114 | -37.81582166727068,144.95447317463592 115 | -37.8122,144.96200000000002 116 | -37.814534986869795,144.96690314180884 117 | -37.81112722965496,144.97037973535268 118 | -37.81878203438363,144.9608362897805 119 | -37.80887359191431,144.96695535609854 120 | -37.814140880967706,144.97300933618303 121 | -37.81145428810651,144.9603354240176 122 | -37.81714969371978,144.95966985383092 123 | -37.81184268163072,144.97198713616083 124 | -37.814369329877124,144.97440313968735 125 | -37.81636865336556,144.9678220288784 126 | -37.81410953684771,144.96110272699207 127 | -37.81258220032159,144.95953749398936 128 | -37.818863889201026,144.9554224959066 129 | -37.810588840703126,144.96343954593712 130 | -37.81426518323673,144.96232529282378 131 | -37.818022372669596,144.95618459646778 132 | -37.81327368975608,144.95278751605628 133 | -37.80942181880139,144.96948914407952 134 | -37.80838794270895,144.96957596542518 135 | -37.81616153248597,144.9576987093562 136 | -37.81006922020894,144.96876865009997 137 | -37.818785631696215,144.95593348941532 138 | -37.81955836378909,144.9592948033818 139 | -37.810226149935055,144.96726385549758 140 | -37.811433119584294,144.96255270542738 141 | -37.81863502433553,144.958789864602 142 | -37.81207375798799,144.95739461518238 143 | -37.80985467475024,144.97058613017714 144 | -37.813660528641236,144.9633827958477 145 | -37.81405601486291,144.95919020583543 146 | -37.81782696824719,144.9632991800832 147 | -37.8100048570401,144.97044718475493 148 | -37.81551142225007,144.96675919319705 149 | -37.81797979515815,144.95740763285224 150 | -37.81494371831452,144.9565394067452 151 | -37.81662789038045,144.95378445282245 152 | -37.81122850483729,144.96722854045237 153 | -37.8112599723541,144.96134132878228 154 | -37.8152,144.9632 155 | -37.81178516487996,144.97258266879308 156 | -37.81213897469283,144.9582042323761 157 | -37.81497877142261,144.95664626070533 158 | -37.81438821918856,144.9738746229193 159 | -37.817178218944825,144.96376572385665 160 | -37.81548411651614,144.95719801448084 161 | -37.8135444274231,144.9694765443484 162 | -37.80961210319021,144.9648825507597 163 | -37.81862275455057,144.95833870788516 164 | -37.817751195010146,144.95871270496306 165 | -37.812817502593454,144.97362825640056 166 | -37.81740829879182,144.96303890768638 167 | -37.81392989680659,144.97073298576535 168 | -37.82086812931496,144.9555503266662 169 | -37.80999102836298,144.96868670835838 170 | -37.81617520989819,144.9702217596025 171 | -37.81588888129419,144.96613295327302 172 | -37.814,144.9633 173 | -37.807977922331226,144.97052523609085 174 | -37.81324989189165,144.97286585986947 175 | -37.81152296613726,144.96916469671385 176 | -37.81293682650585,144.9546285904177 177 | -37.810809204528795,144.96366434986035 178 | -37.81597966504343,144.9545891063173 179 | -37.816799098032625,144.9690128560551 180 | -37.814150941641934,144.95965178032114 181 | -37.8088473824563,144.96983923413396 182 | -37.81470060444054,144.95744591790975 183 | -37.81500069482847,144.97297249191442 184 | -37.810670998116485,144.97245433706684 185 | -37.81558933414912,144.97249722942502 186 | -37.81620834722626,144.95768155816324 187 | -37.816376759443145,144.9611403244596 188 | -37.81747194469616,144.96542384210258 189 | -37.813515424900736,144.95850892360627 190 | -37.81281516359398,144.96331152278583 191 | -37.81441079853313,144.95425332442431 192 | -37.819225798086144,144.95852856892566 193 | -37.81367382272645,144.96366033278179 194 | -37.82032032120576,144.9574227946333 195 | -37.815348933774686,144.96319345991606 196 | -37.80987298016184,144.9722032978676 197 | -37.8181,144.957 198 | -37.81691934005691,144.96002574341136 199 | -37.81369386178802,144.96381903705827 200 | -37.81725298896966,144.961354951205 201 | -37.81202543434493,144.96105324611807 202 | -37.8140445311807,144.9521881620328 203 | -37.81395067117719,144.9584247528281 204 | -37.81462277571566,144.9577905090458 205 | -37.81681527591921,144.96842798058046 206 | -37.81308680010943,144.9590438359933 207 | -37.81135387114565,144.97242283548817 208 | -37.81436877985844,144.95190332468118 209 | -37.815885262295836,144.9723474174097 210 | -37.81399579082262,144.9567228041082 211 | -37.8137838282025,144.9701258225846 212 | -37.81640765115112,144.96934179568277 213 | -37.80903591118736,144.97096349788112 214 | -37.81587887381047,144.96824978237768 215 | -37.81070110314614,144.9620061157795 216 | -37.81495701665409,144.96382096830393 217 | -37.815386885726916,144.96632766646613 218 | -37.818059262034204,144.96231452122484 219 | -37.81350560090336,144.97246818224855 220 | -37.811253445683086,144.96832191225204 221 | -37.81605822261824,144.95719004982865 222 | -37.81395306608837,144.95512352197682 223 | -37.82033054642563,144.95531189056916 224 | -37.819112254466006,144.95554174294278 225 | -37.82048325674531,144.95712445639046 226 | -37.81436439970928,144.95927339330467 227 | -37.81357240102568,144.95539832128114 228 | -37.81099374794194,144.9650449456427 229 | -37.80939171385729,144.9692115579155 230 | -37.81885505760089,144.95431186697402 231 | -37.8146071795993,144.97306107434378 232 | -37.81811513374654,144.9539862226096 233 | -37.812964561543396,144.96183249664261 234 | -37.8130985511767,144.9538524932586 235 | -37.81743752777311,144.95917455561 236 | -37.812544788465345,144.97103475455833 237 | -37.81311802279049,144.96780827353902 238 | -37.81165698036322,144.95806308315997 239 | -37.820362531557585,144.95495966529256 240 | -37.81552347333385,144.97291421465476 241 | -37.813108010183846,144.9668725130379 242 | -37.813334528569825,144.96148747364754 243 | -37.81366436143259,144.9671968737962 244 | -37.81549186261276,144.95589171729648 245 | -37.81958753397625,144.95545771401723 246 | -37.81421616481758,144.97143485009616 247 | -37.81672939760163,144.9675841762702 248 | -37.817166913033894,144.9621350651937 249 | -37.8112536731396,144.96016712778805 250 | -37.810989889014394,144.97132925894778 251 | -37.81515032149614,144.95376464726704 252 | -37.80948572388596,144.96543817806622 253 | -37.80908850606475,144.96729057150898 254 | -37.811617725768436,144.95943052357612 255 | -37.81159317729401,144.97068444862376 256 | -37.8140790615496,144.96410021977414 257 | -37.816008945271996,144.96522403636573 258 | -37.81854995334933,144.9554242619255 259 | -37.81250158507618,144.96085950111325 260 | -37.81332842453206,144.96418150694245 261 | -37.8161718629816,144.96076278969983 262 | -37.81330025622915,144.96238331637264 263 | -37.81248439084029,144.97235958734655 264 | -37.81413238602805,144.97153041340994 265 | -37.81387859707973,144.96771362162792 266 | -37.8136,144.963 267 | -37.81706512524726,144.9642505967563 268 | -37.81341638391622,144.95739644271146 269 | -37.81490346928966,144.97185827808073 270 | -37.81275761180159,144.96317427841865 271 | -37.81650736825868,144.9550453990693 272 | -37.81345699161816,144.96362026880558 273 | -37.81299475723565,144.9611100101462 274 | -37.81354846022553,144.9663221682334 275 | -37.81904355065924,144.96135115491006 276 | -37.815197847092996,144.9715756100024 277 | -37.81111312687821,144.95953632876478 278 | -37.811509914173435,144.971616783251 279 | -37.81429793381097,144.96719396365285 280 | -37.80918137563005,144.9703882218582 281 | -37.81564720724511,144.95304630991598 282 | -37.80929405808627,144.97208158554443 283 | -37.8148,144.963 284 | -37.81458456036517,144.97101346018852 285 | -37.815045693378494,144.96848179612758 286 | -37.81250107395752,144.95952145133677 287 | -37.81739518497397,144.95755494938595 288 | -37.81053278015367,144.96584406930012 289 | -37.816822447872525,144.9628555842814 290 | -37.80946048660135,144.97066669354277 291 | -37.81246271376807,144.95411602388737 292 | -37.81039010779824,144.96912659759695 293 | -37.81115528547382,144.9594773851559 294 | -37.8170028997356,144.95397769118378 295 | -37.81140563599117,144.96056701692447 296 | -37.811037095699156,144.96618431126538 297 | -37.8172,144.965 298 | -37.814720256816464,144.9628137390095 299 | -37.81777126270174,144.95839268759508 300 | -37.809695006223414,144.96474396682822 301 | -37.81363470774423,144.9542493037542 302 | -37.81671649862597,144.96986105697647 303 | -37.81393126997627,144.9579709572205 304 | -37.814308870031134,144.95376126249184 305 | -37.81068087757048,144.97196083342382 306 | -37.81148284631501,144.96693851143235 307 | -37.81668587105629,144.96685930839757 308 | -37.81363317037068,144.97324302701995 309 | -37.81663989957632,144.95555601541957 310 | -37.8136,144.972 311 | -37.81435865131232,144.972322971338 312 | -37.81686792573558,144.96504209542402 313 | -37.81403128603793,144.95885530945853 314 | -37.812715018881896,144.97309510282773 315 | -37.81210602447937,144.96635325185213 316 | -37.81522854074623,144.96694042272028 317 | -37.812355174729575,144.96703474656186 318 | -37.8161,144.95600000000002 319 | -37.81465088872194,144.9725286932877 320 | -37.81153763771352,144.97014182151864 321 | -37.81218895568787,144.95860604644892 322 | -37.81319429154356,144.9608169849454 323 | -37.809563078049635,144.9701872566196 324 | -37.81463871708251,144.9671212220398 325 | -37.81587498259174,144.96494304198856 326 | -37.8187,144.958 327 | -37.81771230389406,144.9544943809818 328 | -37.81361663402182,144.97404000427915 329 | -37.813423357748405,144.96568709258509 330 | -37.813328992373165,144.9627204229845 331 | -37.814523869533545,144.95927688356315 332 | -37.819085773533786,144.95716059627378 333 | -37.816627183068476,144.95446054116422 334 | -37.81554560488038,144.95382220631816 335 | -37.811426221562606,144.96437461805743 336 | -37.81967517425412,144.9553873974945 337 | -37.81624798485159,144.97144337680226 338 | -37.81999953637778,144.95704762971005 339 | -37.81124550924548,144.969658605077 340 | -37.81537917297723,144.96327924982435 341 | -37.81403222051756,144.96109515968246 342 | -37.81182785768188,144.9665418956616 343 | -37.815026267956235,144.96554404657826 344 | -37.80969355044726,144.97150026550153 345 | -37.81090539008428,144.9676384033786 346 | -37.81203346882683,144.97056643124938 347 | -37.817374309983116,144.96123385167166 348 | -37.813635967641424,144.95977476605472 349 | -37.81689840905172,144.95945221431145 350 | -37.81871021431237,144.95633943630955 351 | -37.81444018951733,144.9740675904297 352 | -37.817668662533634,144.96541835256724 353 | -37.819043649389286,144.95699088648053 354 | -37.813464301546084,144.97056333029414 355 | -37.81474875975566,144.95736746180583 356 | -37.8126,144.955 357 | -37.813267820452054,144.97056005477683 358 | -37.81286266469903,144.95923165066816 359 | -37.81436666954353,144.95433524289314 360 | -37.81838999945512,144.96343683173225 361 | -37.81099305157902,144.96344383174565 362 | -37.80947669330586,144.96909679546775 363 | -37.811436202393935,144.96749790898124 364 | -37.811159137967735,144.95900797560367 365 | -37.8149,144.963 366 | -37.81194793395259,144.96553021352918 367 | -37.80798939277421,144.97029533976902 368 | -37.81640803503252,144.9550315563387 369 | -37.81367134309769,144.95392005828106 370 | -37.81840545189129,144.95672077457525 371 | -37.81319674534847,144.9526630555369 372 | -37.820055181741516,144.9573925958203 373 | -37.81823227894504,144.95618361546394 374 | -37.81017239490715,144.97003128180395 375 | -37.810697904588906,144.96773308470537 376 | -37.81898735199725,144.95755706702104 377 | -37.81714634998359,144.96814695361246 378 | -37.81351306113536,144.9550279787232 379 | -37.81338463800359,144.96899794275683 380 | -37.81479519139466,144.95761999575495 381 | -37.81035489079922,144.9630054600752 382 | -37.81778505215886,144.96235285345037 383 | -37.80898894248607,144.97029311790178 384 | -37.81280482271244,144.96261771790097 385 | -37.8103537517504,144.9689072754959 386 | -37.81220325944471,144.95751150082506 387 | -37.811877595972646,144.97080476429468 388 | -37.814903720291454,144.96060251336746 389 | -37.816928107116986,144.96748968979122 390 | -37.81499492940913,144.95226175446788 391 | -37.81437750111223,144.9679586456869 392 | -37.80793707332588,144.97152655002466 393 | -37.813652872518254,144.9584602037209 394 | -37.81590442062161,144.96619718486318 395 | -37.814679970329294,144.95680744948774 396 | -37.81137595014004,144.96946706213757 397 | -37.8166,144.96200000000002 398 | -37.81310923899466,144.96960626249822 399 | -37.81694383621705,144.9570978143937 400 | -37.811750622873106,144.96875117362066 401 | -37.811976450393864,144.96519071947583 402 | -37.81313686424269,144.96816035843779 403 | -37.81499829015065,144.96389967047145 404 | -37.81483677549496,144.96758313217276 405 | -37.812328875025415,144.95968607182544 406 | -37.8123653734869,144.96172734884834 407 | -37.814390864315975,144.9617439321553 408 | -37.81786608493969,144.96282016138147 409 | -37.81682549964185,144.96689024972673 410 | -37.81755340346539,144.9575845422816 411 | -37.81193592435787,144.96674020803087 412 | -37.816242138111164,144.96540782622122 413 | -37.81672053716267,144.95985594049446 414 | -37.815467159606726,144.9631917836395 415 | -37.816869298429694,144.95387849361575 416 | -37.815526010250295,144.9604403702949 417 | -37.81463552784026,144.96716436936654 418 | -37.81560146534622,144.9727537396442 419 | -37.815,144.963 420 | -37.82029345458736,144.95536630319262 421 | -37.8141276619438,144.96674476268282 422 | -37.819549507282446,144.95965061005947 423 | -37.81774628251669,144.95466600783286 424 | -37.80955315650921,144.96394967073687 425 | -37.81791602782293,144.9556812893791 426 | -37.809680997252386,144.96490080657676 427 | -37.80880856962298,144.96952909312895 428 | -37.811816860735554,144.96595769104763 429 | -37.81348881716523,144.95566117522785 430 | -37.8166,144.96 431 | -37.8145467629932,144.9699360745648 432 | -37.8152864302384,144.9641341370741 433 | -37.818250912726164,144.96399518136556 434 | -37.81306036575589,144.96324012470262 435 | -37.810257962587,144.96679987216893 436 | -37.818900900539525,144.9586280001468 437 | -37.809938040321185,144.97135904336704 438 | -37.81252091507755,144.96702535984042 439 | -37.81651767079479,144.9578494586255 440 | -37.81682910055517,144.95317971841402 441 | -37.8107,144.97 442 | -37.81908758534507,144.96100206656635 443 | -37.809805686087145,144.9646640751595 444 | -37.81482419629698,144.9590921710678 445 | -37.81409721064474,144.9533535361442 446 | -37.813977266529456,144.97171840011535 447 | -37.81109897650134,144.97178308558796 448 | -37.808481585545195,144.96922329951929 449 | -37.814213149684505,144.97255480492953 450 | -37.81222069810452,144.96437370965913 451 | -37.816280394970505,144.96378871701515 452 | -37.81216537491366,144.9688987475906 453 | -37.8116856143387,144.9580144774491 454 | -37.8132054777891,144.96427456889464 455 | -37.81314629005714,144.9574961507843 456 | -37.80902400853159,144.96557468220877 457 | -37.81412537643972,144.96729400585616 458 | -37.81436393482478,144.95750921965066 459 | -37.81630682011103,144.95641119221884 460 | -37.81029804266297,144.96133223367696 461 | -37.81480448771636,144.96882185863757 462 | -37.809902127470686,144.96810099303877 463 | -37.811,144.96200000000002 464 | -37.814066250762764,144.96573923578723 465 | -37.81996347783519,144.95744560512327 466 | -37.810334571370454,144.9649190944476 467 | -37.81258634222041,144.9734678030357 468 | -37.81197933196855,144.95906218110832 469 | -37.815257683268165,144.96328673055496 470 | -37.81539865932735,144.95301094795096 471 | -37.82017691265291,144.95740484462132 472 | -37.81837543081267,144.95994453000944 473 | -37.816386334231176,144.95557065081428 474 | -37.81326545858944,144.95816658874077 475 | -37.81375705725539,144.96214187579793 476 | -37.81259143478338,144.95635642577284 477 | -37.81485342424815,144.96824700064724 478 | -37.81274762373652,144.96714644136668 479 | -37.80825279906561,144.9706854440985 480 | -37.81674483043149,144.96765295707584 481 | -37.8159,144.965 482 | -37.81327323101555,144.96186725576834 483 | -37.816753101071235,144.9596168293672 484 | -37.81169825504853,144.95957490407508 485 | -37.8160886507667,144.95539946949245 486 | -37.81466674264013,144.97261173803332 487 | -37.8181,144.96200000000002 488 | -37.81154075850383,144.96585673548242 489 | -37.81121627129232,144.96748859640425 490 | -37.81522939946645,144.97417149642425 491 | -37.813537191550495,144.9593473823198 492 | -37.812080478431795,144.9609979136708 493 | -37.812054365871305,144.96834784554542 494 | -37.81541757199296,144.95859541280873 495 | -37.81293684232982,144.95557645445143 496 | -37.81663167481398,144.96223902575954 497 | -37.81426711070949,144.97149202425325 498 | -37.813518883697135,144.96334013929382 499 | -37.81178301965595,144.96671147838475 500 | -37.81458214424589,144.97345286977617 501 | -37.81135906989302,144.96053281803117 502 | -37.811868481542625,144.96419403063 503 | -37.819105745355714,144.95619359323547 504 | -37.814672990243146,144.9530887225535 505 | -37.81281411263916,144.95513259923962 506 | -37.81973403694902,144.95592916173024 507 | -37.81075890638503,144.9689206715875 508 | -37.81443012946923,144.96195407391252 509 | -37.809593107581065,144.96477788047633 510 | -37.81983154345132,144.95888774653054 511 | -37.812876495919674,144.9604625421083 512 | -37.811824210399635,144.95841478540117 513 | -37.81347092246059,144.95994777219792 514 | -37.810496584674645,144.9637755861393 515 | -37.81334168439914,144.9616772556829 516 | -37.81528664383564,144.96523828809867 517 | -37.81645922599621,144.96297766229824 518 | -37.81618291900851,144.97057592397968 519 | -37.81791077970484,144.95532225195794 520 | -37.81085155677669,144.96269452039758 521 | -37.812382939078326,144.95746625545692 522 | -37.81324916476577,144.96440186451383 523 | -37.81289630903463,144.95354480754017 524 | -37.812547511108754,144.96189324901582 525 | -37.8136367706446,144.9582849049113 526 | -37.81728263882671,144.96713436323188 527 | -37.81455721087361,144.9575960635098 528 | -37.81439994710512,144.95655578273596 529 | -37.81483902285392,144.9743251952827 530 | -37.81090134847583,144.97083829537684 531 | -37.81274588359618,144.96763026495995 532 | -37.81154198547382,144.96852529382062 533 | -37.8108422073716,144.97098678434833 534 | -37.81522495737337,144.96778878141035 535 | -37.82044882768721,144.95619496531287 536 | -37.81642414463368,144.96917454138085 537 | -37.81568996740011,144.9712713822771 538 | -37.81933036664703,144.9594005251438 539 | -37.81350487078126,144.96024834128988 540 | -37.81738394231223,144.9646042477295 541 | -37.817725551690316,144.96265402820097 542 | -37.816290037629805,144.96898179761277 543 | -37.81417219147203,144.97047772648278 544 | -37.80885551084761,144.97061786780625 545 | -37.81729305733036,144.95938149470518 546 | -37.81317424432962,144.96652507099031 547 | -37.81908753228209,144.95953792119127 548 | -37.81627170092491,144.95721069929147 549 | -37.82010128995928,144.95804601668203 550 | -37.8168,144.966 551 | -37.8133143744886,144.95908722621655 552 | -37.80798242449037,144.969873313486 553 | -37.8138390998007,144.95239010799995 554 | -37.81232343117869,144.96608685995218 555 | -37.81352847713086,144.97136973114934 556 | -37.816119523034594,144.953749279346 557 | -37.814131096408815,144.96910635226857 558 | -37.81786587307664,144.958280030626 559 | -37.81435454061904,144.97205913513736 560 | -37.81199059159656,144.9681455162408 561 | -37.811556380196215,144.96826730898175 562 | -37.81449007337355,144.97349045524442 563 | -37.808185081050425,144.96882979924314 564 | -37.81202046123142,144.95725616283704 565 | -37.816230410719946,144.97021875044086 566 | -37.81912295397755,144.9579225450005 567 | -37.80941253709154,144.96648550093033 568 | -37.815374982615275,144.95896297325325 569 | -37.80951291204747,144.97079351296873 570 | -37.8170281480469,144.96790173558807 571 | -37.81461648490758,144.9548871356384 572 | -37.80982733496957,144.9636740879879 573 | -37.81271233786912,144.96589706378487 574 | -37.81528710711876,144.9685951525695 575 | -37.81691734146069,144.96779004853946 576 | -37.813740628805604,144.971231234768 577 | -37.80874787817812,144.96760240861346 578 | -37.81088775669302,144.97244072832032 579 | -37.813117428576646,144.96209560429108 580 | -37.812855786179334,144.96892994290334 581 | -37.81895932547799,144.9619127943761 582 | -37.814447651660004,144.9698160443748 583 | -37.8184,144.957 584 | -37.81784483668352,144.96030664873885 585 | -37.81483451258078,144.9662333365522 586 | -37.81574320441971,144.9711744070232 587 | -37.81257377737667,144.96331575421482 588 | -37.810191740475844,144.96780129489883 589 | -37.81379186195012,144.95293284289855 590 | -37.816153437591225,144.95860130850716 591 | -37.812739721752756,144.952882226261 592 | -37.81181109495874,144.96230009051928 593 | -37.81353176062162,144.96720817780312 594 | -37.813555388619996,144.97008406147967 595 | -37.81687663407243,144.96127436541195 596 | -37.81114228007089,144.95934559857707 597 | -37.81621670046701,144.95815561712843 598 | -37.812547812629816,144.95426365588656 599 | -37.8133,144.971 600 | -37.811712751905745,144.96281264417752 601 | -37.816561800088564,144.95625053884436 602 | -37.811644514221854,144.9727080245814 603 | -37.814032668761,144.95717125059025 604 | -37.81331375969952,144.9637916110779 605 | -37.81803490680971,144.96303681392754 606 | -37.8152,144.964 607 | -37.81476756931713,144.9707839680888 608 | -37.81314286984162,144.9593894219386 609 | -37.8128806635262,144.97161843685066 610 | -37.814759545748686,144.95560851795048 611 | -37.81604212447837,144.96726333566727 612 | -37.815618621384424,144.96379608077206 613 | -37.81765277462591,144.96424819036878 614 | -37.81385664407683,144.96620004765526 615 | -37.814191265090756,144.96557093027252 616 | -37.811156404027464,144.96558085182411 617 | -37.811350712294285,144.9728868307254 618 | -37.80838852843238,144.96963746172372 619 | -37.814047902672264,144.95480163168148 620 | -37.81590448765927,144.95706994380066 621 | -37.81440947461544,144.96348189138456 622 | -37.81135966988801,144.9694888683082 623 | -37.81611794051344,144.96203707912088 624 | -37.81149947242551,144.97247494463062 625 | -37.81158277396241,144.96650987329923 626 | -37.81432131877399,144.95371036970647 627 | -37.81127463888996,144.96522109585135 628 | -37.8108212889387,144.96191451032024 629 | -37.808651903652915,144.9702235670696 630 | -37.8136805403737,144.96323751248406 631 | -37.81501262897454,144.97355387905932 632 | -37.819212599436234,144.95884368676252 633 | -37.81547928637566,144.96803312309953 634 | -37.810006595860074,144.97168136263022 635 | -37.81199010074941,144.9686460077253 636 | -37.8172221442608,144.9577162950419 637 | -37.81577880925649,144.95310470650944 638 | -37.815867196207385,144.96238557366524 639 | -37.81791146880599,144.95461213257425 640 | -37.8101,144.964 641 | -37.81125272426926,144.97288538679481 642 | -37.809440855902885,144.96579386177424 643 | -37.81473955028226,144.9738390775808 644 | -37.81352446673052,144.9623280952206 645 | -37.81694573173818,144.95374068899434 646 | -37.81621536789628,144.97055624568273 647 | -37.815441302388855,144.96956301760218 648 | -37.81914038383534,144.96171086458585 649 | -37.818780857534215,144.95482844412578 650 | -37.81384955880105,144.96601166055652 651 | -37.81724318033767,144.96662461478016 652 | -37.817476565010246,144.9598783965905 653 | -37.81534886630232,144.9556453135798 654 | -37.80783692839932,144.9696028232089 655 | -37.811299751212054,144.9670826186449 656 | -37.818860278704385,144.95793882754916 657 | -37.819977811655924,144.9581686514683 658 | -37.814371071528114,144.95446002540044 659 | -37.814289203646275,144.96653534491546 660 | -37.80881047016413,144.97172926264506 661 | -37.814119263241786,144.95551701228388 662 | -37.81524556182576,144.963227094335 663 | -37.81582459287094,144.96954716096525 664 | -37.81046607530189,144.96945594818243 665 | -37.81481897136585,144.97016428488644 666 | -37.81311523368245,144.95781905443198 667 | -37.81045768456327,144.9625295838502 668 | -37.81103245503518,144.9623523693049 669 | -37.81588320758718,144.9645825733778 670 | -37.814218550061334,144.97360568751282 671 | -37.81167653350828,144.9715325923741 672 | -37.81179911364542,144.9571406921944 673 | -37.810637879723856,144.96541787307268 674 | -37.81440389502927,144.971109286962 675 | -37.814285384800385,144.9518470038533 676 | -37.81059298199641,144.96671898243974 677 | -37.81317272839795,144.9606584837663 678 | -37.81400919522174,144.9580249332615 679 | -37.813447433752884,144.96346722524189 680 | -37.817451115521614,144.9588711065753 681 | -37.81814244633334,144.9581639306777 682 | -37.81323634683883,144.95354370119622 683 | -37.80891341512736,144.9715395984184 684 | -37.814819144442346,144.96200902852058 685 | -37.81227447105579,144.9612947755408 686 | -37.8135,144.96 687 | -37.811656904642966,144.97067595831854 688 | -37.81561692633396,144.97314675667062 689 | -37.81043826108077,144.96885786203015 690 | -37.81021569642842,144.9668032590873 691 | -37.815503302994635,144.96047066702636 692 | -37.81997451840002,144.95661252995916 693 | -37.812589777704645,144.96814624634413 694 | -37.816557163983504,144.9643427499644 695 | -37.812081799458504,144.962989391731 696 | -37.813810763664506,144.95657678934913 697 | -37.814890268432,144.97053680672104 698 | -37.816183012518216,144.97085062032738 699 | -37.80810678763893,144.97074382018758 700 | -37.814835927706085,144.9584096028147 701 | -37.81461861220567,144.97343295735507 702 | -37.814631615429064,144.96413417361865 703 | -37.81681285338274,144.9573581197596 704 | -37.81085875696256,144.9644003255746 705 | -37.81108939575136,144.96876218316726 706 | -37.81740266593873,144.9597855745953 707 | -37.812140762033074,144.97324690424108 708 | -37.816301018725504,144.97084873140093 709 | -37.81367468262452,144.95661080628724 710 | -37.81611136051301,144.95479533137745 711 | -37.81239480553816,144.97024724092674 712 | -37.81515731426092,144.95785621972334 713 | -37.81417300672182,144.95793774067474 714 | -37.814722018909315,144.95452128038045 715 | -37.81338034439775,144.96053722029413 716 | -37.81336896440645,144.95174470517404 717 | -37.811544502917464,144.97148903097352 718 | -37.8184940866431,144.95855374685797 719 | -37.81531841063376,144.96186341876526 720 | -37.8142217635333,144.96258970020781 721 | -37.81447820197992,144.96960976200498 722 | -37.81674918637884,144.95795606379693 723 | -37.8121,144.961 724 | -37.81027679372299,144.96639097656785 725 | -37.808166472039574,144.97120633044213 726 | -37.81469469466105,144.95622672386392 727 | -37.81249783617628,144.96519126511356 728 | -37.816675748238886,144.96949693879816 729 | -37.814259781852876,144.95363095028725 730 | -37.814186723943735,144.95967691836123 731 | -37.81357042277603,144.96675692650626 732 | -37.81215489196026,144.97088963682535 733 | -37.81630100462618,144.97058074893997 734 | -37.81501011253928,144.95234718600224 735 | -37.80901431711922,144.96925355989086 736 | -37.81461122582694,144.96128670201054 737 | -37.814375028797315,144.97238280254513 738 | -37.81624162707906,144.96995202920704 739 | -37.811271418837066,144.96871525235227 740 | -37.81134247296628,144.96495831341414 741 | -37.820439854814396,144.95500852833234 742 | -37.81266601668096,144.9538386536796 743 | -37.812716227290586,144.96291528723984 744 | -37.81312715773686,144.95393454189434 745 | -37.81504509801087,144.95263639085562 746 | -37.8096390583809,144.96812422481506 747 | -37.815904623967576,144.95718619294487 748 | -37.81703852414898,144.96359047140552 749 | -37.8098786627274,144.9681843631707 750 | -37.81490263665382,144.96082448218357 751 | -37.816010874175255,144.96825556283508 752 | -37.815517955620656,144.96013801570803 753 | -37.81921037056402,144.9593446495422 754 | -37.814989037091124,144.97231237772448 755 | -37.811061919599155,144.95903404699135 756 | -37.80786097689496,144.97146913038335 757 | -37.817660497152694,144.9549437369783 758 | -37.814322926593455,144.9612490660424 759 | -37.8120611658746,144.9655674831095 760 | -37.812717502103354,144.9638630792279 761 | -37.811158005112375,144.95985288113405 762 | -37.81593405842933,144.95586648320693 763 | -37.8158,144.966 764 | -37.81384928231356,144.9540861848685 765 | -37.81464079947871,144.96269651118226 766 | -37.815478581046555,144.9671156946707 767 | -37.812438897185466,144.96346280181018 768 | -37.8140399457538,144.9606399137279 769 | -37.81301959330935,144.96541402013167 770 | -37.81370195763928,144.96844806930676 771 | -37.81632873061767,144.96259080444997 772 | -37.815351341172914,144.95702925721034 773 | -37.8195879406845,144.9585355782562 774 | -37.8196342567591,144.95612824400473 775 | -37.815345645913304,144.9558502977816 776 | -37.81377023034795,144.95254711810477 777 | -37.80923502433308,144.9657178443968 778 | -37.819656861096185,144.95887997801702 779 | -37.81548856919133,144.96848714533436 780 | -37.813543057476245,144.9623244684735 781 | -37.81900437818667,144.96167924728164 782 | -37.80868213242965,144.96844067348354 783 | -37.813241163753,144.95980598306045 784 | -37.81278984180577,144.9661797850664 785 | -37.813642818130525,144.96611420224207 786 | -37.81311067650938,144.9713521654751 787 | -37.813042678322624,144.96471462075718 788 | -37.812450092436904,144.963483880141 789 | -37.812290643778006,144.95879445501345 790 | -37.81001046687629,144.96435359130575 791 | -37.81740477069574,144.95749898256287 792 | -37.815548835353816,144.9671670687867 793 | -37.81769097578472,144.96012022433183 794 | -37.81536108902823,144.95896502470757 795 | -37.812349660479214,144.97086089708452 796 | -37.81421767864278,144.9567189672487 797 | -37.814534527962635,144.97394830470472 798 | -37.811682485731474,144.97184413855726 799 | -37.8127,144.968 800 | -37.815443082751955,144.9670194145344 801 | -37.81389793039926,144.9706752278784 802 | -37.81692676714783,144.96148804822712 803 | -37.815806222146676,144.96322714752327 804 | -37.8140829817326,144.95687052415803 805 | -37.81352340341141,144.96135299531082 806 | -37.813404401518845,144.9658854190708 807 | -37.81034596428145,144.96425358868072 808 | -37.81492973430791,144.9609000769317 809 | -37.813493506659455,144.9703382187514 810 | -37.8182,144.957 811 | -37.819945583440024,144.95477676397226 812 | -37.809860301309755,144.96877784772568 813 | -37.81304938014091,144.95779474036004 814 | -37.8155770405011,144.96344128469474 815 | -37.80837218160124,144.9691999857174 816 | -37.80958828161427,144.968572783555 817 | -37.8154,144.963 818 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | """ 2 | simulation with multiple servers and users 3 | This code is a modified version and the original code is from https://github.com/snsong/soCoM 4 | 5 | """ 6 | 7 | import sysModel 8 | from Offload_Strategy import OFFLOAD 9 | import random 10 | import simpy 11 | import xlwt 12 | import numpy as np 13 | import tensorflow.compat.v1 as tf 14 | tf.disable_v2_behavior() 15 | import pandas as pd 16 | 17 | simTime = 144000 # simulation time is 40 hours 18 | random_seed = 40 19 | rho = 2 # the processing speed for mec 20 | buffer = 500 # mec buffer 21 | job_duration = 30 22 | mecNum = 4 23 | 24 | def other_job(env, repairman): 25 | while True: 26 | done_in = job_duration 27 | while done_in: 28 | with repairman.request(priority=2) as req: 29 | yield req 30 | try: 31 | start = env.now 32 | yield env.timeout(done_in) 33 | done_in = 0 34 | except simpy.Interrupt: 35 | done_in -= env.now - start 36 | 37 | 38 | """ NON RL simulation """ 39 | def Simulation_NONRL(rho,name,methodName,userlng, userlat, sLng, sLat, rList): 40 | random.seed(random_seed) 41 | mec_l = sysModel.MEC_L() 42 | ul = sysModel.UL() 43 | 44 | for i in range(ul.userNum): 45 | user = sysModel.User(i) 46 | user.usersetting(userlng[i],userlat[i]) 47 | user.usercreat() 48 | ul.userList.append(user) 49 | 50 | for j in range(mec_l.mecNum): 51 | mec = sysModel.MEC(j, ul) 52 | mec.RHO = rho * mec.RHO 53 | mec.setMEC(sLng[j], sLat[j], rho + j * 2, 50, rList[j]) 54 | mec_l.mecList.append(mec) 55 | 56 | name += str(ul.userNum) 57 | 58 | print("Environment create for non rl") 59 | env = simpy.Environment() 60 | 61 | repairman = simpy.PreemptiveResource(env, capacity=1) 62 | env.process(ul.mobile(env, mec_l)) # user mobile 63 | 64 | edgeservers = [sysModel.SIMRUN3(env, i, methodName, name, repairman) 65 | for i in mec_l.mecList] 66 | env.process(other_job(env, repairman)) 67 | env.run(until=simTime) 68 | 69 | for user in ul.userList: 70 | user.userprint() 71 | 72 | """ RL Simulation""" 73 | def Simulation_RL(rho, ql, name, userlng, userlat, sLng, 74 | sLat, rList): 75 | random.seed(random_seed) 76 | mec_l = sysModel.MEC_L() 77 | ul = sysModel.UL() 78 | uList = ul.userList 79 | 80 | for i in range(ul.userNum): 81 | user = sysModel.User(i) 82 | user.usersetting(userlng[i], userlat[i]) 83 | user.usercreat() 84 | ul.userList.append(user) 85 | 86 | for j in range(mec_l.mecNum): 87 | mec = sysModel.MEC(j, ul) 88 | mec.setMEC(sLng[j], sLat[j], rho + j * 2, 50, rList[j]) 89 | mec_l.mecList.append(mec) 90 | 91 | name += str(ul.userNum) 92 | print("Environment create for RL") 93 | env = simpy.Environment() 94 | 95 | 96 | repairman = simpy.PreemptiveResource(env, capacity=1) 97 | env.process(ul.mobile(env, mec_l)) # user mobile 98 | 99 | edgeservers = [sysModel.SIMRUN2(env, i, ql,name, repairman) 100 | for i in mec_l.mecList] 101 | env.process(other_job(env, repairman)) 102 | env.run(until=simTime) 103 | 104 | ul.drawtrace(name) # Print user track 105 | for u in ul.userList: 106 | u.userprint() 107 | 108 | 109 | # ---------- load data user and server location --------- 110 | userData = pd.read_csv('./dataset/users-melbcbd-generated.csv') 111 | userlng = userData['Longitude'].values.tolist() # the longitude of user 112 | userlat = userData['Latitude'].values.tolist() # the latitude of user 113 | 114 | df = pd.read_csv('./dataset/edgeResources-melbCBD.csv') 115 | sLng = df['Longitude'].tolist() # the longitude of mec 116 | sLat = df['Latitude'].tolist() # the latitude of mec 117 | 118 | radiusList = [random.uniform(100, 500) for i in range(mecNum)] # the coverage of mec 119 | 120 | 121 | # ---------- NON RL ---------- 122 | # online = 'online' + str(sysModel.CB)+'_' 123 | # Simulation_NONRL(rho,online,'online',userlng, userlat, sLng, 124 | # sLat, radiusList) 125 | # 126 | # offline = 'offline' + str(sysModel.CB)+'_' 127 | # Simulation_NONRL(rho,offline,'offline',userlng, userlat, sLng, 128 | # sLat, radiusList) 129 | 130 | 131 | # ---------- RL ---------- 132 | print("BEGIN RL Learning!") 133 | ql = OFFLOAD() 134 | ql.update(ql,random_seed, userlng, userlat, sLng, sLat, radiusList) 135 | ql.printLost() 136 | Simulation_RL(rho, ql, ql.name, userlng, userlat, sLng, sLat, 137 | radiusList) 138 | -------------------------------------------------------------------------------- /results/DuelingDQN10loss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Deniece-long/SimforOffloading/2be133bbefcdee04bd2e2ec988d335de9e5a9fa8/results/DuelingDQN10loss.png -------------------------------------------------------------------------------- /sysModel.py: -------------------------------------------------------------------------------- 1 | 2 | """ 3 | system model with multiple mec servers, which is consist of job and user. 4 | 5 | Simulation based on SimPy: https://simpy.readthedocs.io/en/latest/. 6 | 7 | """ 8 | import random 9 | import numpy as np 10 | import matplotlib.pyplot as plt 11 | import copy 12 | import os 13 | import simpy 14 | import math 15 | import csv 16 | from math import * 17 | from Offload_Strategy import OFFLOAD 18 | from numpy import random as ra 19 | 20 | 21 | __all__ = ["Job", "User", "UL", "MEC_L", "MEC"] 22 | 23 | random.seed(1) 24 | 25 | # As the number of users increases,the frequency of unloading must be reduced, 26 | # otherwise it will be blocked 27 | 28 | UN = 10 # the number of user 29 | MECN = 4 # the number of user 30 | CB = 3 # Channel bandwidth allocation rate 31 | PEN = 1 32 | PLIST = 10 33 | PT_MEAN = 100.0 # the parameters for working time of mec 34 | PT_SIGMA = 30.0 35 | buffer = 500 # env中container 36 | REPAIR_TIME = 30 37 | 38 | class Job(object): 39 | def __init__(self, userID, jobID): 40 | self.userID = userID 41 | self.jobID = jobID 42 | self.jobTran = 0.0 # upload time 43 | self.jobDTran = 0.0 # download time 44 | self.jobRun = 0.0 # local processing time 45 | self.jobCPU = 0.0 # CPU and resource occurpy 46 | self.jobCEnergy = 0.0 # Transmission energy consumption 47 | self.jobLEnergy = 0.0 # Local execution energy consumption 48 | self.jobType = 'normal' # Task type 49 | self.jobState = 'LW' # Activation=act, printing=inh, local waiting=lw, local execution=lr, transmission=ts, remote waiting=rw, remote execution=rr, completion=cp, failure=fl 50 | self.jobValue = 1.0 # Task value 51 | 52 | # ---------- Dynamic changes during execution ---------- 53 | self.jobRunLeft = 0.0 # Task remote execution time remaining 54 | self.jobTransLeft = 0.0 # Task transfer time remaining 55 | self.jobChannel = 0.0 # The obtained channel bandwidth uses Mbps 56 | 57 | # ---------- Execution completed record ---------- 58 | self.jobBegin = 0.0 # The time when the task started 59 | self.jobFinish = 0.0 # The time when the task execution ends 60 | self.jobOffload = 0.0 # The time when the task started to unload 61 | self.jobRT =0.0 # Execution time 62 | self.jobTT = 0.0 # Transmission time 63 | self.jobAge = 0.0 # the time from the start of the offloading to the end of the execution 64 | 65 | 66 | class User(object): 67 | def __init__(self, userID): 68 | self.userID = userID 69 | self.jobList = [] # User task list 70 | self.jobData = 0.0 # Task transfer data volume 71 | self.jobTrans = [20] # Task transmission time-distribution- 72 | self.jobRuns = 20 # Task local execution time-distribution- 73 | self.jobCPU = 0.1 # Task CPU utilization 74 | self.jobNums = 50 # Initial number of tasks 75 | self.jobCEnergy = [20] # Transmission energy consumption 76 | self.jobLEnergy = [20] # local energy consumption 77 | self.jobDDL = 10 # Task deadline 78 | 79 | # ---------- location information ----------- 80 | self.X = 0.0 # 纬度 81 | self.Y = 0.0 # 经度 82 | self.speed = 0.0 83 | self.trace = [] # User movement trajectory 84 | self.userPriority = [0, 0, 0, 0] # User priority 85 | self.userMEC = [0, 0, 0, 0] # User and mec connectivity 用户与mec的连接 86 | 87 | # ---------- Log ----------- 88 | self.Throughout = 0.0 # Throughput 89 | self.CEnergy = 0.0 # Remote energy consumption 90 | self.LEnergy = 0.0 # Local energy consumption 91 | self.commTotal = 0.0 # When the transfer occurredeA 92 | self.userAge = 0.0 # user tasks are offloaded to the completion time 93 | 94 | def usersetting(self, uLng, uLat): 95 | self.jobNums = 10 96 | self.jobData = (UN - self.userID) * 8 # Decreasing data volume, kb 97 | self.jobRuns = (self.userID + 1) * 10 # job running time 98 | self.jobDDL = (self.userID + 1) * 12 # job deadline 99 | 100 | self.jobCPU = random.randint(1, UN) / (UN * 2) # Increasing resource usage 101 | self.jobLEnergy = [(self.userID + 1) * 1.25 * i for i in range(7, 25)] 102 | self.X = uLng # longitude 103 | self.Y = uLat # latitude 104 | self.trace = [[self.X], [self.Y]] 105 | self.speed = random.choice([0, 0.2, 0.4, 0.6, 0.8, 1]) # speed,m/s 用户移动速度 106 | 107 | 108 | def setjobenergy(self, jid, jobtran): 109 | BDu = self.jobList[jid].jobChannel 110 | BDd = BDu / 2 111 | self.jobList[jid].jobTran = self.jobData / BDu # Sampling from the transmission time distribution 112 | self.jobList[jid].jobDTran = self.jobData / BDd 113 | LET = BDu * 0.438 + 0.051 * BDd + 1.288 # 4G 114 | # WIFI = BDu*0.283 + 0.137*BDd + 0.132 115 | # self.JOB_LIST[jid].jobCEnergy = random.choice([LET,WIFI])*(jobtran/1000) 116 | self.jobList[jid].jobCEnergy = LET * (jobtran / 1000) 117 | 118 | def jobcreat(self, jobid, jobtype='normal'): 119 | jobrun = self.jobRuns # Sampling from the execution time distribution 120 | onejob = Job(self.userID, jobid) 121 | onejob.jobRun = jobrun 122 | onejob.jobValue = jobrun 123 | onejob.jobType = jobtype 124 | onejob.jobCPU = self.jobCPU 125 | onejob.jobLEnergy = random.choice(self.jobLEnergy) 126 | return onejob 127 | 128 | def usercreat(self): 129 | onejob = self.jobcreat(0) 130 | self.jobList.append(onejob) 131 | 132 | for i in range(1, self.jobNums): 133 | onejob = self.jobcreat(i) 134 | self.jobList.append(onejob) 135 | 136 | def userprint(self): 137 | print("User %d totalfinish %.2f, energy %.2f , age %.2f." % ( 138 | self.userID, self.Throughout, self.CEnergy, self.userAge)) 139 | 140 | def usersend(self, x, y, mecid): # User offloading algorithm 141 | jobid = -1 142 | distance = (self.X - x) ** 2 + (self.Y - y) ** 2 143 | 144 | if distance > 1e6: # Not in range 145 | self.userMEC[mecid] = 0 146 | return -1 147 | else: 148 | self.userMEC[mecid] = 1 149 | 150 | if (sum(self.userMEC) >= 2) & ( 151 | self.userPriority[mecid] < max(self.userPriority)): # Multiple connection choices and not optimal 152 | return -1 153 | for i in range(len(self.jobList)): 154 | job = self.jobList[i] 155 | 156 | if job.jobState == 'LW': 157 | jobid = i 158 | self.jobappend() # Ensure that there is a continuous task flow 159 | return jobid 160 | return jobid 161 | 162 | def userrun(self): # Local execution of the most expensive tasks 163 | jobid = -1 164 | for i in range(len(self.jobList)): 165 | job = self.jobList[i] 166 | if job.jobState == 'LW': 167 | jobid = i 168 | return jobid 169 | return jobid 170 | 171 | def jobrefresh(self, env, fjob): 172 | jobID = fjob.jobID 173 | self.Throughout += 1 174 | self.jobList[jobID].jobFinish = env.now 175 | 176 | def jobappend(self): 177 | jid = len(self.jobList) 178 | onejob = self.jobcreat(jid) 179 | self.jobList.append(onejob) 180 | 181 | def runlocal(self, env): 182 | while True: 183 | jobID = self.userrun() 184 | if jobID == -1: 185 | 186 | self.jobappend() 187 | continue 188 | else: 189 | 190 | self.jobList[jobID].jobState = 'LR' # Local execution 191 | self.jobList[jobID].jobBegin = env.now 192 | RUNNINGTIME = self.jobList[jobID].jobRun 193 | 194 | yield env.timeout(RUNNINGTIME) 195 | self.jobList[jobID].jobState = 'CP' # Finished 196 | self.LEnergy += self.jobList[jobID].jobLEnergy 197 | 198 | self.jobrefresh(env, self.jobList[jobID]) 199 | self.jobappend() 200 | 201 | 202 | class UL(object): # Total control of the movement of all users 203 | def __init__(self): 204 | self.userNum = UN 205 | self.userList = [] # user list 206 | self.frequncy = 3600.0 207 | 208 | def reset(self): 209 | self.userList = [] 210 | 211 | def M_strait(self, userID, mecList, Y, X): # Linear moving model 212 | userspeed = self.userList[userID].speed * self.frequncy / 100000 213 | angle_in_radians = random.uniform(0, 360) # 0~360度夹脚 214 | self.userList[userID].X += (userspeed * math.cos(angle_in_radians)) 215 | self.userList[userID].Y += (userspeed * math.sin(angle_in_radians)) 216 | self.userList[userID].trace[0].append(self.userList[userID].X) 217 | self.userList[userID].trace[1].append(self.userList[userID].Y) 218 | 219 | # 用于移动后,判断该用户在那个服务器范围内,然后选择即离用户最近的MEC作为结果返回 220 | mecList = [] 221 | belongMec = {} 222 | for mec in mecList: 223 | distance = mec.calcDistance('%.6f' % mec.mecY, '%.6f' % mec.mecX, '%.6f' % Y, '%.6f' % X) 224 | if distance < mec.radius : 225 | mecList.append(mec.mecID) 226 | belongMec[mec.mecID] = round(distance, 4) 227 | mec.SCORE += 1 228 | else: 229 | print('移动后用户没有在该服务器范围内') # 即用户的任务就会失败 230 | 231 | # 距离排序 小 -> 大 232 | disSort = sorted(belongMec.items(), key=lambda item: item[1], reverse=False) 233 | for mecId, distance in disSort: 234 | mecList[mecId].includUsers = userID 235 | self.ul.userList[userID].userBelongMec = True 236 | # 任务会有时间上的延迟,用户之前所在的服务器与现在所在服务器,进行对比然后把任务结果返回 237 | # 给当前所在服务器 238 | 239 | def mobile(self, env, mecList): # userrun is stratege functionname 240 | while True: 241 | yield env.timeout(self.frequncy) 242 | for u in self.userList: 243 | self.M_strait(u.userID, mecList, u.Y, u.X) 244 | 245 | def save_txt(self, list1, list2, save_path): 246 | if os.path.isfile(save_path): 247 | os.remove(save_path) 248 | with open(save_path, "a") as f: 249 | for i in range(len(list1)): 250 | f.write('{} {}\n'.format(list1[i], list2[i])) 251 | f.close() 252 | 253 | def drawtrace(self, name): # 没有使用 254 | fig = plt.figure(figsize=(15, 6)) 255 | plt.rcParams.update({'font.size': 6}) 256 | plt.title("User move") 257 | l1 = [] 258 | l2 = [] 259 | for uid in range(len(self.userList)): 260 | u = self.userList[uid] 261 | for i in range(len(u.trace[0])): 262 | l1.append(u.trace[0][i]) 263 | l2.append(u.trace[1][i]) 264 | lle = copy.copy(l1) 265 | llq = copy.copy(l2) 266 | plt.plot(lle, llq) 267 | plt.show() 268 | save_path = 'usermove/user_' + str(uid) + '.data' 269 | self.save_txt(u.trace[0], u.trace[1], save_path) 270 | 271 | 272 | 273 | class MEC_L(object): 274 | def __init__(self): 275 | self.mecNum = MECN 276 | self.mecList = [] 277 | 278 | 279 | class MEC(object): 280 | def __init__(self, mecid, userlist): 281 | # ---------- Basic Information ---------- 282 | self.ID = mecid 283 | self.userNum = UN 284 | self.ul = userlist 285 | self.CHANNEL = 50.0 # Mps, KBpms total bandwidth 286 | self.RHO = 2.0 # Local and remote execution basic rate ratio ρ 287 | self.TIMER = 10 # System status refresh frequency 288 | self.Delta = 5 # Offloading frequency=TIMER*Delta 289 | self.CB = CB # Channel bandwidth allocation factor 290 | 291 | self.mecX = 0.0 # mec location information 292 | self.mecY = 0.0 293 | self.radius = 0.0 294 | 295 | # ---------- Real-time change information 296 | self.jobPool = [] # Task list in progress 297 | self.transPool = [] # Transferring task list 298 | self.waitingList = [] # Remote waiting list 299 | self.priorityList = {} # Priority list 300 | self.channelUsed = 0.0 # Channel occupied bandwidth 301 | self.sysTime = 0.0 # System last time 302 | self.sysCPU = 0.0 # The current CPU usage of the system 303 | self.ACTION = 0 # The last action taken by the system 304 | self.SCORE = 0.0 # System last score 305 | 306 | # ---------- log ------------ 307 | self.offloadJob = [] # Task records that have been offloaded 308 | self.mecAge = 0.0 # Total age 309 | self.commTime = 0.0 # Total transmission time 310 | self.commEnergy = 0.0 # Total transmission energy consumption 311 | self.Run = 0.0 # Total execution time 312 | self.Throughout = 1 # Total offloading completed tasks 313 | self.Failure = 1 314 | 315 | # ---------- RL ---------- 316 | self.REWARD = 0.0 317 | 318 | # ----------- MEC ---------- 319 | self.fail_time = 0 # start failure time 320 | self.jobFaultProb = 0.0 # The probability of task failure 321 | self.runRemCount = 0 322 | 323 | 324 | def setMEC(self, x, y, rho, channel, r): 325 | userNum = [] 326 | coverNum = {} 327 | self.mecX = x # longitude 328 | self.mecY = y 329 | self.RHO = rho # Computing speed 330 | self.CHANNEL = channel # Bandwidth, network resources 331 | self.radius = r # coverage 332 | 333 | for u in self.ul.userList: 334 | distance = self.calcDistance('%.6f' % self.mecY, '%.6f' % self.mecX, 335 | '%.6f' % u.Y, '%.6f' % u.X) 336 | if distance < self.radius: 337 | userNum.append(u.userID) 338 | coverNum[u.userID] = round(distance, 4) 339 | 340 | 341 | # Calculate the distance between the edge server and the user 342 | def calcDistance(self, Lat_A, Lng_A, Lat_B, Lng_B): 343 | ra = 6378.140 # Equatorial radius (km) 344 | rb = 6356.755 # Polar radius (km) 345 | flatten = (ra - rb) / ra # Oblateness of the earth 346 | rad_lat_A = radians(float(Lat_A)) 347 | rad_lng_A = radians(float(Lng_A)) 348 | rad_lat_B = radians(float(Lat_B)) 349 | rad_lng_B = radians(float(Lng_B)) 350 | pA = atan(rb / ra * tan(rad_lat_A)) 351 | pB = atan(rb / ra * tan(rad_lat_B)) 352 | xx = acos(sin(pA) * sin(pB) + cos(pA) * cos(pB) * cos(rad_lng_A - rad_lng_B)) 353 | c1 = (sin(xx) - xx) * (sin(pA) + sin(pB)) ** 2 / cos(xx / 2) ** 2 354 | c2 = (sin(xx) + xx) * (sin(pA) - sin(pB)) ** 2 / sin(xx / 2) ** 2 355 | dr = flatten / 8 * (c1 - c2) 356 | distance = ra * (xx + dr) # km 357 | return distance 358 | 359 | # ---------- System log ---------- 360 | def writelog(self, env, fn, name, value, timeslot=5000): 361 | yield env.timeout(5000) 362 | f = open('./userNum/USER_' + str(fn) + '_' + str(name) + '_' + str(value) + '.data', 'w') 363 | oneline = 'TIMESLOT' + ',' + 'Throughout' + ',' + 'Failure' + ',' + 'Failurerate' + ',' + 'User' + \ 364 | ',' + 'mecAge' + ',' + 'Run' + ',' + 'commTotal' + ',' + 'commEnergy' + ',' + 'reward\n' 365 | f.write(oneline) 366 | f.close() 367 | while True: 368 | yield env.timeout(timeslot) 369 | age = 0.0 370 | run = 0.0 371 | throu = 0.0 372 | comm = 0.0 373 | energy = 0.0 374 | user = 0 375 | 376 | for i in range(self.userNum): 377 | user += self.ul.userList[i].userMEC[self.ID] 378 | 379 | sumreward = self.REWARD 380 | throu = self.Throughout 381 | fail = self.Failure 382 | age = self.mecAge / 1000 383 | run = self.Run 384 | comm = self.commTime / 1000 385 | energy = self.commEnergy 386 | sumreward = self.REWARD 387 | f = open('./userNum/USER_' + str(fn) + '_' + str(name) + '_' + str(value) + '.data', 'a') 388 | oneline = str(env.now / 1000) + ',' + str(throu) + ',' + str(fail) + ',' + str(fail / throu) + ',' + str( 389 | user) + ',' \ 390 | + str(age) + ',' + str(run) + ',' + str(comm) + ',' + str(energy) + ',' + str(sumreward) + '\n' 391 | f.write(oneline) 392 | f.close() 393 | 394 | def writeoffload(self, env,fn, name, value, timeslot=5000): 395 | yield env.timeout(5000) 396 | f1 = open('./userNum/JOB_' + str(fn) + '_' + str(name) + '_' + str(value) + '.data', 'w') 397 | titleline = ('No' + ',' + 'Uid' + ',' + 'Jid' + ',' + 'offloadtime' + ',' 398 | + 'commutime' + ',' + 'runtime' + ',' + 'energy' + ',' + 'AoI' 399 | + ',' + 'state\n') 400 | f1.write(titleline) 401 | f1.close() 402 | i = 0 403 | while True: 404 | yield env.timeout(timeslot) 405 | f2 = f1 = open('./userNum/JOB_' + str(fn) + '_' + str(name) + '_' + str(value) + '.data', 'a') 406 | for j in self.offloadJob: 407 | oneline = str(i) + ',' + str(j.userID) + ',' + str(j.jobID) + ',' + str(j.jobOffload / 1000) + ',' 408 | oneline += str(j.jobTran / 1000) + ',' + str(j.jobRun / 1000) + ',' + str(j.jobCEnergy) + ',' + str( 409 | j.jobAge / 1000) + ',' + str(j.jobState) + '\n' 410 | i += 1 411 | f2.write(oneline) 412 | f2.close() 413 | 414 | 415 | 416 | # ---------- RL learning ---------- 417 | def getstate(self): # seven system status 418 | state = [] 419 | state.append(self.channelUsed) 420 | state.append(self.sysCPU) 421 | state.append(len(self.jobPool)) 422 | state.append(len(self.transPool)) 423 | state.append(self.jobFaultProb) # The probability that a task may fail 424 | uwait = 0.0 425 | utran = 0.0 426 | for i in self.jobPool: 427 | uwait += self.ul.userList[i[0]].jobList[i[1]].jobRunLeft 428 | for j in self.transPool: 429 | utran += self.ul.userList[j[0]].jobList[j[1]].jobTransLeft 430 | state.append(uwait) 431 | state.append(utran) 432 | state = np.array(state) 433 | return state 434 | 435 | def reset(self): 436 | # ---------- Real-time change information ---------- 437 | self.jobPool = [] # Task list in progress 438 | self.transPool = [] # Transferring task list 439 | self.waitingList = [] # Remote waiting list 440 | self.channelUsed = 0.0 # Channel occupied bandwidth 441 | self.sysTime = 0.0 # System last time 442 | self.sysCPU = 0.0 # The current CPU usage of the system 443 | # ---------- log ---------- 444 | self.offloadJob = [] # Task records that have been offloaded 445 | self.REWARD = 0.0 446 | 447 | # ---------- Channel interference ---------- 448 | def channeldisturb(self, userID, jobID): # Bandwidth allocation 449 | cl = self.CHANNEL - self.channelUsed 450 | cl = cl / self.CB 451 | self.channelUsed += cl 452 | jt = self.ul.userList[userID].jobData / cl 453 | self.ul.userList[userID].jobList[jobID].jobChannel = cl 454 | 455 | return jt 456 | 457 | def offloadOne(self, env, userID): # offload a task 458 | jobID = self.ul.userList[userID].usersend(self.mecX, self.mecY, self.ID) 459 | if jobID == -1: 460 | return 461 | 462 | TRANSPOTTIME = self.channeldisturb(userID, jobID) # Really required transmission time 463 | 464 | self.ul.userList[userID].jobList[jobID].jobOffload = env.now # Task start transmission time 465 | self.ul.userList[userID].jobList[ 466 | jobID].jobState = 'TS' # Task status changes, start transmission TS -transmission 467 | self.ul.userList[userID].jobList[jobID].jobAge = env.now # Record moments 468 | self.ul.userList[userID].jobList[jobID].jobTT = TRANSPOTTIME # Task real transmission time record 469 | self.ul.userList[userID].jobList[jobID].jobTransLeft = TRANSPOTTIME # Remaining transmission time 470 | self.ul.userList[userID].setjobenergy(jobID, TRANSPOTTIME) # Task transmission energy consumption calculation 471 | self.commEnergy += self.ul.userList[userID].jobList[ 472 | jobID].jobCEnergy # The user spends the total task to transfer energy 473 | self.transPool.append((userID, jobID)) # Task joins the transfer pool 474 | 475 | 476 | def time_per_part(self,mecID): 477 | re1 = random.normalvariate(PT_MEAN, PT_SIGMA) 478 | return re1 479 | 480 | def run_remote(self, env, mecID, waitingLen, repairman): # Remote execution 481 | while True: 482 | worktime = self.time_per_part(mecID) 483 | while worktime: 484 | try: 485 | start = env.now 486 | yield env.timeout(worktime) 487 | if self.sysCPU > 0.8: # CPU overload 488 | yield env.timeout(self.TIMER * 2) # System status refresh frequency 489 | self.SCORE = -abs(self.SCORE) 490 | continue 491 | else: 492 | yield waitingLen.get(1) # Get a task from the waiting list 493 | job = self.waitingList.pop() 494 | userID = job['userID'] 495 | jobID = job['jobID'] 496 | 497 | self.jobPool.append((userID, jobID)) # Put tasks into the execution queue pool 498 | self.sysCPU += ( 499 | self.ul.userList[userID].jobList[jobID].jobCPU / self.RHO) # Real resource usage 500 | self.ul.userList[userID].jobList[jobID].jobState = 'RR' # RR-Remote execution 501 | self.ul.userList[userID].jobList[jobID].jobBegin = env.now 502 | RUNNINGTIME = float(self.ul.userList[userID].jobList[ 503 | jobID].jobRun) / self.RHO # Really required execution time 504 | self.ul.userList[userID].jobList[jobID].jobRT = RUNNINGTIME 505 | self.ul.userList[userID].jobList[jobID].jobRunLeft = RUNNINGTIME 506 | if self.fail_time > self.ul.userList[userID].jobList[jobID].jobAge: 507 | if self.ul.userList[userID].jobList[jobID].jobAge + RUNNINGTIME > self.fail_time: 508 | chazhi = self.fail_time - self.ul.userList[userID].jobList[jobID].jobAge 509 | self.jobFaultProb = chazhi / RUNNINGTIME 510 | else: 511 | self.jobFaultProb = 1 512 | self.runRemCount += 1 513 | done_in = 0 514 | except simpy.Interrupt: 515 | self.broken = True 516 | done_in -= env.now - start 517 | with repairman.request(priority=1) as req: 518 | yield req 519 | yield env.timeout(REPAIR_TIME) 520 | self.broken = False 521 | 522 | # online algorithm 523 | def runRemoteByOther(self, env, waitingLen): 524 | while True: 525 | yield env.timeout(self.TIMER) 526 | if self.sysCPU > 0.8: 527 | yield env.timeout(self.TIMER * 2) 528 | self.SCORE = -abs(self.SCORE) 529 | continue 530 | else: 531 | yield waitingLen.get(1) 532 | job = self.waitingList.pop(0) 533 | userID = job.userID 534 | jobID = job.jobID 535 | self.jobPool.append((userID, jobID)) 536 | self.sysCPU += self.ul.userList[userID].jobList[jobID].jobCPU 537 | 538 | self.ul.userList[userID].jobList[jobID].jobState = 'RR' 539 | self.ul.userList[userID].jobList[jobID].jobBegin = env.now 540 | RUNNINGTIME = float(self.ul.userList[userID].jobList[jobID].jobRun) / self.RHO 541 | self.ul.userList[userID].jobList[jobID].jobRT = RUNNINGTIME 542 | self.ul.userList[userID].jobList[jobID].jobRunLeft = RUNNINGTIME 543 | 544 | # ---------- Refresh system-transmission part ---------- 545 | def refresh_trans(self, env, waitingLen): 546 | while True: 547 | yield env.timeout(self.TIMER) 548 | transpool = [] 549 | for Jt in self.transPool: 550 | userID = Jt[0] 551 | jobID = Jt[1] 552 | onejob = self.ul.userList[userID].jobList[jobID] 553 | 554 | if onejob.jobTransLeft > self.TIMER: 555 | transpool.append((userID, jobID)) 556 | self.ul.userList[userID].jobList[jobID].jobTransLeft = self.ul.userList[userID].jobList[ 557 | jobID].jobTransLeft - self.TIMER 558 | else: 559 | self.ul.userList[userID].jobList[jobID].jobState = 'RW' # RW - remote waiting 560 | self.channelUsed -= self.ul.userList[userID].jobList[jobID].jobChannel 561 | 562 | self.waitingList.append({'userID': userID, 'jobID': jobID}) 563 | self.ul.userList[userID].jobappend() 564 | yield waitingLen.put(1) 565 | self.transPool = transpool 566 | 567 | # ---------- Refresh system-execution part ----------- 568 | def refresh_sys(self, env, name='', value='', flag=1): 569 | if flag == 1: 570 | f = open('./userNum/ACTION_' + str(name) + '_' + str(value) + '.data', 'w') 571 | oneline = ('sysTime' + ',' + 'Action' + ',' + 'ChannelUsed' + ',' + 'TransJob' + ',' + 'CPU' + ',' + 572 | 'JobFaultProb' + ',' + 'RunningJob' + ',' + 'ActionQos\n') 573 | f.write(oneline) 574 | f.close() 575 | while True: 576 | yield env.timeout(self.TIMER) 577 | self.sysTime = env.now 578 | jobpool = [] 579 | for Jr in self.jobPool: 580 | userID = Jr[0] 581 | jobID = Jr[1] 582 | onejob = self.ul.userList[userID].jobList[jobID] 583 | 584 | if onejob.jobRunLeft > self.TIMER: 585 | jobpool.append((userID, jobID)) 586 | self.ul.userList[userID].jobList[jobID].jobRunLeft = self.ul.userList[userID].jobList[ 587 | jobID].jobRunLeft - self.TIMER 588 | else: 589 | if flag == 1: 590 | f = open('./userNum/ACTION_' + str(name) + '_' + str(value) + '.data', 'a') 591 | oneline = str(self.sysTime) + ',' + str(self.ACTION) + ',' + str( 592 | self.channelUsed) + ',' + str(len(self.transPool)) + \ 593 | ',' + str(self.sysCPU) + ',' + str(self.jobFaultProb) + ',' \ 594 | + str(len(self.jobPool)) 595 | oneline += ',' + str(self.SCORE) + '\n' 596 | f.write(oneline) 597 | self.sysCPU -= (self.ul.userList[userID].jobCPU / self.RHO) 598 | self.ul.userList[userID].jobrefresh(env, self.ul.userList[userID].jobList[jobID]) 599 | self.offloadJob.append(self.ul.userList[userID].jobList[jobID]) 600 | # ---------- log ----------- 601 | self.ul.userList[userID].jobList[jobID].jobAge = env.now - self.ul.userList[userID].jobList[ 602 | jobID].jobAge 603 | self.mecAge += self.ul.userList[userID].jobList[jobID].jobAge 604 | self.Run += self.ul.userList[userID].jobList[jobID].jobRun 605 | self.commTime += self.ul.userList[userID].jobList[jobID].jobTT 606 | self.Throughout += 1 607 | # ---------- REWARD ---------- 608 | score = self.ul.userList[userID].jobList[jobID].jobRun / \ 609 | (self.ul.userList[userID].jobList[jobID].jobRT + 610 | self.ul.userList[userID].jobList[jobID].jobCEnergy) 611 | 612 | self.SCORE = score 613 | self.ul.userList[userID].jobList[jobID].jobState = 'CP' # CP-completion 614 | self.REWARD += self.SCORE 615 | self.priorityList[userID] = self.SCORE 616 | self.ul.userList[userID].userPriority[self.ID] = self.SCORE 617 | self.jobPool = jobpool 618 | f.close() 619 | 620 | 621 | # ---------- offloading ---------- 622 | def offloadDQ(self, env, waitingLen, ql): # deep Q learning 623 | counter = 0 624 | while True: 625 | counter += 1 626 | yield env.timeout(self.TIMER) 627 | 628 | if (self.CHANNEL - self.channelUsed <= 1) or (self.sysCPU > 0.9): 629 | self.SCORE = -abs(self.SCORE) 630 | yield env.timeout(self.TIMER * self.Delta) 631 | continue 632 | else: 633 | observation = self.getstate() 634 | self.ACTION = ql.RL.choose_action(observation) 635 | if (counter < UN * 5) or (counter % 10 == 0): 636 | pkey = random.sample([i for i in range(UN)], k=self.ACTION) 637 | else: 638 | plist = sorted(self.priorityList.items(), key=lambda i: i[1], reverse=True) 639 | pkey = [plist[i][0] for i in range(len(plist))][:self.ACTION] 640 | for i in range(len(pkey)): 641 | userID = pkey[i] 642 | self.offloadOne(env, userID) 643 | 644 | def time_to_failure(self): 645 | fault_time = ra.poisson(lam=100) 646 | return fault_time 647 | 648 | 649 | def break_machine(self, env, mecID, remote): 650 | while True: 651 | time = self.time_to_failure() 652 | yield env.timeout(time) 653 | self.fail_time = env.now 654 | if not self.broken: 655 | self.remote.interrupt() 656 | 657 | def randombin(self, action): 658 | userlist = list(bin(action).replace('0b', '')) 659 | zero = self.userNum - len(userlist) 660 | ll = [0 for i in range(zero)] 661 | for i in userlist: 662 | ll.append(int(i)) 663 | return ll 664 | 665 | def channelDisturbByOL(self, userID, jobID, jobnum, channel): 666 | disturb = np.log2(1 + 1 / (self.CB + jobnum)) 667 | cl = channel * disturb 668 | if self.channelUsed + cl > self.CHANNEL: 669 | return -1 670 | self.channelUsed += cl 671 | jt = self.ul.userList[userID].jobData / cl 672 | self.ul.userList[userID].jobList[jobID].jobChannel = cl 673 | return jt 674 | 675 | 676 | def offloadOneByOne(self, env, userID, jobnum, channel, x, y, mecID): 677 | jobID = self.ul.userList[userID].usersend(x, y, mecID) 678 | if jobID == -1: 679 | return 680 | 681 | TRANSPOTTIME = self.channelDisturbByOL(userID, jobID, jobnum, channel) 682 | if TRANSPOTTIME == -1: 683 | self.SCORE = -abs(self.SCORE) 684 | return 685 | self.ul.userList[userID].jobList[jobID].jobOffload = env.now # Task start transmission time 686 | self.ul.userList[userID].jobList[ 687 | jobID].jobState = 'TS' # Task status changes, start transmission TS -transmission 688 | self.ul.userList[userID].jobList[jobID].jobAge = env.now # Record birthday moments 689 | self.ul.userList[userID].jobList[jobID].jobTT = TRANSPOTTIME # Task real transmission time record 690 | self.ul.userList[userID].jobList[jobID].jobTransLeft = TRANSPOTTIME # Remaining transmission time 691 | self.ul.userList[userID].setjobenergy(jobID, TRANSPOTTIME) # Task transmission energy consumption calculation 692 | self.commEnergy += self.ul.userList[userID].jobList[ 693 | jobID].jobCEnergy # The user spends the total task to transfer energy 694 | self.transPool.append((userID, jobID)) # Task joins the transfer pool 695 | 696 | # ---------- online ---------- 697 | def offloadOL(self, env, waitingLen): 698 | while True: 699 | if self.CHANNEL - self.channelUsed <= 1: 700 | self.SCORE = -abs(self.SCORE) 701 | yield env.timeout(self.TIMER * self.Delta * 2) 702 | continue 703 | yield env.timeout(self.TIMER * self.Delta) 704 | 705 | self.ACTION = random.randint(1, 2 ** self.userNum - 1) 706 | 707 | userlist = self.randombin(self.ACTION) 708 | jobnum = sum(userlist) 709 | channel = self.CHANNEL - self.channelUsed 710 | 711 | for i in range(len(userlist)): 712 | if userlist[i] == 1: 713 | userID = i 714 | self.offloadOneByOne(env, userID, jobnum, channel, 715 | self.ul.userList[userID].X, 716 | self.ul.userList[userID].Y, 717 | self.ID) 718 | 719 | 720 | def offline(self): 721 | score = 0.0 722 | action = 1 723 | for i in range(2 ** self.ul.userNum): 724 | userlist = self.randombin(i) 725 | score_ = 0 726 | jobnum = sum(userlist) 727 | channel = self.CHANNEL - self.channelUsed 728 | cl = 0 729 | for u in range(len(userlist)): 730 | if userlist[u] == 1: 731 | userID = u 732 | disturb = np.log2(1 + 1 / (self.CB + jobnum)) 733 | cl = channel * disturb 734 | score_ += np.average(self.ul.userList[userID].jobRuns) / \ 735 | self.ul.userList[userID].jobData * cl 736 | if score_ > score: 737 | score = score_ 738 | action = i 739 | return action 740 | 741 | # ---------- offline ---------- 742 | def offloadOF(self, env, waitingLen): 743 | while True: 744 | if self.CHANNEL - self.channelUsed <= 1: 745 | self.SCORE = -abs(self.SCORE) 746 | yield env.timeout(self.TIMER * self.Delta * 2) 747 | continue 748 | yield env.timeout(self.TIMER * self.Delta) 749 | self.ACTION = self.offline() 750 | 751 | userlist = self.randombin(self.ACTION) 752 | jobnum = sum(userlist) 753 | channel = self.CHANNEL - self.channelUsed 754 | for i in range(len(userlist)): 755 | if userlist[i] == 1: 756 | userID = i 757 | self.offloadOneByOne(env, userID, jobnum, channel, 758 | self.ul.userList[userID].X, 759 | self.ul.userList[userID].Y, 760 | self.ID 761 | ) 762 | 763 | 764 | class SIMRUN(object): 765 | def __init__(self,env,mec,ql,repairman): 766 | self.env = env 767 | self.mec = mec 768 | self.broken = False 769 | 770 | waitingLen = simpy.Container(env, buffer, init=len(self.mec.waitingList)) 771 | self.remote = env.process(self.mec.run_remote(self.env, self.mec.ID,waitingLen, repairman)) 772 | env.process(self.mec.refresh_trans(env, waitingLen)) 773 | sys0 = env.process(self.mec.refresh_sys(env, flag=0)) 774 | self.env.process(self.mec.break_machine(env, self.mec.ID,self.remote)) 775 | self.env.process(ql.step(self.mec, env)) 776 | 777 | """ RL simulation""" 778 | class SIMRUN2(object): 779 | def __init__(self, env, mec, ql, name, repairman): 780 | self.env = env 781 | self.mec = mec 782 | self.name = name 783 | self.broken = False 784 | 785 | waitingLen = simpy.Container(env, buffer, init=len(self.mec.waitingList)) 786 | self.remote = env.process(self.mec.run_remote(env, self.mec.ID,waitingLen, repairman)) 787 | env.process(self.mec.refresh_trans(env, waitingLen)) 788 | env.process(self.mec.refresh_sys(env, self.name, 'mec'+str(self.mec.ID)+'_'+str(self.mec.RHO) 789 | +'_'+str(self.mec.CHANNEL))) 790 | 791 | env.process(self.mec.break_machine(env, self.mec.ID,self.remote)) 792 | env.process(self.mec.offloadDQ(env,waitingLen,ql)) 793 | env.process(self.mec.writelog(env,name,'mec'+str(self.mec.ID), 794 | str(self.mec.RHO)+str(self.mec.CHANNEL))) 795 | env.process(self.mec.writeoffload(env,name, 'mec0', str(self.mec.RHO) + str(self.mec.CHANNEL))) 796 | 797 | """ Non RL simulation""" 798 | class SIMRUN3(object): 799 | def __init__(self, env, mec, methodName, name, repairman): 800 | self.env = env 801 | self.mec = mec 802 | self.methodName = methodName 803 | self.name = name 804 | self.broken = False 805 | 806 | 807 | waitingLen = simpy.Container(env, buffer, init=len(self.mec.waitingList)) 808 | self.remote = env.process(self.mec.run_remote(env, self.mec.ID,waitingLen, repairman)) 809 | 810 | env.process(self.mec.refresh_trans(env, waitingLen)) 811 | 812 | 813 | env.process(self.mec.refresh_sys(env, self.name, 'mec'+str(self.mec.ID)+'_'+str(self.mec.RHO) 814 | +'_'+str(self.mec.CHANNEL))) 815 | 816 | env.process(self.mec.break_machine(env, self.mec.ID,self.remote)) 817 | if methodName == 'offline': 818 | env.process(self.mec.offloadOF(env,waitingLen)) 819 | elif methodName == 'online': 820 | env.process(self.mec.offloadOL(env,waitingLen)) 821 | 822 | env.process(self.mec.writelog(env,name,'mec'+str(self.mec.ID), 823 | str(self.mec.RHO)+str(self.mec.CHANNEL))) 824 | 825 | env.process(self.mec.writeoffload(env,name, 'rho', self.mec.RHO)) 826 | 827 | 828 | 829 | -------------------------------------------------------------------------------- /userNum/ACTION_offline3_10_mec0_2_50.data: -------------------------------------------------------------------------------- 1 | sysTime,Action,ChannelUsed,TransJob,CPU,JobFaultProb,RunningJob,ActionQos 2 | 170,7,-3.552713678800501e-15,0,0.175,0.24,1,0.0 3 | 290,7,-3.552713678800501e-15,0,0.025,0.3111111111111111,1,1.9998146311711043 4 | 410,7,-3.552713678800501e-15,0,0.075,0.225,1,1.99958811592774 5 | 530,7,-3.552713678800501e-15,0,0.075,1,1,1.9993050440235072 6 | 660,7,-3.552713678800501e-15,0,0.075,1,1,1.9993050440235072 7 | 790,7,-3.552713678800501e-15,0,0.025,1,1,1.9993050440235072 8 | 910,7,-3.552713678800501e-15,0,0.075,1,1,1.99958811592774 9 | 1040,7,-3.552713678800501e-15,0,0.025,1,1,1.9993050440235072 10 | 1150,7,-3.552713678800501e-15,0,0.075,1,1,1.99958811592774 11 | 1290,7,-3.552713678800501e-15,0,0.175,1,1,1.9993050440235072 12 | 1410,7,-3.552713678800501e-15,0,0.025,1,1,1.9998146311711043 13 | 1530,7,-3.552713678800501e-15,0,0.075,1,1,1.99958811592774 14 | -------------------------------------------------------------------------------- /userNum/JOB_offline3_10_rho_2.data: -------------------------------------------------------------------------------- 1 | No,Uid,Jid,offloadtime,commutime,runtime,energy,AoI,state 2 | 0,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 3 | 1,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 4 | 2,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 5 | 3,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 6 | 4,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 7 | 5,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 8 | 6,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 9 | 7,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 10 | 8,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 11 | 9,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 12 | 10,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 13 | 11,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 14 | 12,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 15 | 13,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 16 | 14,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 17 | 15,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 18 | 16,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 19 | 17,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 20 | 18,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 21 | 19,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 22 | 20,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 23 | 21,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 24 | 22,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 25 | 23,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 26 | 24,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 27 | 25,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 28 | 26,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 29 | 27,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 30 | 28,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 31 | 29,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 32 | 30,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 33 | 31,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 34 | 32,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 35 | 33,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 36 | 34,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 37 | 35,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 38 | 36,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 39 | 37,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 40 | 38,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 41 | 39,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 42 | 40,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 43 | 41,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 44 | 42,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 45 | 43,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 46 | 44,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 47 | 45,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 48 | 46,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 49 | 47,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 50 | 48,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 51 | 49,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 52 | 50,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 53 | 51,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 54 | 52,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 55 | 53,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 56 | 54,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 57 | 55,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 58 | 56,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 59 | 57,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 60 | 58,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 61 | 59,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 62 | 60,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 63 | 61,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 64 | 62,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 65 | 63,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 66 | 64,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 67 | 65,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 68 | 66,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 69 | 67,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 70 | 68,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 71 | 69,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 72 | 70,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 73 | 71,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 74 | 72,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 75 | 73,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 76 | 74,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 77 | 75,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 78 | 76,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 79 | 77,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 80 | 78,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 81 | 79,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 82 | 80,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 83 | 81,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 84 | 82,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 85 | 83,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 86 | 84,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 87 | 85,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 88 | 86,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 89 | 87,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 90 | 88,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 91 | 89,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 92 | 90,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 93 | 91,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 94 | 92,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 95 | 93,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 96 | 94,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 97 | 95,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 98 | 96,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 99 | 97,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 100 | 98,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 101 | 99,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 102 | 100,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 103 | 101,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 104 | 102,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 105 | 103,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 106 | 104,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 107 | 105,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 108 | 106,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 109 | 107,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 110 | 108,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 111 | 109,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 112 | 110,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 113 | 111,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 114 | 112,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 115 | 113,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 116 | 114,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 117 | 115,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 118 | 116,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 119 | 117,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 120 | 118,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 121 | 119,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 122 | 120,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 123 | 121,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 124 | 122,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 125 | 123,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 126 | 124,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 127 | 125,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 128 | 126,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 129 | 127,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 130 | 128,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 131 | 129,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 132 | 130,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 133 | 131,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 134 | 132,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 135 | 133,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 136 | 134,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 137 | 135,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 138 | 136,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 139 | 137,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 140 | 138,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 141 | 139,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 142 | 140,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 143 | 141,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 144 | 142,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 145 | 143,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 146 | 144,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 147 | 145,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 148 | 146,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 149 | 147,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 150 | 148,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 151 | 149,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 152 | 150,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 153 | 151,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 154 | 152,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 155 | 153,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 156 | 154,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 157 | 155,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 158 | 156,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 159 | 157,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 160 | 158,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 161 | 159,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 162 | 160,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 163 | 161,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 164 | 162,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 165 | 163,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 166 | 164,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 167 | 165,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 168 | 166,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 169 | 167,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 170 | 168,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 171 | 169,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 172 | 170,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 173 | 171,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 174 | 172,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 175 | 173,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 176 | 174,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 177 | 175,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 178 | 176,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 179 | 177,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 180 | 178,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 181 | 179,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 182 | 180,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 183 | 181,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 184 | 182,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 185 | 183,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 186 | 184,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 187 | 185,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 188 | 186,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 189 | 187,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 190 | 188,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 191 | 189,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 192 | 190,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 193 | 191,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 194 | 192,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 195 | 193,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 196 | 194,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 197 | 195,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 198 | 196,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 199 | 197,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 200 | 198,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 201 | 199,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 202 | 200,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 203 | 201,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 204 | 202,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 205 | 203,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 206 | 204,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 207 | 205,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 208 | 206,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 209 | 207,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 210 | 208,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 211 | 209,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 212 | 210,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 213 | 211,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 214 | 212,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 215 | 213,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 216 | 214,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 217 | 215,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 218 | 216,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 219 | 217,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 220 | 218,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 221 | 219,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 222 | 220,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 223 | 221,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 224 | 222,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 225 | 223,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 226 | 224,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 227 | 225,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 228 | 226,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 229 | 227,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 230 | 228,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 231 | 229,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 232 | 230,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 233 | 231,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 234 | 232,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 235 | 233,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 236 | 234,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 237 | 235,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 238 | 236,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 239 | 237,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 240 | 238,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 241 | 239,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 242 | 240,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 243 | 241,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 244 | 242,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 245 | 243,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 246 | 244,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 247 | 245,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 248 | 246,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 249 | 247,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 250 | 248,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 251 | 249,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 252 | 250,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 253 | 251,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 254 | 252,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 255 | 253,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 256 | 254,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 257 | 255,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 258 | 256,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 259 | 257,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 260 | 258,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 261 | 259,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 262 | 260,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 263 | 261,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 264 | 262,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 265 | 263,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 266 | 264,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 267 | 265,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 268 | 266,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 269 | 267,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 270 | 268,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 271 | 269,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 272 | 270,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 273 | 271,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 274 | 272,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 275 | 273,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 276 | 274,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 277 | 275,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 278 | 276,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 279 | 277,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 280 | 278,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 281 | 279,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 282 | 280,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 283 | 281,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 284 | 282,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 285 | 283,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 286 | 284,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 287 | 285,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 288 | 286,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 289 | 287,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 290 | 288,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 291 | 289,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 292 | 290,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 293 | 291,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 294 | 292,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 295 | 293,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 296 | 294,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 297 | 295,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 298 | 296,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 299 | 297,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 300 | 298,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 301 | 299,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 302 | 300,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 303 | 301,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 304 | 302,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 305 | 303,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 306 | 304,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 307 | 305,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 308 | 306,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 309 | 307,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 310 | 308,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 311 | 309,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 312 | 310,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 313 | 311,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 314 | 312,9,4,0.1,0.0007194489768963071,0.1,0.0046346502822424435,0.07,CP 315 | 313,8,12,0.2,0.0014388979537926143,0.09,0.009269300564484887,0.09,CP 316 | 314,7,20,0.3,0.002158346930688922,0.08,0.013903950846727336,0.11,CP 317 | 315,7,16,0.25,0.002158346930688922,0.08,0.013903950846727336,0.28,CP 318 | 316,7,12,0.2,0.002158346930688922,0.08,0.013903950846727336,0.46,CP 319 | 317,8,8,0.15,0.0014388979537926143,0.09,0.009269300564484887,0.64,CP 320 | 318,7,8,0.15,0.002158346930688922,0.08,0.013903950846727336,0.76,CP 321 | 319,8,4,0.1,0.0014388979537926143,0.09,0.009269300564484887,0.94,CP 322 | 320,7,4,0.1,0.002158346930688922,0.08,0.013903950846727336,1.05,CP 323 | 321,9,0,0.05,0.0007194489768963071,0.1,0.0046346502822424435,1.24,CP 324 | 322,8,0,0.05,0.0014388979537926143,0.09,0.009269300564484887,1.36,CP 325 | 323,7,0,0.05,0.002158346930688922,0.08,0.013903950846727336,1.48,CP 326 | -------------------------------------------------------------------------------- /userNum/USER_DuelingDQN10_mec0_250.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,81,1,0.012345679012345678,10,246.41,3350.0,4.181547940821229,71.96232071090597,159.26188007829057 3 | 15.0,121,1,0.008264462809917356,10,580.03,5110.0,8.857801969063393,91.05517435731389,238.59620203804448 4 | 20.0,161,1,0.006211180124223602,10,1044.63,6790.0,14.90680992419946,108.86652249226542,317.6351012170886 5 | 25.0,201,1,0.004975124378109453,10,1590.26,8480.0,21.523593231785544,124.62924606217211,396.6776670231067 6 | 30.0,241,1,0.004149377593360996,10,2282.96,10070.0,29.626699481858388,139.7574585704474,475.42452431625594 7 | 35.0,282,1,0.0035460992907801418,10,3010.72,11770.0,37.52996596780362,154.42108872035988,556.2511603142219 8 | 40.0,322,1,0.003105590062111801,10,3920.58,13300.0,47.41075723910177,168.1336811125875,634.7021630350222 9 | 45.0,362,1,0.0027624309392265192,10,4767.18,14950.0,55.81822669459528,183.81889613124508,713.45007197901 10 | 50.0,402,1,0.0024875621890547263,10,5707.85,16570.0,64.98350927552785,198.2264337021186,792.0523800734827 11 | 55.0,442,1,0.0022624434389140274,10,6694.29,18210.0,74.39058748239826,211.01254926322807,870.6615882600532 12 | 60.0,483,1,0.002070393374741201,10,7672.76,19880.0,83.58697805131023,226.64026013417958,951.2784472836111 13 | 65.0,523,1,0.0019120458891013384,10,8664.43,21490.0,93.01566579251802,241.5056626167016,1029.841742132444 14 | 70.0,563,1,0.0017761989342806395,10,9635.49,23140.0,102.06796146920064,255.32761010790077,1108.5073369171816 15 | 75.0,603,1,0.001658374792703151,10,10698.83,24720.0,112.06127468223838,268.4314487177258,1186.9595255107456 16 | 80.0,643,1,0.0015552099533437014,10,11769.93,26300.0,122.092831307078,281.2504698131831,1265.4105520434236 17 | 85.0,683,1,0.0014641288433382138,10,12734.62,27950.0,131.0176030544527,295.8837663958216,1344.0740002665839 18 | 90.0,724,1,0.0013812154696132596,10,13903.37,29570.0,141.71994835278926,309.7626456135136,1424.4167859562278 19 | 95.0,764,1,0.0013089005235602095,10,14956.59,31230.0,151.24828644968568,323.5244770792912,1502.9867137903627 20 | 100.0,804,1,0.0012437810945273632,10,16051.54,32790.0,161.307992457733,337.0850239991328,1581.4353252564915 21 | 105.0,844,1,0.001184834123222749,10,17091.86,34420.0,170.74234536298982,351.8289750007825,1659.9986577024958 22 | 110.0,884,1,0.0011312217194570137,10,18250.11,35990.0,181.15134149329344,363.8297083962128,1738.3777263671973 23 | 115.0,925,1,0.001081081081081081,10,19327.91,37650.0,191.02148384100207,378.61667499701986,1818.8997128405902 24 | 120.0,965,1,0.0010362694300518134,10,20328.91,39320.0,199.95484804932926,392.05346298429595,1897.562623920098 25 | 125.0,1005,1,0.0009950248756218905,10,21486.91,40860.0,210.47273914068668,405.2644959422019,1975.9191154569517 26 | 130.0,1045,1,0.0009569377990430622,10,22422.02,42540.0,219.09808864778864,418.8446173931335,2054.64793464492 27 | 135.0,1085,1,0.0009216589861751152,10,23588.8,44110.0,229.58205556483952,432.4713127701301,2132.997782091533 28 | 140.0,1126,1,0.0008880994671403197,10,24769.66,45680.0,240.38738074297092,444.65072879592117,2213.3006997569805 29 | -------------------------------------------------------------------------------- /userNum/USER_DuelingDQN10_mec1_450.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,70,1,0.014285714285714285,10,179.49,3180.0,2.504252796332147,53.90927272605981,273.77004039909946 3 | 15.0,105,1,0.009523809523809525,10,463.07,4870.0,5.616089449702614,66.49332871504352,411.4962855292175 4 | 20.0,140,1,0.007142857142857143,10,823.48,6490.0,9.481117548637892,78.60092261148708,548.5756881786729 5 | 25.0,174,1,0.005747126436781609,10,1261.38,8010.0,13.80684990783927,89.07447992484262,681.2189623161382 6 | 30.0,209,1,0.004784688995215311,10,1789.58,9510.0,18.929023919604937,99.14815786668267,816.958579357061 7 | 35.0,244,1,0.004098360655737705,10,2400.76,11010.0,24.7485560458921,108.93740057014236,952.1873110957232 8 | 40.0,279,1,0.0035842293906810036,10,3100.83,12310.0,31.140246991629404,119.14644419537711,1086.393840948552 9 | 45.0,314,1,0.0031847133757961785,10,3836.37,13650.0,37.40305041054028,128.37014982008841,1220.8604557107974 10 | 50.0,348,1,0.0028735632183908046,10,4543.75,15010.0,43.29544515168882,138.18454392911136,1351.8075128170656 11 | 55.0,383,1,0.0026109660574412533,10,5245.19,16550.0,48.96546156795634,148.3133107653368,1487.2411060749243 12 | 60.0,418,1,0.0023923444976076554,10,6060.74,17970.0,55.51491461658358,157.13606069182055,1621.6679158515187 13 | 65.0,453,1,0.002207505518763797,10,6814.39,19470.0,61.44683070807012,167.15730487430295,1756.754476870093 14 | 70.0,488,1,0.0020491803278688526,10,7545.58,21010.0,67.43308098014482,176.10633483576558,1891.9110884106797 15 | 75.0,522,1,0.0019157088122605363,10,8291.15,22410.0,73.65695728111281,184.53769252148646,2022.6691664917896 16 | 80.0,557,1,0.0017953321364452424,10,9234.36,23630.0,81.18201414816102,193.77959617524814,2155.7541415033606 17 | 85.0,592,1,0.0016891891891891893,10,10093.33,24930.0,87.89507605897444,203.54271126863466,2289.6708156932 18 | 90.0,627,1,0.001594896331738437,10,10955.92,26310.0,94.61307812892893,212.77796703819868,2423.7653272325474 19 | 95.0,662,1,0.0015105740181268882,10,11784.42,27730.0,101.08403506544332,221.818579945635,2558.2269107661577 20 | 100.0,696,1,0.0014367816091954023,10,12551.06,29170.0,107.01924521366313,231.46263092974604,2689.2792359914674 21 | 105.0,731,1,0.0013679890560875513,10,13342.64,30670.0,113.17457224203702,240.8272800887677,2824.159542410646 22 | 110.0,766,1,0.0013054830287206266,10,14172.61,32050.0,119.70935630135456,250.3915984455351,2958.424822919809 23 | 115.0,801,1,0.0012484394506866417,10,14989.29,33470.0,126.29581412493968,259.5758684179073,3092.7937722461284 24 | 120.0,836,1,0.0011961722488038277,10,15872.22,34770.0,133.35743939268215,267.9440757073786,3226.496070339927 25 | 125.0,870,1,0.0011494252873563218,10,16693.87,36130.0,139.73608218395037,277.61031709002856,3356.989625560019 26 | 130.0,905,1,0.0011049723756906078,10,17534.44,37470.0,146.2276020858468,286.40004814908934,3491.252307079679 27 | 135.0,940,1,0.0010638297872340426,10,18332.73,38970.0,152.41961764197907,295.65832229840424,3626.0950709879417 28 | 140.0,975,1,0.0010256410256410256,10,19129.95,40470.0,158.72162761641786,304.2801419831317,3760.904329552916 29 | -------------------------------------------------------------------------------- /userNum/USER_DuelingDQN10_mec2_650.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,95,1,0.010526315789473684,10,256.7,7110.0,2.4611183761693676,38.12014301398642,561.926647387573 3 | 15.0,142,1,0.007042253521126761,10,627.43,10690.0,5.334803832715486,45.964811632582766,841.8810929039865 4 | 20.0,189,1,0.005291005291005291,10,1119.33,14180.0,8.784492556905574,52.6433526590403,1120.9737201095913 5 | 25.0,236,1,0.00423728813559322,10,1736.83,17720.0,12.791022904613373,58.887106261024634,1400.1905490417173 6 | 30.0,283,1,0.0035335689045936395,10,2436.58,21240.0,16.95345656966914,65.21360714967558,1679.2902920500896 7 | 35.0,330,1,0.0030303030303030303,10,3184.32,24740.0,21.199834420539606,71.82606740635246,1958.3138059311045 8 | 40.0,378,1,0.0026455026455026454,10,3931.66,28390.0,25.1925064772925,77.85229845456554,2243.564531732521 9 | 45.0,425,1,0.002352941176470588,10,4679.28,31950.0,29.24647254288035,84.08708146535123,2522.760039433292 10 | 50.0,472,1,0.00211864406779661,10,5462.51,35480.0,33.53802245065191,90.14509981656053,2801.7807194962056 11 | 55.0,519,1,0.0019267822736030828,10,6291.29,38960.0,37.99542578864786,96.44121943738654,3080.6554818719883 12 | 60.0,566,1,0.0017667844522968198,10,7083.6,42510.0,42.183222982893426,102.89015852693404,3359.757429847507 13 | 65.0,613,1,0.0016313213703099511,10,7899.4,46020.0,46.536700577967046,109.44116496530657,3638.7222530306167 14 | 70.0,661,1,0.0015128593040847202,10,8674.4,49640.0,50.73537158853549,115.44814774722859,3923.8117697751036 15 | 75.0,708,1,0.0014124293785310734,10,9497.43,53180.0,55.14018728209904,121.54413276759371,4202.773677112001 16 | 80.0,755,1,0.0013245033112582781,10,10293.17,56720.0,59.42409329937148,127.89613551094249,4481.80640042444 17 | 85.0,802,1,0.0012468827930174563,10,11090.46,60240.0,63.722172896419664,135.18994557317768,4760.816259075311 18 | 90.0,849,1,0.001177856301531213,10,11916.02,63770.0,68.09920821280633,142.55133439241126,5039.786581378283 19 | 95.0,896,1,0.0011160714285714285,10,12742.52,67280.0,72.48698143627057,156.11817392193097,5318.732091013058 20 | 100.0,943,1,0.0010604453870625664,10,13533.02,70840.0,76.66786495507041,168.1994583053287,5597.8497582354075 21 | 105.0,991,1,0.0010090817356205853,10,14344.65,74430.0,81.11107827588363,177.6013467570282,5882.757439310854 22 | 110.0,1038,1,0.0009633911368015414,10,15227.13,77890.0,85.90051494741299,189.29399764016975,6161.406279261581 23 | 115.0,1085,1,0.0009216589861751152,10,15975.6,81400.0,90.2658151342864,204.6346846413674,6440.365630447875 24 | 120.0,1132,1,0.0008833922261484099,10,16714.56,84950.0,94.62453334773811,215.98788348775264,6719.370478296477 25 | 125.0,1179,1,0.0008481764206955047,10,17392.54,88510.0,98.88869766629904,233.5711079907469,6998.442576828732 26 | 130.0,1226,1,0.0008156606851549756,10,18165.09,91870.0,103.8531879935555,242.90067427395587,7275.403978821014 27 | 135.0,1274,1,0.0007849293563579278,10,18849.88,95440.0,108.58905775198131,248.96165159381175,7560.11915474752 28 | 140.0,1321,1,0.000757002271006813,10,19466.86,98970.0,113.04165778120078,255.21380944089597,7839.038635674223 29 | -------------------------------------------------------------------------------- /userNum/USER_DuelingDQN10_mec3_850.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,82,1,0.012195121951219513,10,203.82,7680.0,0.8386473604265886,46.95236311899443,646.7272497751879 3 | 15.0,122,1,0.00819672131147541,10,443.05,11570.0,1.736793162208226,61.80043805968772,965.8290773479634 4 | 20.0,163,1,0.006134969325153374,10,761.51,15410.0,3.067185467218801,74.97169122605682,1291.9849034226586 5 | 25.0,204,1,0.004901960784313725,10,1227.23,19160.0,4.881926354045857,86.44841594203686,1617.5160594594313 6 | 30.0,244,1,0.004098360655737705,10,1662.61,22760.0,6.6800215552476905,99.74962084693962,1934.181097148078 7 | 35.0,285,1,0.0035087719298245615,10,2070.01,26570.0,8.424824891262388,112.58641881806659,2259.5244562096827 8 | 40.0,326,1,0.003067484662576687,10,2490.34,30290.0,10.34056109505137,125.22248339318261,2583.6401094511803 9 | 45.0,366,1,0.00273224043715847,10,2921.63,33820.0,12.45997382947175,137.86534538389563,2898.1237757675412 10 | 50.0,407,1,0.002457002457002457,10,3288.94,37550.0,14.45606612553273,151.4647189030417,3221.6965596581763 11 | 55.0,448,1,0.002232142857142857,10,3907.01,40800.0,17.660358395272574,163.15508313737294,3537.0194477898604 12 | 60.0,488,1,0.0020491803278688526,10,4344.5,44280.0,20.112430582304043,174.88821084923367,3848.733629975267 13 | 65.0,529,1,0.001890359168241966,10,4917.45,47630.0,23.425400997717407,186.20633254274313,4163.924508987311 14 | 70.0,570,1,0.0017543859649122807,10,5279.4,51260.0,25.999997913889153,197.46171119078187,4484.482023291965 15 | 75.0,610,1,0.001639344262295082,10,6210.1,53950.0,31.521151349416815,208.7904784297228,4775.1323886170885 16 | 80.0,651,1,0.0015360983102918587,10,7304.23,56690.0,37.87668238138524,219.17221285912083,5068.739847374945 17 | 85.0,692,1,0.001445086705202312,10,8249.6,59530.0,43.76404832979756,229.71843894878623,5367.400871742887 18 | 90.0,732,1,0.001366120218579235,10,9128.77,62340.0,49.37564552710901,239.77247293685124,5658.284876640106 19 | 95.0,773,1,0.00129366106080207,10,10759.32,64530.0,59.19271526148407,244.42362951664657,5933.019166529548 20 | 100.0,814,1,0.0012285012285012285,10,12045.58,67280.0,66.78346140050637,250.12489917934982,6222.012975131976 21 | 105.0,854,1,0.00117096018735363,10,13410.5,69760.0,74.84193996704015,257.45640713799594,6501.148262118585 22 | 110.0,895,1,0.0011173184357541898,10,14649.87,72670.0,81.81725650134224,264.9761522661377,6794.607134926063 23 | 115.0,936,1,0.0010683760683760685,10,16033.43,75340.0,89.80802667645791,269.4045855083924,7080.8218650129365 24 | 120.0,976,1,0.0010245901639344263,10,17160.84,78290.0,96.01106441436636,274.9548551521676,7371.608880097803 25 | 125.0,1017,1,0.0009832841691248771,10,18233.03,81400.0,101.8040532880385,277.2024552725208,7673.224264251726 26 | 130.0,1058,1,0.000945179584120983,10,19483.25,84270.0,108.45694024435498,285.77217980424547,7968.387733424503 27 | 135.0,1098,1,0.0009107468123861566,10,20657.39,87230.0,114.57024372483895,296.44138192548047,8259.251139465992 28 | 140.0,1139,1,0.000877963125548727,10,21856.79,90280.0,120.66993540651313,308.6149865961292,8558.290966950497 29 | -------------------------------------------------------------------------------- /userNum/USER_PRDQN10_mec0_250.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,81,1,0.012345679012345678,10,42.85,3480.0,0.6402725086715142,19.53746960536362,159.56193220813591 3 | 15.0,121,1,0.008264462809917356,10,153.07,5530.0,1.7541059999423958,26.93018989403578,239.26304492605806 4 | 20.0,161,1,0.006211180124223602,10,331.63,7780.0,3.5265044411969213,35.77708574289449,318.90412590221814 5 | 25.0,201,1,0.004975124378109453,10,593.83,9680.0,6.090706781173282,45.30132651629134,398.28966556418345 6 | 30.0,242,1,0.004132231404958678,10,881.75,11950.0,8.922816516846492,53.49646614994863,479.73424096065895 7 | 35.0,282,1,0.0035460992907801418,10,1295.35,13700.0,12.820219739950458,62.66437373240931,558.7761621444479 8 | 40.0,322,1,0.003105590062111801,10,1690.03,15750.0,16.406474695083542,72.09270366650007,638.0155398809698 9 | 45.0,362,1,0.0027624309392265192,10,2150.02,17700.0,20.549832326772712,81.41293310918064,717.1143731559538 10 | 50.0,402,1,0.0024875621890547263,10,2593.44,19850.0,24.57432527522376,89.31218148052015,796.3053845990571 11 | 55.0,442,1,0.0022624434389140274,10,3095.39,21950.0,29.186752533467416,98.40726532210572,875.3360525065074 12 | 60.0,483,1,0.002070393374741201,10,3802.43,23570.0,35.55395540409421,105.27556157335619,955.7548710837895 13 | 65.0,523,1,0.0019120458891013384,10,4353.28,25620.0,40.329960336173876,110.97766969355057,1034.7435144517651 14 | 70.0,563,1,0.0017761989342806395,10,4967.8,27370.0,45.52930725039308,116.71036590071044,1113.4655127525227 15 | 75.0,603,1,0.001658374792703151,10,5635.65,29120.0,51.142181795801555,125.76200835670079,1192.097194561556 16 | 80.0,643,1,0.0015552099533437014,10,6341.12,30670.0,56.98219533215676,134.51227353963276,1270.6224144146038 17 | 85.0,684,1,0.0014619883040935672,10,6920.39,32640.0,61.697591882216024,141.10415637005894,1351.5754781322412 18 | 90.0,724,1,0.0013812154696132596,10,7572.55,34490.0,66.83064126840938,147.98574458219693,1430.388529577551 19 | 95.0,764,1,0.0013089005235602095,10,8070.98,36790.0,70.88261432368877,158.06629186137374,1509.624129916492 20 | 100.0,804,1,0.0012437810945273632,10,8639.12,38740.0,75.73764490771029,166.50052215108354,1588.5458657581366 21 | 105.0,844,1,0.001184834123222749,10,9233.66,40640.0,80.8869985310977,174.37849244703946,1667.380373463536 22 | 110.0,884,1,0.0011312217194570137,10,9945.36,42340.0,86.8136156917519,182.6079269498416,1745.9429276436442 23 | 115.0,924,1,0.0010822510822510823,10,10641.99,44140.0,92.68855739670637,190.7353803764766,1824.5721144396962 24 | 120.0,965,1,0.0010362694300518134,10,11320.64,46060.0,98.28129259807291,200.2318185518888,1905.2968010840352 25 | 125.0,1005,1,0.0009950248756218905,10,11944.14,48010.0,103.50592330128838,209.63907095155022,1984.137703116615 26 | 130.0,1045,1,0.0009569377990430622,10,12600.66,49860.0,109.03356534176882,218.2436566072277,2062.87504737478 27 | 135.0,1085,1,0.0009216589861751152,10,13219.93,51910.0,114.23858824573777,226.34311847114733,2141.791369410166 28 | 140.0,1125,1,0.0008888888888888889,10,13942.07,53660.0,120.28900949958626,235.60449890743445,2220.367326917002 29 | -------------------------------------------------------------------------------- /userNum/USER_PRDQN10_mec1_450.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,70,1,0.014285714285714285,10,87.85,2170.0,1.2527770243233989,28.805171969757456,272.38228384631344 3 | 15.0,105,1,0.009523809523809525,10,233.74,3400.0,2.9937622169649334,39.6259400158035,409.57634341578785 4 | 20.0,140,1,0.007142857142857143,10,472.63,4670.0,5.746167885048242,52.35427431127022,545.844705314952 5 | 25.0,174,1,0.005747126436781609,10,769.01,5970.0,9.053126806701497,63.4817202780158,677.8939188036436 6 | 30.0,209,1,0.004784688995215311,10,1106.05,7360.0,12.758549997603797,72.85394504057928,813.5829126355902 7 | 35.0,244,1,0.004098360655737705,10,1556.69,8430.0,17.586048062420797,82.69592431603597,946.0925339034661 8 | 40.0,279,1,0.0035842293906810036,10,2069.21,9540.0,22.783486377338853,91.16180548359539,1078.2452137504135 9 | 45.0,314,1,0.0031847133757961785,10,2589.06,10770.0,27.928428995089774,100.6415919785272,1210.978342979492 10 | 50.0,348,1,0.0028735632183908046,10,3202.66,11710.0,33.80852778641924,109.98742908737965,1337.4180969965748 11 | 55.0,383,1,0.0026109660574412533,10,3844.92,12700.0,39.795476203459366,120.68345352283353,1467.6771368626871 12 | 60.0,418,1,0.0023923444976076554,10,4438.77,13850.0,45.21789153013254,130.86672358942081,1599.9552627577805 13 | 65.0,453,1,0.002207505518763797,10,5050.61,15080.0,51.04424526838754,139.42127949123034,1732.082951520893 14 | 70.0,488,1,0.0020491803278688526,10,5689.62,16230.0,56.961824875832754,148.06773258192425,1863.581295354883 15 | 75.0,522,1,0.0019157088122605363,10,6355.63,17330.0,62.929545672295184,154.889621205925,1990.918675670238 16 | 80.0,557,1,0.0017953321364452424,10,6995.28,18520.0,68.73896052512514,163.75734500230243,2122.6100080082992 17 | 85.0,592,1,0.0016891891891891893,10,7667.36,19670.0,74.8192395223976,174.72632357597422,2253.7046487215725 18 | 90.0,627,1,0.001594896331738437,10,8442.54,20500.0,81.64994625353073,182.5174667000822,2381.722708700816 19 | 95.0,662,1,0.0015105740181268882,10,9157.15,21610.0,88.04196608705774,192.68731028005087,2511.984120795977 20 | 100.0,696,1,0.0014367816091954023,10,9843.95,22630.0,94.11713331534057,201.89405712883666,2638.6745772780378 21 | 105.0,731,1,0.0013679890560875513,10,10538.34,23740.0,100.29507815177547,210.8290059632438,2769.5722991905386 22 | 110.0,766,1,0.0013054830287206266,10,11219.48,24770.0,106.30154630405787,219.06362959377614,2900.097476331168 23 | 115.0,801,1,0.0012484394506866417,10,11781.94,26120.0,111.44397081743067,230.05127338122534,3033.971309374911 24 | 120.0,836,1,0.0011961722488038277,10,12541.08,27110.0,118.3500363981608,238.00910024552556,3162.9372631500255 25 | 125.0,870,1,0.0011494252873563218,10,13208.33,28210.0,124.2931772342908,246.66893786918376,3290.129634387761 26 | 130.0,905,1,0.0011049723756906078,10,13885.77,29320.0,130.36547402414467,256.9816038334164,3421.1037945488993 27 | 135.0,940,1,0.0010638297872340426,10,14669.98,30230.0,137.37308506072458,267.23484415211334,3549.3893120366824 28 | 140.0,975,1,0.0010256410256410256,10,15391.7,31380.0,143.7551298333709,274.3215769385173,3680.1212747757672 29 | -------------------------------------------------------------------------------- /userNum/USER_PRDQN10_mec2_650.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,95,1,0.010526315789473684,10,128.48,5920.0,1.360000744177955,25.92080645699651,561.7390452317956 3 | 15.0,142,1,0.007042253521126761,10,331.54,9020.0,3.3382400947577677,37.17320081814403,841.6682026525411 4 | 20.0,189,1,0.005291005291005291,10,648.95,12060.0,6.2074834199063345,47.9581611164226,1120.7147751906268 5 | 25.0,236,1,0.00423728813559322,10,1014.55,15220.0,9.489074306372377,57.53374477048493,1399.7148635429319 6 | 30.0,283,1,0.0035335689045936395,10,1479.69,18300.0,13.460593101307149,66.9815247157978,1677.8422163897387 7 | 35.0,331,1,0.0030211480362537764,10,2042.4,21260.0,18.071713081921597,78.3793830677378,1961.2194094928786 8 | 40.0,378,1,0.0026455026455026454,10,2604.65,24280.0,22.724293267433993,89.0345342926571,2238.7220884585486 9 | 45.0,425,1,0.002352941176470588,10,3230.44,27300.0,27.73832291747807,98.78208654260509,2515.7301730673043 10 | 50.0,472,1,0.00211864406779661,10,3882.76,30220.0,33.16288906551216,108.31117925854993,2792.4964110128067 11 | 55.0,519,1,0.0019267822736030828,10,4772.67,33020.0,40.15848799720116,117.88055243900223,3067.4571836913024 12 | 60.0,566,1,0.0017667844522968198,10,5470.72,36040.0,45.55009909345738,126.86887582732012,3344.2530845409246 13 | 65.0,613,1,0.0016313213703099511,10,6201.87,38960.0,51.23654387614616,134.4632241223951,3620.5648824325413 14 | 70.0,661,1,0.0015128593040847202,10,6951.37,41980.0,57.05310353445855,143.6835547657388,3902.748563565677 15 | 75.0,708,1,0.0014124293785310734,10,7924.07,44760.0,64.47936155268057,152.43298966124416,4177.105016272988 16 | 80.0,755,1,0.0013245033112582781,10,8706.78,47700.0,70.20439703440046,162.45288999304634,4453.280588020566 17 | 85.0,802,1,0.0012468827930174563,10,9569.72,50580.0,76.6256705058612,172.66076240776152,4728.709466505331 18 | 90.0,849,1,0.001177856301531213,10,10510.17,53340.0,83.6192970685744,179.98865768184285,5003.437318925282 19 | 95.0,896,1,0.0011160714285714285,10,11313.44,56280.0,89.47956775071884,192.37404163677644,5279.596233427663 20 | 100.0,944,1,0.001059322033898305,10,12202.6,59260.0,96.14147474035448,200.44136845459124,5560.998105265655 21 | 105.0,991,1,0.0010090817356205853,10,12963.79,62220.0,101.91849042249378,209.43359677112386,5837.5115363932655 22 | 110.0,1038,1,0.0009633911368015414,10,13741.02,65160.0,107.77040189326594,219.96526004053243,6113.631279210754 23 | 115.0,1085,1,0.0009216589861751152,10,14700.89,67960.0,114.89830516737103,227.00555894276317,6388.308271161444 24 | 120.0,1132,1,0.0008833922261484099,10,15538.61,70860.0,121.10522484280746,236.67836324990344,6664.197104475728 25 | 125.0,1179,1,0.0008481764206955047,10,16312.57,73880.0,126.83658384340254,244.8438709864505,6940.659017227205 26 | 130.0,1227,1,0.0008149959250203749,10,17208.52,76840.0,133.54584664293967,252.42789329154922,7221.758624809442 27 | 135.0,1274,1,0.0007849293563579278,10,18121.55,79660.0,140.35705102194083,260.998820557683,7496.715091862646 28 | 140.0,1321,1,0.000757002271006813,10,19009.12,82520.0,146.89203476283504,267.97571018677957,7772.057481882624 29 | -------------------------------------------------------------------------------- /userNum/USER_PRDQN10_mec3_850.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,82,1,0.012195121951219513,10,87.88,6840.0,0.5687930731812132,23.58334321273353,646.1105884174184 3 | 15.0,122,1,0.00819672131147541,10,279.94,10220.0,1.3854978043959678,32.24941621345481,964.4784902976038 4 | 20.0,163,1,0.006134969325153374,10,486.97,14020.0,2.266125316845852,39.02149916401969,1291.2597243551959 5 | 25.0,204,1,0.004901960784313725,10,791.41,17900.0,3.4761493695285846,47.4660132365702,1618.028691709127 6 | 30.0,244,1,0.004098360655737705,10,1173.74,21490.0,4.912657891127557,55.441976694885604,1935.9942433317076 7 | 35.0,285,1,0.0035087719298245615,10,1479.14,25270.0,6.1902641494112505,63.54199249570237,2262.099653164731 8 | 40.0,326,1,0.003067484662576687,10,1915.29,28780.0,8.118877849188786,70.26318370383423,2586.9772683322385 9 | 45.0,366,1,0.00273224043715847,10,2382.1,32170.0,10.111850473054568,77.39295811653851,2903.4241069800782 10 | 50.0,407,1,0.002457002457002457,10,2774.66,35750.0,11.854381707365484,84.10749670343633,3228.031031244644 11 | 55.0,448,1,0.002232142857142857,10,3220.21,39280.0,13.94286942051858,91.58691531547737,3552.4771419261315 12 | 60.0,488,1,0.0020491803278688526,10,3685.14,42630.0,16.121468535734245,99.59391668366261,3868.147754784704 13 | 65.0,529,1,0.001890359168241966,10,4141.74,46220.0,18.327621714758948,106.54517321243588,4192.011941665694 14 | 70.0,570,1,0.0017543859649122807,10,4896.52,49380.0,21.794857770684757,114.26440755018857,4512.290664600499 15 | 75.0,610,1,0.001639344262295082,10,5480.67,52740.0,24.5297980021729,120.68686000946344,4826.596384843947 16 | 80.0,651,1,0.0015360983102918587,10,6108.35,56200.0,27.54982358817516,127.47713494379732,5148.431822995621 17 | 85.0,692,1,0.001445086705202312,10,7021.6,59230.0,31.841424443724954,134.32956758361118,5466.464023195004 18 | 90.0,732,1,0.001366120218579235,10,7696.41,62610.0,34.96505106357448,140.19254194353704,5779.848896576736 19 | 95.0,773,1,0.00129366106080207,10,8545.98,65820.0,38.97494224447923,146.60737748603555,6099.083801961084 20 | 100.0,814,1,0.0012285012285012285,10,9468.99,68940.0,43.25242731954603,153.83420166511587,6416.846856292697 21 | 105.0,854,1,0.00117096018735363,10,10806.32,71700.0,49.293293932426316,159.73837487437652,6722.401764035976 22 | 110.0,895,1,0.0011173184357541898,10,12180.91,74500.0,55.401780334995436,165.98170068805481,7035.614207501032 23 | 115.0,936,1,0.0010683760683760685,10,13075.91,77790.0,59.33523345121159,172.902491049713,7355.137364676155 24 | 120.0,976,1,0.0010245901639344263,10,14328.91,80660.0,64.90007042376669,179.51778318880233,7662.045349578092 25 | 125.0,1017,1,0.0009832841691248771,10,15185.94,83950.0,68.6856327262737,188.2745201404754,7981.463106255431 26 | 130.0,1058,1,0.000945179584120983,10,16079.93,87200.0,72.80201806617737,194.75342338536691,8300.380308469454 27 | 135.0,1098,1,0.0009107468123861566,10,17470.49,89940.0,78.99397252167041,202.3332513954363,8605.2828022103 28 | 140.0,1139,1,0.000877963125548727,10,18469.04,93130.0,83.52483402840294,209.41812891923087,8923.612958074285 29 | -------------------------------------------------------------------------------- /userNum/USER_offline3_10_mec0_250.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 3 | 15.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 4 | 20.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 5 | 25.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 6 | 30.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 7 | 35.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 8 | 40.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 9 | 45.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 10 | 50.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 11 | 55.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 12 | 60.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 13 | 65.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 14 | 70.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 15 | 75.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 16 | 80.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 17 | 85.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 18 | 90.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 19 | 95.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 20 | 100.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 21 | 105.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 22 | 110.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 23 | 115.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 24 | 120.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 25 | 125.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 26 | 130.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 27 | 135.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 28 | 140.0,13,1,0.07692307692307693,3,8.48,1040.0,0.020144571353096597,0.12977020790278845,23.993811990194214 29 | -------------------------------------------------------------------------------- /userNum/USER_offline3_10_mec1_450.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,70,1,0.014285714285714285,3,2.81,5540.0,0.1474870402637431,2.813232721321154,275.81029622805727 3 | 15.0,105,1,0.009523809523809525,3,4.26,8340.0,0.22302918283785583,4.203627805993873,415.71303618707117 4 | 20.0,140,1,0.007142857142857143,3,5.65,11140.0,0.29857132541196857,5.594022890666631,555.6157761460856 5 | 25.0,174,1,0.005747126436781609,3,6.98,13860.0,0.3719551210553924,6.9844179753393885,691.5212949634154 6 | 30.0,209,1,0.004784688995215311,3,8.43,16660.0,0.44749726362950515,8.374813060012123,831.4240349224312 7 | 35.0,244,1,0.004098360655737705,3,9.78,19460.0,0.5230394062036179,9.765208144684792,971.3267748814471 8 | 40.0,279,1,0.0035842293906810036,3,21.13,22260.0,0.6337991758625051,11.650075509749776,1111.22045769462 9 | 45.0,314,1,0.0031847133757961785,3,127.57,25060.0,1.2257913766578983,18.35633067713873,1250.9904903794593 10 | 50.0,348,1,0.0028735632183908046,3,332.39,27780.0,2.383746474043247,25.756183082153385,1386.6176070374609 11 | 55.0,383,1,0.0026109660574412533,3,664.34,30580.0,4.105496553089786,32.17391336978305,1526.0981772775224 12 | 60.0,418,1,0.0023923444976076554,3,1106.69,33380.0,6.267423009293846,38.01303425560817,1665.4663013822515 13 | 65.0,453,1,0.002207505518763797,3,1639.58,36180.0,8.690731052779418,43.60513838293557,1804.7677577885102 14 | 70.0,488,1,0.0020491803278688526,3,2255.66,38980.0,11.363098095582279,48.98180622354989,1944.0057355593055 15 | 75.0,522,1,0.0019157088122605363,3,2925.34,41700.0,14.124629740242442,53.89979248610229,2079.2232948899195 16 | 80.0,557,1,0.0017953321364452424,3,3693.34,44500.0,17.170333647722742,58.55422342081805,2218.3662197397525 17 | 85.0,592,1,0.0016891891891891893,3,4497.58,47300.0,20.23407539692806,63.32867523268091,2357.504540585675 18 | 90.0,627,1,0.001594896331738437,3,5321.81,50100.0,23.292397449116205,67.6877038411323,2496.644203316598 19 | 95.0,662,1,0.0015105740181268882,3,6213.05,52900.0,26.500663354471463,72.18702299921708,2635.7457246900226 20 | 100.0,696,1,0.0014367816091954023,3,7061.52,55620.0,29.50120185762589,77.00130372348501,2770.902449569805 21 | 105.0,731,1,0.0013679890560875513,3,8005.11,58420.0,32.77696860091697,81.49842641814928,2909.9867947578327 22 | 110.0,766,1,0.0013054830287206266,3,8934.35,61220.0,35.98452681027747,86.22476719135108,3049.088502145399 23 | 115.0,801,1,0.0012484394506866417,3,9857.34,64020.0,39.127053190128414,90.70375974734382,3188.20673107259 24 | 120.0,836,1,0.0011961722488038277,3,10806.02,66820.0,42.337297220882185,95.20316624545957,3327.3077389937184 25 | 125.0,870,1,0.0011494252873563218,3,11700.33,69540.0,45.40407039851119,99.62577661272968,3462.447593935047 26 | 130.0,905,1,0.0011049723756906078,3,12646.42,72340.0,48.71302242925374,104.29464567078068,3601.523499580709 27 | 135.0,940,1,0.0010638297872340426,3,13598.66,75140.0,51.98569977162674,108.74715919894031,3740.6086347092605 28 | 140.0,975,1,0.0010256410256410256,3,14521.34,77940.0,55.161022650294846,113.22984628792516,3879.718530716427 29 | -------------------------------------------------------------------------------- /userNum/USER_offline3_10_mec2_650.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,95,1,0.010526315789473684,3,3.73,8470.0,0.13453695867960958,1.9372838179773382,563.6537269585796 3 | 15.0,142,1,0.007042253521126761,3,5.65,12700.0,0.20216516250786198,2.864213874425842,845.4795717277797 4 | 20.0,189,1,0.005291005291005291,3,7.51,16930.0,0.26979336633611445,3.791143930874347,1127.3054164969797 5 | 25.0,236,1,0.00423728813559322,3,9.4,21160.0,0.33742157016436686,4.718073987322851,1409.1312612661798 6 | 30.0,283,1,0.0035335689045936395,3,11.32,25390.0,0.40504977399261927,5.6450040437713565,1690.9571060353799 7 | 35.0,330,1,0.0030303030303030303,3,13.16,29620.0,0.47267797782087173,6.5719341002198615,1972.78295080458 8 | 40.0,378,1,0.0026455026455026454,3,15.08,33940.0,0.541745079602918,7.4988641566683665,2260.6050901433373 9 | 45.0,425,1,0.002352941176470588,3,16.98,38170.0,0.609373283431173,8.425794213116871,2542.4309349125374 10 | 50.0,472,1,0.00211864406779661,3,47.53,42400.0,0.7753730545929612,10.002574916060937,2824.2061810688656 11 | 55.0,519,1,0.0019267822736030828,3,195.34,46630.0,1.4262003051217331,14.478499995835346,3105.7322762565364 12 | 60.0,566,1,0.0017667844522968198,3,450.88,50860.0,2.605564471723908,19.930901814222523,3386.9872414452498 13 | 65.0,613,1,0.0016313213703099511,3,861.81,55090.0,4.305427504858164,24.59678313066904,3667.9757346641168 14 | 70.0,661,1,0.0015128593040847202,3,1361.61,59410.0,6.29137117686061,29.098612531964356,3954.8149491222507 15 | 75.0,708,1,0.0014124293785310734,3,1970.87,63640.0,8.524373172359155,33.33266445085636,4235.531035882089 16 | 80.0,755,1,0.0013245033112582781,3,2665.22,67870.0,10.977175383880423,37.2865669584437,4516.135004618755 17 | 85.0,802,1,0.0012468827930174563,3,3383.46,72100.0,13.387549129964853,41.430797319735575,4796.760610246058 18 | 90.0,849,1,0.001177856301531213,3,4169.05,76330.0,15.938685530959448,45.378634174426395,5077.314401981075 19 | 95.0,896,1,0.0011160714285714285,3,4972.09,80560.0,18.549304044572484,49.382649786239014,5357.837851454405 20 | 100.0,943,1,0.0010604453870625664,3,5810.32,84790.0,21.208075645469034,53.35079788345262,5638.336819097689 21 | 105.0,991,1,0.0010090817356205853,3,6656.72,89110.0,23.87087532040763,57.21731047872234,5924.830599181408 22 | 110.0,1038,1,0.0009633911368015414,3,7525.24,93340.0,26.597851815013218,61.146622414288835,6205.294776372963 23 | 115.0,1085,1,0.0009216589861751152,3,8389.59,97570.0,29.317630541871633,65.00690322109875,6485.762617977382 24 | 120.0,1132,1,0.0008833922261484099,3,9219.03,101800.0,31.896739188950942,68.80697678607613,6766.302170614562 25 | 125.0,1179,1,0.0008481764206955047,3,10144.25,106030.0,34.74840786315057,72.74640495366721,7046.702802458105 26 | 130.0,1226,1,0.0008156606851549756,3,11013.38,110260.0,37.42064002617891,76.48236976474712,7327.194865786171 27 | 135.0,1274,1,0.0007849293563579278,3,11889.39,114580.0,40.09299795668778,80.56417401959447,7613.683792565072 28 | 140.0,1321,1,0.000757002271006813,3,12799.29,118810.0,42.87216313783992,84.37603500058275,7894.121345671745 29 | -------------------------------------------------------------------------------- /userNum/USER_offline3_10_mec3_850.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,82,1,0.012195121951219513,3,3.3,8100.0,0.058275367128600944,1.0427963135045488,647.7598287781389 3 | 15.0,122,1,0.00819672131147541,3,4.9,12100.0,0.08705332620445308,1.5062613417288013,967.6412257056149 4 | 20.0,163,1,0.006134969325153374,3,6.55,16200.0,0.11655073425720149,1.9697263699530538,1295.519657556278 5 | 25.0,204,1,0.004901960784313725,3,8.2,20300.0,0.1460481423099499,2.433191398177306,1623.398089406941 6 | 30.0,244,1,0.004098360655737705,3,9.79,24300.0,0.17482610138580199,2.8966564264015586,1943.279486334417 7 | 35.0,285,1,0.0035087719298245615,3,11.38,28400.0,0.20432350943855038,3.360121454625811,2271.157918185074 8 | 40.0,326,1,0.003067484662576687,3,13.03,32500.0,0.2338209174912988,3.8235864828500636,2599.0363500357275 9 | 45.0,366,1,0.00273224043715847,3,46.17,36500.0,0.3133173009726885,4.751689542979177,2918.875981159051 10 | 50.0,407,1,0.002457002457002457,3,195.04,40600.0,0.6131580257495783,7.255161504311695,3246.5318908684285 11 | 55.0,448,1,0.002232142857142857,3,469.28,44700.0,1.190699834520646,9.684758613317626,3573.9595394922185 12 | 60.0,488,1,0.0020491803278688526,3,848.81,48700.0,1.9021362471217855,11.860209011710888,3893.2796394850648 13 | 65.0,529,1,0.001890359168241966,3,1307.28,52800.0,2.7304118895647793,14.012495110958653,4220.501464199644 14 | 70.0,570,1,0.0017543859649122807,3,1931.36,56900.0,3.7266883598621425,15.846142826934845,4547.585512168331 15 | 75.0,610,1,0.001639344262295082,3,2597.68,60900.0,4.800748007705111,17.757144012755983,4866.608276074059 16 | 80.0,651,1,0.0015360983102918587,3,3331.1,65000.0,5.950941335074827,19.508020701718383,5193.56622931497 17 | 85.0,692,1,0.001445086705202312,3,4127.97,69100.0,7.095184671450455,21.357191230162805,5520.529057197591 18 | 90.0,732,1,0.001366120218579235,3,4893.83,73100.0,8.150698405289909,23.142510323526892,5839.566973335751 19 | 95.0,773,1,0.00129366106080207,3,5782.44,77200.0,9.381011884124595,24.92237642814028,6166.459298700634 20 | 100.0,814,1,0.0012285012285012285,3,6536.66,81300.0,10.482608908645956,26.672546235442397,6493.457023771828 21 | 105.0,854,1,0.00117096018735363,3,7504.81,85300.0,11.769650632539772,28.458819272017006,6812.305354267973 22 | 110.0,895,1,0.0011173184357541898,3,8287.11,89400.0,12.873004954067087,30.193256477301876,7139.301642586618 23 | 115.0,936,1,0.0010683760683760685,3,9291.82,93500.0,14.163366095062544,32.016775406938095,7466.144799530967 24 | 120.0,976,1,0.0010245901639344263,3,10144.91,97500.0,15.32719315102008,33.65261621829687,7785.094019908348 25 | 125.0,1017,1,0.0009832841691248771,3,11074.01,101600.0,16.568099733684406,35.414827747994046,8111.977669665156 26 | 130.0,1058,1,0.000945179584120983,3,11978.71,105700.0,17.78407490270237,37.006721739818225,8438.881745627124 27 | 135.0,1098,1,0.0009107468123861566,3,12896.94,109700.0,18.993848862575444,38.790731910995966,8757.793342599614 28 | 140.0,1139,1,0.000877963125548727,3,13852.83,113800.0,20.279633956684304,40.37990237575874,9084.640270699221 29 | -------------------------------------------------------------------------------- /userNum/USER_online3_10_mec0_250.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,81,1,0.012345679012345678,10,4.39,2620.0,0.6077559102804599,8.767629177577309,159.55087842614626 3 | 15.0,121,1,0.008264462809917356,10,6.66,3920.0,0.923071081172531,12.924839192127262,239.32823744236958 4 | 20.0,161,1,0.006211180124223602,10,8.86,5140.0,1.2331485557593016,17.307752229286574,319.0863519074314 5 | 25.0,201,1,0.004975124378109453,10,10.82,6420.0,1.5501218805346269,21.5038889525852,398.85759980746695 6 | 30.0,242,1,0.004132231404958678,10,13.25,7740.0,1.8740165125119816,25.948428474332424,480.62562060225673 7 | 35.0,282,1,0.0035460992907801418,10,15.31,8980.0,2.1864278068660314,30.428443946414035,560.3888269861271 8 | 40.0,322,1,0.003105590062111801,10,53.41,10260.0,2.9368852946516957,38.43629572034373,640.0797621066198 9 | 45.0,362,1,0.0027624309392265192,10,206.56,11600.0,5.329487439683678,63.09714905147111,719.5068590846794 10 | 50.0,402,1,0.0024875621890547263,10,477.05,12880.0,9.530381083998458,92.23316195622637,798.5723414876693 11 | 55.0,442,1,0.0022624434389140274,10,853.25,14120.0,15.227914394853354,119.52646301355067,877.3363890260956 12 | 60.0,483,1,0.002070393374741201,10,1352.24,15360.0,22.974202578117893,150.58545137881742,957.6789896958686 13 | 65.0,523,1,0.0019120458891013384,10,1933.41,16720.0,31.763047334172683,171.66041212573978,1036.0426046437153 14 | 70.0,563,1,0.0017761989342806395,10,2658.57,17880.0,41.91271290049492,193.72940766512014,1113.8506943904863 15 | 75.0,603,1,0.001658374792703151,10,3495.77,19080.0,53.10416640301419,215.44259028973534,1191.5602577137363 16 | 80.0,643,1,0.0015552099533437014,10,4379.15,20420.0,64.40014335009522,235.54492304752895,1269.4835657118997 17 | 85.0,684,1,0.0014619883040935672,10,5360.34,21580.0,76.54151686335226,257.67063148430935,1348.8148794118888 18 | 90.0,724,1,0.0013812154696132596,10,6426.85,22820.0,89.19169604153448,277.94141307993107,1426.3007094448587 19 | 95.0,764,1,0.0013089005235602095,10,7496.78,24060.0,101.73078949127068,296.2214818420855,1503.7928552284545 20 | 100.0,804,1,0.0012437810945273632,10,8609.57,25180.0,114.27987843419348,317.2554818529123,1581.0546827464502 21 | 105.0,844,1,0.001184834123222749,10,9872.91,26340.0,128.246077957591,336.28639756239136,1658.0889564856761 22 | 110.0,885,1,0.0011299435028248588,10,11060.92,27640.0,141.5272141274912,357.680648156786,1737.5102442370642 23 | 115.0,925,1,0.001081081081081081,10,12227.11,28860.0,154.43792416354867,376.85069823796056,1814.8919042047462 24 | 120.0,965,1,0.0010362694300518134,10,13476.81,30060.0,167.94124425627265,394.68266702767534,1892.1041262527517 25 | 125.0,1005,1,0.0009950248756218905,10,14746.73,31160.0,181.57802931838228,412.95181858348104,1969.0902039711468 26 | 130.0,1045,1,0.0009569377990430622,10,16105.77,32340.0,196.2133982299034,431.4016392501695,2046.0574820913278 27 | 135.0,1085,1,0.0009216589861751152,10,17324.38,33640.0,209.5917944781764,447.36763636326873,2123.51205818202 28 | 140.0,1126,1,0.0008880994671403197,10,18645.28,34820.0,224.0243229255078,465.6341414805803,2202.4362975524373 29 | -------------------------------------------------------------------------------- /userNum/USER_online3_10_mec1_450.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,70,1,0.014285714285714285,10,3.74,4510.0,0.2851101049098269,4.809194489951466,275.5636802929367 3 | 15.0,105,1,0.009523809523809525,10,6.09,6860.0,0.4234567800580079,6.643651707620497,415.3867330737563 4 | 20.0,140,1,0.007142857142857143,10,7.78,9180.0,0.5718453945835653,9.18848901191764,555.2014699655684 5 | 25.0,174,1,0.005747126436781609,10,9.66,11430.0,0.7153574597369978,11.513903226794207,691.0208648507898 6 | 30.0,209,1,0.004784688995215311,10,11.76,13810.0,0.8658661839220729,13.88782080965733,830.8457117083545 7 | 35.0,244,1,0.004098360655737705,10,13.66,16190.0,1.0189315725533437,16.307150417194222,970.6697263126329 8 | 40.0,279,1,0.0035842293906810036,10,40.71,18490.0,1.3274110025210468,19.914690838035124,1110.430963363519 9 | 45.0,314,1,0.0031847133757961785,10,171.05,20760.0,2.3631169177725178,33.375570165557875,1249.9545356389788 10 | 50.0,348,1,0.0028735632183908046,10,395.52,23040.0,4.3169861721004175,48.14108552618489,1385.2217826477527 11 | 55.0,383,1,0.0026109660574412533,10,746.82,25340.0,7.0229262012829015,62.840366200432676,1524.2333267343952 12 | 60.0,418,1,0.0023923444976076554,10,1211.02,27610.0,10.489959582076144,76.24325764259166,1662.984899545161 13 | 65.0,453,1,0.002207505518763797,10,1761.11,29960.0,14.51683959471074,89.05145171989649,1801.619834825894 14 | 70.0,488,1,0.0020491803278688526,10,2416.64,32270.0,19.26981110333357,100.63195663351456,1939.9974722753377 15 | 75.0,522,1,0.0019157088122605363,10,3149.12,34490.0,24.273726831788814,112.51156129192542,2074.2822200437895 16 | 80.0,557,1,0.0017953321364452424,10,3986.67,36800.0,29.690711433470177,122.40909377504535,2212.455954401875 17 | 85.0,592,1,0.0016891891891891893,10,4904.86,39070.0,35.344641879096045,133.01225721231157,2350.518757590217 18 | 90.0,627,1,0.001594896331738437,10,5913.14,41280.0,41.399367929932325,142.94223939390673,2488.3991783900033 19 | 95.0,662,1,0.0015105740181268882,10,6926.88,43600.0,47.2906634142944,153.49886883346528,2626.433223953959 20 | 100.0,696,1,0.0014367816091954023,10,8012.85,45850.0,53.65775882400117,162.21301004848883,2760.3231288459524 21 | 105.0,731,1,0.0013679890560875513,10,9128.24,48140.0,60.159976780252485,171.19921606570952,2898.144059595809 22 | 110.0,766,1,0.0013054830287206266,10,10295.23,50410.0,66.70787344278754,181.3971997249523,3035.9229809204035 23 | 115.0,801,1,0.0012484394506866417,10,11481.12,52680.0,73.11976299649093,191.87216647932865,3173.751473623536 24 | 120.0,836,1,0.0011961722488038277,10,12779.55,54960.0,80.00915171824147,202.0482580569084,3311.43763635435 25 | 125.0,870,1,0.0011494252873563218,10,14032.01,57140.0,86.62933073371748,210.94845591700758,3445.166791482259 26 | 130.0,905,1,0.0011049723756906078,10,15324.2,59380.0,93.30932447817156,220.93282439293787,3582.880950233745 27 | 135.0,940,1,0.0010638297872340426,10,16558.69,61680.0,99.64429123826561,231.42286189716492,3720.7654155327295 28 | 140.0,975,1,0.0010256410256410256,10,17914.02,63950.0,106.72957273730499,241.1868499950762,3858.379469216466 29 | -------------------------------------------------------------------------------- /userNum/USER_online3_10_mec2_650.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,95,1,0.010526315789473684,10,4.67,8330.0,0.1875872308282265,5.123458288423242,563.4677790946636 3 | 15.0,142,1,0.007042253521126761,10,6.92,12330.0,0.2916418063386877,7.026377055558993,845.1366792098144 4 | 20.0,189,1,0.005291005291005291,10,8.83,16430.0,0.39183430479249665,9.609891108394462,1126.8391753402232 5 | 25.0,236,1,0.00423728813559322,10,14.35,20560.0,0.49895088982667146,12.099746381922143,1408.5679601816291 6 | 30.0,283,1,0.0035335689045936395,10,112.57,24890.0,1.006825160931221,23.551966310937132,1690.1268440021227 7 | 35.0,330,1,0.0030303030303030303,10,355.02,29160.0,2.321854649550893,38.22207474800251,1971.2516089971969 8 | 40.0,378,1,0.0026455026455026454,10,715.66,33410.0,4.265712598982552,49.885926720369135,2257.880288185489 9 | 45.0,425,1,0.002352941176470588,10,1172.74,37600.0,6.682263225080095,60.599067548153364,2538.2643250479546 10 | 50.0,472,1,0.00211864406779661,10,1694.18,41830.0,9.402015759772741,69.58076851726724,2818.471871516845 11 | 55.0,519,1,0.0019267822736030828,10,2311.56,45930.0,12.554881689346463,79.83555301973507,3098.300812752704 12 | 60.0,566,1,0.0017667844522968198,10,2892.29,50150.0,15.719922726260299,88.7713033375507,3378.219645059467 13 | 65.0,613,1,0.0016313213703099511,10,3724.59,53980.0,20.137064653149,98.26506344217748,3656.8819016956168 14 | 70.0,661,1,0.0015128593040847202,10,4640.37,57760.0,24.993000311964597,106.76865155272401,3940.911933121423 15 | 75.0,708,1,0.0014124293785310734,10,5586.22,61530.0,29.803716892138066,115.0153120265123,4219.035906828175 16 | 80.0,755,1,0.0013245033112582781,10,6349.09,65640.0,33.62819901957589,121.85333645347447,4498.307428905085 17 | 85.0,802,1,0.0012468827930174563,10,7262.01,69570.0,38.248033147251455,130.69297142967207,4776.7624294055 18 | 90.0,849,1,0.001177856301531213,10,8496.71,73200.0,44.30270347016703,138.3542306328577,5053.694248561041 19 | 95.0,896,1,0.0011160714285714285,10,9486.49,77210.0,49.04918695114716,146.576015827635,5332.040797583196 20 | 100.0,944,1,0.001059322033898305,10,10771.59,80980.0,55.0880335325864,155.57799160725597,5615.001006708097 21 | 105.0,991,1,0.0010090817356205853,10,12020.93,84740.0,60.8394155170697,163.362434094051,5892.31725073406 22 | 110.0,1038,1,0.0009633911368015414,10,13234.53,88470.0,66.45961918729869,172.04545663057334,6169.679804799743 23 | 115.0,1085,1,0.0009216589861751152,10,14252.13,92460.0,71.17425934159245,178.21995638800595,6448.194914504288 24 | 120.0,1132,1,0.0008833922261484099,10,15307.55,96440.0,76.10681014669015,186.3888330428628,6726.348591371315 25 | 125.0,1179,1,0.0008481764206955047,10,16757.32,99990.0,82.7323033909772,195.13308800364302,7002.787040851614 26 | 130.0,1226,1,0.0008156606851549756,10,18011.01,103830.0,88.35289126548486,203.83499212671504,7280.287811415155 27 | 135.0,1274,1,0.0007849293563579278,10,19164.26,107900.0,93.59387311319777,211.88781921283382,7564.367450709807 28 | 140.0,1321,1,0.000757002271006813,10,20615.96,111450.0,100.16378414658988,219.75138786522186,7840.797886322109 29 | -------------------------------------------------------------------------------- /userNum/USER_online3_10_mec3_850.data: -------------------------------------------------------------------------------- 1 | TIMESLOT,Throughout,Failure,Failurerate,User,mecAge,Run,commTotal,commEnergy,reward 2 | 10.0,82,1,0.012195121951219513,10,3.09,3420.0,0.5430074634814398,11.557457483531373,637.1345845874127 3 | 15.0,122,1,0.00819672131147541,10,4.49,5330.0,0.7848966604912461,16.602341894173772,952.4765876400837 4 | 20.0,163,1,0.006134969325153374,10,5.98,7230.0,1.0296363319400124,21.865924224224194,1275.329728460166 5 | 25.0,204,1,0.004901960784313725,10,57.32,9350.0,1.8192487438812792,44.87466073121375,1597.9063281612916 6 | 30.0,244,1,0.004098360655737705,10,233.71,11760.0,4.218844008596816,73.90634114848439,1909.3529618983418 7 | 35.0,285,1,0.0035087719298245615,10,562.84,13860.0,8.678410097400656,97.23315826538824,2220.3993254382212 8 | 40.0,326,1,0.003067484662576687,10,993.18,16110.0,14.011152155651326,116.9007262220618,2529.458555928083 9 | 45.0,366,1,0.00273224043715847,10,1506.22,18130.0,20.46046237713598,138.7908258203824,2826.2251954009716 10 | 50.0,407,1,0.002457002457002457,10,2220.33,19610.0,29.002171291202114,163.15994868352524,3116.258136747589 11 | 55.0,448,1,0.002232142857142857,10,2911.61,21770.0,36.85397233125063,181.4806998177919,3420.139145850425 12 | 60.0,488,1,0.0020491803278688526,10,3756.49,23460.0,46.09447624085221,200.54883247517796,3701.5778414374267 13 | 65.0,529,1,0.001890359168241966,10,4709.5,25260.0,56.21082788991457,217.5814377965261,3987.9502987723363 14 | 70.0,570,1,0.0017543859649122807,10,5679.42,27080.0,66.25509995867327,236.5337952398877,4275.411863317506 15 | 75.0,610,1,0.001639344262295082,10,6705.69,28700.0,77.07716331009802,253.48505035097082,4550.813899558721 16 | 80.0,651,1,0.0015360983102918587,10,7805.7,30240.0,88.8576772631855,268.05578424182954,4833.706899728538 17 | 85.0,692,1,0.001445086705202312,10,9024.21,31570.0,101.3464804763224,283.6583108983858,5103.7796830528905 18 | 90.0,732,1,0.001366120218579235,10,10115.92,33260.0,112.1341247675226,303.3738617429198,5386.884343138842 19 | 95.0,773,1,0.00129366106080207,10,11273.27,34910.0,123.48093479589593,320.78899552866966,5669.030104081006 20 | 100.0,814,1,0.0012285012285012285,10,12483.18,36550.0,135.32927637728045,338.77387027228804,5944.5404699499495 21 | 105.0,854,1,0.00117096018735363,10,13822.73,38020.0,148.28567627652265,360.0078165840712,6213.237829323104 22 | 110.0,895,1,0.0011173184357541898,10,14924.82,39930.0,158.81609458806258,378.7997260610681,6502.640073478043 23 | 115.0,936,1,0.0010683760683760685,10,16279.02,41520.0,171.40658036812718,393.12056280156406,6783.2219783251785 24 | 120.0,976,1,0.0010245901639344263,10,17492.21,43250.0,182.8192274738342,409.7721830194041,7060.477527769766 25 | 125.0,1017,1,0.0009832841691248771,10,18780.4,44990.0,194.79700445491025,427.4881496355743,7336.405073732915 26 | 130.0,1058,1,0.000945179584120983,10,20134.94,46520.0,207.2785812889532,444.69999714295665,7612.799540543348 27 | 135.0,1098,1,0.0009107468123861566,10,21388.42,48140.0,218.941952148674,462.89296301751676,7885.8002610261665 28 | 140.0,1139,1,0.000877963125548727,10,22475.5,50170.0,229.1781495046008,481.55954262452644,8176.891312541166 29 | -------------------------------------------------------------------------------- /usermove/user_0.data: -------------------------------------------------------------------------------- 1 | 144.9744434939978 -37.814619463998895 2 | 145.00318634694116 -37.816432859894974 3 | 144.9942167483965 -37.84380047400267 4 | 144.98190423545924 -37.86983587346513 5 | 144.96420016537752 -37.892551636770406 6 | 144.99270401820348 -37.896671148158354 7 | 145.01904788703294 -37.908309042087105 8 | 145.02277398948556 -37.93686698599966 9 | 145.0495077651471 -37.926155065589285 10 | 145.06548304664756 -37.90219196101201 11 | 145.05753442836004 -37.87451056893504 12 | 145.08224919555622 -37.88929638248853 13 | 145.05558955402074 -37.900191496677934 14 | 145.06340831219455 -37.9279098483717 15 | 145.04402557852646 -37.906608448522114 16 | 145.06592865412014 -37.88790830735855 17 | 145.04236835498094 -37.87134472367413 18 | 145.02477506811672 -37.89414639592232 19 | 145.00860919807744 -37.917981341818475 20 | 144.9804870912385 -37.9241931939528 21 | 144.9896713178537 -37.89689685754146 22 | 144.99030534151171 -37.86810383731084 23 | 144.99273814821993 -37.83940677384573 24 | 144.96415590591243 -37.842941660643916 25 | 144.94122782896775 -37.82551342815698 26 | 144.91272717930363 -37.829655042422296 27 | 144.90409991394975 -37.8021775918034 28 | 144.8869704717415 -37.82532974525907 29 | 144.8657497634788 -37.844800788909275 30 | 144.83818872398567 -37.83644440799059 31 | 144.83803370198936 -37.865243990768484 32 | 144.81269939088082 -37.878941168603944 33 | 144.7851991829185 -37.887495615519384 34 | 144.81386371360355 -37.89028571956848 35 | 144.79535982152512 -37.9123548377645 36 | 144.76677480287867 -37.90884247260959 37 | 144.77786633963467 -37.93542099424624 38 | 144.80327186411574 -37.94898562936266 39 | 144.77879784480652 -37.933804641949074 40 | 144.7819090207897 -37.962436103385784 41 | -------------------------------------------------------------------------------- /usermove/user_1.data: -------------------------------------------------------------------------------- 1 | 144.97045445740824 -37.81013955044752 2 | 144.97911939322168 -37.775197900696135 3 | 144.94445697040564 -37.76547594387033 4 | 144.93130631073598 -37.79898803348367 5 | 144.926909707363 -37.83471855095516 6 | 144.89879397083865 -37.8572019973034 7 | 144.92918577485403 -37.87649806552182 8 | 144.8944452545829 -37.88593714658361 9 | 144.92159560788076 -37.86229696223996 10 | 144.89231168432238 -37.88323620341596 11 | 144.9253586126756 -37.86895682925544 12 | 144.95845260494625 -37.8831267860511 13 | 144.9612807432402 -37.84723804639936 14 | 144.92869504163386 -37.86254072756386 15 | 144.96004646338847 -37.84484642469641 16 | 144.98465766016787 -37.818573073309764 17 | 145.01420855368457 -37.79801231718639 18 | 145.04719407321628 -37.81243297948825 19 | 145.0679148113613 -37.84187191647186 20 | 145.04333311137597 -37.815570965427625 21 | 145.07886720030578 -37.8213440515979 22 | 145.08540428821544 -37.78594254765158 23 | 145.0833911767849 -37.82188621722451 24 | 145.05088416153617 -37.80641708797883 25 | 145.01624452258923 -37.81621991479688 26 | 144.99222963773389 -37.84303940967253 27 | 144.95663807352418 -37.84844686351946 28 | 144.97607642595923 -37.87874786110387 29 | 145.00511892518594 -37.9000206897514 30 | 144.97887340992588 -37.92466156897139 31 | 144.98082272102806 -37.96060875503966 32 | 144.9448773459523 -37.95862632959009 33 | 144.93898477299487 -37.92311185952589 34 | 144.9488964403321 -37.8885032066975 35 | 144.9291458923676 -37.85840477060689 36 | 144.96030475201187 -37.87643600643996 37 | 144.95716357622433 -37.84057330973891 38 | 144.97598636699047 -37.80988613737367 39 | 144.98949830397967 -37.84325419933118 40 | 144.95764064718344 -37.8600199293616 41 | -------------------------------------------------------------------------------- /usermove/user_2.data: -------------------------------------------------------------------------------- 1 | 144.9573050094399 -37.81989155597466 2 | 144.92858067153446 -37.81780531248566 3 | 144.9304284933243 -37.789064652183 4 | 144.90774766765014 -37.77131584527274 5 | 144.93654589189097 -37.7716356586162 6 | 144.95748838947102 -37.75186568655984 7 | 144.92877099196406 -37.75404538388461 8 | 144.90259593792914 -37.76605814985541 9 | 144.89534203947252 -37.79392965783724 10 | 144.90790019494844 -37.76801185061821 11 | 144.8872494363028 -37.74793733524774 12 | 144.8946314397121 -37.720099482858146 13 | 144.86718086353667 -37.7113870855051 14 | 144.89564662051856 -37.70701207928254 15 | 144.8669366157355 -37.70473707920398 16 | 144.83826589805446 -37.702011286171825 17 | 144.8311116114757 -37.72990852946842 18 | 144.82023670830287 -37.75657642179199 19 | 144.84374781235644 -37.739943082193975 20 | 144.83207080897225 -37.713616525412554 21 | 144.80805051420745 -37.69772736434557 22 | 144.83427975576336 -37.70962134969117 23 | 144.8628609128593 -37.71316500021809 24 | 144.8913766008868 -37.71720177322627 25 | 144.86760556980897 -37.73346148052676 26 | 144.89636888311534 -37.73200827454035 27 | 144.9155332286732 -37.71051018487315 28 | 144.89475152901863 -37.73044911562351 29 | 144.86857726649592 -37.71843462514775 30 | 144.88667349957387 -37.74083923066511 31 | 144.85794303010832 -37.742839261737174 32 | 144.87003895261017 -37.71670253166571 33 | 144.8536232348354 -37.74036609458297 34 | 144.87165728860657 -37.71791140900115 35 | 144.8660950351414 -37.74616917494945 36 | 144.84901900219685 -37.72297760107278 37 | 144.86106818330194 -37.74913591207898 38 | 144.8821967562917 -37.72956492836799 39 | 144.855712288221 -37.718250647524194 40 | 144.85666823671932 -37.74703477791697 41 | -------------------------------------------------------------------------------- /usermove/user_3.data: -------------------------------------------------------------------------------- 1 | 144.95363194415222 -37.81452358749519 2 | 144.93936167943735 -37.81259497530832 3 | 144.95320250829806 -37.80862112875259 4 | 144.94451943748814 -37.82010869948403 5 | 144.95653758560672 -37.81217622724648 6 | 144.95762633001837 -37.82653500977168 7 | 144.94765076850337 -37.83692000724209 8 | 144.9368047328037 -37.82744775779428 9 | 144.9324950212822 -37.84118771363851 10 | 144.930330198067 -37.82695136788383 11 | 144.920108856011 -37.81680818462734 12 | 144.91999298279325 -37.83120771841831 13 | 144.91078783319963 -37.820134091146315 14 | 144.92384944931453 -37.81407156820064 15 | 144.93255154977865 -37.80259840614686 16 | 144.946209753312 -37.80716058503878 17 | 144.94568496207717 -37.821551019158704 18 | 144.95820346636705 -37.814434345051794 19 | 144.94809559568833 -37.80417808109544 20 | 144.96163929324482 -37.80906973281018 21 | 144.97567519101372 -37.81228742978482 22 | 144.97651672145872 -37.82666281939728 23 | 144.98754263432681 -37.81740057099719 24 | 144.98794216156736 -37.83179502749905 25 | 144.97588057668509 -37.839661295364294 26 | 144.96825249877702 -37.82744767888806 27 | 144.96881778850442 -37.81305877873815 28 | 144.97661005608322 -37.80094925496632 29 | 144.96297403370008 -37.79632119991405 30 | 144.97575681433617 -37.80295147285034 31 | 144.97757898210824 -37.81723571957918 32 | 144.9631880952567 -37.817747945726694 33 | 144.97754702289186 -37.818834774677555 34 | 144.97871607405526 -37.80448230731555 35 | 144.96739158211554 -37.79558759639798 36 | 144.95929197598616 -37.783681447543344 37 | 144.97256980295884 -37.778108359451146 38 | 144.97531880008918 -37.79224352887982 39 | 144.96127625696386 -37.78905495826385 40 | 144.96685865986237 -37.77578104482889 41 | -------------------------------------------------------------------------------- /usermove/user_4.data: -------------------------------------------------------------------------------- 1 | 144.963 -37.8141 2 | 144.98747533102312 -37.82927887253085 3 | 144.97426369518638 -37.85486974353043 4 | 144.95877969443242 -37.83058629812721 5 | 144.94909973926377 -37.857710797531496 6 | 144.92885803004154 -37.83722389420856 7 | 144.90020101998292 -37.834357576972245 8 | 144.92124467876414 -37.814695318071 9 | 144.89378347368276 -37.823374155290225 10 | 144.9147428809984 -37.84312619936109 11 | 144.9335080866615 -37.8649735574719 12 | 144.93309416759698 -37.89377058285662 13 | 144.9607913289577 -37.88587708853804 14 | 144.98894273635534 -37.89195477407879 15 | 145.009646650097 -37.87193508487597 16 | 144.9906400937158 -37.850297367470304 17 | 144.98359860924776 -37.87822329621917 18 | 145.01199782834428 -37.873435357757884 19 | 144.9899283989841 -37.85493183680333 20 | 144.9999195060923 -37.827920398878774 21 | 144.9738651825481 -37.81564798164929 22 | 144.9752372628707 -37.84441527897783 23 | 145.00114433720574 -37.85699556114473 24 | 144.98882560262334 -37.83096310489703 25 | 144.98032187442422 -37.85847903858491 26 | 145.0089004936566 -37.86204309845694 27 | 145.02834995231947 -37.84080260510766 28 | 145.04787468356756 -37.86197392697689 29 | 145.07492321789616 -37.852083689837414 30 | 145.100924297061 -37.864468514513774 31 | 145.0724346976787 -37.86025155743122 32 | 145.07918030975407 -37.83225268749459 33 | 145.0522419416588 -37.822066209969776 34 | 145.08079673789268 -37.818316061700585 35 | 145.1049991815743 -37.80270575357299 36 | 145.1025183254673 -37.83139870310726 37 | 145.0970634722539 -37.85967739785119 38 | 145.1096381587299 -37.8337676070371 39 | 145.10383920650875 -37.861977749772244 40 | 145.1210558775963 -37.88506511074451 41 | -------------------------------------------------------------------------------- /usermove/user_5.data: -------------------------------------------------------------------------------- 1 | 144.96590852785317 -37.81165966077717 2 | 145.00179849597893 -37.808847155144704 3 | 145.01749690906482 -37.84124406590152 4 | 144.99564851265285 -37.81263204789814 5 | 144.96708470533923 -37.83454343561663 6 | 144.95802364340034 -37.799702408700945 7 | 144.98766636997073 -37.82013054521589 8 | 144.9681579205143 -37.789874630094936 9 | 144.94839824488696 -37.81996707464672 10 | 144.95211450136495 -37.784159401756824 11 | 144.9165937602056 -37.77830474997468 12 | 144.95221658104253 -37.78350231051971 13 | 144.97037225249719 -37.75241579263766 14 | 145.0013359540921 -37.7340514471949 15 | 144.9714744915584 -37.71394440724991 16 | 144.93616157559802 -37.70694455251035 17 | 144.96585416895087 -37.686588966053975 18 | 144.96211221080483 -37.65078396990493 19 | 144.94603038069346 -37.68299227225493 20 | 144.94971933606632 -37.64718177647147 21 | 144.9570084774776 -37.68243611545955 22 | 144.92446802348485 -37.69783477949079 23 | 144.94074989655678 -37.66572713851127 24 | 144.93502370143264 -37.63018546312307 25 | 144.906571391255 -37.65224143840316 26 | 144.89900613128216 -37.61704531870875 27 | 144.88909032929766 -37.58243785028061 28 | 144.8614230028672 -37.559404851166484 29 | 144.89685167951458 -37.55301666902939 30 | 144.88358134866849 -37.58648155090928 31 | 144.85723597659907 -37.56194746501794 32 | 144.89055278072038 -37.54830962929732 33 | 144.87876987046928 -37.58232672832141 34 | 144.90087633843203 -37.610739825199644 35 | 144.86554213390912 -37.60384823679549 36 | 144.88941117821938 -37.57689886344998 37 | 144.86295457261886 -37.55248476874839 38 | 144.89893005435263 -37.55115634335572 39 | 144.89310675898588 -37.58668223857416 40 | 144.89045982547563 -37.550779679570766 41 | -------------------------------------------------------------------------------- /usermove/user_6.data: -------------------------------------------------------------------------------- 1 | 144.95921393207493 -37.81378490910957 2 | 144.95921393207493 -37.81378490910957 3 | 144.95921393207493 -37.81378490910957 4 | 144.95921393207493 -37.81378490910957 5 | 144.95921393207493 -37.81378490910957 6 | 144.95921393207493 -37.81378490910957 7 | 144.95921393207493 -37.81378490910957 8 | 144.95921393207493 -37.81378490910957 9 | 144.95921393207493 -37.81378490910957 10 | 144.95921393207493 -37.81378490910957 11 | 144.95921393207493 -37.81378490910957 12 | 144.95921393207493 -37.81378490910957 13 | 144.95921393207493 -37.81378490910957 14 | 144.95921393207493 -37.81378490910957 15 | 144.95921393207493 -37.81378490910957 16 | 144.95921393207493 -37.81378490910957 17 | 144.95921393207493 -37.81378490910957 18 | 144.95921393207493 -37.81378490910957 19 | 144.95921393207493 -37.81378490910957 20 | 144.95921393207493 -37.81378490910957 21 | 144.95921393207493 -37.81378490910957 22 | 144.95921393207493 -37.81378490910957 23 | 144.95921393207493 -37.81378490910957 24 | 144.95921393207493 -37.81378490910957 25 | 144.95921393207493 -37.81378490910957 26 | 144.95921393207493 -37.81378490910957 27 | 144.95921393207493 -37.81378490910957 28 | 144.95921393207493 -37.81378490910957 29 | 144.95921393207493 -37.81378490910957 30 | 144.95921393207493 -37.81378490910957 31 | 144.95921393207493 -37.81378490910957 32 | 144.95921393207493 -37.81378490910957 33 | 144.95921393207493 -37.81378490910957 34 | 144.95921393207493 -37.81378490910957 35 | 144.95921393207493 -37.81378490910957 36 | 144.95921393207493 -37.81378490910957 37 | 144.95921393207493 -37.81378490910957 38 | 144.95921393207493 -37.81378490910957 39 | 144.95921393207493 -37.81378490910957 40 | 144.95921393207493 -37.81378490910957 41 | -------------------------------------------------------------------------------- /usermove/user_7.data: -------------------------------------------------------------------------------- 1 | 144.957673808202 -37.81208430778482 2 | 144.96487367775853 -37.81204096763003 3 | 144.96848149354832 -37.80581010370703 4 | 144.97502356496852 -37.80280322799745 5 | 144.98189174607236 -37.80496380392176 6 | 144.9774867334566 -37.79926855468621 7 | 144.97147547590612 -37.80323148070897 8 | 144.97692315787214 -37.79852374651966 9 | 144.98400365152105 -37.799830119241214 10 | 144.97963770803275 -37.79410486488381 11 | 144.9814473308677 -37.7871359865526 12 | 144.98085117691403 -37.79431126358304 13 | 144.9833668900423 -37.78756506558296 14 | 144.9901014334027 -37.78501831751401 15 | 144.9898754387869 -37.77782186516347 16 | 144.99574598915183 -37.77365333563704 17 | 144.9946968895604 -37.78077649434981 18 | 144.99821070232622 -37.78706084951535 19 | 144.99149074851357 -37.78964584869444 20 | 144.9947570268306 -37.78322935230188 21 | 144.98781663397094 -37.78131338075893 22 | 144.98067674919727 -37.78038491674847 23 | 144.97350947273262 -37.77969924329911 24 | 144.97869216648357 -37.78469721143464 25 | 144.98563844215997 -37.78659174415471 26 | 144.99164537501014 -37.79056122242439 27 | 144.98734637003835 -37.79633690907211 28 | 144.98941723001073 -37.80323267146468 29 | 144.9822953485795 -37.80429040719709 30 | 144.9787824870352 -37.810575294130885 31 | 144.98580618985935 -37.81215883403824 32 | 144.9901950828279 -37.81786651469772 33 | 144.9898736581996 -37.82505933655067 34 | 144.99521672386282 -37.82988547883187 35 | 144.99960354928072 -37.8241762089352 36 | 145.00668808270635 -37.825460493226664 37 | 145.0021711427207 -37.83106738658806 38 | 144.9965947364333 -37.83562191103284 39 | 145.00345124115648 -37.833424561952455 40 | 144.99844745573387 -37.828247484452135 41 | -------------------------------------------------------------------------------- /usermove/user_8.data: -------------------------------------------------------------------------------- 1 | 144.9702766021266 -37.81490830722213 2 | 144.99438850341068 -37.79915850670062 3 | 145.00534090262724 -37.82579466542145 4 | 144.9841923628573 -37.80624525966069 5 | 144.9611953608573 -37.823582442217585 6 | 144.93784927564815 -37.80671826997559 7 | 144.96310547044337 -37.79287758269257 8 | 144.97760730842393 -37.81776004027187 9 | 144.98523602624007 -37.845531296355844 10 | 144.9942587668381 -37.872881436247646 11 | 145.02287253850417 -37.86961156300204 12 | 145.02865959779186 -37.897824147867674 13 | 145.0216514732752 -37.86988982863919 14 | 145.0270254738268 -37.89818399973628 15 | 145.04970105318125 -37.880428490705555 16 | 145.07175786651254 -37.861909932833285 17 | 145.09556562015996 -37.87811582269668 18 | 145.12427473102179 -37.87582956953421 19 | 145.10706425611914 -37.898921549822305 20 | 145.08030130376412 -37.90956036466429 21 | 145.10063704685766 -37.88916679820736 22 | 145.12297981845143 -37.87099427616146 23 | 145.14048224681497 -37.89386576499317 24 | 145.14790107837538 -37.8660377047252 25 | 145.1433653785957 -37.83759711001432 26 | 145.12302786434074 -37.817205309850294 27 | 145.1132333562873 -37.84428865550757 28 | 145.08455324256062 -37.84691374152966 29 | 145.06460075798609 -37.86768242852002 30 | 145.08265099931702 -37.89012410376708 31 | 145.1043160442794 -37.90909950433672 32 | 145.12888705426536 -37.92412300154174 33 | 145.1296288690253 -37.895332556757715 34 | 145.15791993352315 -37.900722887877386 35 | 145.13034237525838 -37.89242118442849 36 | 145.13206519724184 -37.863672760394934 37 | 145.11748648870326 -37.83883526339248 38 | 145.08968408674167 -37.83132084756919 39 | 145.10469072079047 -37.85590216027876 40 | 145.10910126625186 -37.884362432391534 41 | -------------------------------------------------------------------------------- /usermove/user_9.data: -------------------------------------------------------------------------------- 1 | 144.97314159073107 -37.81524915678738 2 | 144.97314159073107 -37.81524915678738 3 | 144.97314159073107 -37.81524915678738 4 | 144.97314159073107 -37.81524915678738 5 | 144.97314159073107 -37.81524915678738 6 | 144.97314159073107 -37.81524915678738 7 | 144.97314159073107 -37.81524915678738 8 | 144.97314159073107 -37.81524915678738 9 | 144.97314159073107 -37.81524915678738 10 | 144.97314159073107 -37.81524915678738 11 | 144.97314159073107 -37.81524915678738 12 | 144.97314159073107 -37.81524915678738 13 | 144.97314159073107 -37.81524915678738 14 | 144.97314159073107 -37.81524915678738 15 | 144.97314159073107 -37.81524915678738 16 | 144.97314159073107 -37.81524915678738 17 | 144.97314159073107 -37.81524915678738 18 | 144.97314159073107 -37.81524915678738 19 | 144.97314159073107 -37.81524915678738 20 | 144.97314159073107 -37.81524915678738 21 | 144.97314159073107 -37.81524915678738 22 | 144.97314159073107 -37.81524915678738 23 | 144.97314159073107 -37.81524915678738 24 | 144.97314159073107 -37.81524915678738 25 | 144.97314159073107 -37.81524915678738 26 | 144.97314159073107 -37.81524915678738 27 | 144.97314159073107 -37.81524915678738 28 | 144.97314159073107 -37.81524915678738 29 | 144.97314159073107 -37.81524915678738 30 | 144.97314159073107 -37.81524915678738 31 | 144.97314159073107 -37.81524915678738 32 | 144.97314159073107 -37.81524915678738 33 | 144.97314159073107 -37.81524915678738 34 | 144.97314159073107 -37.81524915678738 35 | 144.97314159073107 -37.81524915678738 36 | 144.97314159073107 -37.81524915678738 37 | 144.97314159073107 -37.81524915678738 38 | 144.97314159073107 -37.81524915678738 39 | 144.97314159073107 -37.81524915678738 40 | 144.97314159073107 -37.81524915678738 41 | --------------------------------------------------------------------------------