遗传算法的TSP问题

1.TSP问题描述

已知n个城市之间的距离,现有一推销员必须访问这n个城 市,并且每个城市只能访问一次,最后必须返回出发城市。 如何安排他对这些城市的访问次序,可使其旅行路线的总 长最短。

2.遗传算法的应用

(1)函数优化
函数优化是遗传算法的经典应用领域,也是 遗传算法进行性能评价的常用算例。尤其是对 非线性、多模型、多目标的函数优化问题,采 用其他优化方法较难求解,而遗传算法却可以 得到较好的结果。
(2)组合优化
随着问题的增大,组合优化问题的搜索空间 也急剧扩大,采用传统的优化方法很难得到最 优解。遗传算法是寻求这种满意解的最佳工具。 例如,遗传算法已经在求解旅行商问题、背包 问题、装箱问题、图形划分问题等方面得到成 功的应用。
(3)生产调度问题
在很多情况下,采用建立数学模型的方法难 以对生产调度问题进行精确求解。在现实生产 中多采用一些经验进行调度。遗传算法是解决 复杂调度问题的有效工具,在单件生产车间调 度、流水线生产车间调度、生产规划、任务分 配等方面遗传算法都得到了有效的应用。
(4)自动控制。
在自动控制领域中有很多与优化相关的问题 需要求解,遗传算法已经在其中得到了初步的 应用。例如,利用遗传算法进行控制器参数的 优化、基于遗传算法的模糊控制规则的学习、 基于遗传算法的参数辨识、基于遗传算法的神 经网络结构的优化和权值学习等。
本篇文章针对组合优化的遗传算法的应用。

3.算法实现步骤

(1)初始化阶段
初始化对象:种群规模、城市数量、运行代数、交叉概率、变异概率
初始化数据:读入数据源,将坐标转换为距离矩阵(标准化欧式距离)
初始化种群:随机生成n个路径序列,n表示种群规模。
(2)计算种群适应度
这里表示每条路径求和。
(3)计算累计概率
计算初始化种群中各个个体的累积概率
(4)迭代
选择算子:赌轮选择策略挑选下一代个体。
交叉运算:第k个算子和k+1个算子有一定的概率交叉变换,k=0、2、4、…、2n
变异运算:每个算子有一定概率基因多次对换,概率处决与变异概率
计算新的种群适应度以及个体累积概率,并更新最优解。
将新种群newGroup复制到旧种群oldGroup中,准备下一代进化(迭代)
(5)输出
输出迭代过程中产生的最短路径长度、最短路径出现代数、以及最短路径

4.算法代码实现

(1)交叉操作函数cross.m

function [A,B]=cross(A,B)
L=length(A);
if L<10
W=L;
elseif ((L/10)-floor(L/10))>=rand&&L>10
W=ceil(L/10)+8;
else
W=floor(L/10)+8;
end
%%W为需要交叉的位数
p=unidrnd(L-W+1);%随机产生一个交叉位置
%fprintf('p=%d ',p);%交叉位置
for i=1:W
x=find(A==B(1,p+i-1));
y=find(B==A(1,p+i-1));
[A(1,p+i-1),B(1,p+i-1)]=exchange(A(1,p+i-1),B(1,p+i-1));
[A(1,
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值