数学建模蚁群算法

蚁群算法(ACA)

蚁群算法概述

模拟蚂蚁觅食行为设计的算法。讲蚂蚁群觅食的特点抽象出来转化成数学描述。

蚁群算法(Ant Colony Algorithm, ACA)由Marco Dorigo于1992年在他的博士论文中首次提出。

• 蚂蚁在寻找食物源时,会在其经过的路径上释放一种信息素,并能够感知其它蚂蚁释放的信息素。信息素浓度的大小表征路径的远近,信息素浓度越高,表示对应的路径距离越短。

• 通常,蚂蚁会以较大的概率优先选择信息素浓度较高的路径,并释放 一定量的信息素,以增强该条路径上的信息素浓度,这样,会形成一个正反馈。最终,蚂蚁能够找到一条从巢穴到食物源的最佳路径,即距离 最短。

• 生物学家同时发现,路径上的信息素浓度会随着时间的推进而逐渐衰减。

• 将蚁群算法应用于解决优化问题,其基本思路为:**用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。**路径较短的蚂蚁释放的信息素量较多,随着时间的推进,较短 的路径上累积的信息素浓度逐渐增高,选择该路径的蚂蚁个数也愈来愈多。最终,整个蚂蚁会在正反馈的作用下集中到最佳的路径上,此时对应的便是待优化问题的最优解。

类比GA(遗传算法)的交叉、选择、变异,PSO(粒子群算法)的个体、群体极值优化,蚁群算法也有自己的优化策略:正反馈的信息机制、信息素浓度的更新、蚂蚁对能够访问的路径的筛选。

ACA算法的数学原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqWDF5t3-1672982283895)(C:\Users\华为\AppData\Roaming\Typora\typora-user-images\image-20220423214229354.png)]

关于蚁群算法中释放信息素的特点,定义了三种模型:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hAJdu6KP-1672982283896)(C:\Users\华为\AppData\Roaming\Typora\typora-user-images\image-20220423214305963.png)]

第一种模型假设信息素总量一定。信息素浓度和经过路径的长度成反比。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wiMcqUjm-1672982283897)(C:\Users\华为\AppData\Roaming\Typora\typora-user-images\image-20220423214323510.png)]

第二种模型中不使用经过的总路径,而仅仅使用相邻城市的路径长度。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWVw40U3-1672982283897)(C:\Users\华为\AppData\Roaming\Typora\typora-user-images\image-20220423214345165.png)]

第三种模型更简单,不管距离长短,释放的信息素都一样。

本文下面设计的MATLAB程序,以第一种模型为例。

蚁群算法步骤

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Ntwk0Bb-1672982283897)(C:\Users\华为\AppData\Roaming\Typora\typora-user-images\image-20220423214454804.png)]

ACA算法特点

• 采用正反馈机制,使得搜索过程不断收敛,最终逼近于最优解;

• 每个个体可以通过释放信息素来改变周围的环境,且每个个体能够感知周围环境的实时变化,个体间通过环境(信息素)进行间接地通讯。对比之下,粒子群优化算法中采用局部最优解、全局最优解的广播来实现通讯。

• 搜索过程采用分布式计算方式,多个个体同时进行并行计算,大大提高了算法的计算能力和运行效率;

• 启发式的率搜索方式,不容易陷入局部最优,易于寻找到全局最优解。

ACA中也采用轮盘赌法,和遗传算法中的启发方法一样,即选择最大的概率那个选项继续前进。

补充:启发式算法

现代启发式算法在优化机制方面存在一定的差异,但在优化流程上却具有较大的相似性,均是一种“邻域搜索”结构。算法都是从一个(一组)初始解出发,在算法的关键参数的控制下通过邻域函数产生若干邻域解,按接受准则(确定性、概率性或混沌方式)更新当前状态,而后按关键参数修改准则调整关键参数。如此重复上述搜索步骤直到满足算法的收敛准则,最终得到问题的优化结果。神经网络、禁忌搜索、模拟退火、和ACA,他们都是启发式的搜索方法,共同的基本要素:(1)随机初始可行解;(2)给定一个评价函数(常常与目标函数值有关);(3)邻域,产生新的可行解;(4)选择和接受解得准则;(5)终止准则。

没有启发的算法就是随机搜索的算法,例如遗传算法。后面的博文中会针对这个问题细讲。

旅行商问题(TSP)

• Traveling Salesman Problem, TSP 是一个非常经典的问题

