数学建模——非线性规划

非线性规划问题也是优化问题中的其中一种,与线性规划相比,难度稍微大一些。非线性规划是指目标函数或者约束条件中至少有一个是非线性函数时的最优化问题。

话不多说,举个栗子体会一下吧!

现有原油A和B可以生产汽油甲和汽油乙。要求生产汽油甲时,原油A的占比需要超过50%,生产汽油乙时,原油A的占比需要超过60%。汽油甲的售价为4800元/t,汽油乙的售价为5600元/t,现有库存原油A500t,库存原油B1000t,市场上可以买到不超过1500t的原油A,且购买不超过500t时的单价为10000元/t,超过500t但不超过1000t时,超过500t的步伐8000元/t,超过1000t时,超过1000t的部分6000元/t,试问如何安排原油的采购和加工?

解决一个优化问题,那么必然需要找出这个问题的3要素:决策变量、目标函数、约束条件

先分析购买原油的支出部分:

c(x) =\left\{\begin{matrix} 10x & (0\leqslant x\leqslant 500) \\ 8x+1000& (500\leqslant x\leqslant 1000)\\ 6x+3000& (1000\leq x\leq 1500) \end{matrix}\right.

原油分配:

A x_{11} x_{12}
B x_{21} x_{22}

决策变量到这里就找完了,一共五个,接下来就是目标函数:

max = 4.8(x_{11}+x_{21}) + 5.6(x_{12}+x_{22})-c(x)

约束条件

首先原油的供应方面:

x_{11}+x_{12}\leqslant 500+x

x_{21}+x_{22}\leqslant 1000

x\leqslant 1500

原油的比例限制:

\frac{x_{11}}{x_{11}+_{x21}}\geq 0.5\Leftrightarrow x_{11}\geqslant x_{21}

\frac{x_{12}}{x_{12}+x_{22}}\geqslant 0.6\Leftrightarrow 2x_{12}\leqslant 3x_{22}

到这里,我们还有一个问题没有解决,那就是分段函数定义的c(x),因此需要对变量x分解,x1,x2,x3分别为以价格10,8,6(千元/t)采购A的吨数

x = x_{1}+x_{2}+x_{3},c(x)=10 x_{1}+8x_{2}+6x_{3}

此时目标函数可以写成:

max = 4.8(x_{11}+x_{21}) + 5.6(x_{12}+x_{22})-(10x_{1}+8x_{2}+6x_{3})

另外还要考虑的是,当x1小于500时,x2和x3是为0的,同理,当x2小于500时,x3是为0的,所以需要增加约束:
(x_{1}-500)x2=0

(x_{2}-500)x3=0

0\leq x_{1},x_{2},x_{3}\leqslant 500

至此,求解模型所需的所有关系都列出来了,MATLAB对非线性规划的求解十分不友好,这里采用的是LINGO求解:

Model:
Max = 4.8*x11+4.8*x21+5.6*x12+5.6*x22-10*x1-8*x2-6*x3;
x11+x120;
2*x12-3*x22>0;
x=x1+x2+x3;
(x1-500)*x2=0;
(x2-500)*x3=0;
x1<500;
x2<500;
x3<500;
end

最后所求结果为:不购买新原油A可获得最大利润,利润为4800000元

数学建模——非线性规划_第1张图片

 非线性规划与线性规划的思想其实很相似,相比于线性规划,难点在于约束条件可能更加复杂难以简化,需要我们去挖掘更深层的约束关系。

希望以上内容能给你带来一点帮助,谢谢观看!

你可能感兴趣的:(动态规划,算法,线性代数)