单纯形法的来历
在求解LP问题时,有人给出了图解法,但对多维变量时,却无能为力。于是,美国数学家G.B. Dantzig (丹捷格)发明了一种“单纯形法”的代数算法,尤其是方便于计算机运算。
与单纯形法有关的三条定理:
翻译一下就是:
-
若某个基本可行解对应的检验向量<0,那么这个基本可行解就是最优的。
-
若某个基本可行解对应的检验向量=0,则有无穷多个最优解。
-
若某个基本可行解对应的检验向量>0,并且系数(约束条件)小于0,无解。
CNCN——非基变量系数
CBCB——基变量系数
B——基,即线性无关向量组R(A)=R(B)
N——非基向量组
单纯形法计算步骤:
-
将线性规划问题化成标准型 (引入松弛变量)
-
找出或构造一个m阶单位矩阵作为初始可行基,建立初始单纯形表。
-
计算各非基变量的检验数σj=cj−zjσj=cj−zj 若所有检验数≤0,则问题已得到最优解,停止计算。否则,转入下一步。(检验数)
-
在大于0的检验数中,若某个检验数对应的系数列向量≤ 0,则此问题是无界解,停止计算,否则转入下步。
-
根据maxmax(检验数jj | 检验数jj>0)=检验数k的原则,确定为换入变量(进基变量) 再按最小比值法则(biaikbiaik,&aikaik>0)确定换出变量,建立新的单纯形表,此时的基变量中xkxk代替的换出变量的位置。
-
以aikaik为主元素进行迭代,把xkxk所对应的列向量变为单位列向量,即aikaik变为1 同列中其他元素变为0,继续计算各非基变量的检验数,进行第三步。
&Lingo里面的方法就属于单纯形法。
例题:
①先引入三个松弛变量,构造单位矩阵。
②得到单位矩阵,构造出初始可行基B
从中我们可以get信息:基向量组B和非基向量组N
还可以知道所有变量的系数所组成的向量C和基变量XBXB、非基变量XNXN:
我们需要的检验数就是系数减去ZjZj(σj=cj−zjσj=cj−zj,Zj=CBNjZj=CBNj)
这是目标函数:Z=CBB−1b+(CN−CBB−1N)XNZ=CBB−1b+(CN−CBB−1N)XN (b就是增广矩阵多出来的那些)
当基矩阵B化成单位矩阵时,令非基变量XNXN=0,得到 Z=CBB−1bZ=CBB−1b
③进行步骤3--6
填入信息
刚开始,基变量的系数全为0,所以Z=0,ZjZj=0,可以写出对应的检验数:
x1 | x2 | s1 | s2 | s3 |
50 | 100 | 0 | 0 | 0 |
可以看出,x2x2对应的检验数最大,成为换入变量,而且根据最小值法则,知道s3s3是换出变量。于是将s3s3的位置换上x2x2,对应的系数也变成了100。
我们再进行初等行变换,使x2x2,s1s1,s2s2对应的基矩阵变成单位矩阵。在此基础上进行计算ZjZj,就可以利用其算出新一轮的检验数:
我们可以发现,仍然存在检验数大于0的情况,唉,只能进入新一轮的迭代,x1x1作为换入变量,而经过最小比值规则,可以判定出s1s1是换出变量
然后,我们再根据新的数据,写出新一轮的ZjZj和 检验数 ,发现此时的检验数全部≤0,我们成功地找到了最优解!
结束啦!
表格中,检验数全部≤0,根据判断规则,Z值为最优值(Z=27500),其解:
X1X1 =50,s1s1=50,X2X2=250,s2s2=s3s3=0
为模型的最优解。
__EOF__
作 者:Cruelty-Angel
出 处:https://www.cnblogs.com/cruelty_angel
关于博主:热爱生活,爱读书/旅游,喜欢技术,乐于专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!