Matlab之智能优化算法函数调用

1.句柄函数

句柄函数即我们要求的目标函数,以下三种算法的调用仅是求解最小值,若要求目标函数的最大值,可在返回结果中加负号。

Matlab 复制代码
function value = Get_Fitness(x,y)
    value= x^2 + y^2;
    % 若要求x^2 + y^2最大值可设value= -(x^2 + y^2);
end

句柄函数图像:

​​​​​​​

画图代码:

Matlab 复制代码
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.遗传算法

Matlab 复制代码
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.粒子群算法

Matlab 复制代码
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.模拟退火

Matlab 复制代码
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
相关推荐
haoly19892 小时前
数据结构和算法篇-线性查找优化-移至开头策略
数据结构·算法·移至开头策略
学Linux的语莫6 小时前
机器学习数据处理
java·算法·机器学习
earthzhang20216 小时前
【1007】计算(a+b)×c的值
c语言·开发语言·数据结构·算法·青少年编程
2301_803554528 小时前
C++联合体(Union)详解:与结构体的区别、联系与深度解析
java·c++·算法
硬汉嵌入式8 小时前
Matlab2025b发布,全新的Simulink示波器
matlab·simulink
sali-tec9 小时前
C# 基于halcon的视觉工作流-章42-手动识别文本
开发语言·人工智能·算法·计算机视觉·c#·ocr
SandySY9 小时前
品三国谈人性
算法·架构
小欣加油9 小时前
leetcode 62 不同路径
c++·算法·leetcode·职场和发展
夏鹏今天学习了吗9 小时前
【LeetCode热题100(38/100)】翻转二叉树
算法·leetcode·职场和发展
夏鹏今天学习了吗9 小时前
【LeetCode热题100(36/100)】二叉树的中序遍历
算法·leetcode·职场和发展