python线性规划无最优解是为什么 python解决线性规划问题_线性规划

栏目「有学问」是UBook知识在线的趣味科普专栏,专注于分享有趣好玩的科普知识,旨在发现更多有趣好玩的冷知识,发掘更多生活中的趣味。

自从上了大学以后,各种高数线代数学课防不胜防,有人说,如果你觉得高数难,那是因为你没有遇到过线性规划



python线性规划无最优解是为什么 python解决线性规划问题_python线性规划无最优解是为什么_02

但是小编一直觉得线性规划问题不大,每次作业我都能保证全对,并且能够快速做完,因为在大学里早已经学会了用python来帮我解决问题



python线性规划无最优解是为什么 python解决线性规划问题_ci_03

当然,也不是鼓励大家自己不做作业,只是学会利用工具使得自己更加效(tou)率(lan),最重要的是,每次做出题目答案后可以检验下自己是否能做对,再者说,能够用编程实现问题求解,本身也是对知识的掌握。



python线性规划无最优解是为什么 python解决线性规划问题_python_04

市面上有不少软件可以直接求解,但是灵活性要低于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



python线性规划无最优解是为什么 python解决线性规划问题_线性规划_05

python线性规划无最优解是为什么 python解决线性规划问题_ci_06

运行结果如下:



python线性规划无最优解是为什么 python解决线性规划问题_python 线性规划问题_07

un为目标函数的最优值slack松弛变量status表示优化结果状态x最优解

在该例题中,目标函数最小值约为-22.5,最优解为 x1=-5.75, x2=12.25, x3=-13.75。

好啦,本次python求解线性规划的问题就介绍到这,如果大家感兴趣的话,后期会继续推出更为复杂的数学求解

代码已打包,在后台回复“线性规划”即可获取。