• 在N个城市中各经历一次后再回到出发点,使所经过的路程最短。

• 若不考虑方向性和周期性,在给定N的条件下,可能存在的闭合路径可达到1/2*N!数量级。当N较大时,枚举法的计算量之大难以想象。

• TSP问题经常被视为验证优化算法性能的一个“金标准”。

ACA的matlab实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OK6ZzSA9-1672982283898)(C:\Users\华为\AppData\Roaming\Typora\typora-user-images\image-20220423214835185.png)]

%% I. 清空环境变量
clear all
clc
 
%% II. 导入数据
load citys_data.mat
 
%% III. 计算城市间相互距离
n = size(citys,1);
D = zeros(n,n);
for i = 1:n
    for j = 1:n
        if i ~= j
            D(i,j) = sqrt(sum((citys(i,:) - citys(j,:)).^2));
        else
            D(i,j) = 1e-4;  %如果是0会导致矩阵对角线都是0 导致启发函数无穷大 因此取个很小的值    
        end
    end    
end
 
%% IV. 初始化参数
m = 50;                              % 蚂蚁数量
alpha = 1;                           % 信息素重要程度因子
beta = 5;                            % 启发函数重要程度因子
rho = 0.1;                           % 信息素挥发因子
Q = 1;                               % 常系数
Eta = 1./D;                          % 启发函数
Tau = ones(n,n);                     % 信息素矩阵
Table = zeros(m,n);                  % 路径记录表,每一行代表一个蚂蚁走过的路径
iter = 1;                            % 迭代次数初值
iter_max = 200;                      % 最大迭代次数 
Route_best = zeros(iter_max,n);      % 各代最佳路径       
Length_best = zeros(iter_max,1);     % 各代最佳路径的长度  
Length_ave = zeros(iter_max,1);      % 各代路径的平均长度  
 
%% V. 迭代寻找最佳路径
while iter <= iter_max
     % 随机产生各个蚂蚁的起点城市
      start = zeros(m,1);
      for i = 1:m
          temp = randperm(n);
          start(i) = temp(1);
      end
      Table(:,1) = start; 
      citys_index = 1:n;
      % 逐个蚂蚁路径选择
      for i = 1:m
          % 逐个城市路径选择
         for j = 2:n
             tabu = Table(i,1:(j - 1));           % 已访问的城市集合(禁忌表)
             allow_index = ~ismember(citys_index,tabu);
             allow = citys_index(allow_index);  % 待访问的城市集合
             P = allow;
             % 计算城市间转移概率
             for k = 1:length(allow)
                 P(k) = Tau(tabu(end),allow(k))^alpha * Eta(tabu(end),allow(k))^beta;
             end
             P = P/sum(P);
             % 轮盘赌法选择下一个访问城市
             Pc = cumsum(P);     
            target_index = find(Pc >= rand); 
            target = allow(target_index(1));
            Table(i,j) = target;
         end
      end
      % 计算各个蚂蚁的路径距离
      Length = zeros(m,1);
      for i = 1:m
          Route = Table(i,:);
          for j = 1:(n - 1)
              Length(i) = Length(i) + D(Route(j),Route(j + 1));
          end
          Length(i) = Length(i) + D(Route(n),Route(1));
      end
      % 计算最短路径距离及平均距离
      if iter == 1
          [min_Length,min_index] = min(Length);
          Length_best(iter) = min_Length;  
          Length_ave(iter) = mean(Length);
          Route_best(iter,:) = Table(min_index,:);
      else
          [min_Length,min_index] = min(Length);
          Length_best(iter) = min(Length_best(iter - 1),min_Length);
          Length_ave(iter) = mean(Length);
          if Length_best(iter) == min_Length
              Route_best(iter,:) = Table(min_index,:);
          else
              Route_best(iter,:) = Route_best((iter-1),:);
          end
      end
      % 更新信息素
      Delta_Tau = zeros(n,n);
      % 逐个蚂蚁计算
      for i = 1:m
          % 逐个城市计算
          for j = 1:(n - 1)
              Delta_Tau(Table(i,j),Table(i,j+1)) = Delta_Tau(Table(i,j),Table(i,j+1)) + Q/Length(i);
          end
          Delta_Tau(Table(i,n),Table(i,1)) = Delta_Tau(Table(i,n),Table(i,1)) + Q/Length(i);
      end
      Tau = (1-rho) * Tau + Delta_Tau;
    % 迭代次数加1,清空路径记录表
    iter = iter + 1;
    Table = zeros(m,n);
