蚁群算法求函数最大值一

这里使用蚁群算法求函数的最大值,函数是:

f = -(x.^4 + 3*y.^4 - 0.2*cos(3*pi*x) - 0.4*cos(4*pi*y) + 0.6);

步骤如下:

  1. 初始化参数。
  2. 初始化蚁群,第一代蚁群随机分布在可行域中。
  3. 初始化信息素,第一代信息素采用第一代蚁群的函数值表示,函数值越大,信息素越多。
  4. 状态转移,计算状态转移概率,根据状态转移概率进行局部搜索或全局搜索。
  5. 约束边界。
  6. 选择,根据目标函数值在原始蚁群和状态转移之后的蚁群之间进行选择。
  7. 更新信息素,tau = (1 – Rou) .* tau + calObjFun(ants)。
  8. 对选择后的蚁群重复进行状态转移、约束边界和更新信息素3步,直至结束。

主函数及结果

下面是主函数:

clear;
clc;

Ant     =   300;    % 蚂蚁数量
Times   =   80;     % 蚂蚁移动次数
Rho     =   0.9;    % 信息素挥发系数
P0      =   0.2;    % 转移概率常数
xl = -1; xu = 1;    % 设置搜索范围
yl = -1; yu = 1;
step = 0.05;

ants = initant(Ant, xl, xu, yl, yu);    % 初始化蚁群
tau = calObjFun(ants);                  % 计算初代信息素
firstants = ants;

for t = 1:Times
    ants = edgeselection(ants, P0, tau, 1/t, xl, xu, yl, yu);    % 转移+约束
    tau = (1 - Rho) .* tau + calObjFun(ants);               % 更新信息素
end

figure(1);
plotobjfun(xl, xu, yl, yu, step);
hold on;
plot3(firstants(:,1), firstants(:,2), calObjFun(firstants), 'b*');
hold on;
plot3(ants(:,1), ants(:,2), calObjFun(ants), 'r*');
hold off;

程序运行结果绘图如下,其中蓝色点为第一代蚁群,红色为最后一代蚁群:

蚁群算法求函数最大值结果

发表评论

电子邮件地址不会被公开。 必填项已用*标注