文章目录

  • 概述
    • 遗传算法
    • TSP问题描述
  • 参数测试
    • 种群规模
      • 唯一参数改变,其余参数不变
      • 结论
    • 城市个数
      • 唯一参数改变,其余参数不变
      • 结论
    • 交叉概率
      • 唯一参数改变,其余参数不变
      • 结论
    • 变异概率
      • 唯一参数改变,其余参数不变
      • 结论
  • 代码附录
    • main.m
    • myLength.m
    • Mutation.m
    • fit.m
    • exchang.m
    • cross.m

概述

遗传算法

遗传算法的基本思想是从初始种群出发,采用优胜劣汰、 适者生存的自然法则选择个体,并通过杂交、变异来产生新
一代种群,如此逐代进化,直到满足目标为止。遗传算法所 涉及到的基本概念主要有以下几个:
•种群(Population):种群是指用遗传算法求解问题时, 初始给定的多个解的集合。遗传算法的求解过程是从这个子 集开始的。
•个体(Individual):个体是指种群中的单个元素,它通常由一个用于描述其基本遗传结构的数据结构来表示。例如,
可以用0、1组成的长度为l的串来表示个体。
• 染色体(Chromosome):染色体是指对个体进行编码后
所得到的编码串。染色体中的每1位称为基因,染色体上由若干个基因构成的一个有效信息段称为基因组。 •
• 适应度(Fitness)函数:适应度函数是一种用来对种群中 各个个体的环境适应性进行度量的函数。其函数值是遗传算法实现优胜劣汰的主要依据 .
• 遗传操作(Genetic Operator):遗传操作是指作用于种 群而产生新的种群的操作。标准的遗传操作包括以下3种基本形式:
–选择(Selection)
– 杂交(Crosssover)
– 变异(Mutation)

TSP问题描述

TSP问题(Traveling Salesman Problem,旅行商问题),由威廉哈密顿爵士和英国数学家克克曼T.P.Kirkman于19世纪初提出。问题描述如下:
有若干个城市,任何两个城市之间的距离都是确定的,现要求一旅行商从某城市出发必须经过每一个城市且只在一个城市逗留一次,最后回到出发的城市,问如何事先确定一条最短的线路已保证其旅行的费用最少?(来源 百度百科 )

参数测试

== 保存随机生成的城市坐标,保证除测试的变量外其余变量均不变 ==

%%生成城市的坐标
%%pos=randn(N,2);
%%save city.mat pos;
load('city.mat');

种群规模

唯一参数改变,其余参数不变

1.M=50


迭代第2000次
minlen=2.144476e+01
8 9 14 1 19 16 2 10 24 22 25 5 21 15 23 18 12 13 4 6 7 11 17 3 20

2.M=75


minlen=2.021244e+01
2 10 24 12 18 15 20 8 9 14 22 1 19 16 25 5 21 23 13 17 3 11 4 7 6

3.M=100


迭代第2000次
minlen=1.919703e+01
25 5 21 18 23 15 20 3 17 11 7 6 4 13 10 2 24 8 9 14 12 22 1 19 16

4.M=125

迭代第2000次
minlen=2.011393e+01
9 14 22 25 5 21 23 15 20 3 17 11 7 6 2 10 4 13 24 19 16 1 12 18 8 4

5.M=150


迭代第2000次
minlen=2.072737e+01
1 25 5 21 23 15 20 3 17 13 10 4 11 7 6 2 16 19 12 18 8 24 9 14 22

结论

依据以上实验结果得出,随着种群规模不断增大,算法的收敛时间也随之增加;而最短距离出现了先增加后减少的情况,即五次实验中,M=100时的解得到是较为优的解。
经查阅资料得:
种群规模较小时,收敛速度快,但容易出现近亲交配,产生病态基因。而且造成有效等位基因先天缺失,即使采用较大概率的变异算子,生成具有竞争力高阶模式的可能性仍然核销,况且大概率变异算子对已有模式的破坏作用极大。同时,遗传算子存在随机误差,妨碍小群体中有效模式的正确传播,使得种群进化不能按照模式定理产生所预期的期望数量。
​ 种群规模太大,全局搜索的能力提高,但运行效率过慢导致难以收敛且浪费资源,稳健性下降。

城市个数

唯一参数改变,其余参数不变

1.N=15


2.N=25

3.N=50


4.N=75


5.N=100

结论

如上实验结果可以看出,随着城市数量的增加,算法的运行时间不断增强。所以,当城市数量非常多时,运行时间可能会非常长。

交叉概率

唯一参数改变,其余参数不变

