本章涉及知识点
1、线性规划的定义
2、可行区域、目标函数、可行解和最优解
3、转线性规划为标准型
4、转线性规划为松弛型
5、单纯形算法的思想和例子
6、避免退化—Bland规则
7、广义单纯形算法的步骤
8、约束条件为负数情况下存在的问题
9、构造辅助线性规划函数
10、从辅助线性规划函数还原目标函数
11、辅助线性函数的求解步骤
12、完整的单纯形算法步骤
13、python编程实现单纯形算法
14、实验验证单纯形算法处理不同线性规划问题
一、线性规划的定义
我们来看一个实际问题:
假设你是一个单位的采购经理,你有2000元经费,需要采购单价为50元的若干桌子和单价为20元的若干椅子,你希望桌椅的总数尽可能的多,但要求椅子数量不少于桌子数量,且不多于桌子数量的1.5倍,那你需要怎样的一个采购方案呢?
于是我们可以假设桌子数量和椅子数量为x1和x2,为此我们的目标函数为
目标函数
而约束条件可以写为
约束条件
上述既包含目标函数,又含有约束条件,就可以抽象为一个线性规划问题,即在有限的资源和若干竞争约束下,求某个目标函数的最大化或最小化的最优策略
二、可行区域、目标函数、可行解和最优解
我们由上述案例来看,因为是只有两个变量属于二维空间,我们在笛卡尔坐标系中画出约束条件和目标函数
案例线性规划空间
从二维空间中我们可以看出,紫色区域就是满足所有约束条件的安全区域,包括最优解也必须在其中,我们把这个区域叫做可行域。红色函数即是目标函数,而要求目标函数达到最大值或最小值,就是平行的移动目标函数,让目标函数在可行域上达到截距最大(最小)。图中的A、B、C三个点都属于目标函数与可行域的交点,我们称之为可行解,而使得目标函数达到最大(最小)的可行解被我们定义为最优解,其对应于图中的A点
至此我们可以总结出线性规划的几个特征(1)线性规划的可行域总是一个凸集
(2)目标函数的可行解(包括最优解)一定出现在可行域的一个顶点上
(3)目标函数可以是直线(二维空间)或者超平面(高维空间)的线性变化,所以它的局部最优解实际上就是全局最优解
三、转线性规划为标准型
为了统一用一种数学模型来描述任意线性规划问题,我们定义了两种规范形式:标准和松弛
线性规划的标准形式为
标准形式
其中A,x和b都是向量形式,我们可以将任意一个线性规划转化为标准形式(1)如果目标函数是求max,那么乘以-1使目标函数转化为求min
(2)如果约束条件有>=约束,同理乘以-1将约束变为<=
我们将开头的案例转化为标准形式如下:
开头案例的标准形式
可以看到,线性规划的标准型,是满足不等式约束的一个目标线性函数最小化(最大化)过程
四、转线性规划为松弛型
在求解线性规划算法中,我们更喜欢用等式约束来等价描述不等式约束,为此我们引入松弛形式
松弛形式
为了将约束条件都变为等式,我们需要引入松弛变量进入x向量,下面我们将开头案例转化为松弛形式如下: