python线性规划算法_线性规划的算法分析

本文深入探讨线性规划,包括定义、可行域、标准型、松弛型和单纯形算法。通过实例展示了如何将问题转化为标准型、松弛型,并详细解释了单纯形算法的每一步,包括避免退化、Bland规则和广义单纯形算法。最后,通过python编程实现了单纯形算法并进行了实验验证。
摘要由CSDN通过智能技术生成

本章涉及知识点

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向量,下面我们将开头案例转化为松弛形式如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值