gamultiobj函数基本知识点
-
fun代表的是目标函数
-
nvars代表的是待求变量的个数
-
A为不等式约束的系数项
-
b为不等式约束的常数项
-
Aeq为等式约束的系数项
-
beq为等式约束的常数项
-
lb和ub为变量x取值的上下限
-
其中非线性等式约束和不等式约束需要创建函数来进行带入,对应上述中的使用部分为nonlcon
-
在此需要注意一下,这个函数是求目标函数的最小值,如果是最大值时需要装换为求最小值,下面的约束条件也要注意转换。
使用NSGA-II(gamultiobj)求解多目标优化算法-线性规划
% 清除所有变量(非必须)
clc,clear
%% 模型设置
% 获取目标函数的函数句柄
fun = @fitnessfun; % 设置适应度函数句柄
% 变量个数
nvars=4;
% 约束条件形式1:上下界约束(若无取空数组[])
% lb<= X <= ub
lb=[0,0,0,0];
ub=[];
% 约束条件形式2:线性规划不等式约束(若无取空数组[])
% A*X <= b
A = [0 0 1 1
-1/3 0 0 0
0 -1/2 0 0
0 0 0 0];
b = [48 ; 30 ; 30 ; 0];
% 约束条件形式3:等式约束(若无取空数组[])
% Aeq*X = beq
Aeq=[1 1 0 0;0 0 0 0; 0 0 0 0; 0 0 0 0];
beq=[120;0;0;0];
%% 求解器设置
% 最优个体系数paretoFraction
% 种群大小populationsize
% 最大进化代数generations
% 停止代数stallGenLimit
% 适应度函数偏差TolFun
% 函数gaplotpareto:绘制Pareto前沿
options=gaoptimset('paretoFraction',0.3,'populationsize',200,'generations',300,'stallGenLimit',200,'TolFun',1e-10,'PlotFcns',@gaplotpareto);
%% 主求解
[x,fval]=gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,options)
function f=fitnessfun(x)
% f是目标函数向量
% gamultiobj是以目标函数分量取极小值为目标,极大值的目标函数注意取相反数
f(1)=-(x(1)*100/3 + x(3)*90/3 + x(2)*80/2+x(4)*70/2);
f(2)=x(3)+x(4);
end
使用NSGA-II(gamultiobj)求解多目标优化算法-非线性规划
文章来源:https://www.toymoban.com/news/detail-445971.html
clc;clear;
%% 模型设置
%% 求解器设置
% 最优个体系数paretoFraction
% 种群大小populationsize
% 最大进化代数generations
% 停止代数stallGenLimit
% 适应度函数偏差TolFun
% 函数gaplotpareto:绘制Pareto前沿
options=gaoptimset('paretoFraction',0.3,'populationsize',200,'generations',300,'stallGenLimit',200,'TolFun',1e-10,'PlotFcns',@gaplotpareto);
fun = @fitnessfun; % 设置适应度函数句柄
nonlcon = @nonlconfun; % 设置非线性约束函数句柄
nvars = 4; % 自变量个数
%% 线性规划系数和右端列向量
A = [];
b = [];
Aeq = [];
beq = [];
%% 自变量上下界
lb = [2;17;17;17];
ub = [];
%% 主求解
[x,fval]=gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options)
function f = fitnessfun(x)
% 目标函数:多目标
f(1) = pi/60*x(1)*(2*x(3)+x(4))
f(2) = pi/2*x(1)^2*x(3)*x(4);
end
function [c,ceq] = nonlconfun(x)
% 非线性约束:c即不等式约束的函数值,是列向量(可以存在多个约束)。ceq即等式约束函数的函数值,同样是列向量(可以存在多个约束)
% x:为自变量的行向量
% c:非线性不等式约束的函数值.
% ceq:非线性等式约束的函数值.
c(1,1) = x(1)*(x(2)-x(4));
c(2,1) = 3.222*10^9/(x(1)^3*x(2)*(2*x(3)+x(4)))-450;
c(3,1) = x(1)*(x(4)-pi*x(3));
ceq(1,1)=pi*(2*x(1)*x(3)+x(4))-3000;
end
参考文献
MATLAB遗传算法工具箱的使用及实例(非线性规划)
其中ga函数得调用只能使用一个目标函数,不适合多目标规划
【MATLAB】多目标优化算法 NSGA-II (gamultiobj) 的使用
Matlab利用NSGA2算法求解多目标优化文章来源地址https://www.toymoban.com/news/detail-445971.html
到了这里,关于使用nsga-2(gamultiobj)实现matlab多目标规划的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!