def create_2flow_emulator(solution, block_file=None, trace_file=None, **kwargs): emulator = PccEmulator(block_file=block_file, trace_file=trace_file, senders=[], links=[], **kwargs) emulator.trace_list = emulator.get_trace() queue = int(random.uniform(*emulator.queue_range)) emulator.links = [Link(emulator.trace_list, queue), Link([], queue)] solution_1 = solution sender_1 = WinSender(emulator.links, 0, emulator.features, history_len=emulator.history_len, solution=solution_1) sender_1.init_application(emulator.block_file) solution_2 = NormalSolution() solution_2.init_trace(emulator.trace_file) sender_2 = WinSender(emulator.links, 0, emulator.features, history_len=emulator.history_len, solution=solution_2) # sender_2.init_application(emulator.block_file, ENABLE_BLOCK_LOG=False) emulator.senders = [sender_1, sender_2] emulator.net = Engine(emulator.senders, emulator.links) return emulator
def __init__(self, block_file=None, trace_file=None, queue_range=None, solution=None, **kwargs): # do configure on constant self.update_config(kwargs) self.trace_cols = ("time", "bandwith", "loss_rate", "delay") self.queue_range = queue_range if queue_range else (constant.MIN_QUEUE, constant.MAX_QUEUE) self.trace_file = trace_file if trace_file else parentdir + "/config/trace.txt" if isinstance(self.trace_file, int): self.trace_file = parentdir + "/scripts/first_group/traces_%d.txt" % self.trace_file self.block_file = block_file if block_file else parentdir + "/config/block.txt" self.event_record = {"Events": []} # unkown params self.features = [] # ["send rate", "recv rate"] self.history_len = 1 self.steps_taken = 0 self.links = None self.senders = None self.solution = solution self.trace_list = None if "senders" in kwargs: self.senders = kwargs["senders"] if "links" in kwargs: self.links = kwargs["links"] if "senders" not in kwargs and "links" not in kwargs: self.create_new_links_and_senders() self.net = Engine(self.senders, self.links)
def reset(self): self.steps_taken = 0 self.net.reset() self.create_new_links_and_senders() self.net = Engine(self.senders, self.links) self.episodes_run += 1 if self.episodes_run > 0 and self.episodes_run % 100 == 0: self.dump_events_to_file("pcc_env_log_run_%d.json" % self.episodes_run) self.event_record = {"Events": []} self.net.run_for_dur(self.run_dur) self.net.run_for_dur(self.run_dur) self.reward_ewma *= 0.99 self.reward_ewma += 0.01 * self.reward_sum print("Reward: %0.2f, Ewma Reward: %0.2f" % (self.reward_sum, self.reward_ewma)) self.reward_sum = 0.0 return self._get_all_sender_obs()
new_trace_file = "scripts/first_group/traces_81.txt" new_block_files = ["config/data_video.csv", "config/data_audio.csv"] emulator = PccEmulator(block_file=block_file, trace_file=trace_file, senders=[], links=[]) emulator.trace_list = emulator.get_trace() queue = int(random.uniform(*emulator.queue_range)) emulator.links = [Link(emulator.trace_list, queue), Link([], queue)] solution_2 = RenoSolution() # solution_2.init_trace(emulator.trace_file) sender_2 = WinSender(emulator.links, 0, emulator.features, history_len=emulator.history_len, solution=solution_2) # sender_2.init_application(emulator.block_file, ENABLE_BLOCK_LOG=False) emulator.senders = [sender_2] emulator.net = Engine(emulator.senders, emulator.links) print(emulator.run_for_dur(15)) # emulator.dump_events_to_file(log_file) emulator.print_debug() # from qoe_model import cal_qoe # print(cal_qoe(0.9)) analyze_pcc_emulator(log_packet_file, file_range="all") plot_cwnd(log_packet_file, trace_file=trace_file, file_range="all") # plot_throughput(log_packet_file, trace_file=trace_file, file_range="all")