一、多峰优化问题概述
        多峰函数优化问题在实际应用中大量存在,多峰函数是指有多个极值点的函数,这些极值点可能相同,也可能不同。
二、蚁群问题解决函数多峰寻优问题思想
        以一维函数y=f(x)的极小值寻优为例,对函数多峰值寻优进行研究。若为函数极大值寻优,可以将问题转化成y=-f(x)的极小值寻优,所求的极大值为y=-f(x)的极小值的相反数。
蚁群算法基本思想如下:
        为方便起见,不妨设函数y=f(x)的定义域为[a,b]。首先将[a,b]划分成若干个长度相等的小区间,这些小区间记为{I1,I2…In},区间Ii的中点记为x。设与区间Ii相邻的区间为I(i+1)(或者I(i-1)),假设Ii和I(i+1)之间有一条虚拟的边e(Ii,I(i+1)),该边的权重(虚拟距离)和f(xi)-f(x(i+1))的大小有关,f(xi)-f(x(i+1))越大,蚂蚁从区间Ii转移到区间I(i+1)的可能性就越大。蚂蚁从区间Ii转移到区间l(i+1)后,要留下信息素,所留信息素的大小是一个与f(xi)-f(x(i+1))有关的量,区间I(i+1)的信息素越多,就越吸引相邻区间蚂蚁向其转移。
        蚂蚁经过许多次转移之后,有的区间含有许多蚂蚁,而有的区间则不含蚂蚁。那些含有蚂蚁的区间正是包含极值点的区间,不含蚂蚁的区间,不大可能包含极值点。取出包含蚂蚁的区间,并将它们重新细化,重复上述搜索过程,直到细化后的区间足够小。最后,蚂蚁都停留在了极值点附近,蚂蚁所在的区间的中点位置正是极值点的位置。
三、具体实现步骤
1.蚁群初始分布
        首先将问题的定义域[a,b]进行n等分,等分后的各区间长度为β=(b-a)/n各区间记为{I1,I2,…In},其中Ii(i=1…n)表示第i个区间,则
                                         11=[a+(i-1)β,a+iβ]
式中a+(i-1)β、a+iβ分别为区间Ii的左、右端点。区间I1的中点位置记为xi,则
                                                 xi=a+(i-1/2)β
        初始时刻,在每个区间的中点位置放置一只蚂蚁,记这n只蚂蚁为a1,a2…an,,蚂蚁a1位于区间I1的中点位置x1。每一个位置xi对应一个函数值f(xi)。ti(t)表示t时刻子区间Ii上的信息量,在初始时刻各子区间的信息量相等,设ti(0)=const(const为正常数)。初始化各子区间的信息素增量△ti=0,(i=1…n)。

2.蚁群转移规则
         不妨用neighbor(Ii)表示与区间Ii邻近的区间集合,则对于一维函数

位于区间Ii的蚂蚁向其邻近区间Ij进行转移,假设Ii和Ij之间有一条虚拟的边e(li,Ij),该边的权重为|f(xi)-f(xj)|,则启发函数nij=|f(xi)-f(xj)|
设蚂蚁ak当前处于区间Ii,若f(xi)-f(xj)>0,蚂蚁ak就可以转移到其邻近区间Ij;否则,蚂蚁不向其转移。设用allowedk:表示蚂蚁ak(k=1…n)下一步可以转移的子区间的集合。
        用pij(t)表示第t次循环蚂蚁ak从子区间I1转移到子区间Ij的概率,模仿基本蚁群算法,定义蚂蚁ak的转移概率如下:
式中,a为信息启发式因子,β为期望启发式因子。tj为子区间Ij的信息量,如果蚂蚁ak依概率从子区间Ii转移到了子区间Ij,那么蚂蚁ak当前所在的子区间就为Ij。

3.信息素更新
         如果蚂蚁ak依概率从子区间Ii转移到了子区间Ij,那么蚂蚁ak就会在区间Ij留下信息素,所留信息素的量用△tjf(t)表示,则

式中,C1是一个正常数。f(xi)-f(xj)越大,蚂蚁ak留下的信息素就越多,就越吸引其他蚂蚁向区间Ij转移。
        所有转移到区间Ij的蚂蚁都要留下相应的信息素,假设在第t次循环,有q只蚂蚁转移到了区Ij,记这q只蚂蚁为aj1,aj2.,ajq,,它们留在区间Ij的信息素总和为△tj(t),则

