尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

蚁群算法(ACO)

发布时间:2026/9/6 2:20:47

资讯中心
01
ARTICLE

蚁群算法(ACO)

蚁群算法(ACO)
一、核心逻辑与本质蚁群算法ACO是一种模拟自然界蚂蚁觅食行为的启发式群体智能优化算法。本质它不依赖于目标函数的梯度或导数而是通过模拟蚂蚁群体的“正反馈机制”与“间接通信”让群体在解空间中自发寻找最优解。适用场景特别适合解决离散型组合优化问题最经典的应用是旅行商问题TSP、车辆路径规划、网络路由等。二、输入与输出输入Input图结构/距离矩阵描述节点之间拓扑关系的距离矩阵如城市之间的坐标或距离。算法控制参数蚂蚁数量、信息素重要程度 \alpha、启发式信息重要程度、挥发系数、最大迭代次数等。输出Output最优路径序列例如 TSP 问题中遍历所有节点的最短路线顺序。最优目标值该最优路径的总长度或总成本。三、核心数学公式与底层原理ACO 的核心逻辑是“概率决定走向好路越走越宽”。其数学模型主要由两个核心公式构成1. 状态转移概率公式决定蚂蚁下一步往哪走参数深度拆解信息素节点 i 到 j 这条路上的“历史口碑”。走过的好蚂蚁越多这个值越大。启发式信息节点 i 到 j 的“眼前诱惑”。通常定义为距离的倒数距离越近诱惑越大。允许节点集合蚂蚁 k 当前还未访问允许选择的节点集合。和控制信息素和启发式信息相对重要程度的参数。越大越倾向于历史信息\beta 越大越倾向于当前距离较近的节点。2. 信息素更新规则以经典蚁群系统为例挥发机制是挥发系数。时间一长信息素会自然消散。这相当于“遗忘机制”防止算法过度依赖历史信息降低陷入局部最优的风险。增强机制所有蚂蚁走过的路径都会留下新的信息素。走过的路越短留下的就越多。通常其中Q 是信息素强度常数是蚂蚁 k 的路径总长度。四、完整的工程实现流程ACO 的实现是一个不断迭代、优胜劣汰的闭环初始化读取距离矩阵计算启发式信息矩阵通常为。初始化信息素矩阵 \tau通常设为一个较小的均匀常数并设置、、等参数。构造解蚂蚁寻路每只蚂蚁随机选择一个起点。根据状态转移概率公式计算走向下一个未访问节点的概率通过轮盘赌或随机数决定下一步去哪。重复直到蚂蚁走完所有节点形成一条完整路径并记录路径总长度。信息素更新口碑重塑挥发将所有路径上的信息素乘以让旧信息衰减。增强遍历每只蚂蚁根据它的路径长度在它走过的路径上增加信息素。路越短加得越多。记录与终止判断记录当前迭代中的最短路径全局最优。判断是否达到最大迭代次数如果是输出最优路径如果不是清空蚂蚁的记忆禁忌表返回步骤 2。五、核心代码实现Python NumPy以下代码以求解 10 个城市的旅行商问题TSP为例完整展示了上述流程import numpy as np ​ # 1. 定义问题与参数 NUM_CITIES 10 cities np.random.rand(NUM_CITIES, 2) * 100 # 随机生成10个城市坐标 ​ # 计算距离矩阵与启发式信息矩阵(1/d) dist_matrix np.zeros((NUM_CITIES, NUM_CITIES)) for i in range(NUM_CITIES): for j in range(NUM_CITIES): dist_matrix[i, j] np.linalg.norm(cities[i] - cities[j]) ​ eta 1.0 / (dist_matrix 1e-10) ​ NUM_ANTS, ALPHA, BETA, RHO, Q, ITERATIONS 20, 1.0, 2.0, 0.5, 100, 50 tau np.ones((NUM_CITIES, NUM_CITIES)) * 0.1 # 初始化信息素 ​ best_path, best_length None, float(inf) ​ # 2. ACO 主循环 for iteration in range(ITERATIONS): all_paths, all_lengths [], [] ​ # (1) 构造解每只蚂蚁独立寻路 for ant in range(NUM_ANTS): path, current_city [], np.random.randint(0, NUM_CITIES) path.append(current_city) ​ for step in range(NUM_CITIES - 1): # 获取未访问城市禁忌表机制 unvisited_mask np.ones(NUM_CITIES, dtypebool) unvisited_mask[np.array(path)] False ​ # 计算状态转移概率 probs ( (tau[current_city, unvisited_mask] ** ALPHA) * (eta[current_city, unvisited_mask] ** BETA) ) probs / np.sum(probs) ​ next_city_idx np.random.choice( np.where(unvisited_mask)[0], pprobs ) ​ path.append(next_city_idx) current_city next_city_idx ​ # 计算路径总长度 length sum( dist_matrix[path[i], path[i 1]] for i in range(len(path) - 1) ) length dist_matrix[path[-1], path[0]] ​ all_paths.append(path) all_lengths.append(length) ​ if length best_length: best_length, best_path length, path.copy() ​ # (2) 信息素更新挥发 增强 tau * (1 - RHO) # 挥发 ​ for i, path in enumerate(all_paths): delta_tau Q / all_lengths[i] # 路越短留下的信息素越多 ​ for step in range(len(path) - 1): city_from, city_to path[step], path[step 1] ​ tau[city_from, city_to] delta_tau tau[city_to, city_from] delta_tau ​ tau[path[-1], path[0]] delta_tau tau[path[0], path[-1]] delta_tau ​ print( fIteration {iteration 1}: fBest Length {best_length:.2f} ) ​ print(\nOptimal Path:, best_path) print(Optimal Length:, best_length) ​
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。