总述
蚁群方法求解二元函数的最大值。蚂蚁群先随机分布在定义域内,如下:
计算结束后,得到如下的分布,再计算分布均值,得到此时的自变量取值,因为是二元函数,所以有两个自变量,带入
F
(
x
,
y
)
F(x,y)
F(x,y)中,得到对应的因变量,因变量即为求得的函数最大值。
待求函数的形式
选择如下非单调函数作为测试函数:
−
(
x
4
+
3
y
4
−
0.2
∗
c
o
s
(
3
x
∗
π
)
−
0.4
∗
c
o
s
(
4
y
∗
π
)
+
0.6
)
-(x^4 + 3y^4 - 0.2 * cos(3x * \pi ) - 0.4 * cos(4y *\pi ) + 0.6)
−(x4+3y4−0.2∗cos(3x∗π)−0.4∗cos(4y∗π)+0.6)
也可以根据自己的实际情况进行修改。
程序运行结果
运行程序后,蚁群寻找到使函数值最大的点,如下:
同时在命令行输出如下内容:
即:当x为 − 2.9 ∗ 1 0 − 4 -2.9*10^{-4} −2.9∗10−4、y为 − 1.37 ∗ 1 0 − 4 -1.37*10^{-4} −1.37∗10−4的时候,函数取得最大值,约为 1.38 ∗ 1 0 − 6 1.38*10^{-6} 1.38∗10−6
源代码
% 蚁群求解函数最大值
% 2024-7-31/Ver1
clear;clc;close all;
rng(0);
Ants = 300; %蚂蚁数量
Times = 80; %仿真时长
Rou = 0.9;
P0 = 0.2;
x_lower = -1; %x轴范围下限,下面的同理
y_lower = -1;
x_upper = 1;
y_upper = 1;
%% 随机生成蚁群位置
ant = zeros(Ants, 2);
for i = 1: Ants
ant(i, 1) = x_lower + (x_upper - x_lower) * rand;
ant(i, 2) = y_lower + (y_upper - y_lower) * rand;
Tau(i) = F(ant(i, 1), ant(i, 2)); % 信息素
end
step = 0.05; %网格密度
f = '-(x.^4 + 3 * y.^4 - 0.2 * cos(3 * pi * x) - 0.4 * cos(4 * pi * y) + 0.6)';
%% 画图
fprintf('完整源代码下载链接:https://gf.bilibili.com/item/detail/1105973012');
[x, y] = meshgrid(x_lower:step:x_upper, y_lower:step:y_upper);
修改建议
主函数和计算函数里面各有一个目标函数,将其修改为自己想要的即可计算自己需要的函数最大值了。
更改函数定义域的方法:X和Y两个自变量,所以定义X的上下界和Y上下界,共四个参数,如下:
如需修改上下界,修改上面四个数即可。