栏目「有学问」是UBook知识在线的趣味科普专栏,专注于分享有趣好玩的科普知识,旨在发现更多有趣好玩的冷知识,发掘更多生活中的趣味。
自从上了大学以后,各种高数线代数学课防不胜防,有人说,如果你觉得高数难,那是因为你没有遇到过线性规划。
但是小编一直觉得线性规划问题不大,每次作业我都能保证全对,并且能够快速做完,因为在大学里早已经学会了用python来帮我解决问题。
当然,也不是鼓励大家自己不做作业,只是学会利用工具使得自己更加效(tou)率(lan),最重要的是,每次做出题目答案后可以检验下自己是否能做对,再者说,能够用编程实现问题求解,本身也是对知识的掌握。
市面上有不少软件可以直接求解,但是灵活性要低于python,python提供了很多包可以用来数学计算,今天我为大家介绍的是scripy的linprog,我们利用linprog可以很好的求解线性规划问题。
话不多说,让我们一起进入正式学习——
我们以一个实际例题为例:
例1 求解下列线性规划问题
Min Z = 2x1 + 3x2 + x3
s.t.
-x1 - x2 + 2x3 <= 10
2x1 - 2x2 + x3 >= 2
x1 + 2x2 + x3 = 5
在这里我们用到scipy中的linprog进行求解,linprog官方的介绍链接如下:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html
我们要使用的函数为:
scipy.optimize.linprog(c,A_ub=None,b_ub=None,A_eq=None,b_eq=None,bounds=None, method='simplex', callback=None, options=None)
注意要使用linprog,目标函数要变成求最小值,如果原题目要求求max(最大值),只需对目标函数取负,但要注意求解的最终值是取负后的目标函数的最小值,取负即为最大值。
下面开始代码编写——
导入我们所需要的linprog
运行结果如下:
un为目标函数的最优值,slack为松弛变量,status表示优化结果状态,x为最优解。
在该例题中,目标函数最小值约为-22.5,最优解为 x1=-5.75, x2=12.25, x3=-13.75。
好啦,本次python求解线性规划的问题就介绍到这,如果大家感兴趣的话,后期会继续推出更为复杂的数学求解。
代码已打包,在后台回复“线性规划”即可获取。
Archer
UBook签约作者
励志做一个不掉头发的程序员
对改变世界尤其热衷
喜欢就星标我们,不要走丢了哦~