《数学建模算法与应用》学习笔记day3——非线性规划
非线性规划
很多时候,问题不是简单的线性规划问题,而是更为复杂的非线性规划问题
当目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。
一、非线性规划模型
1.投资决策问题
例 某企业由n个项目可以投资,至少投资一个。设该企业的总资金为A,投资第i个项目需要花费
a
i
a_i
ai,并且预计收益分别为
b
i
b_i
bi。选择最佳的投资方案
解 投资决策变量为
x
i
=
{
0
,
投
资
第
i
个
项
目
1
,
不
投
资
第
i
个
项
目
x_i=\begin{cases} 0,投资第i个项目\\ 1,不投资第i个项目 \end{cases}
xi={0,投资第i个项目1,不投资第i个项目
则投资总额为
∑
i
=
1
n
a
i
x
i
\sum\limits_{i=1}^n a_ix_i
i=1∑naixi,投资总收益为
∑
i
=
1
n
b
i
x
i
\sum\limits_{i=1}^n b_ix_i
i=1∑nbixi列出数学模型为
m
a
x
Q
=
∑
i
=
1
n
a
i
x
i
∑
i
=
1
n
b
i
x
i
,
s
.
t
.
{
0
<
∑
i
=
1
n
a
i
x
i
≤
A
x
i
(
1
−
x
i
)
=
0
,
i
=
1
,
2
,
.
.
.
,
n
max\ Q=\frac{\sum\limits_{i=1}^n a_ix_i}{\sum\limits_{i=1}^n b_ix_i},\\ s.t.\begin{cases} 0<\sum\limits_{i=1}^n a_ix_i\le A\\ x_i(1-x_i)=0,i=1,2,...,n \end{cases}
max Q=i=1∑nbixii=1∑naixi,s.t.⎩⎨⎧0<i=1∑naixi≤Axi(1−xi)=0,i=1,2,...,n
该模型中的目标函数和约束条件都是非线性的,将上述模型概括成一般形式
m
i
n
f
(
x
)
,
s
.
t
.
{
h
j
(
x
)
≤
0
,
j
=
1
,
.
.
.
,
q
g
i
(
x
)
=
0
,
i
=
1
,
.
.
.
,
p
min\ f(\bm x),\\ s.t.\begin{cases} h_j(\bm x)\le 0,j=1,...,q\\ g_i(\bm x)=0,i=1,...,p \end{cases}
min f(x),s.t.{hj(x)≤0,j=1,...,qgi(x)=0,i=1,...,p
2.非线性规划的matlab解法
matlab中非线性规划的数学模型写成一下形式:
m
i
n
f
(
x
)
,
s
.
t
.
{
A
⋅
x
≤
b
A
e
q
⋅
x
=
b
e
q
c
(
x
)
≤
0
c
e
q
(
x
)
=
0
l
b
≤
x
≤
u
b
min\ f(\bm x),\\ s.t.\begin{cases} \bm{A\cdot x\le b}\\ Aeq\cdot \bm x=beq\\ c(\bm x)\le 0\\ ceq(\bm x)=0\\ lb\le\bm x\le ub \end{cases}
min f(x),s.t.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧A⋅x≤bAeq⋅x=beqc(x)≤0ceq(x)=0lb≤x≤ub
引入matlab的求解命令
[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
fun和nonlcon都是用m文件定义的函数,x0是x的初始值,具体函数的定义如下所展示

(1)fun1.m定义目标函数
function f=fun1(x);
f=sum(x.^2)+8;
(2)fun2.m定义约束条件,其中g表示不等约束条件,h表示等式约束条件
function[g,h]=fun2(x);
g=[-x(1)^2+x(2)-x(3)^2
x(1)+x(2)^2+x(3)^2-20];
h=[-x(1)-x(2)^2+x(3)^3
x(2)+2*x(3)^2-3];
可直接使用
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')
二、二次规划
二次规划是一种特殊的非线性规划问题,目标函数是二次函数,而约束条件只是线性的,就称这种规划为二次规划
matlab中二次规划的数学模型
m
i
n
1
2
x
T
H
x
+
f
T
x
s
.
t
.
{
A
x
≤
b
A
e
q
⋅
x
=
b
e
q
l
b
≤
x
≤
u
b
min\ \frac{1}{2}\bm x^T\bm {Hx}+f^T\bm x\\ s.t.\begin{cases} \bm{Ax\le b}\\ Aeq\cdot x= beq\\ lb\le x\le ub \end{cases}
min 21xTHx+fTxs.t.⎩⎪⎨⎪⎧Ax≤bAeq⋅x=beqlb≤x≤ub
值得一提的是H是是对称矩阵,是而H前有
1
2
\frac{1}{2}
21,所以数值需要乘2
matlab中的求解二次规划的命令是
[x,fval]=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
三、例题

第(1)问是线性规划的知识点
决策变量是
x
i
(
i
=
1
,
.
.
.
,
12
)
x_i(i=1,...,12)
xi(i=1,...,12),表示A,B料场到每个工地的运输水泥吨数
则目标函数为
m
i
n
∑
i
=
1
12
x
i
(
a
i
−
a
料
场
)
2
+
(
b
i
−
b
料
场
)
2
min \sum\limits_{i=1}^{12}x_i\sqrt{(a_i-a_{料场})^2+(b_i-b_{料场})^2}
mini=1∑12xi(ai−a料场)2+(bi−b料场)2
约束条件为
s
.
t
.
{
∑
i
=
1
6
x
i
≤
20
∑
i
=
7
12
x
i
≤
20
x
j
+
x
j
+
6
=
d
j
j
=
1
,
2
,
.
.
.
6
s.t.\begin{cases} \sum\limits_{i=1}^6 x_i\le20\\ \sum\limits_{i=7}^{12} x_i\le20\\ x_j+x_{j+6}= d_j\ j=1,2,...6 \end{cases}
s.t.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧i=1∑6xi≤20i=7∑12xi≤20xj+xj+6=dj j=1,2,...6
第(2)问是二次规划
在第一问的基础上引入新决策变量
a
A
,
b
A
,
a
B
,
b
B
a_A,b_A,a_B,b_B
aA,bA,aB,bB表示地是两个料场的位置
目标函数是一个非线性的函数需要在m文件中定义
function f=fun1(x);
a=[1.25,8.75,0.5,5.75,3,7.25];
b=[1.25,0.75,4.75,5,6.5,7.75];
d=[3,5,4,7,6,11];
f1=0;
for i=1:6
s(i)=sqrt((x(13)-a(i))^2+(x(14)-b(i))^2);
f1=s(i)*x(i)+f1;
end
f2=0;
for i=7:12
s(i)=sqrt((x(15)-a(i-6))^2+(x(16)-b(i-6))^2);
f2=s(i)*x(i)+f2;
end
f=f1+f2;
约束条件为
x0=[3,5,4,7,1,0,0,0,0,0,5,11,5.6348,4.8687,7.2479,7.7499];
fm=inf;
A=[1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0];
b=[20;20];
Aeq=zeros(6,16);
for i=1:6
Aeq(i,i)=1;
Aeq(i,i+6)=1;
end
beq=[3,5,4,7,6,11];
vlb=[zeros(12,1);-inf;-inf;-inf;-inf];
求解命令
[x,fval]=fmincon('fun1',x0,A,b,Aeq,beq,vlb,[]);
值得注意的是,求解的结果是在初值给定的条件下计算得来的,我们将x0=x作为初值再次运算,就能得到一组更准确的答案,重复代入后,对比fval的值,选择出最优解
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)