在退火算法解决简单优化问题一文中提到在一般智能算法应用于实际问题时,需要着重注意以下几个方面,并根据具体问题决定实现思路。
- 构造初始解
- 目标函数最优
- 产生新解(重点)
目标函数
即商人行进耗费也可称之为适应度。根据邻接矩阵以及行进路径得到行进耗费
function [tsp_ans] = calculate_ans(path,d)
tsp_ans = 0;
n = size(path,2);
for i = 2:n
tsp_ans = tsp_ans+ d(path(i-1),path(i));
end
end
构造初始解
randperm函数可生成随机排列
新解的产生
与连续区间不同,tsp的新解(离散)产生需借助BBS来实现
SS = (SO1+SO2+SO3+SO4+SO5+……+SON)
SON表示交换的第N步
例SON为(1,2)表示解的1,2位置元素互换。可知交换子的顺序不可变换即B+SS=A。若SS中的交换子顺序变换则最后结果也很可能发生变化。
以X = 3 4 2 1 5, pbest = 1 2 3 4 5 为例
定义SS = [(1,4),(2,3),(3,4),(1,1)] (1,1)可忽略
3 4 2 1 5 + SS1 = 1 4 2 3 5
1 4 2 3 5 + SS2 = 1 2 4 3 5
1 2 4 3 5 + SS3 = 1 2 3 4 5
1 2 3 4 5 + SS4 = 1 2 3 4 5
则B+ SS = A实现
由上面B + SS = A求解过程可知
设 BB = B+ [SS1+SS2+……+SSK] (K<=N)
K越大BB越接近A的状态
定义 v (0.0<v<1.0);L = round(v*N);
BBS[1:L]则为此次选出交换子序列使得x接近pbest;
可知v越大x越接近pbest,可根据v来调整x接近最优值的速度。