1.Pc=0.3
迭代第2000次
minlen=2.450808e+01
7 15 22 12 10 3 13 16 17 2 4 14 8 25 6 21 11 1 5 9 18 24 20 19 23


2.Pc=0.5
迭代第2000次
minlen=2.076080e+01
8 21 6 25 2 17 16 22 12 10 13 3 9 18 5 1 11 24 14 4 20 19 23 7 15


3.Pc=0.8
迭代第2000次
minlen=2.000204e+01
25 6 11 5 18 9 3 1 13 10 12 22 16 17 2 15 7 23 19 20 4 14 24 21 8


4.Pc=1.0
迭代第2000次
minlen=2.180687e+01
23 20 19 15 2 6 21 24 4 14 8 25 11 1 5 9 18 3 13 10 12 22 16 17 7


5.Pc=1.2
迭代第2000次
minlen=2.257169e+01
13 25 8 14 4 20 15 7 23 19 24 21 9 18 5 11 1 3 6 2 17 16 22 12 10

结论

依据上面的实验结果可以得出当交叉概率过小时,并不能得到最优解,依据五次实验结果,交叉概率为0.8时得到的解是较优的,但随着交叉概率的增大,运行时间不断增长。

变异概率

唯一参数改变,其余参数不变

1.Pmutation=0.01
迭代第2000次
minlen=2.484362e+01
6 21 14 19 15 8 2 16 17 1 3 13 10 12 22 7 23 20 4 24 18 9 5 11 25


2.Pmutation=0.03


迭代第2000次
minlen=2.143339e+01
2 17 16 22 12 10 13 25 8 15 7 23 19 20 4 14 24 21 1 3 9 18 5 11 6

3.Pmutation=0.05

迭代第2000次
minlen=2.254133e+01
1 13 22 12 10 3 9 18 5 21 24 14 4 20 19 23 7 15 16 17 2 8 25 6 11
4.Pmutation=0.07


迭代第2000次
minlen=2.230874e+01
4 20 19 15 2 17 13 10 12 22 16 7 23 14 8 25 6 11 1 3 9 18 5 21 24
5.Pmutation=0.09


迭代第2000次
minlen=2.334398e+01
2 13 10 12 22 15 19 4 14 8 25 6 1 3 9 18 5 11 21 24 20 23 7 16 17

结论

依据以上实验结果可以看出,当变异概率增大时,算法的运行时间由大到小再变大,较优解在0.05时出现。
变异概率太小,种群的多样性下降太快,容易导致有效基因的迅速丢失且不容易修补;
​ 变异概率太大,尽管种群的多样性可以得到保证,但是高阶模式被破坏的概率也随之增大。

代码附录

main.m

