单纯形求解线性规划

线性规划是什么

我想这个问题高中课本也给出了比较详细的定义了
用向量来解释的话就是构造一个n维向量x,满足

maxcTx

AxB

x0

其中c是给出的n维向量,A是n*m的矩阵,B是m维向量
这是线性规划的标准型

我们可以知道,任意一个线性规划都是可以转化为标准型的
对于目标值取min的我们可以取反之后取max
对于 AixBi 的我们可以变成 AixBi
对于无限制的x我们可以拆成x=x0-x1,然后 x00x10

松弛型/约束型

松弛型也就是存在i,使得 AixBi ,而不是一定要等于
约束型同理
那么我们可以通过添加基本变量 xn+i 来把松弛型线性规划转化成约束型
nj=1Ai,jxjBi 变成 xn+i=Binj=1Ai,jxj,xn+i0

单纯形

如果我们用向量来理解线性规划的话,我们会发现
每个约束定义了n维空间中的一个半空间(超平面),交集形成的可行域是一个凸区域称为单纯型
目标函数是一个超平面,最优解在凸区域顶点处取得
也就是说我们需要找到每一个凸区域的顶点,然后更新答案

定义基本解为所有非基本变量为0的解
基本可行解为所有 Bi0 的解

我们可以构造出一组基本可行解,然后我们需要沿着凸区域的边来转移到下一个顶点

这就是转轴操作(pviot)

转轴操作的基本思想就是交换一个基本变量和非基本变量,从而使答案更优
具体来说我们选择一个 ce0 的非基本变量e,再选择一个 blal,e 最小且 al,e0 的l,交换 xn+l xe
为什么要比值最小?
因为要一步步来,不能贪心。
为了防止循环,根据Bland规则,选择下标最小的变量。
当我们找不到合法的e的时候算法就结束了。
如果我们找到合法的e但找不到合法的l,那么证明对于任意的M,都存在一组解使得目标的值大于M

但是我们会发现,这样做的基础是满足 Bi0
如果不满足呢?
那么我们就需要一个初始化

初始化

正规的初始化是引进一个辅助线性规划,增加一个变量x0,目标是最大化-x0
然而为了方便,许多dalao们用的都是随机初始化的黑科技
也就是每次随机一个 Bl<0 ,再随机一个 Al,e<0 ,然后pivot(l,e)
这样随机完之后就能保证所有的 Bi0
如果找得到l但找不到e说明该线性规划无解

应用

待UPD,博主最近要中考,考完有时间再写吧

你可能感兴趣的:(线性规划,单纯形)