数学建模入门事件簿——初识线性规划希望在这里能以一种类似于日记的形式和大家分享数学建模的经历,共同成长,共同进步。
7 ], u' b; f( _' n7 o- k9 K' y3 q! h7 d0 e( S6 Q- ?+ M
在司守奎先生的著作里,线性规划被充作开启数学建模大门的钥匙,究其原因,是在历年的教育改革中,不少本属于高等数学范畴内的知识已经下放到中学课本中,其中便以线性规划最为易于理解。而我会在这篇文章中与大家分享关于线性规划的一些知识。 d1 Y& b i9 y: {& i
3 G$ k* P2 |1 B4 Y* W利用线性规划进行求解的题目都有一个共同的特点——最值。无论是max还是min都属于线性规划的范畴,譬如在商业运营中所需要得到的最低损耗或最高利润,都可以用线性规划的方法进行解决。" o; d6 @0 @ f- q0 k" e
5 V' q5 G( h/ h& _! |" V3 D而确定了某个问题需要用到线性规划之后,首先要解决的是找出决策变量,也就是问题中要确定的未知量,如某种商品的产量、通过不同交通方式运输的贸易量等等,我们用xi(i=1,2……,n)来表示。在得到决策变量后,我们不难发现,由于行业规范、技术限制等种种原因,在实际生活中决策变量不得不满足一系列等式或不等式,也就是所谓的约束条件。在以上两点均达成后,便可以根据找到的条件来构造一个线性的目标函数,进行最值的求解。
' p6 {# E" g3 M0 F( k+ ^9 |- B5 r2 ?
分析完案例之后,就需要使用matlab或python或者其他你熟悉的求解软件来求解,我在这里使用的是python(编译器用的pycharm)。: n& Z* y- }7 Z1 h! P
+ q, }# O/ U0 u+ P无论是使用matlab还是python,都先需要把数学问题化作标准形式,如下图:
. t0 s3 }7 q5 Y
- ^9 j- |) M# A% F; i+ a- b/ {/ b& V! |7 e5 \
这里进行一下简单说明,c、x、b、beq、lb、ub都为列向量,其中c为价值向量;Aeq、A为等式约束和不等式约束对应的矩阵。 下面是对应的代码,为了保证可行性和合理性,笔者在这里引用了一道例题的参数 " G! F! |: s! |& Q5 F# {
$ ~4 G1 l. w' ~) q$ ~. i. H
1 r9 q5 E4 v( S: ]" P" H8 V) W
说明:(1)这里导入了scipy库与其优化器模块optimize以及numpy库来进行计算 (2)数据类型都是数组(array) (3)使用了linprog函数求解最小值 ! U$ ]; g+ u6 F2 _
/ G, ?( n# S& s0 |- x( C- F" ]$ ]
3 r0 g+ B( l' b- Q+ D |