GeminiLight / drl-sfcp

[ICC'21 - DRL-SFCP] Implementation of our paper "DRL-SFCP: Adaptive Service Function Chains Placement with Deep Reinforcement Learning", accepted by ICC 2021.
Apache License 2.0
28 stars 11 forks source link

关于fig.6,fig.7,fig8的疑问 #7

Closed swqsbssddqs closed 1 year ago

swqsbssddqs commented 1 year ago

作者你好,fig.6,fig.7是arrival rate对接受率和平均收益的影响,我看v_sim_setting.yaml中默认arrival_rate.lam=0.04,你对它取了倒数,应该默认100个时间单位处理3~4个请求。当我准备改动arrival_rate.lam时,发现它只起到了对scf排序的作用,因为代码处理scf时没有计算时间,直接开始处理下一个事件了,如下图。那么我该怎么得到fig.6,fig.7呢? image fig8是不同长度scf处理时间的的比较,我也有相似的疑问,就是代码记录了处理一条scf的时间吗?处理一条scf的时间保存在下面这个表中吗?还请作者帮我解答一下 image

GeminiLight commented 1 year ago

对于问题1: 事实上修改lam也会随之修改整体的SFC到达时间的分布,参见 data.virtual_network_request_simulator.py

    def arrange_v_nets(self):
        """Arrange virtual networks, including length, lifetime, arrival_time"""
        # length: uniform distribution
        self.v_nets_size = generate_data_with_distribution(size=self.num_v_nets, **self.v_sim_setting['v_net_size'])
        # lifetime: exponential distribution
        self.v_nets_lifetime = generate_data_with_distribution(size=self.num_v_nets, **self.v_sim_setting['lifetime'])
        # arrival_time: poisson distribution
        arrival_time_interval = generate_data_with_distribution(size=self.num_v_nets, **self.v_sim_setting['arrival_rate'])
        self.v_nets_arrival_time = np.cumsum(arrival_time_interval)
        # np.ceil(np.cumsum(np.array([-np.log(np.random.uniform()) / self.aver_arrival_rate for i in range(self.num_v_nets)]))).tolist()
        # self.v_nets_arrival_time = np.cumsum(np.random.poisson(20, self.num_v_nets))
        if 'max_latency' in self.v_sim_setting:
            self.v_nets_max_latency = generate_data_with_distribution(size=self.num_v_nets, **self.v_sim_setting['max_latency'])

对于问题2: 在record.csv中有一项running_time记录仿真时间的变化。相邻两列之差即当前所处理的SFC耗时。而一个record.csv的SFCs的大小是多样的,即可出统计相同大小的SFCs的平均处理时间。

swqsbssddqs commented 1 year ago

问题2: 你好这是records目录下的csv文件的表头,没有发现running_time这一列呀(v_net_count,success_count,inservice_count,total_revenue,total_cost,total_r2c,total_time_revenue,total_time_cost,num_running_p_net_nodes,event_id,event_type,event_time,p_net_available_resource,p_net_node_available_resource,p_net_link_available_resource,p_net_node_resource_utilization,p_net_link_resource_utilization,v_net_id,v_net_lifetime,v_net_arrival_time,v_net_num_nodes,v_net_num_egdes,result,node_slots,link_paths,node_slots_info,link_paths_info,v_net_cost,v_net_revenue,v_net_demand,v_net_node_demand,v_net_link_demand,v_net_node_revenue,v_net_link_revenue,v_net_node_cost,v_net_link_cost,v_net_path_cost,v_net_r2c_ratio,v_net_time_cost,v_net_time_revenue,v_net_time_rc_ratio,description,total_violation,current_violation,total_place_violation,total_route_violation,place_result,route_result,early_rejection,revoke_times,selected_actions,v_net_reward,num_interactions,num_placed_nodes,num_routed_links)

GeminiLight commented 1 year ago

这个功能最初版本已经实现,但由于迁移到Virne,尚未添加该记录。实际上,这个补充功能并不复杂,只需要几行代码来计算时间差,将在Virne的下一个版本中添加。

swqsbssddqs commented 1 year ago

好的,谢谢作者大大。