式中,p为信息素挥发系数,因此1-p是信息素残留因子。
4.缩小蚁群搜索空间
        函数值较小的区间含有的信息素会较多,更容易吸引蚂蚁向其转移。经过一些循环,当所有蚂蚁都停止转移的时候,蚁群分布就会出现这样的特点:所有蚂蚁都分布在极值点较小的区间,而其他区间则没有蚂蚁,即含有蚂蚁的区间包含极小值点。取出这些包含蚂蚁的区间,并将这些区间重新细化,在下一次循环时,让蚁群在这些区间重新搜索极小值点。如此循环下去,蚁群的搜索范围就会越来越小,当细化后的区间足够小的时候,所有蚂蚁就会停留在极值点附近,蚂蚁所停留的区间的中点位置就是极值点的位置。
四、算法实现
Step1(初始化)将问题的定义域[a,b]进行n等分,设等分后的各区间的长度为β,停止门限为e。在每个区间的中部放置一只蚂蚁,初始化各区间的初始信息量ti(0),信息素增量△ti=0。
Step2 While(β>e)
{
Step2.1:所有蚂蚁根据式(3-1)进行邻近区间转移。
Step2.2:根据式(3-2)、(3-3)、(3-4)进行信息素更新。
Step2.3:当所有蚂蚁都不再进行邻近区间转移时,更新蚁群的搜索范围,即只将蚁群最终聚集的区间进行细化(设细化后的区间个数为nl)。计算细化后的区间长度,并将其赋值给β。
}

