数据集位于./file文件夹内
n_PlansNum_lb_ub_TimeSpent_Concurrency1_---ConcurrencyN.txt
举例:
4_3_0_3_5.5_10_10_9_10.txt
有四个服务,3条路径,虚拟机列表中每个服务有4个虚拟机可选, 要求最高用时为5.5秒,并发量为[10,10,9,10]。
假如是三条路径,每条路径是4个服务
这是一个长度为3*4的数组
需要一个概率数组probability
[概率1][概率2][概率3]
还需要一个并发量数组concurrency来存储每条路径的并发量
[并发量1][并发量2][并发量3]
[服务11][服务12][服务13][服务14][服务21][服务22][服务23][服务24][服务31][服务32][服务33][服务34]
假设有k条路径,每条路径是n个服务,那么数组长度就是k+k*n。
1为第一条路径第一个服务,n是第一条路径的第n个服务。
(1k)(1n)就是所有的k*n个服务的编号。
1 初始化单条解
- 有number_of_plans条路径,n个服务
- 初始化number_of_plans个概率,然后通过scaling_probability()函数进行放缩至1。
- 使用一个长度为number_of_plans的数组concurrency[FoodNumber][number_of_plans]存储这条解的每条路径的并发量
- 计算响应时间,以及并发量是不是符合要求,不符合要求的就要进行惩罚。
2 循环初始化所有解
- 循环从1-FoodNumber,初始化所有的解。
- 将第一条解当做最优解。
3 雇佣蜂阶段
- 随机找一条解,将这条解与其它任一条解进行交换某个位置。
- 如果交换后变好了,则保存更改,反之将计数器加一。
- 若计数器到达了最大值,舍弃本条解,重新生成。
4 存储最优解