这里使用蚁群算法求函数的最大值,函数是:
f = -(x.^4 + 3*y.^4 - 0.2*cos(3*pi*x) - 0.4*cos(4*pi*y) + 0.6);
步骤如下:
初始化参数。
初始化蚁群,第一代蚁群随机分布在可行域中。
初始化信息素,第一代信息素采用第一代蚁群的函数值表示,函数值越大,信息素越多。
状态转移,计算状态转移概率,根据状态转移概率进行局部搜索或全局搜索。
约束边界。
选择,根据目标函数值在原始蚁群和状态转移之后的蚁群之间进行选择。
更新信息素,tau = (1 - Rou) .* tau + calObjFun(ants)。
对选择后的蚁群重复进行状态转移、约束边界和更新信息素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