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

Posted Mr.ZeroW

tags:

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

线性规划(Linear Programming Problem:LPP)是凸优化以及现实生活中经常遇到的问题,解决线性规划问题常用的方法有单纯形法(Simlex Method)(普通单纯形法,大M法,两阶段法,对偶单纯形法)以及内点法(karmarkar method)

matlab中求解线性规划使用 linprog(f, A, b, Aeq, beq, lb, ub)以及revised(c, b, a, inq, 1)

注:f为目标函数(min形式)系数矩阵,A为限制条件系数矩阵,b为右端值矩阵(元素可以小于零),Aeq为等式约束的系数矩阵,beq为等式约束的右端值矩阵,lb和ub为未知数的下限和上限

1.LPP 

2.Simplex Method

每一次迭代的tableau 格式如下:

 

=====================================================================

=====================================================================

换入基、换出基的选择:

原理:

所以标准型可以换成以下的形式:

迭代的思想:

 

 

解的情况讨论:

 

========================================================================

========================================================================

2.1 Simplified Simplex Method (普通单纯形)

LPP中的约束条件全是等式约束

standard form

 注:这里的右端值b必须全部非负

 下面举例说明该种方法的应用以及matlab的两种实现

 

Solution 

首先引入变量(slack or surplus)将原问题转为标准格式:

下面开始迭代:

first tableau

 

将x1作为基变量换出x4

second tableau

将x2作为基变量换出x3

third tableau

 

可以看到

所有的z_j-c_j都是非负的,所以此时的x值是最优值,答案为:

matlab实现

linprog() : 

注意:linprog()解决问题的标准格式如下:

 

所以需要转换原问题为最小化问题!!!

 

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

 

 下面贴出运行结果

revised():

注意:该函数不是内置函数,需要自行下载函数,附上网址:http://cn.mathworks.com/matlabcentral/fileexchange/26554-revised-simplex-method?focused=5147615&tab=function

 

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

 

 

 

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

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

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

单纯形法与线性规划

单纯形法与线性规划入门

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

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