1、问题

2、仿真过程

3、代码实现

1、旅行商问题(TSP问题)。

假设有一个旅行商人要拜访全国31个省会城市,它需要选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。对路径选择的要求是:所选路径的路成为所有路径之中的最小值。

全国31个省会城市的坐标为

[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;3238 1229;4196 1044;

4312  790;4386  570;3007 1970;2562 1756;2788 1491;2381 1676;1332  695;3715 1678;

3918 2179;4061 2370;3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;

3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;2370 2975]

2、仿真过程

(1)初始化种群数目NP=200,染色体基因维数为N=31,最大进化代数G=1000.

(2)产生初始种群,计算个体适应度值,即路径长度:采用基于概率的方式选择进行操作的个体;对选中的成对个体,随机交叉所选中的成对城市坐标,以确保交叉后路径每个城市只到访一次;对选中的单个个体,随机交换其一对城市坐标作为变异操作,产生新的种群,进行下一次遗传操作。

(3)判断是否满足终止条件:若满足,则结束搜索过程,输出优化值,若不满足,则继续进迭代优化。

3、代码实现

%% 遗传算法解决TSP问题
clear all;
close all;
clc;%% 初始化参数
C=[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;...3238 1229;4196 1044;4312  790;4386  570;3007 1970;2562 1756;...2788 1491;2381 1676;1332  695;3715 1678;3918 2179;4061 2370;...3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;...3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;...2370 2975];                  %31个省会城市坐标
N=size(C,1);                     %TSP问题的规模,即城市数目
D=zeros(N);                      %任意两个城市距离间隔矩阵%% 求任意两个城市距离间隔矩阵
for i=1:Nfor j=1:ND(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;end
end
NP=200;                           %免疫个体数目
G=1000;                           %最大免疫代数
f=zeros(NP,N);                    %用于存储种群
F = [];                           %种群更新中间存储
for i=1:NPf(i,:)=randperm(N);           %随机生成初始种群
end
R = f(1,:);                       %存储最优种群
len=zeros(NP,1);                  %存储路径长度
fitness = zeros(NP,1);            %存储归一化适应度值
gen = 0;%% 遗传算法循环
while gen<G%% 计算路径长度for i=1:NPlen(i,1)=D(f(i,N),f(i,1));    for j=1:(N-1)len(i,1)=len(i,1)+D(f(i,j),f(i,j+1));endendmaxlen = max(len); minlen = min(len);%% 更新最短路径rr = find(len==minlen);R = f(rr(1,1),:);%% 计算归一化适应度for i =1:length(len)fitness(i,1) = (1-((len(i,1)-minlen)/(maxlen-minlen+0.001)));end%% 选择操作nn = 0;for i=1:NPif fitness(i,1)>=randnn = nn+1;F(nn,:)=f(i,:);endend[aa,bb] = size(F);while aa<NPnnper = randperm(nn);A = F(nnper(1),:);B = F(nnper(2),:);%% 交叉操作W = ceil(N/10);     % 交叉点个数p = unidrnd(N-W+1);   % 随机选择交叉范围,从p到p+Wfor i =1:Wx = find(A==B(p+i-1));y = find(B==A(p+i-1));temp = A(p+i-1);A(p+i-1) =B(p+i-1);B(p+i-1) = temp;temp = A(x);A(x) = B(y);B(y) = temp;end%% 变异操作p1 = floor(1+N*rand());p2 = floor(1+N*rand());while p1==p2p1 = floor(1+N*rand());p2 = floor(1+N*rand());endtmp = A(p1);A(p1) = A(p2);A(p2) = tmp;tmp = B(p1);B(p1) = B(p2);B(p2) = tmp;F = [F;A;B];[aa,bb] = size(F);endif aa>NPF = F(1:NP,:);        % 保持种群规模为NPendf = F;                    % 更新种群f(1,:) = R;               % 保留每代最优个体clear F;gen = gen+1;Rlength(gen) = minlen;
end%% 绘制图形
figure
for i = 1:N-1plot([C(R(i),1),C(R(i+1),1)],[C(R(i),2),C(R(i+1),2)],'bo-');hold on;
endplot([C(R(N),1),C(R(1),1)],[C(R(N),2),C(R(1),2)],'ro-');
title(['优化最短距离:',num2str(minlen)]);
figure
plot(Rlength)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')

由于初始位置不确定,每次结果也不一样

第一次

第二次

遗传算法--旅行商问题(TSP问题)-Matlab相关推荐

  1. 【老生谈算法】matlab实现遗传算法求解TSP问题——TSP问题

    遗传算法求解TSP问题MATLAB实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]遗传算法求解TSP问题MATLAB实现 ...

  2. 【GA TSP】基于matlab遗传算法求解旅行商问题【含Matlab源码 1337期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab遗传算法求解旅行商问题[含Matlab源码 1337期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  3. 【GA TSP】基于matlab遗传算法求解旅行商问题【含Matlab源码 1909期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[GA TSP]基于matlab遗传算法求解旅行商问题[含Matlab源码 1909期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  4. 【建模算法】基于遗传算法求解TSP问题(matlab求解)

    [建模算法]基于遗传算法求解TSP问题(matlab求解) TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增 ...

  5. 《MATLAB智能算法30个案例》:第4章 基于遗传算法的TSP算法

    <MATLAB智能算法30个案例>:第4章 基于遗传算法的TSP算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析>是 ...

  6. Matlab遗传算法与TSP问题的结合

    Matlab遗传算法与TSP问题的结合 目录 Matlab遗传算法与TSP问题的结合 准备 遗传算法+TSP问题 TSP问题 邻接矩阵 遗传算法 种群初始化和计算初始种群适应度 计算适应度 个体选择 ...

  7. 《MATLAB智能算法30个案例》:第22章 蚁群算法的优化计算——旅行商问题(TSP)优化

    @[TOC](<MATLAB智能算法30个案例>:第22章 蚁群算法的优化计算--旅行商问题(TSP)优化) 1. 前言 <MATLAB智能算法30个案例分析>是2011年7月 ...

  8. 【ACO TSP】基于matlab改进的蚁群算法求解旅行商问题【含Matlab源码 242期】

    ⛄一.TSP简介 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...

  9. 基于遗传算法解决TSP问题(Matlab代码实现)

    目录 1 概述 2 运行结果 3 Matlab代码实现 4 结语 5 参考文献 1 概述 旅行商问题是一个经典的路径规划问题,传统TSP假设客户位置和客户之间旅行时间是固定不变的,而在现实生活中交通状 ...

  10. 【Matlab】 遗传算法求解TSP问题

    [Matlab] 遗传算法求解TSP问题 文章目录 [Matlab] 遗传算法求解TSP问题 前言 一.问题描述 二.实验设计 1.问题案例 2.读入数据 3.适应度计算 4. 选择子代 5. 结果输 ...

最新文章

  1. “笨方法”学习Python笔记(2)-VS Code作为文本编辑器以及配置Python调试环境
  2. go语言mysql视频_Go语言实战流媒体视频网站
  3. Docker logs 命令
  4. python编程语言一览_编程语言学习:python有趣用法汇总
  5. Web前端开发笔记——第四章 JavaScript程序设计 第五节 数组
  6. Do you have an English name? 你有英文名吗?
  7. 第 4 章(表达式和运算符)(4.1~ 4.7)
  8. ACache【轻量级的开源缓存框架】
  9. 【高并发】JUC中原子类介绍
  10. lr 中cookie的解释与用法
  11. 给 datepicker 设定日期格式
  12. 6.4 Ext.core.DomQuery 单实例查询选择器,通过正则表达式查找DOM或者HTM
  13. 如何在Rancher 2.0上快速部署Datadog
  14. windows下无npcap驱动导致golang获取网卡失败问题
  15. 网络战武器——震网(Stuxnet)病毒
  16. WOL(Wake-On-LAN)网络唤醒介绍
  17. python脚本多文件搜索查询字符串关键字
  18. iOS滤镜实现之LOMO(美图秀秀经典LOMO)
  19. C语言小写转大写,小写字母转换成大写字母!
  20. 最简单明了的QT服务器搭建

热门文章

  1. 关于电商行业网络安全解决方案
  2. IT6302 电源后面板的 DB9 接口输出为 TTL 电平,您需要通过附件电平转换后才可连接到 PC 机的串口上
  3. 离散数学考点之度序列简单图化
  4. wpf 修改输入框 光标_WPF中鼠标光标的设置
  5. 格式化U盘的工具(USB无法识别 ,无法格式化 )
  6. Webcat 数据库管理工具
  7. 华为android9升级包,华为Mate9官方固件ROM刷机包
  8. 读一本自己心爱的书,冒什么风险都是值得的
  9. STM32学习——GPIO应用之按键实验
  10. 如何在古董级IPAD上修改植物大战僵尸游戏金币