蚁群算法 旅行商问题 人工智能 java 代码+报告+注释Word文档格式.docx
- 文档编号:15943837
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:34
- 大小:179.56KB
蚁群算法 旅行商问题 人工智能 java 代码+报告+注释Word文档格式.docx
《蚁群算法 旅行商问题 人工智能 java 代码+报告+注释Word文档格式.docx》由会员分享,可在线阅读,更多相关《蚁群算法 旅行商问题 人工智能 java 代码+报告+注释Word文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
3.完整代码(见附录)4
4.算法优化4
(一)蚁恒模型4
(二)信息素强度及路径信息素初始值4
(三)各参数对算法的影响4
5.运行测试5
(一)传统模型5
(二)蚁恒模型6
6.参考文献7
附录7
(一)NewJFrame.java7
(二)Ant.java13
(三)ACO.java17
(四)Parameter.java23
(五)Data.java23
(六)NewJFramePath.java24
1.整体结构与功能划分
(一)总体结构
程序的主类是NewJFrame,该类负责绘制图形用户界面并执行蚁群算法。
将蚁群算法中的“蚂蚁”抽象为Ant类,实现遍历所有城市(选择下一个城市)、计算本次遍历的路程等功能。
ACO类聚合了Ant类,完整的实现了蚁群算法,包括迭代遍历、更新信息素等过程。
NewJFramePath类将解路径以图形方式显示出来。
另设两个数据类parameter和Data,parameter类用于保存参数的默认值,主要参数包括:
蚂蚁数量、城市数目、迭代次数、α、β、挥发因子、信息素强度Q、路径信息素初始值initQ。
Data中存储每个城市的位置信息。
(二)类的划分与功能说明
i.NewJFrame类
定义了各组件对鼠标事件响应方式。
图形用户界面为用户提供输入各项参数的窗口,并添加了“使用默认参数”的功能。
当用户点击确定按钮,程序将执行jButton_actionPerformed(e)函数。
首先读取文本框中参数,初始化ACO类对象,调用ACO类的solve方法开始求解过程。
最终结果将以图形化的方式输出到屏幕。
输出内容包括:
解路径和解路径总长度。
ii.Ant类
设禁忌表,用于记录已访问过的城市;
可访问表,记录未达到的城市。
设置信息素变化矩阵,表示一只蚂蚁,在一次遍历中,为经过的路段增加的信息素。
距离矩阵存储任意两个城市之间的路程。
方法selectNextCity(float[][]pheromone)负责选择下一个城市。
首先根据信息素矩阵pheromone计算概率,使用轮盘赌的方法选择下一城市,并更新禁忌表、可访问表以及当前城市。
calculateTourLength()方法的功能是计算一次遍历中走过的路程。
Ant类中的其他方法用于返回该类的某些属性或对属性进行设置。
iii.ACO类
ACO类的属性如下图所示:
图1ACO类的主要属性
其中ants是Ant类对象,antNum、MAX_GEN、alpha(α)、beta(β)、rho将通过图形界面中用户输入的参数设定。
pheromone是信息素矩阵,表示城市与城市之间每一段路程上的信息素含量;
bestLength、bestTour分别指最优解的总长度和最优解路径的节点顺序。
Init()方法将完成对ACO对象的初始化。
首先从Data类中读入每个城市的坐标信息,计算距离矩阵;
将信息素矩阵的所有元素初始化为0.1,bestLength初始化为正无穷;
并按照指定的数目初始化蚁群。
solve()方法实现核心求解过程。
在每次迭代中,蚂蚁逐个进行城市遍历,所有蚂蚁遍历过一次后,更新信息素矩阵;
迭代MAX_GEN次后,得到最优解。
updatePheromone()方法用于更新信息素矩阵,用rho计算信息素挥发对信息素总量的影响;
累加所有蚂蚁“信息素变化矩阵”的对应值,计算一次迭代后信息素增量。
iv.parameter类
当用户勾选“使用默认”单选框时,将调用parameter中的参数默认值。
v.Data类
该类中的data属性是二维数组,每行元素的三个值依次为:
城市id、城市横坐标、纵坐标。
getdata()方法用于返回某一指定元素的值,即指定城市的横坐标或纵坐标
2.输入输出格式
(一)输入信息
i.城市坐标信息
二维数组data中的一行对应一个城市的信息,每行的三个值依次为:
如:
{1,6734,1453}。
ii.参数
参数主要通过图形界面传入,其中蚂蚁数量、迭代次数为整型;
α、β、挥发因子为浮点型。
也可以采用默认参数。
(二)输出信息
i.图形用户界面输出
以图形方式输出解路径和解路径总长度。
ii.控制台输出
输出程序执行进度(如正在执行的模块)、解路径和解路径总长度。
3.完整代码(见附录)
4.算法优化
(一)蚁恒模型
本程序原使用传统模型,即:
添加蚁恒模型:
可以在图形界面中选择使用传统模型或蚁恒模型。
(二)信息素强度及路径信息素初始值
当蚁群算法求解过程中出现局部最优解,由于正反馈的作用可能导致局部最优解路径上信息素不断累积,降低算法的全局搜索能力[1]。
因此,控制信息素强度Q与信息素初始含量便成为避免陷入局部最优解的关键。
改进算法中这两个变量也可由用户设置。
(三)各参数对算法的影响
本算法设计的主要参数有:
蚂蚁数量、迭代次数、α、β、信息素挥发因子、信息素强度、路径信息素初始值。
简单的测试和统计后发现,解路径长度与迭代次数之间有如下关系:
图2解路径长度与迭代次数的关系
其他参数的改变也会对算法的解造成影响。
例如,在其他参数不变的条件下,信息素初始值与信息素强度Q的比值在0.1左右时效果较好。
若该比值过小,易陷入局部最优解。
有学者曾给出各参数的合理取值范围[2],现将本算法的默认参数取值设定在该范围内:
图3默认参数的设置
5.运行测试
(一)传统模型
图4用户设置参数
图5传统模型-结果演示
(二)蚁恒模型
在界面中选择蚁恒模型:
结果如下图:
图6蚁恒模型-结果演示
6.参考文献
[1]邓雷,朱永利,张雷.基于改进蚁群算法求解最优路径算法的研究[A].电力科学与工程,2013,3.
[2]徐红梅,陈义保,刘加光,王燕涛.蚁群算法中参数设置的研究[A].山东理工大学学报,2008.
附录
(一)NewJFrame.java
/*
*NewJFrame.java
*
*Createdon2013-11-23,21:
25:
57
*/
packagetravaller;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
/**
*@author彤
publicclassNewJFrameextendsjavax.swing.JFrame{
/**CreatesnewformNewJFrame*/
//privatestaticACOaco;
//flagRadio-x:
是某参数对应的单选框是否被选中的标志
publicstaticintflagRadio1=0,flagRadio2=0,flagRadio3=0,flagRadio4=0,flagRadio5=0,flagRadio6=0,flagRadio7=0;
//以下属性对应为:
整形参数蚂蚁数量、迭代次数,浮点型参数α、β、挥发因子
publicstaticintantNum,genNum,QQ;
publicstaticfloatalf,bta,h;
publicstaticfloatinitQ;
publicstaticStringroute;
publicstaticintflag;
//蚁恒模型-传统模型的选择
publicstaticintupdateTimes=0;
//......
publicNewJFrame(){
initComponents();
//为确定按钮添加事件监听器,当点击确定按钮时,执行“jButton_actionPerformed(e)”函数
jButton1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
jButton_actionPerformed(e);
}
});
//以下定义5个单选按钮的事件监听器,当该按钮被选中时,
//执行相应的Radio-x()函数,即引用默认的参数值。
jRadioButton1.addActionListener(newActionListener(){
Radio1(e);
jRadioButton2.addActionListener(newActionListener(){
Radio2(e);
jRadioButton3.addActionListener(newActionListener(){
Radio3(e);
jRadioButton4.addActionListener(newActionListener(){
Radio4(e);
jRadioButton5.addActionListener(newActionListener(){
Radio5(e);
jRadioButton6.addActionListener(newActionListener(){
Radio6(e);
jRadioButton7.addActionListener(newActionListener(){
Radio7(e);
/*以下定义5个方法Radio-x(e),函数发生在某一单选框被点击之后。
*经过点击后,若单选框处于选中状态,则将parameter类中相应参数的默认值显示在文本框中,
*若单选框处于未选中状态,则将对应的文本框置空,等待用户键入参数值
privatevoidRadio1(ActionEvente){
flagRadio1=~flagRadio1;
//每点击一次,标志flagRadio-x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蚁群算法 旅行商问题 人工智能 java 代码+报告+注释 算法 旅行 问题 代码 报告 注释
