MATLAB非线性规划优化问题

        非线性规划研究的对象是非线性函数的数值最优化问题,是20世纪50年代形成的一门学科,其理论和应用发展十分迅猛,随着计算机的发展,非线性规划应用越来越广泛,针对不同的问题提出了特别的算法

非线性规划的标准形式

在实际工作中,常常会遇到目标函数和约束条件至少有一个是非线性函数的规划问题,即非线性规划问题,非线性规划问题的标准形式为

\min f(x)

s.t.\left\{\begin{matrix} g_i(x)\leqslant 0,i=1,2...,m \\ h_j(x)\leqslant 0,j=1,2...,r \end{matrix}\right.

非线性规划问题按照约束条件可分为以下三类

1.无约束非线性规划模型

\min f(x)

x\subseteq \textbf{R}^n

2.等式约束非线性规划模型

\min f(x)

s.t. h_j(x)=0,j=1,2,...,r

3.不等式约束非线性规划模型

\min f(x)

s.t. g_i(x)=0,i=1,2,...,r

其中,无约束非线性规划模型和等式约束非线性规划模型较为简单,本文主要介绍不等式约束非线性规划模型,可用matlab函数fmincon进行求解

MATLAB调用格式如下

x=fmincon(f,x0,A,b)
x=fmincon(f,x0,A,b,Aeq,beq)
x=fmincon(f,x0,A,b,Aeq,beq,lb,ub)
x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

其中,x0为原始点,A,b分别为不等式约束的系数矩阵和右端列向量,lb,ub分别为变量x的下界和上界,options为指定优化参数进行最小化。

MATLAB具体实例

        设有100万元资金,要求5年内使用完,若在一年内使用资金x万元,则可获得效益\sqrt{2x}万元(效益不能再使用),当年不用的资金可存入银行,年利率为5%,试制定出资金的使用计划,使5年效益之和最大。

        不妨先转化为数学问题,设变量x_i表示第i年所使用的资金数z,则有以下优化问题

\max z=\sqrt{2x_1}+ \sqrt{2x_2}+ \sqrt{2x_3}+ \sqrt{2x_4}+ \sqrt{2x_5}

x_1\leqslant 100

1.05x_1+x_2\leqslant 105

1.1025x_1+1.05x_2+x_3\leqslant 110.25

1.1576x_1+1.1025x_2+1.05x_3+x_4\leqslant 115.76

1.2155x_1+1.1576x_2+1.1025x_3+1.05x_4+x_5\leqslant 115.76

x_i\geqslant 0,i=1,2,3,4,5

根据以上编写MATLAB程序如下

%%  非线性规划问题求解
%   Copyright 2023, NUDT
%
%   nudt04
%  
%   说明:
%       不等式非线性规划问题求解
%
%   输入:
%       目标函数和约束条件
%   输出:
%       最优解
%
%   原始作者:帅小吉
%   建立日期:2023年10月7日
%
%   更新历史:
%         无
clear all
clc
%% 求解过程
x0=[10,10,10,10,10];%初始值
A=[1.05,1,0,0,0
    1.1025,1.05,1,0,0
    1.1576,1.1025,1.05,1,0
    1.2155,1.1576,1.1025,1.05,1];%不等式矩阵
b=[105;110.25;115.76;121.55];%不等式矩阵右侧
Aeq=[];%等式矩阵
beq=[];%等式右侧
lb=[0;0;0;0;0];%变量下界约束
ub=[];%变量上界约束
[x,fval]=fmincon(@fun1,x0,A,b,Aeq,beq,lb,ub)%函数求解
%% 目标函数
function f=fun1(x)
    f=-sqrt(2*x(1))-sqrt(2*x(2))-sqrt(2*x(3))-sqrt(2*x(4))-sqrt(2*x(5));
end

通过MATLAB算法得到本问题最优解

同理,还可以使用分函数方法,将目标函数和约束条件分别编为函数进行求解实例如下

%%  非线性规划问题求解
%   Copyright 2023, NUDT
%   nudt04
%   说明:
%       不等式非线性规划问题求解
%   输入:
%       目标函数和约束条件
%   输出:
%       最优解
%   原始作者:帅小吉
%   建立日期:2023年10月7日
%   更新历史:
%         无
clear all
clc
clear all
clc
x0=[1;1;1;1;1];
vlb=[0;0;0;0;0];
vub=[100;100;100;100;100];
A=[];
b=[];
Aeq=[];
beq=[];
[x,fval]=fmincon(@fu,x0,A,b,Aeq,beq,vlb,vub,@myco)
%% 约束条件
function [g,ceq]=myco(x)
g(1)=x(1)-100;
g(2)=1.05*x(1)+x(2)-105;
g(3)=1.1025*x(1)+1.05*x(2)+x(3)-110.25;
g(4)=1.1576*x(1)+1.1025*x(2)+1.05*x(3)+x(4)-115.76;
g(5)=1.2155*x(1)+1.1576*x(2)+1.1025*x(3)+1.05*x(4)+x(5)-121.55;
ceq=0
end
%% 目标函数
function f=fu(x)
f=-(sqrt(2*x(1))+sqrt(2*x(2))+sqrt(2*x(3))+sqrt(2*x(4))+sqrt(2*x(5)));
end

运行结果一致,算法有效

猜你喜欢

转载自blog.csdn.net/weixin_53750855/article/details/133634132