做网站的个人心得学校网站模版

news/2025/10/3 14:41:34/文章来源:
做网站的个人心得,学校网站模版,程序员外包兼职平台,大型网站开发团队基于蚁群算法的TSP问题建模求解 一、蚁群优化算法#xff08;Ant Colony Optimization#xff0c;ACO#xff09;1.1 蚁群算法的起源——“双桥实验”1.2 蚁群优化算法思想1.3 蚁群算法应用于求解组合优化问题 二、基于蚁群算法的TSP问题建模求解2.1 旅行商问题#xff08;… 基于蚁群算法的TSP问题建模求解 一、蚁群优化算法Ant Colony OptimizationACO1.1 蚁群算法的起源——“双桥实验”1.2 蚁群优化算法思想1.3 蚁群算法应用于求解组合优化问题 二、基于蚁群算法的TSP问题建模求解2.1 旅行商问题Travelling salesman problemTSP2.2 蚁群算法求解TSP问题思想、步骤、流程图2.3 实例分析2.4 完整代码2.5 运行结果 一、蚁群优化算法Ant Colony OptimizationACO 蚁群系统Ant System或Ant Colony System是由意大利学者Dorigo、Maniezzo等人于20世纪90年代1992年首先提出来的。他们在研究蚂蚁觅食的过程中发现单个蚂蚁的行为比较简单但是蚁群整体却可以体现一些智能的行为。例如蚁群可以在不同的环境下寻找最短到达食物源的路径。这是因为蚁群内的蚂蚁可以通过某种信息机制实现信息的传递。后又经进一步研究发现蚂蚁会在其经过的路径上释放一种可以称之为“信息素”的物质蚁群内的蚂蚁对“信息素”具有感知能力它们会沿着“信息素”浓度较高路径行走而每只路过的蚂蚁都会在路上留下“信息素”这就形成一种类似正反馈的机制这样经过一段时间后整个蚁群就会沿着最短路径到达食物源了。 1.1 蚁群算法的起源——“双桥实验” 双桥实验在研究蚂蚁觅食行为过程中人们发现尽管单只蚂蚁的能力十分有限但整个蚁群却在觅食过程中可以发现从蚁巢到食物源的最短路径。在觅食过程中蚂蚁通过“媒介质”来协调它们之间的行动。所谓“媒介质”指的是一种以环境的变化为媒介的间接通信方式。蚂蚁在寻找食物时以其产生的被称为信息素的化学物质作为媒介而间接的传递信息。当蚂蚁从蚁穴走到食物源从而形成了含有信息素的路径。 蚂蚁从A点出发随机选择路线ABD或ACD。经过9个时间单位时走ABD的蚂蚁到达终点走ACD的蚂蚁刚好走到C点。 经过18个时间单位时走ABD的蚂蚁到达终点后得到食物又返回了起点A而走ACD的蚂蚁刚好走到D点。 最后的极限是所有的蚂蚁只选择ABD路线。正反馈过程 1.2 蚁群优化算法思想 蚁群优化算法思想蚁群的自组织行为通过遗留在来往路径的信息素Pheromone挥发的化学性物质来进行通信和协调。 蚁群算法是对自然界蚂蚁的寻径方式进行模似而得出的一种仿生优化算法蚂蚁在运动过程中能够在它所经过的路径上留下信息素(pheromone)的物质进行信息传递而且蚂蚁在运动过程中能够感知这种物质并以此指导自己的运动方向。由大量蚂蚁组成的蚁群集体行为便表现出一种信息正反馈现象某一路径上走过的蚂蚁越多则后来者选择该路径的概率就越大。 1.3 蚁群算法应用于求解组合优化问题 将蚁群算法应用于解决优化问题的基本思路为用蚂蚁的行走路径表示待优化问题的可行解整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放的信息素量较多随着时间的推进较短的路径上累积的信息素浓度逐渐增高选择该路径的蚂蚁个数也愈来愈多。最终整个蚂蚁会在正反馈的作用下集中到最佳的路径上此时对应的便是待优化问题的最优解。 二、基于蚁群算法的TSP问题建模求解 2.1 旅行商问题Travelling salesman problemTSP 刘兴禄 -《运筹优化常用模型、算法及案例实战PythonJava实现》总结了TSP问题共有3种数学模型本文采用DFJ模型见基于禁忌搜索的TSP问题建模求解Java。 2.2 蚁群算法求解TSP问题思想、步骤、流程图 蚂蚁通过信息素指导寻优过程每次迭代更新信息素不断寻优。 蚂蚁在运动过程中能够在它所经过的路径上留下信息素(pheromone)的物质进行信息传递对应于求解TSP中 每只蚂蚁根据路径上的信息素和启发式信息两城市间距离独立地选择下一座城市在时刻t蚂蚁k从城市i转移到城市j的概率为 p i j k ( t ) { [ τ i j ( t ) ] α [ η i j ( t ) ] β ∑ s ∈ J k ( i ) [ τ i s ( t ) ] α [ η i s ( t ) ] β , j ∈ J k ( i ) 0 , j ∉ J k ( i ) \begin{align} p_{i j}^{k}(t)\left\{\begin{array}{ll} \frac{\left[\tau_{i j}(t)\right]^{\alpha}\left[\eta_{i j}(t)\right]^{\beta}}{\sum_{s \in J_{k}(i)}\left[\tau_{i s}(t)\right]^{\alpha}\left[\eta_{i s}(t)\right]^{\beta}}, j \in J_{k}(i) \\ 0, j \notin J_{k}(i) \end{array}\right.\end{align} pijk​(t){∑s∈Jk​(i)​[τis​(t)]α[ηis​(t)]β[τij​(t)]α[ηij​(t)]β​,0,​j∈Jk​(i)j∈/Jk​(i)​​​ 其中 α \alpha α和 β \beta β分别表示信息素和启发式银子的相对重要程度。 τ i j \tau_{ij} τij​表示城市i到j的信息素。 η i j 1 / d i j \eta_{ij}1/d_{ij} ηij​1/dij​ d i j d_{ij} dij​为城市间距离矩阵。 J k ( i ) { 1 , 2 , ⋯ , n } − t a b u k J_k(i)\{1,2,\cdots,n\}- {tabu_k} Jk​(i){1,2,⋯,n}−tabuk​ t a b u k {tabu_k} tabuk​是蚂蚁k已经访问过城市。 蚂蚁在运动过程中能够感知信息素并以此指导自己的运动方向 当所有蚂蚁完成一次周游后各路径上的信息素将进行更新 τ i j ( t n ) ( 1 − ρ ) τ i j Δ τ i j \begin{align} \tau_{ij}(tn)(1-\rho)\tau_{ij}\Delta\tau_{ij}\end{align} τij​(tn)(1−ρ)τij​Δτij​​​ Δ τ i j ∑ k 1 m Δ τ i j k \begin{align}\Delta\tau_{ij}\sum_{k1}^{m} \Delta\tau_{ij}^{k}\end{align} Δτij​k1∑m​Δτijk​​​ Δ τ i j k { Q L k , if 蚂蚁 k 在本次周游中经过边  i j 0 , otherwise  \begin{align} \Delta \tau_{i j}^{k}\left\{\begin{array}{ll} \frac{Q}{L_{k}}, \text { if 蚂蚁}k\text{ 在本次周游中经过边 } ij \\ 0, \text { otherwise } \end{array}\right. \end{align} Δτijk​{Lk​Q​,0,​ if 蚂蚁k 在本次周游中经过边 ij otherwise ​​​ 其中 ρ \rho ρ 0 ρ 1 0\rho1 0ρ1表示路径上信息素的蒸发系数Q为正常数 L k L_k Lk​表示第k只蚂蚁在本次周游中所走过路径的长度。 蚁群算法求解TSP问题步骤如下 初始化。问题相关参数城市数量、城市间距离矩阵、算法参数蚂蚁数量、 α \alpha α、 β \beta β、 ρ \rho ρ、 Q Q Q、 m a x g e n maxgen maxgen。为每只蚂蚁构建路径。随机初始化蚂蚁路径的起点城市根据式1计算每个城市的选择概率通过轮盘赌选择下一个城市直至路径蚂蚁路径形成一条TSP回路。根据式2更新信息素矩阵。检查终止条件输出最优值 蚁群算法求解TSP问题算法流程图 2.3 实例分析 2.4 完整代码 采用TSP问题标准测试函数att48城市数量48进行测试 # -*- coding: utf-8 -*- import itertools import random import copy import numpy as np from scipy.spatial import distance from typing import List, Dict, Tuple from matplotlib import pyplot as plt from numpy import ndarraynp.set_printoptions(thresholdnp.inf, linewidthnp.inf)# 参数ALPHA:信息启发因子值越大则蚂蚁选择之前走过的路径可能性就越大值越小则蚁群搜索范围就会减少容易陷入局部最优 BETA:Beta值越大蚁群越就容易选择局部较短路径这时算法收敛速度会加快但是随机性不高容易得到局部的相对最优 # 城市距离和信息素 class AntColonyOpt:def __init__(self, problem):self.problem problemself.num_city problem.num_cityself.city_coord problem.city_coordself.city_list problem.city_listself.distance Noneself.pheromone Noneself.num_ant 48self.alpha 1.self.beta 2.self.rho .5 # 信息素的蒸发率self.Q 100.self.tau np.ones(shape(self.num_city, self.num_city)) # 信息素self.eta Noneself.ant_list []self.best_ant Noneself.gen 0 # 初始化迭代次数self.max_gen 1e3self.initialize()# 初始化def initialize(self):# 初始化城市之间的距离city_coord np.asarray(list(self.city_coord.values()))self.distance distance.cdist(city_coord, city_coord, euclidean)self.eta 1 / self.distance# 初始城市之间的信息素self.pheromone np.ones(shape(self.num_city, self.num_city), dtypenp.float64)# self.pheromone [[1.0 for col in range(num_city)] for raw in range(num_city)]for i in range(self.num_ant):ant {id: i,path: [i],path_length: 1 31,tabu: {i},allow: [True if city ! i else False for city in self.city_list],move_count: 0}self.ant_list.append(ant)self.best_ant {id: -1,path: [0],path_length: 1 31,tabu: set(),allow: [True] * self.num_city,move_count: 0} # 初始最优解def build_path(self, ant):while ant[move_count] self.num_city - 1:# 移动到下一个城市next_city self.select(ant)self.move(ant, next_city)def select(self, ant):# 计算选择概率: i 当前城市, j 遍历allow中j城市ant_path ant[path]i ant_path[-1] # 当前城市numerator np.array([(self.tau[i][j] ** self.alpha) * (self.eta[i][j] ** self.beta) if ant[allow][j] is True else 0 for j in self.city_list])denominator np.sum(numerator)p_select numerator / denominatorp_cum np.cumsum(p_select)# 轮盘赌选择select Noner np.random.uniform(0, 1)for city in self.city_list:if ant[allow][city] is True:if r p_cum[city]:select citybreakreturn select# 移动操作def move(self, ant, next_city):ant[path].append(next_city)ant[allow][next_city] Falseant[tabu].add(next_city)ant[move_count] 1def clear(self):self.ant_list []random_city np.random.randint(low0, highself.num_city)for i in range(self.num_ant):ant {id: random_city,path: [random_city],path_length: 1 31,tabu: {random_city},allow: [True if city ! random_city else False for city in self.city_list],move_count: 0}self.ant_list.append(ant)# 运行蚁群优化算法def run(self):trace []while self.gen self.max_gen:# 遍历每一只蚂蚁for ant in self.ant_list:# 搜索一条路径self.build_path(ant)ant[path_length] self.calc_path_length(ant[path])# 与当前最优蚂蚁比较, 更新最优解if ant[path_length] self.best_ant[path_length]:self.best_ant copy.deepcopy(ant)# print(ant)# 更新信息素self.update_pheromone()print(u迭代次数, self.gen, u最佳路径总距离, int(self.best_ant[path_length]))self.gen 1trace.append((self.best_ant[path], self.best_ant[path_length]))self.clear()self.draw([(self.best_ant[path], self.best_ant[path_length])])# 计算路径总距离def calc_path_length(self, path):total_distance 0.for i, j in itertools.pairwise(path):total_distance self.distance[i][j]i path[-1]j path[0]total_distance self.distance[i][j]return total_distancedef draw(self, trace: List[Tuple[List, float]]) - None:最优路径可视化:param trace:每次迭代过程中最优路径及路径长度trace是一个listlen(trace)max_gen:return:iteration np.arange(len(trace))obj_value [trace[i][1] for i in range(len(trace))]plt.plot(iteration, obj_value)plt.show()final_solution, final_obj_value trace[-1]x []y []for city in final_solution:city_x, city_y self.city_coord[city]x.append(city_x)y.append(city_y)city_x, city_y self.city_coord[final_solution[0]]x.append(city_x)y.append(city_y)plt.plot(x, y, o-, alpha1, linewidth2)plt.savefig(ACO-TSP.png, bbox_inchestight)def update_pheromone(self):更新信息素:return:delta_tau np.zeros(shape(self.num_city, self.num_city))for ant in self.ant_list:for i in range(1, self.num_city):start, end ant[path][i - 1], ant[path][i]# 在路径上的每两个相邻城市间留下信息素与路径总距离反比delta_tau[start][end] self.Q / ant[path_length]delta_tau[end][start] delta_tau[start][end]for i in range(self.num_city):for j in range(self.num_city):self.tau[i][j] (1 - self.rho) * self.tau[i][j] delta_tau[i][j]class TSP(object):num_city: int None # 城市数量city_coord: Dict[int, Tuple[int, int]] None # 城市标号及对应坐标示例 1(23,312)distance: ndarray None # 城市间距离矩阵pheromone: List Nonedef __init__(self, city_coord):self.num_city len(city_coord)self.city_coord city_coordself.city_list city_coord.keys()self.distance np.empty(shape(self.num_city, self.num_city), dtypenp.float64)if __name__ __main__:city_coord_att48 {0: (6734, 1453),1: (2233, 10),2: (5530, 1424),3: (401, 841),4: (3082, 1644),5: (7608, 4458),6: (7573, 3716),7: (7265, 1268),8: (6898, 1885),9: (1112, 2049),10: (5468, 2606),11: (5989, 2873),12: (4706, 2674),13: (4612, 2035),14: (6347, 2683),15: (6107, 669),16: (7611, 5184),17: (7462, 3590),18: (7732, 4723),19: (5900, 3561),20: (4483, 3369),21: (6101, 1110),22: (5199, 2182),23: (1633, 2809),24: (4307, 2322),25: (675, 1006),26: (7555, 4819),27: (7541, 3981),28: (3177, 756),29: (7352, 4506),30: (7545, 2801),31: (3245, 3305),32: (6426, 3173),33: (4608, 1198),34: (23, 2216),35: (7248, 3779),36: (7762, 4595),37: (7392, 2244),38: (3484, 2829),39: (6271, 2135),40: (4985, 140),41: (1916, 1569),42: (7280, 4899),43: (7509, 3239),44: (10, 2676),45: (6807, 2993),46: (5185, 3258),47: (3023, 1942),}problem TSP(city_coord_att48)aco AntColonyOpt(problem)aco.run() 2.5 运行结果 采用TSP问题标准测试函数att48城市数量48最优解为33523本文迭代次数1000最佳路径总距离35408其他文章基于禁忌搜索的TSP问题建模求解Java结果为34974.67245297696。本文求解结果如下图 参考 蚁群算法Ant Colony Optimization一文搞懂什么是蚁群优化算法(Ant Colony Optimization, ACO)【附应用举例】蚁群算法原理及其实现(python)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

