逖靖寒的世界

每天进步一点点

导航

利用遗传算法求解旅行商问题

可执行文件下载:
/Files/gpcuster/TSPGA.rar

修正显示的版本下载:
/Files/gpcuster/TSPGA2.rar
简介

首先,咱们可以看看用遗传算法求解的旅行商问题的效果图:

 
您可以在黑色背景的区域内看到问题的求解结果,下面对该程序的使用做一些说明:

  1. 黑色区域的绿色空心点是需要访问的点。
  2. 黑色区域的红色空心点是开始访问的起点。(有且只有一个)
  3. 白色的连线代表从起点(红色空心点)开始,分别经过需要访问的点(绿色空心点)的行走路线。(注意:这里定义的旅行商问题和传统的定义有一点不同。这里的定义不需要从终点再回来起点。)

 

程序使用说明

启动程序,您将看到如下界面:

 

下面,我对程序的界面做一些说明:

  1. Population Size:这个参数代表种群的个体数量。
  2. Generations:这个参数代表种群的繁殖代数。
  3. CorssOverRate:这个参数代表种群的个体之间发生交配的概率。
  4. MutationRate:这个参数代表种群个体发生变异的概率。
  5. CitiesNum:这个参数代表需要访问的城市的数量(体现为黑色区域中绿色空心点的个数)。
  6. Random:点击这个按钮,将随机参数起始点(红色空心点)和需要访问的城市(绿色空心点)。
  7. Reset:点击这个按钮,将清除所有在黑色区域的点。
  8. Start:点击这个按钮,将根据黑色区域的数据开始计算旅行商问题,并显示最后计算的结果。

更加您的需要,可以不用点击Random按钮随机产生问题的描述。您可以自己手动地在黑色区域设置起点和需要访问的点。设置方法如下:

将鼠标移到到黑色区域,点击鼠标的右键将在黑色区域设置一个需要访问的点,点击鼠标的左键将在黑色区域设置访问的起点(有且仅有一个)

当您完成黑色区域的设置以后,在点击Start就可以运行程序,并观看到最后的计算结果了。

程序的组织结构

整个程序分为2个部分:

  1. 表现层:Form1.cs
  2. 逻辑层:World.cs

您在使用的时候不需要考虑表现层中的内容。(如果您想对程序的界面做修改那就是另外一回事了J

您关注的重点应该在逻辑层当中。里面描述了整个程序的计算过程。

 

程序的计算原理

整个程序的计算流程相对简单,根据初中做学的达尔文关于《物种起源》的思想。描述如下:

Start

配置种群的相关参数

_world.Population = Int32.Parse(population.Text);

_world.Generation = Int32.Parse(generation.Text);

_world.CrossOverRate = Double.Parse(crossOverRate.Text);

_world.MutationRate = Double.Parse(mutationRate.Text);

初始化种群的第一代

generateFirstGeneration();

进化到下一代

generateNextGeneration()

返回最优的个体

End

具体的实现原理和方法,可以参考这篇论文
/Files/gpcuster/AFastTSPSolverUsingGAOnJAVA.rar

最后,程序的源代码下载:
/Files/gpcuster/TSPGACode1.rar

posted on 2008-01-12 12:49  逖靖寒  阅读(10930)  评论(25编辑  收藏  举报