遗传算法是非常强大的智能算法,如果你理解了它的原理,其实也非常简单。
TSP问题是典型NP-hard问题,没有精确算法求解,但是可以用ILOG CPLEX等数学软件进行精确求解。但精确求解的规模有限,话不多说,我们尝试用遗传算法解决TSP问题。
主程序如下:
clear;
x=[100 187 201 187 221 202 258 352 346 336 290 297 278 296 274 265 239 302 316 334 325 293 280 271 221 233 275 322 250 277 286 342 220 104];
y=[211 265 214 158 142 165 121 66 85 106 127 135 147 158 177 148 182 203 199 206 215 233 216 238 253 287 285 254 315 293 290 263 226 77];
popsize=500;%种群数量
chromlength=34;%染色体长度,在TSP问题中即城市数量
pc=0.8;%交叉概率
pm=0.2;%变异概率
distance=caldistance(x,y);%计算城市之间的距离
pop =initpop(popsize,chromlength,distance);%生成初始种群
Iteration=100;%迭代次数
for i=1:Iteration
total=caltotaldis(pop,distance);%计算总距离
pop1=choose(pop,total);%进行选择操作,筛选出适应度较高即总距离较小的个体
pop2=crossever(pop1,pc);%进行交叉操作
pop3=mutation(pop2,pm);%进行变异操作
newtotal=caltotaldis(pop3,distance);%重新计算经过上述操作后的总距离
[bestindividual,bestdis]=best(pop3,newtotal);%选出当代最优个体及最短距离
dis(i)=bestdis;%储存当代最短总距离
indi(i,:)=bestindivi