`
``cpp
%main
clear;
clc;
%%%%%%%%%%%%%%%输入参数%%%%%%%%
N=25; %%城市的个数
M=100; %%种群的个数
ITER=2000; %%迭代次数
%C_old=C;
m=2; %%适应值归一化淘汰加速指数
Pc=0.8; %%交叉概率
Pmutation=0.05; %%变异概率
%%生成城市的坐标
pos=randn(N,2);
%%生成城市之间距离矩阵
D=zeros(N,N);
for i=1:N
for j=i+1:N
dis=(pos(i,1)-pos(j,1)).2+(pos(i,2)-pos(j,2)).2;
D(i,j)=dis^(0.5);
D(j,i)=D(i,j);
end
end

%%生成初始群体

popm=zeros(M,N);
for i=1:M
popm(i,:)=randperm(N);%随机排列,比如[2 4 5 6 1 3]
end
%%随机选择一个种群
R=popm(1,:);
figure(1);
scatter(pos(:,1),pos(:,2),‘rx’);%画出所有城市坐标
axis([-3 3 -3 3]);
figure(2);
plot_route(pos,R); %%画出初始种群对应各城市之间的连线
axis([-3 3 -3 3]);
%%初始化种群及其适应函数
fitness=zeros(M,1);
len=zeros(M,1);

for i=1:M%计算每个染色体对应的总长度
len(i,1)=myLength(D,popm(i,:));
end
maxlen=max(len);%最大回路
minlen=min(len);%最小回路

fitness=fit(len,m,maxlen,minlen);
rr=find(len==minlen);%找到最小值的下标,赋值为rr
R=popm(rr(1,1)

【计算智能】关于遗传算法解决TSP城市问题的初步学习相关推荐

  1. 计算智能——遗传算法解决TSP问题实验

    遗传算法解决TSP问题 定义 遗传算法 TSP问题 算法流程 参数说明 代码 主程序 main.m 染色体的路程代价函数 mylength.m 适应度函数 fit.m 交叉操作函数 cross.m 变 ...

  2. 遗传算法解决tsp问题(基于python)

    目录 1.遗传算法简要介绍 2.tsp问题简要介绍 3.遗传算法解决tsp问题的几个特殊点 4.源码 1.遗传算法简要介绍 简单来说,遗传算法是用于解决最优化问题的一种搜索算法.其核心基于自然界种群进 ...

  3. MATLAB实战系列(十九)-遗传算法解决TSP(旅行商)问题-应用及解析(文末附MATLAB源码)

    接上篇MATLAB实战系列(十八)-遗传算法解决TSP(旅行商)问题-算法原理 https://wenyusuran.blog.csdn.net/article/details/114060030 感 ...

  4. matlab 遗传优化算法_转载 | 遗传算法解决TSP问题的MATLAB实现

    问题定义: 巡回旅行商问题 给定一组n个城市和俩俩之间的直达距离,寻找一条闭合的旅程,使得每个城市刚好经过一次且总的旅行距离最短. TSP问题也称为货郎担问题,是一个古老的问题.最早可以追溯到1759 ...

  5. 模拟退火和遗传算法解决TSP问题

    模拟退火和遗传算法解决TSP问题 数据集介绍 采用数据集FRI26 来自标准数据集,共有26个城市,最优解为933: 数据下载链接 图1:数据矩阵 图2:数据集介绍 算法介绍 模拟退火 介绍: 模拟退 ...

  6. 遗传算法解决TSP问题 Python实现【160行以内代码】

    简述 之前通过遗传算法(Genetic Algorithm )+C++实现解决TSP问题 写了一些基本的原理.并且给出了C++版本代码. 相比于近300行的C++程序,Python只用了160行就解决 ...

  7. 运用遗传算法解决TSP问题

    求解15个城市TSP的GA问题,两城市间距离自拟或随机生成 问题分析: 用图论的术语来说,假设有一个图g=(v,e),其中v是顶点集,e是边集,设d=(dij)是由顶点i和顶点j之间的距离所组成的距离 ...

  8. java tsp 遗传算法_遗传算法解决TSP问题

    1实验环境 实验环境:CPU i5-2450M@2.50GHz,内存6G,windows7 64位操作系统 实现语言:java (JDK1.8) 实验数据:TSPLIB,TSP采样实例库中的att48 ...

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

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

最新文章

  1. cmw500综合测试仪使用_大屏幕真彩色互感器综合特性测试仪功能特点
  2. 算法导论之红黑树的学习
  3. 计算机一级c基础知识,计算机一级考试MSOffice基础试题
  4. 【数据结构与算法】之深入解析“二叉树的层序遍历II”的求解思路与算法示例
  5. 【每天一道算法题】Numeric Keypad
  6. signature=267d7b238718fa0d900b4fd94e068fe9,Modelowanie widm NMR kwadrupolowych jąder
  7. js return 闭包为null_js 基础知识总结
  8. linux下查看CPU、内存、硬盘方法
  9. GridView的DataFormatString
  10. 树莓派通过网络共享USB设备
  11. FFT蝶形算法的verilog实现专题——基-4 频率抽取FFT算法matlab实现
  12. 时域、频域、时频域+三种频域变换的理解
  13. 简单粗暴日文键盘布局改为其他语言键盘布局
  14. nginx proxy_pass转发规则解析
  15. 苹果开发者账号购买流程
  16. FA固定资产录入时的细节:是否输入累计折旧
  17. 雇佣兵(程序设计与算法(一))
  18. 2021年N1叉车司机新版试题及N1叉车司机模拟考试题库
  19. wow语音服务器卡蓝条,魔兽世界6.0卡蓝条解决方法 登陆界面卡主解决办法
  20. Java 富文本内容转化word导出

热门文章

  1. 2021年中国玻璃包装容器现状及趋势分析:玻璃包装容器营收逐年增加[图]
  2. android 发短信意图,android代码实现打电话和发送短信功能
  3. RPC基本原理以及如何用Netty来实现RPC
  4. MATLAB绘制同时绘制两曲面,并显示交线,及交线在XOY平面投影
  5. Transformers文本分类微调和TensorRT推理加速
  6. python一级考试考多少分算通过_计算机一级考试要多少分才通过?
  7. 初中生与小学生聊《三体》
  8. Spring Web Flow 2.0 入门
  9. nginx 的安装以及启动
  10. 【python】psnr原理简介及代码实现