一、实验内容及目的

本实验以遗传算法为研究对象,分析了遗传算法的选择、交叉、变异过程,采用遗传算法设计并实现了商旅问题求解,解决了商旅问题求解最合适的路径,达到用遗传算法迭代求解的目的。选择、交叉、变异各实现了两种,如交叉有顺序交叉和部分交叉。

二、实验环境

Windows10

开发环境Python 3/Flask

三、实验设计与实现

图1软件结构图

图1软件结构图

Flask.py是后端核心代码,里面是遗传算法实现,index.html为首页,即第一次进入网页的页面,进入之后可以进行参数设置,之后点击开始,参数会传到Flask.py中进行解析和算法运行,最终将迭代结果存到result(存储迭代结果图)和result_path(存储最短路径图)在返回给display.html页面显示。

图2系统界面图

图2系统界面图

输入种群规模、迭代次数、变异概率、选择比例、交叉概率并选择变异方法、选择个体方法、交叉方法。点击开始即可运行该系统。

具体算法流程图:

图3核心算法流程图

流程图描述:首先根据参数城市数量和种群规模初始一个城市坐标矩阵的列表并计算城市间的距离存到矩阵,最后生成一个路径矩阵,这样就可以进入下一步计算适应度,每一条路径都有其路径距离值和适应度,接下来一次进行选择,交叉,变异操作,循环往复,直至达到了参数中的迭代次数限制。

选择—轮盘赌:(这里我的算法选出的种群数量不一定就恰好是根据比例算出的数量)

图3核心算法流程图

图4轮盘赌流程图

选择—锦标赛:

图5三元锦标赛流程图

交叉—顺序交叉:

1、 选切点X,Y

2、 交换中间部分

3、 从第二个切点Y后第一个基因起列出原顺序,去掉已有基因

4、 从第二个切点Y后第一个位置起,将获得的无重复顺序填入

图6顺序交叉动态图

图7顺序交叉静态图

交叉—部分交叉:

1、 选切点oop

2、 选取oop到oop+3部分交换(我这里就是三个,你可以做成随机的几个)

3、 判断是否有重复的,若重复则进行映射,保证形成的新一对子代基因无冲突。

图8部分交叉动态图

变异—两点交换

1、 随机选取两点

2、 两点进行交换

变异—相邻交换

1、 随机选取一点

2、 和该点的后面点进行交换

适应度函数:经过测试得A取5,B取0效果好,所以实验中直接取了A=5,B=0运行

借鉴了sigmoid函数的形式,并对数据做了最大最小标准化,A、B是人为给定的常系数mean、max、min是种群所有个体的目标函数值的均值、最大值、最小值图像如下A=5,B=0

适应值较大的更容易进入下一代种群中

图9适应度函数算术表达式

四、实验结果与测试

表1 遗传算法解决TSP问题的测试用例

测试内容 测试用例 预期结果 实际结果
种群规模 1.不输入
2.输入除数字其他
3.输入整数数字
4.输入小数或者负数
失败
失败
成功
失败
与预期相同
       
迭代次数 5.不输入
6.输入除数字其他
7.输入整数数字
8.输入小数或者负数
失败
失败
成功
失败
与预期相同
变异方法 9.选择两点交换
10.选择相邻交换
成功
成功
与预期相同
选择个体方法 11.选择轮盘赌
12.选择锦标赛
成功
成功
与预期相同
交叉方法 13.选择部分交叉
14.选择顺序交叉
成功
成功
与预期相同
变异概率 15.不输入
16.输入除数字其他
17.输入小于1的小数
18.输入非小于1的小数或者整数
失败
失败
成功
失败
与预期相同
选择比例 19.不输入
20.输入除数字其他
21.输入小于1的小数
22.输入非小于1的小数或者整数
失败
失败
成功
失败
与预期相同
交叉概率 23.不输入
24.输入除数字其他
25.输入小于1的小数
26.输入非小于1的小数或者整数
失败
失败
成功
失败
与预期相同
随机产生多少个城市 27.不输入
28.输入除数字其他
29.输入整数数字
30. 输入小数或者负数
失败
失败
成功
失败
与预期相同

图10参数设置图

在上述参数设置好之后,即可开始运行系统,最后产生如图11的迭代结果图,最上面是自己的参数设置和最后生成的最小路径min_dist,图示整体为每次迭代的路径距离,可见随着迭代次数增加,路径距离一直减小最后趋于稳定。图12为用python画的路径图,图中横轴纵轴为城市位置的X,Y坐标。

图11 迭代结果图

图12最短路径图

接下来重新选择其他参数来运行一下,看一下有没有区别。

图13参数设置图

图14迭代结果图

图15最短路径图

可以从迭代图像看出,参数不同会导致迭代中结果的不同,第一次参数设置的迭代中在前段迭代不稳定,忽上忽下,之后稳定,而第二次参数设置后迭代很快就稳定,没有忽上忽下的现象,所以不同的选择、变异、交叉方法会使迭代结果不同。所以可以根据随机设定让计算机找到最合适的参数设置。

