예제 #1
0
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
예제 #2
0
    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)
예제 #3
0
 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()
예제 #4
0
    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")