资源简介
基于matlab程序语言的蚁群算法求解函数最优值,供广大科研工作者和程序爱好者学习使用参考!

代码片段和文件信息
function [maxValuemaxXMVMX]=ant_funname_max(funnameXYAntTimesRouP0)
% 利用蚁群算法求函数的极值
% input funname:优化函数的函数句柄
% XY:搜索范围即[x1x2y1y2z1z2]
% Ant:蚂蚁数量
% Times:蚂蚁移动次数
% Rou:信息素挥发系数
% P0:转移概率
% output maxValue:函数极大值
% maxX:函数极大值对应的自变量取值
% MV:每一代函数的极大值
% MX:每一代函数极大值对应的自变量取值
% example:
% funname=@CNOT_search;
% XY=[1.8782.8781.8782.8780.010.0650.010.065]; %自变量取值范围
% Ant=300; % 蚂蚁数量
% Times=80; % 蚂蚁移动次数
% Rou=0.9; % 信息素挥发系数
% P0=0.2; % 转移概率常数
% [maxValuemaxXMVMX]=ant_funname_max(funnameXYAntTimesRouP0);
% 随机设置蚂蚁的初始位置
Lower=XY(1:2:end-1);
Upper=XY(2:2:end);
UL=Upper-Lower;
X=repmat(LowerAnt1)+repmat(ULAnt1).*rand(Antlength(Lower));
Tau=search_value(Xfunname);
% 初始蚂蚁位置的分布图(仅限自变量为一维和二维的)
if abs(length(Lower)-2)<1e-4
figure;
[xy]=meshgrid(linspace(Lower(1)Upper(1)100)linspace(Lower(2)Upper(2)100));
for m=1:size(x1)
for n=1:size(x2)
z(mn)=search_value([x(mn)y(mn)]funname);
end
end
subplot(121);
mesh(xyz);
hold on;
plot3(X(:1)X(:2)Tau‘k*‘);
hold on
title(‘蚂蚁的初始分布位置‘);
xlabel(‘x‘);
ylabel(‘y‘);
zlabel(‘z‘);
xlim([XY(1)XY(2)]);
ylim([XY(3)XY(4)]);
elseif abs(length(Lower)-1)<1e-4
x=linspace(Lower(1)Upper(1)100);
for m=1:length(x)
y(m)=search_value(x(m)funname);
end
subplot(121);
plot(xy);
hold on;
plot(XTau‘k*‘);
hold on
title(‘蚂蚁的初始分布位置‘);
xlabel(‘x‘);
ylabel(‘y‘);
xlim([XY(1)XY(2)]);
end
% 存储每一代的最佳值
MX=zeros(Timeslength(Lower));
MV=zeros(Times1);
% 迭代寻找最佳值
for T=1:Times
lamda=1/T;
[Tau_Best(T)BestIndex]=max(Tau);
%计算状态转移概率
P(:T)=(Tau(BestIndex)-Tau)/Tau(BestIndex);
for i=1:Ant
if P(iT) %局部搜索
temp=X(i:)+(2*rand(1length(Lower))-1)*lamda;
else
%全局搜索
temp=X(i:)+UL.*(2*rand(1length(Lower))-1);
end
%越界处理
p1=find(temp temp(p1)=Lower(p1);
p2=find(temp>Upper);
temp(p2)=Upper(p2);
%判断蚂蚁是否移动
if search_value(tempfunname)>search_value(X(i:)funname)
X(i:)=temp;
end
end
%更新信息量
for i=1:Ant
Tau(i)=(1-Rou)*Tau(i)+search_value(X(i:)funname);
end
%存储每一代的最佳值
[max_valuemax_index]=max(Tau);
maxX=X(max_index:);
maxValue=search_value(maxXfunname);
MX(T:)=maxX;
MV(T)=maxValue;
end
% 结果显示
[max_valuemax_index]=max(MV);
maxX=MX(max_index:);
maxValue=max_value;
disp([‘函数最大值对应的自变量取值:‘]);
disp(maxX);
disp([‘函数最大值:‘]);
disp(maxValue);
% 结束时蚂蚁的位置分布(仅限自变量是一维和二维的)
if abs(length(Lower)-2)<1e-4
subplot(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-12-15 23:06 蚁群算法求函数最值\
文件 4201 2017-10-21 21:50 蚁群算法求函数最值\ant_fun_con_max.m
文件 4193 2017-10-21 21:50 蚁群算法求函数最值\ant_fun_con_min.m
文件 3647 2017-10-21 21:50 蚁群算法求函数最值\ant_fun_max.m
文件 3641 2018-04-25 22:58 蚁群算法求函数最值\ant_fun_min.m
文件 4158 2017-10-21 21:50 蚁群算法求函数最值\ant_funname_max.m
文件 4111 2017-10-21 21:50 蚁群算法求函数最值\ant_funname_min.m
文件 3371 2018-04-26 18:29 蚁群算法求函数最值\ant_min.m
文件 2948 2018-03-21 14:53 蚁群算法求函数最值\example_fun.m
文件 748 2018-03-09 13:48 蚁群算法求函数最值\example_funname.m
文件 558 2017-10-21 21:50 蚁群算法求函数最值\produce.m
文件 6948 2017-10-21 21:50 蚁群算法求函数最值\trial_function_test.m
- 上一篇:编队控制仿真程序
- 下一篇:基于扩展卡尔曼滤波的电池soc估计simuli
nk模型
相关资源
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
- k近邻算法matlab实现
评论
共有 条评论