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
相关推荐
dying_man1 小时前
LeetCode--42.接雨水
算法·leetcode
vortex51 小时前
算法设计与分析 知识总结
算法
艾莉丝努力练剑2 小时前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(三)
c语言·开发语言·数据结构·学习·算法
ZZZS05162 小时前
stack栈练习
c++·笔记·学习·算法·动态规划
hans汉斯2 小时前
【人工智能与机器人研究】基于力传感器坐标系预标定的重力补偿算法
人工智能·算法·机器人·信号处理·深度神经网络
vortex54 小时前
算法设计与分析:分治、动态规划与贪心算法的异同与选择
算法·贪心算法·动态规划
前端拿破轮4 小时前
🤡🤡🤡面试官:就你这还每天刷leetcode?连四数相加和四数之和都分不清!
算法·leetcode·面试
地平线开发者5 小时前
征程 6|工具链量化简介与代码实操
算法·自动驾驶
DoraBigHead5 小时前
🧠 小哆啦解题记——谁偷改了狗狗的台词?
算法
Kaltistss5 小时前
240.搜索二维矩阵Ⅱ
线性代数·算法·矩阵