佛山网站建设百家号网站统计平台

使用Selenium处理动态生成的网页内容和语法代码可以通过以下步骤进行: 安装Selenium库:使用pip命令安装Selenium库,可以在命令行中运行如下命令: pip install selenium 下载WebDriver:Selenium需要与特定的浏览器进行交…

P11983 [JOIST 2025] 展览会 3 题解

Description JOI 美术馆计划近期举办一场绘画展览。馆方拥有编号为 \(1\) 至 \(N\) 的 \(N\) 幅画作,其中画作 \(i\)(\(1 \leq i \leq N\))的美观值为 \(A_i\)。在展览中这些画作将排成一行展示,但具体排列顺序尚未…

黑客马拉松(Hackathon)

黑客马拉松(Hackathon)黑客马拉松是一种 短时间内高强度的软件/硬件开发活动。一般持续 24~72 小时,有的甚至一周。参与者通常是开发者、设计师、产品经理等,组成小团队。目标是在有限时间里,从零开始,开发出一个…

详细介绍:Quarkus深度解析:响应式编程与Native镜像,如何重构Java云原生应用?

详细介绍:Quarkus深度解析:响应式编程与Native镜像,如何重构Java云原生应用?2025-10-03 14:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overfl…

节能网站源码深圳外贸业务员工资

