线性规划是运筹学中研究较早、发展较快、应用广泛、 方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法。在经济管理、交通运输、工农业生产等经济活动中,提高经济效果是人们不可缺少的要求,而提高经济效果一般通过两种途径:一是技术方面的改进,例如改善生产工艺,使用新设备和新型原材料。二是生产组织与计划的改进,即合理安排人力物力资源。线性规划所研究的是:在一定条件下, 合理安排人力物力等资源,使经济效果达到最好。一 般地,求线性目标函数在线性约束条件下的最大值或最小值的问题,统称为线性规划问题。满足线性约束条件的解叫做可行解,由所有可行解组成的集合叫做可行域。决策变量、约束条件、目标函数是线性规划的三要素。
某工厂拥有 a、b 两种原材料生产 A、B 两种产品,现有设备使用限量为 8 台时,已知每件产品的利润、所需设备台时及原材料的消耗如下表所示:
| 原材料\产品 | A | B | 原材料总量 |
|---|---|---|---|
| a(kg) | 4 | 0 | 16 |
| b(kg) | 0 | 4 | 12 |
| 利润(万元) | 2 | 3 | |
| 设备(台) | 1 | 2 |
试问:在计划期内应如何安排计划才能使工厂获得的利润最大?
这个问题的决策变量和约束条件很少,比较简单,显然是能够直接看出答案的:A 产品每台利润比 B 高,只要能生产 A 就生产 A 产品,因此由 A 原材料总量,可以知道 A 最多生产 4 个,此时使用了 4 台设备;剩余的 4 台设备生产 B 产品,那么最终结果就是生产 4 个 A产品和生产 2 个 B 产品。
下面使用线性规划来求解该问题。从实际问题中建立数学模型一般有以下三个步骤:
由题目要求,根据上述三个步骤可以得到对应的结果:
线性规划问题可使用 scipy.optimize.linprog 函数来求解,详细参数可参考官方网站文档。该函数支持三种方法:
其中默认使用的求解算法是内点法,关于单纯形法与内点法的进一步介绍可参考这篇知乎笔记。
对于以上问题使用该函数求解时,需要将目标函数转化为求最小值,并且将约束条件用矩阵表示,以及分开表示等式与不等式约束和决策变量定义域。那么问题最终可以表示为:
对应的代码为:
xxxxxxxxxx51c = [-2, -3]2A_ub = [[1, 2], [4, 0], [0, 4]]3b_ub = [[8], [16], [12]]4bounds = [(0, None), (0, None)]5print(linprog(c, A_ub=A_ub, b_ub=b_ub, bounds=bounds))最终的求解结果为 x=[4., 2.] ,即生产 4 个 A产品和生产 2 个 B 产品,与前述答案一致。