退火算法基本思想在此不再赘述,可参考本文。模板如下:
PSO(粒子群算法),GA(遗传算法),SA(退火算法)等优化算法,个人认为虽然优化思路不同,但在某些地方是相通的。
- 构造初始解
- 目标函数最优
- 产生新解
- 根据实际问题对优化过程进行约束(比如pso引入罚函数)
而这几个地方则是将优化算法应用到实际问题的关键所在(问题转化能力,编程能力)。
构造初始解
模板中的randperm函数生成的是一个1*n的排列,可用于tsp这种路线安排(个人理解为离散?)。
再如y = 2a+3b 自变量a范围为(-1,1),自变量6范围为(0,1)初始解得构造形式需改变,可使用rand函数来构造。
当然对其他问题还会有其他的初始解形式。
目标函数最优
模板中对应的cost函数;
例如 max = 2a+3b,2a+3b可作为cost函数
但实际应用场景中要求并非如此单调
如tsp中要求路线最短。就需要构造cost函数来计算每次路线的耗费。
再比如寝室分配问题,点击看视频要求不同寝室间同寝室同学的共同爱好数量分布的尽可能均匀,就需要我们将不同寝室间共同爱好数量的标准差降到最小(即目标函数为标准差)
产生新解
产生新解过程差异也是各种优化算法差异的一个重要表现。
根据不同优化算法的特性以及解形式能正确编程得到新解是很重要的,以tsp使用退火算法求解为例,randperm函数就很好适配了这个解得形式并能很容易的产生随机新解。
但以遗传算法为例,种群中染色体会经历交叉变异等操作会导致产生的新解会不符合要求;
1 2 3 4 5 6 7
4 6 5 3 1 2 7
以第四个位置进行交叉结果会变为
1 2 3 3 1 2 7
4 6 5 4 5 6 7
因此需要进行处理,在此不进行赘述,此文提供了一种思路,因此根据不同的问题选择不同的算法来解决也很重要。
对优化过程进行约束
例如pso中引入罚函数的概念来对不满足规范的粒子进行惩罚,在此不多赘述,本文稍有提及。
1. 多元函数求解
2. TSP
main.m
gen_new_path.m
calculate_ans.m