***Step3***结果输出。蚂蚁最终聚集的子区间就是含极值点的子区间,该子区间中间位置即为极值点位置。
值得注意的是,如果x是多维变量,将向量的每一维变量看作一个区间,进行等分。这些各自等分的区间结合起来就构成了一些小空间,在这些等分空间的中间位置各放置一只蚂蚁,重复上述搜索过程进行搜索,这个多维空间的所有极值点就会被找到。
五、实例
(ps:matlab代码不是很熟悉就直接用了大佬的代码
源代码链接:https://blog.csdn.net/weixin_43267645/article/details/103763344)

function value = fun_value(point) %求函数值的函数value=(point(1)+2*point(2)-7)^2+(2*point(1)+point(2)-5)^2;
endfunction main
count1=1;
D=zeros(3,length(-200:10)^2);%第一行为函数值,第二三行为坐标
n=length(-200:10);
t=length(-200:10)^2;
for x=-10:200for y=-200:10D(1,count1)=fun_value([x,y])+4;D(2,count1)=x;D(3,count1)=y;count1=count1+1;end
endm = 100;                              % 蚂蚁数量
alpha = 1.5;                           % 信息素重要程度因子
beta = 0.8;                            % 启发函数重要程度因子
rho = 0.1;                           % 信息素挥发因子
Q = 140;                               % 信息素释放增强系数
Eta = 1./D(1,:);                          % 启发函数
Tau = ones(1,t);                     % 信息素矩阵
Table = zeros(1,m);                  % 函数值记录表,每一行代表一个蚂蚁走过的路径
iter = 1;                            % 迭代次数初值
iter_max = 20;           % 最大迭代次数
target_index1=zeros(1,m);     %存放每个蚂蚁到达的点的坐标
Length_best = zeros(iter_max,1);     % 各代最小函数值
Length_ave = zeros(iter_max,1);      % 各代平均函数值 % V. 迭代寻找最佳路径
while iter <= iter_maxfor i=1:m  % 逐个蚂蚁路径选择P=zeros(1,t);for k=1:t % 逐个点选择P(k) = Tau(k)^alpha* Eta(k)^beta;endp= P/sum(P);% 计算选取某一个点概率Pc = cumsum(p);     target_index = find(Pc>= rand); %轮盘赌法target = D(1,target_index(1)); target_index1(i)=target_index(1);Table(i)=target;           end                                                                    Length_best(iter)=target  % 更新信息素Delta_Tau = zeros(1,t);% 逐个蚂蚁计算for i = 1:m   Delta_Tau(target_index1(i)) = Delta_Tau(target_index1(i)) + Q/Table(i);endTau = (1-rho) * Tau + Delta_Tau;Table=zeros(1,m);iter=iter+1
end
c=1:iter_max;Length_best(end)plot(c,Length_best,'-')end

运行效果:


蚁群算法解决多峰函数优化问题相关推荐

  1. 集货运输优化:数学建模步骤,Python实现蚁群算法(解决最短路径问题), 蚁群算法解决旅行商问题(最优路径问题),节约里程算法

    目录 数学建模步骤 Python实现蚁群算法(解决最短路径问题) 蚁群算法解决旅行商问题(最优路径问题) 节约里程算法

  2. 基于蚁群算法解决多模式资源约束项目调度问题(附源代码)

    基于蚁群算法解决多模式资源约束项目调度问题 最近选修了张超勇教授的项目管理学,最后这门课留下了一门大作业,这里我选做是资源约束下的项目调度问题,通过使用元启发式的蚁群算法求解了这个问题,由于时间比较仓 ...

  3. 蚁群算法解决旅行商问题Python

    蚁群算法解决旅行商问题 什么是旅行商问题 蚁群算法概述 代码实现 蚁群算法学习视频 YouTube:[数之道 04]解决最优路径问题的妙招-蚁群ACO算法 什么是旅行商问题   旅行商问题(英语:Tr ...

  4. 蚁群算法解决tsp问题c语言,蚁群算法解决TSP问题程序.doc

    蚁群算法解决TSP问题程序 蚁群算法用于求解TSP问题,经过仿真测试,发现此程序的优化效率和鲁棒性都非常好. 这与在无线多媒体传感器网络路由算法应用到的寻找最佳路径的蚁群算法非常相似. functio ...

  5. 蚁群算法解决tsp问题python_蚁群算法在解决TSP问题中的应用

    陈灵佳 文章首先对蚁群算法与TSP问题进行简要介绍,在此基础上对蚁群算法在解决TSP问题中的应用进行论述.期望通过本文的研究能够对TSP问题的解决有所帮助. [关键词]蚁群算法 TSP问题 最优解 1 ...

  6. 蚁群算法解决 TSP 问题

    蚁群算法解决 TSP 问题 数据集 Tools.py Ant.py ACO_G.py 运行效果 数据集 json 形式(c.json)的中国各省市经纬度数据集,一共 2241 个市的数据,为后来的 T ...

  7. C++模拟蚁群算法解决作业车间调度问题(Job-Shop Scheduling Problem,JSP)

    一.作业车间调度问题描述 作业车间调度问题(Job Shop Scheduling, JSP)是最经典的几个NP-hard问题之一.其应用领域极其广泛,涉及航母调度,机场飞机调度,港口码头货船调度,汽 ...

  8. 2018-4-8蚁群算法---包子阳《智能优化算法以及Matlab实现》第五章

    资料来源: <智能优化算法以及matlab实现>包子阳  余继周 编著 第五章-----蚁群算法 是一种元启发式优化算法(自己理解:就是作为群体的单位个体也就是元,在里面充当着随机的选择搜 ...

  9. 机器学习(MACHINE LEARNING)MATLAB蚁群算法解决TSP问题

    文章目录 1 蚁群算法 2 蚁群算法与TSP问题的关系 3 代码实现 1 蚁群算法 基本原理: (1)蚂蚁在携带等量的信息素一路释放 (2)信息素浓度会和路径的长度成反比 (3)下次蚂蚁来到该路口会选 ...

最新文章

  1. python与tableau结合_Python与Tableau相结合,万字长文搞定传统线下连锁店数据分析...
  2. linux swftools java_linux安装openoffice与SWFtools工具
  3. Oracle中的in 和 not in
  4. 基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则
  5. 指针与零的比较以及浮点型与零的比较
  6. 你的项目是否真的需要 DevOps?
  7. Qt工作笔记-使用QRegExp实现QString的split【读取文件时候,过滤各种字符】
  8. 移动硬盘备份linux系统盘,将Ubuntu Linux系统放到你的移动硬盘
  9. Windows 7环境下网站性能测试小工具 Apache Bench 和 Webbench使用和下载
  10. 这4点教你找到小程序专业开发公司
  11. spring集成mybatis后怎么在控制台打印sql语句
  12. 从0开始学习 GitHub 系列之「08.如何发现优秀的开源项目」
  13. 什么时候用DFS,什么时候用BFS?(DFS和BFS的特点和异同)
  14. Spring事务原理分析(二)--@Transactional事务属性的解析
  15. layabox2.0 开发微信小游戏经验分享
  16. Cell:清华程功组揭示皮肤菌群的一种气味挥发物促进黄病毒感染宿主吸引蚊虫...
  17. 新浪股权分散是把双刃剑
  18. 【读书笔记】《乔布斯的魔力演讲》卡迈恩•加洛
  19. 用Python计算北京地铁的两站间最短换乘路线
  20. 1300款主流单机游戏下载 大型PC电脑游戏使命14尼尔5模拟合集

热门文章

  1. 在美国学CS能挣多少钱?美国IT公司标准 offer package详细数字及绿卡政策 | 美国留学申请与就业找工作咨询博客|Warald|一亩三分地论坛...
  2. parseInt转换
  3. 读--《谁动了我的奶酪》
  4. Fabric 超级账本学习【1】Fabcar网络调用Fabric-Java-SDK进行简单开发 FabCar
  5. jpg格式图片压缩怎么弄?怎么把jpg图片压缩小?
  6. Oralce存储过程
  7. Python绘制简单的曲线图·
  8. android表格可以编辑,手机wps中如何编辑表格
  9. 最新CentOS7.5部署L版ceph 20190610及额外手册告警升级多活等
  10. 如何利用python进行一次移动平均预测