• 大小: 14KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-15
  • 语言: Matlab
  • 标签: matlab  code  ant  

资源简介

基于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

评论

共有 条评论