线性规划中的单纯形法与内点法(原理步骤以及matlab实现)

Posted Mr.ZeroW

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性规划中的单纯形法与内点法(原理步骤以及matlab实现)相关的知识,希望对你有一定的参考价值。

线性规划中的单纯形法与内点法(原理、步骤以及matlab实现)(一)中,我们讨论了单纯形法的原理和普通单纯形法的应用,本文接着讨论大M法、两阶段法和对偶单纯形法

2.2 Big M Method (大M法)

通常,我们遇到的问题约束条件不是像普通单纯形法中的形式,就是说有可能会符号为大于等于形式的不等式,这时,初始可行基的选择就不是那么容易了。这种情况下,我们可以利用大M法。下面举例说明应用

 

solution

通过引入slack或者surplus将不等式约束转为等式约束,并且将最小化问题转为最大化问题

 

在这个形式中,初始可行基不是很容易选出,因为s1和s3的系数都是-1。这时我们可以引入额外的两个人工变量A1和A2,原问题转为:

在目标函数中还引入了新的系数M,M是一个极大的数,因此要使得目标函数的值最大,A1和A2必须为0

 

matlab实现

linprog():

记住:该函数的问题形式必须是最小化形式,并且右端值符号没有限制,但是不等号必须是小于等于

f = [4 3];
A = [-2 -1; -3 2; -1 -1];
b = [-10 6 -6];
[x, fval] = linprog(f, A, b)

 

revised():

c = [4 3];
A = [2 1; -3 2; 1 1];
b = [10 6 6];
inq = [1 -1 1];
revised(c, b, A, inq, 1)

运行结果: 

2.3 Two-phase Method(两阶段法)

先来看一下大M法和两阶段法的联系和区别:

 

两阶段法中第一阶段构造了一个只有人工变量的新的目标函数,使得引入的人工变量为零。第二阶段使用第一阶段迭代的tableau继续迭代。可以看到其实大M法和两阶段法本质没有区别,只是将两步糅合成为一步。下面举例说明两阶段法的应用:

这道题可以用大M法解决,不过这里使用两阶段法

第一阶段,引入新的人工变量,并且构造新的目标函数(使人工变量为零)

到这里,人工变量已经成为非基变量,即取零使得构造的目标函数值最优

进入第二阶段

这阶段的主要工作是:

1.使用原来的目标函数

2.初始开始迭代的基可行解是沿用上一阶段最后的迭代结果

 

下面开始迭代:

 

感兴趣的朋友可以用大M法解答

matlab实现:

linprog():

 

f = [-5 -8];
A = [-3 -2; -1 -4; 1 1];
b = [-3 -4 5];
lb = [0 0];
[x, fval] = linprog(f, A, b, [], [], lb)

 

 运行结果:

revised():

c = [5 8];
A = [3 2; 1 4; 1 1];
b = [3 4 5];
inq = [1 11 -1];
revised(c, b, A, inq, 0)

运行结果:

 

以上是关于线性规划中的单纯形法与内点法(原理步骤以及matlab实现)的主要内容,如果未能解决你的问题,请参考以下文章

线性规划中的单纯形法与内点法(原理步骤以及matlab实现)

线性规划中的单纯形法与内点法(原理步骤以及matlab实现)

单纯形法与线性规划

单纯形法与线性规划入门

有效集法(Active Set),内点法(Interior-Point)及序列二次规划(SQP)法

C++内点法求解大规模线性规划问题——对标MATLAB中linprog函数