PSO应用TSP(引入交换子)

在退火算法解决简单优化问题一文中提到在一般智能算法应用于实际问题时,需要着重注意以下几个方面,并根据具体问题决定实现思路。

  1. 构造初始解
  2. 目标函数最优
  3. 产生新解(重点)

目标函数

即商人行进耗费也可称之为适应度。根据邻接矩阵以及行进路径得到行进耗费

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

BBS[1:L]则为此次选出交换子序列使得x接近pbest;

可知v越大x越接近pbest,可根据v来调整x接近最优值的速度。

你可能感兴趣的:(智能算法与机器学习,数学建模,算法)