ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:179.56KB ,
资源ID:3032879      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3032879.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(蚁群算法 旅行商问题 人工智能 java 代码+报告+注释.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

蚁群算法 旅行商问题 人工智能 java 代码+报告+注释.docx

1、蚁群算法 旅行商问题 人工智能 java 代码+报告+注释 目录1. 整体结构与功能划分 2(一) 总体结构 2(二) 类的划分与功能说明 2i. NewJFrame 类 2ii. Ant类 2iii. ACO类 2iv. parameter类 3v. Data类 32. 输入输出格式 3(一) 输入信息 3i. 城市坐标信息 3ii. 参数 3(二) 输出信息 3i. 图形用户界面输出 3ii. 控制台输出 33. 完整代码(见附录) 44. 算法优化 4(一) 蚁恒模型 4(二) 信息素强度及路径信息素初始值 4(三) 各参数对算法的影响 45. 运行测试 5(一) 传统模型 5(二) 蚁

2、恒模型 66. 参考文献 7附录 7(一) NewJFrame.java 7(二) Ant.java 13(三) ACO.java 17(四) Parameter.java 23(五) Data.java 23(六) NewJFramePath.java 241. 整体结构与功能划分(一) 总体结构程序的主类是NewJFrame,该类负责绘制图形用户界面并执行蚁群算法。将蚁群算法中的“蚂蚁”抽象为Ant类,实现遍历所有城市(选择下一个城市)、计算本次遍历的路程等功能。ACO类聚合了Ant类,完整的实现了蚁群算法,包括迭代遍历、更新信息素等过程。NewJFramePath类将解路径以图形方式显示

3、出来。另设两个数据类parameter和Data,parameter类用于保存参数的默认值,主要参数包括:蚂蚁数量、城市数目、迭代次数、挥发因子、信息素强度Q、路径信息素初始值initQ。Data中存储每个城市的位置信息。(二) 类的划分与功能说明i. NewJFrame类定义了各组件对鼠标事件响应方式。图形用户界面为用户提供输入各项参数的窗口,并添加了“使用默认参数”的功能。当用户点击确定按钮,程序将执行jButton_actionPerformed (e)函数。首先读取文本框中参数,初始化ACO类对象,调用ACO类的solve方法开始求解过程。最终结果将以图形化的方式输出到屏幕。输出内容包

4、括:解路径和解路径总长度。ii. Ant类设禁忌表,用于记录已访问过的城市;可访问表,记录未达到的城市。设置信息素变化矩阵,表示一只蚂蚁,在一次遍历中,为经过的路段增加的信息素。距离矩阵存储任意两个城市之间的路程。方法selectNextCity(float pheromone)负责选择下一个城市。首先根据信息素矩阵pheromone计算概率,使用轮盘赌的方法选择下一城市,并更新禁忌表、可访问表以及当前城市。calculateTourLength()方法的功能是计算一次遍历中走过的路程。Ant类中的其他方法用于返回该类的某些属性或对属性进行设置。iii. ACO类ACO类的属性如下图所示:图1

5、 ACO类的主要属性其中ants是Ant类对象,antNum、MAX_GEN、alpha()、beta()、rho将通过图形界面中用户输入的参数设定。pheromone是信息素矩阵,表示城市与城市之间每一段路程上的信息素含量;bestLength、bestTour分别指最优解的总长度和最优解路径的节点顺序。Init()方法将完成对ACO对象的初始化。首先从Data类中读入每个城市的坐标信息,计算距离矩阵;将信息素矩阵的所有元素初始化为0.1,bestLength初始化为正无穷;并按照指定的数目初始化蚁群。solve()方法实现核心求解过程。在每次迭代中,蚂蚁逐个进行城市遍历,所有蚂蚁遍历过一次

6、后,更新信息素矩阵;迭代MAX_GEN次后,得到最优解。updatePheromone()方法用于更新信息素矩阵,用rho计算信息素挥发对信息素总量的影响;累加所有蚂蚁“信息素变化矩阵”的对应值,计算一次迭代后信息素增量。iv. parameter类当用户勾选“使用默认”单选框时,将调用parameter中的参数默认值。v. Data类该类中的data属性是二维数组,每行元素的三个值依次为:城市id、城市横坐标、纵坐标。getdata()方法用于返回某一指定元素的值,即指定城市的横坐标或纵坐标2. 输入输出格式(一) 输入信息i. 城市坐标信息二维数组data中的一行对应一个城市的信息,每行的

7、三个值依次为:城市id、城市横坐标、纵坐标。如:1,6734,1453。ii. 参数参数主要通过图形界面传入,其中蚂蚁数量、迭代次数为整型;、挥发因子为浮点型。也可以采用默认参数。(二) 输出信息i. 图形用户界面输出以图形方式输出解路径和解路径总长度。ii. 控制台输出输出程序执行进度(如正在执行的模块)、解路径和解路径总长度。3. 完整代码(见附录)4. 算法优化(一) 蚁恒模型本程序原使用传统模型,即:添加蚁恒模型: 可以在图形界面中选择使用传统模型或蚁恒模型。(二) 信息素强度及路径信息素初始值当蚁群算法求解过程中出现局部最优解,由于正反馈的作用可能导致局部最优解路径上信息素不断累积,

8、降低算法的全局搜索能力1。因此,控制信息素强度Q与信息素初始含量便成为避免陷入局部最优解的关键。改进算法中这两个变量也可由用户设置。(三) 各参数对算法的影响本算法设计的主要参数有:蚂蚁数量、迭代次数、信息素挥发因子、信息素强度、路径信息素初始值。简单的测试和统计后发现,解路径长度与迭代次数之间有如下关系:图2 解路径长度与迭代次数的关系其他参数的改变也会对算法的解造成影响。例如,在其他参数不变的条件下,信息素初始值与信息素强度Q的比值在0.1左右时效果较好。若该比值过小,易陷入局部最优解。有学者曾给出各参数的合理取值范围2,现将本算法的默认参数取值设定在该范围内: 图3 默认参数的设置5.

9、运行测试(一) 传统模型图4用户设置参数图5传统模型-结果演示(二) 蚁恒模型在界面中选择蚁恒模型:结果如下图: 图6 蚁恒模型-结果演示6. 参考文献1 邓雷,朱永利,张雷.基于改进蚁群算法求解最优路径算法的研究A.电力科学与工程,2013,3.2 徐红梅,陈义保,刘加光,王燕涛. 蚁群算法中参数设置的研究A. 山东理工大学学报,2008.附录(一) NewJFrame.java/* * NewJFrame.java * * Created on 2013-11-23, 21:25:57 */package travaller;import java.awt.*;import java.aw

10、t.event.*;import javax.swing.*;/* * * author 彤 */public class NewJFrame extends javax.swing.JFrame /* Creates new form NewJFrame */ /private static ACO aco; /flagRadio-x:是某参数对应的单选框是否被选中的标志 public static int flagRadio1=0,flagRadio2=0,flagRadio3=0,flagRadio4=0,flagRadio5=0,flagRadio6=0,flagRadio7=0; /

11、以下属性对应为:整形参数蚂蚁数量、迭代次数,浮点型参数、挥发因子 public static int antNum,genNum,QQ; public static float alf,bta,h; public static float initQ; public static String route; public static int flag;/蚁恒模型-传统模型的选择 public static int updateTimes=0; /. public NewJFrame() initComponents(); /为确定按钮添加事件监听器,当点击确定按钮时,执行“jButton_a

12、ctionPerformed(e)”函数 jButton1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) jButton_actionPerformed(e); ); /以下定义5个单选按钮的事件监听器,当该按钮被选中时, /执行相应的Radio-x()函数,即引用默认的参数值。 jRadioButton1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Radi

13、o1(e); ); jRadioButton2.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Radio2(e); ); jRadioButton3.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Radio3(e); ); jRadioButton4.addActionListener(new ActionListener() public void actio

14、nPerformed(ActionEvent e) Radio4(e); ); jRadioButton5.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Radio5(e); ); jRadioButton6.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Radio6(e); ); jRadioButton7.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Radio7(e); ); /*以下定义5个方法 Radio-x(e),函数发生在某一单选框被点击之后。 * 经过点击后,若单选框处于选中状态,则将parameter类中相应参数的默认值显示在文本框中, * 若单选框处于未选中状态,则将对应的文本框置空,等待用户键入参数值 */ private void Radio1(ActionEvent e) flagRadio1=flagRadio1; /每点击一次,标志flagRadio-x

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1