end
 
%% VI. 结果显示
[Shortest_Length,index] = min(Length_best);
Shortest_Route = Route_best(index,:);
disp(['最短距离:' num2str(Shortest_Length)]);
disp(['最短路径:' num2str([Shortest_Route Shortest_Route(1)])]);
 
%% VII. 绘图
figure(1)
plot([citys(Shortest_Route,1);citys(Shortest_Route(1),1)],...
     [citys(Shortest_Route,2);citys(Shortest_Route(1),2)],'o-');
grid on
for i = 1:size(citys,1)
    text(citys(i,1),citys(i,2),['   ' num2str(i)]);
end
text(citys(Shortest_Route(1),1),citys(Shortest_Route(1),2),'       起点');
text(citys(Shortest_Route(end),1),citys(Shortest_Route(end),2),'       终点');
xlabel('城市位置横坐标')
ylabel('城市位置纵坐标')
title(['蚁群算法优化路径(最短距离:' num2str(Shortest_Length) ')'])
figure(2)
plot(1:iter_max,Length_best,'b',1:iter_max,Length_ave,'r:')
legend('最短距离','平均距离')
xlabel('迭代次数')
ylabel('距离')
title('各代最短距离与平均距离对比')

)
title([‘蚁群算法优化路径(最短距离:’ num2str(Shortest_Length) ‘)’])
figure(2)
plot(1:iter_max,Length_best,‘b’,1:iter_max,Length_ave,‘r:’)
legend(‘最短距离’,‘平均距离’)
xlabel(‘迭代次数’)
ylabel(‘距离’)
title(‘各代最短距离与平均距离对比’)


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
标题——作者——出处 基于群优化算法递归神经网络的短期负荷预测 算法的小改进 基于算法的无人机任务规划 多态算法 MCM基板互连测试的单探针路径优化研究 改进的增强型算法 基于云型理论的算法改进研究 基于禁忌搜索与群最优结合算法的配电网规划 自适应算法在序列比对中的应用 基于算法的QoS多播路由优化算法 多目标优化问题的算法研究 多线程算法及其在最短路问题上的应用研究 改进的算法在2D HP型中的应用 制造系统通用作业计划与算法优化 基于混合行为算法的研究 火力优化分配问题的小生境遗传蚂算法 基于算法的对等网拟器的设计与实现 基于粗粒度型的群优化并行算法 动态跃迁转移算法 基于人工免疫算法算法求解旅行商问题 基于信息素异步更新的算法 用于连续函数优化的算法 求解复杂多阶段决策问题的动态窗口群优化算法 算法在铸造生产配料优化中的应用 多阶段输电网络最优规划的并行算法 求解旅行商问题的混合粒子群优化算法 微粒群优化算法研究现状及其进展 随机摄动算法的收敛性及其数值特性分析 广义群与粒子群结合算法在电力系统经济负荷分配中的应用 改进的算法及其在TSP中的应用研究 算法的全局收敛性研究及改进 房地产开发项目投资组合优化的改进算法 一种改进的算法用于灰色约束非线性规划问题求解 一种自适应算法及其仿真研究 一种动态自适应算法群落优化算法在蛋白质折叠二维亲-疏水格点型中的应用 用改进算法求解函数优化问题 连续优化问题的算法研究进展 算法概述 Ant colony system algorithm for the optimization of beer fermentation control 算法在K—TSP问题中的应用 Parallel ant colony algorithm and its application in the capacitated lot sizing problem for an agile supply chain 基于遗传算法的机器人全局路径规划研究 改进的算法在矿山物流配送路径优化中的研究 基于算法的配电网络综合优化方法 基于算法的分类规则挖掘算法 算法在连续性空间优化问题中的应用 算法在矿井通风系统优化设计中的应用 基于算法的液压土锚钻机动力头优化设计 改进算法设计拉式膜片弹簧 计算机科学技术 基本算法及其改进 TSP改进算法及在PCB数控加工刀具轨迹中的应用 可靠性优化的算法 对一类带聚类特征TSP问题的算法求解 算法理论及应用研究的进展 基于二进制编码的群优化算法及其收敛性分析 算法的理论及其应用 基于群行为仿真的影像纹理分类 启发式算法及其在高填石路堤稳定性分析中的应用 算法的研究现状 一种快速全局优化的改进算法及仿真 聚类问题的算法 群最优化——型、算法及应用综述 基于信息熵的改进算法及其应用 机载公共设备综合管理系统任务分配算法研究 基于改进算法的飞机低空突防航路规划 利用信息量留存的群遗传算法 An Improved Heuristic Ant-Clustering Algorithm 改进型算法在内燃机径向滑动轴承优化设计中的应用 基于算法的PID参数优化 基于算法的复杂系统多故障状态的决策 算法在数据挖掘中的应用研究 基于算法的基因联接学习遗传算法 基于细粒度型的并行群优化算法 Binary-Coding-Based Ant Colony Optimization and Its Convergence 运载火箭控制系统漏电故障诊断研究 混沌扰动启发式算法及其在边坡非圆弧临界滑动面搜索中的应用 算法原理的仿真研究 Hopfield neural network based on ant system 算法及其实现方法研究 分层实体制造激光头切割路径的与优化 配送网络规划算法 基于算法的城域交通控制实时滚动优化 基于算法的复合形法及其在边坡稳定分析中的应用 Ant Colony Algorithm for Solving QoS Routing Problem 多产品间歇过程调度问题的与优化 基于算法的两地之间的最佳路径选择 算法求解问题时易产生的误区及对策 用双向收敛算法解作业车间调度问题 物流配送路径安排问题的混合算法 求解TSP问题的式学习并行算法 基于算法的三维空间机器人路径规划 群优化算法及其应用 算法不确定性分析 一种求解TSP问题的相遇算法 基于群优化算法的彩色图像颜色聚类的研究 钣金件数控激光切割割嘴路径的优化 基于算法的图像分割方法 一种基于算法的聚类组合方法 圆排列问题的拟退火算法 智能混合优化策略及其在流水作业调度中的应用 算法在QoS网络路由中的应用 一种改进的自适应路由算法 基于算法的煤炭运输优化方法 基于群智能和支持向量机的人脸性别分类方法 算法在啤酒发酵控制优化中的应用 一种基于时延信息的多QoS快速自适应路由算法 算法中参数α、β、ρ设置的研究——以TSP问题为例 基于人工群优化的矢量量化码书设计算法 具有自适应杂交特征的算法 算法在原料矿粉混匀优化中的应用 基于多Agent的算法在车间动态调度中的应用研究 用群优化算法求解中国旅行商问题 算法在婴儿营养米粉配方中的应用 算法在机械优化设计中的应用 群优化算法的研究现状及研究展望 群优化算法及其应用研究进展 算法的理论与应用 简单算法的仿真分析 一种改进的算法求解最短路径问题 基于式求解旅行商问题的算法 一种求解TSP的混合型算法 基于MATLAB的改进型基本算法 动态算法求解TSP问题 用算法求解类TSP问题的研究 算法求解连续空间优化问题的一种方法 用混合型蚂算法求解TSP问题 求解复杂TSP问题的随机扰动算法 基于算法的中国旅行商问题满意解 算法的研究现状和应用及蚂智能体的硬件实现 算法概述 算法的研究现状及其展望 基于算法的配电网网架优化规划方法 用于一般函数优化的算法 协同型与遗传算法的集成 基于群最优的输电网络扩展规划 自适应算法 凸整数规划问题的混合算法 一种新的进化算法—蛟群算法 基于协同工作方式的一种群布线系统
数学大赛是一个涉及数学、计算机科学和工程等多学科的比赛,要求参赛者能够运用各种算法型解决实际问题。在这样的比赛中,优秀的算法是非常重要的。引用提到了一个关于基数排序的资源,虽然基数排序是一种常用的排序算法,但在数学大赛中,可能会使用到更为复杂的算法型。 在数学大赛中,一些常见的优秀算法包括但不限于:线性规划、整数规划、图论算法(如最短路径算法、最小生成树算法)、动态规划、拟退火算法、遗传算法算法等。这些算法可以用于解决不同类型的问题,如优化问题、网络问题、路径规划等。 对于数学大赛,除了算法的选择,还需要注意问题的和求解过程。一个好的方法可以将实际问题转化为数学型,并采用合适的算法进行求解。因此,在参加数学大赛时,除了熟悉各种优秀算法外,还需要具备良好的问题分析和能力。 总结来说,在数学大赛中,优秀的算法是非常重要的。除了基数排序外,还需要掌握其他常见的优秀算法,如线性规划、整数规划、图论算法、动态规划、拟退火算法、遗传算法算法等,并且要善于运用这些算法解决实际问题。此外,问题的和求解过程也是非常关键的。希望这些信息能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战士小小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值