1.句柄函数
句柄函数即我们要求的目标函数,以下三种算法的调用仅是求解最小值,若要求目标函数的最大值,可在返回结果中加负号。
function value = Get_Fitness(x,y)
value= x^2 + y^2;
% 若要求x^2 + y^2最大值可设value= -(x^2 + y^2);
end
句柄函数图像:
画图代码:
function Draw()
% 定义自变量范围
x = linspace(-10, 10, 100); % x范围为-10到10,共100个点
y = linspace(-10, 10, 100); % y范围为-1到1,共100个点
% 创建网格
[X, Y] = meshgrid(x, y);
% 计算Z值
Z = X.^2+Y.^2;
% 创建三维图形
surf(X, Y, Z);
% 添加标题和标签
title('Z = x^2 + y^2');
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
end
2.遗传算法
function GA()
% 配置项
options = optimoptions('ga','Display', 'off', 'PopulationSize', 50, 'StallGenLimit', 20,'PlotFcn', @gaplotbestf);
% 设置求适应度的的句柄函数(目标函数)
ObjectiveFunction = @(x) Get_Fitness(x(1), x(2));
% 为自变量设置解空间两个自变量的上下限分别是[-10,10],[-10,10]
LB=[-10,-10];
UB=[10,10];
% 调用遗传算法,因为自变量有两个所以维度为2
[x,fval]=ga(ObjectiveFunction,2,[],[],[],[],LB,UB,[],options);
% 打印最优解
fprintf('x(1)值最优解为: %f\nx(2)值最优解为:%f\n',x(1),x(2));
fprintf('最优适应度为: %f\n', fval);
end
3.粒子群算法
function PSO()
% 配置项
options = optimoptions('particleswarm','Display', 'off', 'SwarmSize', 20, 'MaxStallIterations',20);
% 设置求适应度的的句柄函数(目标函数)
ObjectiveFunction = @(x) Get_Fitness(x(1), x(2));
% 为自变量设置解空间两个自变量的上下限分别是[-10,10],[-10,10]
LB=[-10,-10];
UB=[10,10];
% 调用粒子群算法,因为自变量有两个所以维度为2
[x,fval] = particleswarm(ObjectiveFunction,2,LB,UB,options);
% 打印最优解
fprintf('x(1)值最优解为: %f\n x(2)值最优解为:%f\n',x(1),x(2));
fprintf('最优适应度为: %f\n', fval);
end
4.模拟退火
function SA()
% 配置项
options = optimoptions('simulannealbnd','MaxStallIterations',1000000);
% 设置句柄函数(目标函数)
ObjectiveFunction = @(x) Get_Fitness(x(1), x(2));
% 为自变量设置初始值
x0=[5,5];
% 为自变量设置解空间两个自变量的上下限分别是[-10,-10],[-10,-10]
LB=[-10,-10];
UB=[10,10];
% 调用模拟退火算法
[x,fval] = simulannealbnd(ObjectiveFunction,x0,LB,UB,options);
% 打印最优解
fprintf('x(1)值最优解为: %f\n x(2)值最优解为:%f\n',x(1),x(2));
fprintf('最优适应度为: %f\n', fval);
end