佳点集遗传算法求解安徽十七的TSP问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
佳点集遗传算法求解安徽十七市的TSP 问题
姓名:杨少鹏 学号:E200902032
1. 主界面说明:
本程序的核心代码部分封装在TspGA.dll 中,在GAApp 工程中直接调用,计算安徽17市的TSP 问题。
程序运行结束之后会在D 盘根目录下生成两个文件:gacitysfile.txt (最终结果的城市坐标文件)和gaitersfile.txt (迭代过程中每一代的最优路程),利用Matlab 画图程序可以画出最短路径过程图和求解的路径。
本程序又把得到的结果与用普通的遗传算法求解的结果作对比。
利用Matlab 画图程序得到的两组结果如下图所示:
0.850.90.951
1.051.11.15
4
后代次数
最短路径路程
路径优化过程
500
1000
1500
2000
2500
3000
X坐标
Y坐标
求解路
径
图一:佳点集算法一次完整执行后的结果
1.3
1.321.34
1.361.381.41.42
1.441.46
1.484
后代次数
最短路径路程
路径优化过程
500
1000
1500
2000
2500
3000
X坐标
Y坐标
求解路径
图二:普通遗传算法一次完整执行后的结果
2. 动态链接库说明
1)gacode.h 算法中所需结构体的定义,包括SYCoordinate、SYCity、SYCityDistance、SYRouter
2)gacode.cpp 算法中所有功能函数的实现,主要包括InitialGA、CountCityDistance、CreateCityRouter2opt、CountTotalDistance、CreateFitnessofPop、SelectPop、CrossoverPop、Crossover、MutationPop、OneIterGACompution等等。
后面将分别介绍这些功能函数的作用。
3)MainFrm.cpp流程控制函数的实现,该函数是GACompution。
后面将详细介绍该函数的流程。
3.流程控制函数和功能函数的介绍(主要部分)
流程控制函数GACompution控制循环的迭代和结束,其主要代码如下:
UINT GACompution(LPVOID pParam)
{
int totalgen = GetTotalGeneration(); //获取遗传算法的迭代总代数
int nowiter = 0;
while( nowiter <= totalgen && nowiter >= 0 ) //判断迭代次数是否大于迭代总代数,大于则停止计算
{
nowiter = OneIterGACompution(); //进行一代计算,包括竞争选择、交叉和变异
}
}
下面是一些重要的功能函数的说明:
OneIterGACompution() 最重要的功能函数是,它完成一代的计算,包括竞争选择、交叉和变异,在gacode.cpp中实现,其主要代码如下
int OneIterGACompution()
{
CreateFitnessofPop(FITNESS_MODE); //为每个染色体计算评价函数
SelectPop(); //群体竞争选择
CrossoverPop(CROSSOVER_MODE); //种群交叉
MutationPop(MUTATION_MODE); //种群变异
NowGenNumber++; //当前代数递增
return NowGenNumber;
}
CreateFitnessofPop() 对群体中的每个染色体计算适应函数/评价函数,采用基于序的计算方法。
SelectPop() 轮盘赌方式竞争选择染色体。
Crossover() 两染色体的交叉实现,提供两种交叉方式,
(1)常规交叉;
(2)佳点集交叉,佳点集具体算法思想参考:求解货郎担问题_TSP_的佳点集遗传算法(计算机工程应用:赵春英,张铃);佳点集遗传算法(计算机学报:张铃,张钹)
程序中与普通遗传算法的主要区别是交叉操作,其他部分基本一样。
另外本程序的编码方式采用十进制编码。