线性规划模型(Linear Programming, LP)

一、线性规划简介

线性规划是运筹学中研究较早、发展较快、应用广泛、 方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法。在经济管理、交通运输、工农业生产等经济活动中,提高经济效果是人们不可缺少的要求,而提高经济效果一般通过两种途径:一是技术方面的改进,例如改善生产工艺,使用新设备和新型原材料。二是生产组织与计划的改进,即合理安排人力物力资源。线性规划所研究的是:在一定条件下, 合理安排人力物力等资源,使经济效果达到最好。一 般地,求线性目标函数在线性约束条件下的最大值或最小值的问题,统称为线性规划问题。满足线性约束条件的解叫做可行解,由所有可行解组成的集合叫做可行域。决策变量、约束条件、目标函数是线性规划的三要素。

二、案例:利润最大问题

某工厂拥有 a、b 两种原材料生产 A、B 两种产品,现有设备使用限量为 8 台时,已知每件产品的利润、所需设备台时及原材料的消耗如下表所示:

原材料\产品AB原材料总量
a(kg)4016
b(kg)0412
利润(万元)23 
设备(台)12 

试问:在计划期内应如何安排计划才能使工厂获得的利润最大?

这个问题的决策变量和约束条件很少,比较简单,显然是能够直接看出答案的:A 产品每台利润比 B 高,只要能生产 A 就生产 A 产品,因此由 A 原材料总量,可以知道 A 最多生产 4 个,此时使用了 4 台设备;剩余的 4 台设备生产 B 产品,那么最终结果就是生产 4 个 A产品和生产 2 个 B 产品。

下面使用线性规划来求解该问题。从实际问题中建立数学模型一般有以下三个步骤:

  1. 根据影响所要达到目的的因素找到决策变量;
  2. 由决策变量和所需达到目的之间的函数关系确定目标函数;
  3. 由决策变量所受的限制条件确定决策变量所要满足的约束条件。

由题目要求,根据上述三个步骤可以得到对应的结果:

  1. 设决策变量 分别表示在计划期内产品A、B的产量;
  2. 为了利益最大化,则应使目标函数 最大化;
  3. 根据有限设备和原材料,决策变量的约束条件为:

线性规划问题可使用 scipy.optimize.linprog 函数来求解,详细参数可参考官方网站文档。该函数支持三种方法:

其中默认使用的求解算法是内点法,关于单纯形法与内点法的进一步介绍可参考这篇知乎笔记

对于以上问题使用该函数求解时,需要将目标函数转化为求最小值,并且将约束条件用矩阵表示,以及分开表示等式与不等式约束和决策变量定义域。那么问题最终可以表示为:

对应的代码为:

最终的求解结果为 x=[4., 2.] ,即生产 4 个 A产品和生产 2 个 B 产品,与前述答案一致。