版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《人工智能通识》实验任务报告实验章节:学生姓名: 专业班级: 学号: 机械工业出版社《第四章深度学习》课程实验姓名学号班级实验地点指导教师时间实验任务一(如有任务二自行复制同样的表格,如没有,请把“一”字删除)1、任务名称使用蚁群优化算法求解旅行商问题。2、任务目标(1)理解蚁群算法原理及其在组合优化问题中的应用。(2)掌握使用Python实现蚁群算法求解旅行商问题。(3)使用可视化算法求解过程和最终路径。(4)分析算法参数对求解效果的影响。3、具体任务内容(1)实现蚁群算法核心功能。城市间距离矩阵计算、蚂蚁路径构建策略、信息素更新机制。(2)可视化算法收敛过程和最优路径。(3)调整算法主要参数(信息素因子、启发因子、挥发率等)观察算法性能变化。4、成果要求(1)实验报告一份,按照实验报告模板撰写,详细描述实验过程、遇到的问题及解决方案、实验结果等,制作表格列举不同主要参数配置下的实验结果,并对结果进行分析。(2)程序代码一份。完整可执行的Python程序代码,要求注释大于50%。实验报告实验任务(1)完成蚁群算法函数以及结果可视化函数定义,蚁群算法主要参数包括:城市坐标列表、蚂蚁数量、迭代次数、信息素重要程度因子、启发函数重要程度因子、信息素挥发率、信息素强度等。(2)生成随机城市坐标、初始化并运行蚁群算法函数,生成可视化结果。(3)制作表格,列出在相同城市坐标下,不同主要参数下的算法收敛结果,并分析结果。2、实验环境(1)硬件环境:处理器:IntelCorei5及以上内存:8GB及以上显卡:集成显卡(支持Python图形库)(2)软件环境:操作系统:Windows1064位编程语言:Python3.8核心库与框架:numpy、matplotlib、pandas3、任务完成及步骤【分解任务1】:导入numpy、matplotlib、pandas库,定义蚁群算法函数、结果可视化函数。实验代码:importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspdclassAntColonyTSP:def__init__(self,cities,n_ants=50,n_iterations=100,alpha=1.0,beta=3.0,evaporation=0.5,Q=100):"""参数:cities-城市坐标列表[(x1,y1),(x2,y2),...]n_ants-蚂蚁数量n_iterations-迭代次数alpha-信息素重要程度因子beta-启发函数重要程度因子evaporation-信息素挥发率Q-信息素强度"""self.cities=citiesself.n_cities=len(cities)self.n_ants=n_antsself.n_iterations=n_iterationsself.alpha=alphaself.beta=betaself.evaporation=evaporationself.Q=Q#计算距离矩阵self.distances=self.calculate_distances()#初始化信息素矩阵self.pheromone=np.ones((self.n_cities,self.n_cities))/self.n_cities#存储最优路径self.best_path=Noneself.best_distance=float('inf')self.convergence_curve=[]defcalculate_distances(self):"""计算城市间距离矩阵"""distances=np.zeros((self.n_cities,self.n_cities))foriinrange(self.n_cities):forjinrange(i+1,self.n_cities):dist=np.linalg.norm(np.array(self.cities[i])-np.array(self.cities[j]))distances[i][j]=distdistances[j][i]=distreturndistancesdefrun(self):"""执行蚁群算法"""foriterationinrange(self.n_iterations):all_paths=[]path_distances=[]#每只蚂蚁构建路径forantinrange(self.n_ants):path=self.build_path()distance=self.calculate_path_distance(path)all_paths.append(path)path_distances.append(distance)#更新全局最优路径ifdistance<self.best_distance:self.best_distance=distanceself.best_path=path#更新信息素self.update_pheromone(all_paths,path_distances)#记录收敛曲线self.convergence_curve.append(self.best_distance)print(f"Iteration{iteration+1}:BestDistance={self.best_distance:.2f}")returnself.best_path,self.best_distancedefbuild_path(self):"""单只蚂蚁构建路径"""#随机选择起点start_city=np.random.randint(0,self.n_cities)path=[start_city]visited=set([start_city])#逐步访问其他城市for_inrange(self.n_cities-1):next_city=self.select_next_city(path[-1],visited)path.append(next_city)visited.add(next_city)returnpathdefselect_next_city(self,current_city,visited):"""根据概率选择下一个城市"""unvisited=[cityforcityinrange(self.n_cities)ifcitynotinvisited]#计算概率probabilities=[]forcityinunvisited:pheromone=self.pheromone[current_city][city]**self.alphaheuristic=(1.0/self.distances[current_city][city])**self.betaprobabilities.append(pheromone*heuristic)#归一化概率total=sum(probabilities)probabilities=[p/totalforpinprobabilities]#轮盘赌选择returnnp.random.choice(unvisited,p=probabilities)defcalculate_path_distance(self,path):"""计算路径总距离"""distance=0foriinrange(len(path)):from_city=path[i]to_city=path[(i+1)%len(path)]distance+=self.distances[from_city][to_city]returndistancedefupdate_pheromone(self,all_paths,path_distances):"""更新信息素"""#信息素挥发self.pheromone*=(1.0-self.evaporation)#信息素增强forpath,distanceinzip(all_paths,path_distances):foriinrange(len(path)):from_city=path[i]to_city=path[(i+1)%len(path)]self.pheromone[from_city][to_city]+=self.Q/distanceself.pheromone[to_city][from_city]+=self.Q/distancedefplot_convergence(self):"""绘制收敛曲线"""plt.figure(figsize=(10,6))plt.plot(self.convergence_curve)plt.title('ACOConvergenceCurve')plt.xlabel('Iteration')plt.ylabel('BestDistance')plt.grid(True)plt.savefig('convergence.png',dpi=300)plt.show()defplot_path(self,path=None):"""可视化路径"""ifpathisNone:path=self.best_pathplt.figure(figsize=(10,8))cities=np.array(self.cities)#绘制城市点plt.scatter(cities[:,0],cities[:,1],s=100,c='red',marker='o',alpha=0.8)#绘制路径foriinrange(len(path)):from_city=path[i]to_city=path[(i+1)%len(path)]plt.plot([cities[from_city][0],cities[to_city][0]],[cities[from_city][1],cities[to_city][1]],'b-',linewidth=1,alpha=0.6)#标记起点plt.scatter(cities[path[0]][0],cities[path[0]][1],s=200,c='green',marker='*',alpha=1.0)plt.title(f'TSPSolution-Distance:{self.calculate_path_distance(path):.2f}')plt.xlabel('XCoordinate')plt.ylabel('YCoordinate')plt.grid(True)plt.savefig('tsp_path.png',dpi=300)plt.show()【分解任务2】:生成城市坐标,调用蚁群优化算法,并生成可视化结果。实验代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 注册公用设备工程师(给水排水)《专业知识考试(上)》真题试卷及参考答案
- 冠心病护理查房(含护理流程)
- 十堰消防安全日活动方案
- 面试成功后要签外包合同
- 物流车队维修外包合同
- 原单位要求签外包合同
- 学校食堂招商外包合同
- it技术人员外包合同
- 兼职家具拆单外包合同
- 2026届江苏省金坛一中高三年级5月质量调研(二)历史试题(含答案)
- 医疗器械偏差
- 2023年6月福建省普通高中学业水平合格性考试化学试题(解析版)
- 专题21 热量 比热容平衡计算 (含答案) 2024全国初中物理自主招生专题大揭秘
- 安全生产及设备检维修风险辨识培训
- 第四单元期末知识点难点闯关(课件)-部编版语文五年级下册
- 梁慧星《民法总论》超级笔记
- 年洗涤400万件医用品项目可行性研究报告商业计划书
- 兼职台球教练合作协议
- 银行业金融机构监管数据标准化规范(2021版)数据结构一览表
- 隆化县新村矿业有限公司大乌苏沟超贫磁铁矿采矿权出让收益评估报告
- 中国民用航空飞行学院辅导员考试题库
评论
0/150
提交评论