欢迎关注我的知乎平台,我将持续为您解答一系列问题!

遗传算法求TSP问题的更多相关文章

  1. 基于遗传算法求解TSP问题(Java界面)

    近期为做展示,改写了一个遗传算法求TSP的Java界面版,思路代码和 http://blog.csdn.net/wangqiuyun/article/details/12838903 这篇文章思路是一 ...

  2. 转:遗传算法解决TSP问题

    1.编码 这篇文章中遗传算法对TSP问题的解空间编码是十进制编码.如果有十个城市,编码可以如下: 0 1 2 3 4 5 6 7 8 9 这条编码代表着一条路径,先经过0,再经过1,依次下去. 2.选 ...

  3. 利用遗传算法求解TSP问题

    转载地址 https://blog.csdn.net/greedystar/article/details/80343841 目录 一.问题描述 二.算法描述 三.求解说明 四.参考资料 五.源代码 ...

  4. 遗传算法解决TSP问题实现以及与最小生成树的对比

    摘要: 本实验采用遗传算法实现了旅行商问题的模拟求解,并在同等规模问题上用最小生成树算法做了一定的对比工作.遗传算法在计算时间和占用内存上,都远远优于最小生成树算法. 程序采用Microsoft vi ...

  5. 用遗传算法解决TSP问题

    浅谈遗传算法:https://www.cnblogs.com/AKMer/p/9479890.html Description \(小m\)在踏上寻找\(小o\)的路程之后不小心碰到了大魔王\(fat ...

  6. 遗传算法解决TSP问题

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

  7. 遗传算法求解TSP问题

    package com.louis.tsp; /** * Project Name:GeneticAlgorithm * File Name:Individual.java * Package Nam ...

  8. [PHP] 遗传算法求函数最大值一般实现

    需求:求解函数 f(x) = x + 10*sin(5*x) + 7*cos(4*x) 在区间[0,9]的最大值. <?php /* 需求:求解函数 f(x) = x + 10*sin(5*x) ...

  9. 基础遗传算法的TSP问题

    一.简介 旅行商问题是一个经典的组合优化问题.一个经典的旅行商问题可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地.应如何选择行进路线,以使总的 ...

  10. Python动态展示遗传算法求解TSP旅行商问题(转载)

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/jiang425776024/articl ...

随机推荐

  1. JS 可编辑表格的实现

    1.实现效果 用户点击语文,数学,英语部分的单元格,可以实现分数的编辑,总分也会随之变化.先看下效果,如图: 2.设计思路 先通过HTML5+CSS3绘制表格,添加input的样式和err提示动画. ...

  2. Day16异常1

    package com.exception.demo01;public class demo01 { public static void main(String[] args) { try{new ...

  3. VM虚拟机搭建Linux CentOS7(手把手教程)

    VM虚拟机搭建Linux CentOS7(手把手教程) 目录 VM虚拟机搭建Linux CentOS7(手把手教程) 一.VM虚拟机和Linux镜像文件下载 1. 登录VM虚拟机官方地址: 2. 安装 ...

  4. xshell登陆,查看中文日志出现乱码

    看到乱码,首先想到的是编码问题 linux默认编码格式是utf-8,windows默认gbk [root@backup]# echo $LANGen.US.UTF-8 使用fie命令可以查看到文件信息 ...

  5. i春秋Login

    打开是个很普通的登录网页 查看源码看看有没有东西 找到绿色的提示,可能是账号密码,试试 成功进来了,再右键源码,没东西...抓包试试,传repeater里go一下 发现一个奇怪的变量,在request ...

  6. Training: Stegano I

    原题链接:http://www.wechall.net/challenge/training/stegano1/index.php 很明显,这是一道图像隐写题,因为他说的 我们右键图片,点击其他窗口打 ...

  7. C温故补缺(六):C反汇编常用的AT&Tx86语法

    C语言反汇编用到的AT&T x86汇编语法 参考:CSDN1,CSDN2 默认gcc -S汇编出的,以及反汇编出的,都是AT&T x86代码,可以用-masm=intel指定为inte ...

  8. VR技术名词解释

    视觉相关技术 分辨率 分辨率(resolution)就是屏幕图像的精密度,是指显示器所能显示的像素的多少.由于屏幕上的点.线和面都是由像素组成的,显示器可显示的像素越多,画面就越精细,同样的屏幕区域内 ...

  9. 数电第7周周结_by_yc

    一.通用双向移位寄存器: 功能描述:   4位的双向移位寄存器,含控制输入端(ctrl).串行输入端(Dsl.Dsr).4个并行输入端和4个并行输出端,要求实现5种功能:异步置零.同步置数.左移.右移 ...

  10. 螺旋矩阵II-LeetCode59 考验代码能力

    力扣链接:https://leetcode.cn/problems/spiral-matrix-ii/ 题目 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的  ...