非线性规划:约束条件和目标函数存在非线性函数。简单点说,约束条件和目标函数中至少一个决策变量不是一次方,例如三角函数、对数、多次方等。
线性规划和非线性在解决上的不同:线性规划可以有通用方法,但是非线性规划的求解是没有特定算的,只能用近似的算法,每种算法都有自己适用的范围。这些算法有很多,Matlab内部已经实现好了,有现成的函数,如果想了解内部具体的实现可以另寻查找,本文就只介绍如何调用Matlab中的函数达成求非线性规划。
Matlab函数:
[x,value]=fmincon(func,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
参数解释:
Matlab中线性规划的标准形式:C(x)和Ceq(x)是非线性约束的不等式和等式。
min
f
(
x
)
\min f(x)
minf(x)
s
.
t
.
{
A
x
⩽
b
A
e
q
⋅
x
=
b
e
q
l
b
⩽
x
⩽
u
b
C
(
x
)
⩽
0
C
e
q
(
x
)
=
0
s.t. {Ax⩽bAeq⋅x=beqlb⩽x⩽ubC(x)⩽0Ceq(x)=0
s.t.⎩
⎨
⎧Ax⩽bAeq⋅x=beqlb⩽x⩽ubC(x)⩽0Ceq(x)=0
使用注意:
步骤:按照数模题目进行建模,得到目标函数和约束条件,然后把目标函数和约束条件化为标准形式,再化成matlab里面矩阵形式,最后填入代码中。
目标函数+约束条件:
m
a
x
z
=
−
x
1
2
−
x
2
2
−
x
3
2
+
6
max\quad z=-{x_1}^2-{x_2}^2-{x_3}^2+6
maxz=−x12−x22−x32+6
s
.
t
.
{
x
1
2
−
x
2
=
0
x
1
−
x
2
2
+
x
3
3
≥
2
x
1
+
x
2
2
−
2
x
3
≤
5
x
1
,
x
2
,
x
3
≥
0
s.t. {x12−x2=0x1−x22+x33≥2x1+x22−2x3≤5x1,x2,x3≥0
s.t.⎩
⎨
⎧x12−x2=0x1−x22+x33≥2x1+x22−2x3≤5x1,x2,x3≥0
Matlab标准格式化:
m
i
n
f
(
x
)
=
x
1
2
+
x
2
2
+
x
3
2
−
6
min\quad f(x)={x_1}^2+{x_2}^2+{x_3}^2-6
minf(x)=x12+x22+x32−6
s
.
t
.
{
x
1
2
−
x
2
+
0
∗
x
3
=
0
−
x
1
+
x
2
2
−
x
3
3
+
2
≤
0
x
1
+
x
2
2
−
2
x
3
−
5
≤
0
x
1
,
x
2
,
x
3
≥
0
s.t. {x12−x2+0∗x3=0−x1+x22−x33+2≤0x1+x22−2x3−5≤0x1,x2,x3≥0
s.t.⎩
⎨
⎧x12−x2+0∗x3=0−x1+x22−x33+2≤0x1+x22−2x3−5≤0x1,x2,x3≥0
func.m
function f=func(x)
func=sum(x.^2)-6;
nonlcon.m
function [C,Ceq]=nonlcon(x)
C=[-x(1)+x(2)^2-x(3)^2+2;
x(1)+x(2)^2-2*x(3)-5]
Ceq=[x(1)^2-x(2)]
主文件代码
[x,value]=fmincon('func',[2,1,0],[],[],[],[],[0,0,0],[],'nonlcon');