void SaveBitmapToFile(HBITMAP hBitmap, char* szfilename) {HDC hdc; //设备描述表int ibits;WORD wbitcount; //当前显示分辨率下每个像素所占字节数//位图中每个像素所占字节数,定义调色板大小,位图中像素字节大小,位图文件大小 &a…

网络流 费用流 EK算法

模板题:洛谷p3381 #include<bits/stdc++.h> using namespace std; const int N=5e3+10,M=5e4+10,INF=0x3f3f3f3f; typedef long long LL; int n,m,s,t,id=1; int e[M<<1],h[N],cap[M<<1],d[M<&l…

“AI元人文”构想说明:构建智能时代的人文学科新范式

“AI元人文”构想说明:构建智能时代的人文学科新范式 一、 构想缘起与问题意识 我们正处在一个由人工智能技术驱动的历史性转折点。AI不仅重塑着我们的物质世界,更深刻地介入并挑战着人类对语言、文化、历史、伦理和…

双向LSTM-Attention模型

为了让你彻底理解双向LSTM-Attention模型的每一步,我们会在原有运转流程的基础上,对每个核心概念做“定义+通俗解释+模型中作用+项目实例”的四层拆解,从最基础的“时序窗口”到复杂的“注意力权重计算”,每个概念…

tomcat的功能和作用 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【论文阅读 | ECCV 2024 | DAMSDet:具有竞争性查询选择与自适应特征融合的动态自适应多光谱检测变换器】

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

手机网站开发 pdf网页特效源码网站

来源&#xff1a;软件定义世界&#xff08;SDX&#xff09;作者&#xff1a;吴甘沙、张玉新摘要&#xff1a;当卡尔 本茨发明汽车&#xff0c;人类进入汽车时代时&#xff0c;科学技术就对人类的 “ 出行 ” 进行了新的定义&#xff0c;而随着技术的不断发展与进步&#xff0c…

Xilinx高性能NVMe Host控制器IP+PCIe 3.0软核控制器IP,4通道DMA,1通道IO,纯逻辑实现,AXI4和AXI4-Stream DMA接口,支持PCIe 3.0和4.0

NVMe AXI4 Host Controller IP可以连接高速存储PCIe SSD,无需CPU,自动加速处理所有的NVMe协议命令,具备独立的数据写入和读取AXI4接口,不但适用高性能、顺序访问的应用,也适用于随机访问的应用,同时结合外部存储…

巫山网站开发制作网站付费软件

来源&#xff1a;网络大数据摘要&#xff1a;尽管科幻小说可能将人工智能机器人描绘成坏人&#xff0c;但一些科技巨头现在也将其用于安全。 微软和优步等公司使用Knightscope K5机器人巡逻停车场和大型户外区域来预测和预防犯罪。 机器人可以读取车牌&#xff0c;报告可疑活动…

做网站显示上次登录时间代码网站的基本要素

构建进化树的需求 在生物生态学领域&#xff0c;构建进化树&#xff08;也称为系统发生树或谱系树&#xff09;具有以下几个重要的目的和需求&#xff1a; 理解物种间的亲缘关系&#xff1a; 进化树揭示了物种之间的演化关系和共同祖先&#xff0c;帮助科学家理解不同物种是如…

公私合作抗击网络威胁的创新实践

本文探讨了公共部门与私营企业如何通过合作应对网络安全威胁,分析了合作模式、创新解决方案及当前面临的挑战,特别是在疫情期间远程工作环境下的安全防护问题。公私合作如何共同抗击网络威胁 TF7电台访谈强调合作重要…

用vs2012做简单网站网店seo名词解释

在macos中如果使用brew 官方默认的core tap 只可以安装官方最新的稳定版PHP, 如果想要安装 php 5.6 或者 php 8.4版本的PHP就需要使用第三方的tap , 这里分享一个比较全面的brew tap shivammathur/php 这个tap里面包含了从php5.6到最新版php8.4的所有可用最新版本PHP, 而且是同…

网站开发销售提成做一个企业网站要多少钱

在自己自定义的一个组件中由于需要用图片显示数字编号&#xff0c;而当前图片就只有一张&#xff0c;上面有0-9是个数字&#xff0c;于是不得不考虑将其中一个个的数字切割下来&#xff0c;需要显示什么数字&#xff0c;只需要组合一下就好了。 下面是程序的关键代码&#xff…

佛山快速建站哪家服务专业网站源码破解版

第20天 和 &#xff08;等值比较&#xff09; 当使用 操作符时&#xff0c;PHP将进行宽松比较&#xff0c;也就是说&#xff0c;只比较两个值的等价性&#xff0c;而不考虑它们的类型。 如果两个值类型不同&#xff0c;PHP会尝试将它们转换成相同的类型&#xff0c;然后再进…

微软公司做网站的软件怀化医保网站

文章目录 使用 JWT 进行身份校验jwt知识点补充认识JWTTOKEN是什么jwt的使用场景jwt的组成headerpayloadsignature 下载依赖包编写 jwt 工具包jwt中间件编写如何获取token 编写获取token的Apimodels逻辑编写路由逻辑编写修改路由逻辑 验证token将中间件接入Gin功能验证模块 续接…