第2章 求解线性规划方法 (单纯形法+匈牙利法)

合集下载

求解线性规划的单纯形法03

求解线性规划的单纯形法03

1.2 单纯形法的几何意义
第二节 单纯形法的计算过程
2.1 单纯形表 表2-1 初始单纯形表的一般形式
cj
基 解
c1 , c2 ,cm , cm1 ,, cn
x1 , x2 , xm , xm1 , xm 2 , xn


c1 c2
x1 b1 1 0 0 a1,m 1 a1.n x2 b2 0 1 0 a1,m 1 a1.n
基;又由min ,6,9 6 可确定比值6所在行的基变量x4离 基;x2列与x4行的交叉处给出主元2。为醒目起见,在表中x2列和x4 行都标有箭头,分别表示主列和主行,而且主元2被套上圆圈。
按主元2对表2-2进行一次换基运算,于是得到新单纯形 表(见表2-3),返3。由
Cj CB 0 5 基 XB X3 X2 解b 8 6 12 30 3 5 0 0 0 比 值 8 4(min)
分别给每个约束方程硬行加入一个非负变量,
xn1 , xn 2 ,, xn m
得到
b1 a11 x1 a12 x2 a1n xn xn1 a21 x1 a22 x2 a2 n xn xn 2 b2 (2 9) am1 x1 am 2 x2 amn xn xn m bm x1 0, x2 0, xn , xn1 , xn 2 ,, xn m 0
以 xn 1 , xn 2 , , xn m 为基变量,可以得到(2 -9)的一个初始基本可行解:
这个解x0完全是人为地加入m个变量
X 0 0, 0, b1 , b2 ,, bm , 0, n
T
xn1 , xn 2 ,, xn m

线性规划问题的单纯形法求解步骤

线性规划问题的单纯形法求解步骤

线性规划问题的单纯形法求解步骤线性规划是一种优化问题,它的解决方法有很多种,在这里我们来介绍其中一种常用的方法——单纯形法。

我们将介绍单纯形法的求解步骤,以帮助读者更好地理解和掌握这种求解方法。

1. 建立数学模型任何一个线性规划问题的解决都需要先进行建模。

我们将问题转换成数学模型,然后使用数学方法进行求解。

线性规划问题的一般形式为:max cxs.t.Ax ≤ bx ≥ 0其中,c、x、b、A都是向量或矩阵,x≥0表示各变量都是非负数。

其中c表示目标函数,A和b表示约束条件。

2. 计算初始基可行解我们需要从初始点开始,逐步优化目标函数。

但是,在开始优化前我们需要先找到一个基可行解。

基可行解的定义是:如果所有非基变量的取值都是0,并且所有基变量的取值都是非负的,则该解被称为基可行解。

当基可行解找到后,我们就可以开始进行优化。

3. 确定进入变量在单纯形法中,每次迭代中我们都需要找到进入变量。

进入变量是指,通过操作非基变量可以使得目标函数增加的变量。

我们需要找到一个使得目标函数增加最多的非基变量,将其称为进入变量。

4. 确定离开变量在确定进入变量后,我们需要确定一个离开变量。

离开变量是指,通过操作基变量可以使得目标函数增加的变量。

我们需要找到一个离开变量,使得当进入变量增加到某个值时,该离开变量的值为0。

这样,我们就找到了一个最小的正根比率,使得通过基本变量出基到进入变量变为零而得到的新解是可行的。

5. 交换变量接下来,我们需要将已选定的进入变量和离开变量进行交换。

此时,我们将进入变量转变为基变量,离开变量转变为非基变量。

通过这种交换,我们还需要调整我们的基向量。

由于这个交换,我们将得到一个新的基可行解,并且它可以比之前的解更好。

6. 重复迭代我们需要重复上述步骤,直到我们找到最优解。

重复迭代意味着我们将不断查找新的进入变量和离开变量,并进行变量交换。

这种找到最优解的过程可能非常复杂,但是单纯形法的效率很高,通常可以在很短的时间内找到最优解。

第2章 线性规划原理与解法

第2章 线性规划原理与解法
2、最优性检验与解的判别 (以下判定定理针对标准型而言 )
(1)最优解的判定定理: 对于一个基可行解,如果其所有非基变量的检验数 j 0 , 则该解称为最优解。 (2)唯一最优解:所有非基变量的检验数都 < 0 (3)无穷多最优解: 已经是最优解,有某个非基变量的检验数 = 0
(4)无界解判定定理: 对于一个基可行解,其非基变量中有某个 m k 0 , 同时它对应的系数列向量所有的 ai ,mk 0 , 则该线性规划问题具有无界解。
x1
二、一般线性规划问题的求解基础
max z 2 x1 3 x2 0 x3 0 x4 0 x5 x1 2 x2 x3 8 (2)换出变量的确定 4 x1 x4 16 4 x2 x5 12 为了确保所有的变量均为非负,需确定换入变量的值为:
3、基变换
bi' ' bl' xk min ( ' aik 0) ' i aik alk
得: z 2 x1 9 3 4 x5 0 9 2 x1 3 4 x5
将式(2-5)代入目标函数
0 16 4 x1 0 x5
一、举例说明
步骤4 重复步骤2、3,直到目标函数中非基变量的系数均为负,无改进可能, 即找到最优解 本例依次向下迭代得到的基可行解分别为:
1确定初始可行解2解的最优性的判断3基变换换入和换出变量的确定1检验数单纯形表的矩阵表述3218141314161221812123人工变量及其处理二两阶段法三线性规划问题的各种情况讨论当约束条件出现或时不能直接找到单位矩阵如下例例22
第二章 线性规划原理与解法
§2-1 线性规划求解原理 §2-2 单纯形方法 §2-3 人工变量及其处理

求解线性规划的方法

求解线性规划的方法

求解线性规划的方法
求解线性规划问题的常用方法有以下几种:
1. 单纯形法(Simplex Method):单纯形法是解线性规划问题的经典方法,通过逐步迭代找到目标函数的最优解。

它适用于小到中等规模的问题。

2. 内点法(Interior Point Method):内点法通过在可行域内的可行点中搜索目标函数最小化的点来解决线性规划问题。

相对于单纯形法,内点法在大规模问题上的计算效率更高。

3. 梯度法(Gradient Method):梯度法是基于目标函数的梯度信息进行搜索的一种方法。

它适用于凸优化问题,其中线性规划问题是一种特殊的凸优化问题。

4. 对偶法(Duality Method):对偶法通过构建原问题和对偶问题之间的关系来求解线性规划问题。

通过求解对偶问题,可以得到原问题的最优解。

5. 分支定界法(Branch and Bound Method):分支定界法通过将原问题划分为更小的子问题,并逐步确定可行域的界限,来搜索目标函数的最优解。

需要根据具体的问题规模、约束条件和问题特点选择合适的方法进行求解。

线性规划的求解算法

线性规划的求解算法

线性规划的求解算法 线性规划(linear programming )是运筹学中的一个重要分支,在现代工业、农业、商业、交通运输、国防军事及经济管理等诸多领域都有着广泛重要的应用。

在数学系的竞赛数学建模中,也多次应用线性规划来建模从而解决实际问题。

在这里介绍单纯性法和对偶单纯形法两种求解线性规划的方法。

一、单纯形法算法主体思想标准线性规划简记如下:LP-max LP-mins.t {0Ax b x =≥ s.t {0Ax b x =≥ 这里只以LP-min 为例。

1、算法思想单纯形法是在已知一个可行基的前提下采用的解决线性规划的算法。

步骤如下:(1)输入初始矩阵:01020,111121,112,1n n m m m n a a a a a a a a a +++⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦K L M M O M K ,并化为典则形式。

用R (i )记录单位矩阵I 中元素1的位置。

(2)求{}0min |0,1j j a j n t >≤≤@若t 不存在,则得到最优解;(i),1R i n x a += (i=1,2,...m ).其他j x =0,停。

否则,转到(3)。

(3)求,1min{|0,1}i n it it a a i m a λ+>≤≤@。

若λ不存在,则LP-min 无下届,所以无最优解,停;否则,求,1min (i)|,0,1(s)i n it it a R a i m R a λ+⎧⎫=>≤≤⎨⎬⎩⎭@,转到(4)。

(4)sjsj sta a a ⇐,(j=1,2....n+1) ij ij sj it a a a a ⇐-,(i=0,1,2...m;i ≠s;j=1,2,....,n+1), (s)t R ⇐,转到(2).二、对偶单纯形法对偶单纯形法是在已知一个正则基的条件下的求解线性规划的方法。

步骤如下:(1)输入初始矩阵:01020,111121,112,1n n m m m n a a a a a a a a a +++⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦K L M M O M K ,并化为典则形式。

线性规划单纯形法

线性规划单纯形法

单纯性方法算法
1.给定一个初始基本可行解,计迭代次数k=1;
2.计算单纯形乘子 y k B k
c N cN N k yk ;
(k ) T (k )
(k )
T
cB
(k )
和简约价值系数向量 如果 c p 0 ,
(k )
3.最优性检验:计算
c p m in { c j | j N k } ,
x j 的值可使目标函数值得到改善,因而 x ( k ) 不是问题的最优解.
m in z 3 x1 x 2 s .t . 3 x1 2 x 2 x 3 5 x1 x 2 160, x 4 150,
3 2 1 0 160 T x1 , x 2 , x 3 , x 4 5 1 0 1 150
(k )
则x ( k )为最优解,停止迭代;否则 选x p 为入基变量. 4.确定出基变量:计算
(k )
a p Bk a p .
(k )
1
如果对所有 j B k 有
a
jp
0,则问题无有界的最优解,停止迭代;否则确定出基
变量指标
bq
(k )
(k )
m in {
bj a
(k )
(k )
N k Bk
T
T
cB
(k )
cN
(k )
N k yk
T
c j : 相 应 于 x j的 简 约 系 数 j N k ( N k 表 示 所 有 非 基 变 量 的 指 标 集 )
f ( x ) (cB
T
(k )
) xB
T
(k )

第2章 求解线性规划方法 (单纯形法+匈牙利法)

第2章  求解线性规划方法 (单纯形法+匈牙利法)

x3=2-x1+x4-x6 (13) 13) 14) x7=1+2x1―x2―2x4+x5+2x6 (14)
S=4x1+3x2+8x3+Mx6+Mx7=min(8)
第 二 次 判 定 S=4x1+3x2+8(2-x1+x4-x6 )+Mx6+ M(1+2x1―x2―2x4+x5+2x6) (2M- (3-M)x (8-2M)x =(2M-4)x1+(3-M)x2+(8-2M)x4+ (3M- 16) Mx5+(3M-8)x6+16 (16) 16)式可见x 的系数为负 由(16)式可见x2、x4的系数为负, 因此X(1)不是最优解。 因此X 不是最优解。
x3=2-x1+x4-x6 (13) 13) 14) x7=5-x2-2x3+x5=1+2x1―x2―2x4+x5+2x6 (14)
由(14)式得: 14)式得: 1/2+ /2+ /2+ 18) x4=1/2+x1-x2/2+x5/2+x6-x7/2 (18) 由(13)、(18)式: 13)、(18) )、(18 5/2- /2+ /219) x3=5/2-x2/2+x5/2-x7/2 (19) 求解(18)、(19)式得: )、(19 令x1=x2=x5=x6=x7=0, 求解(18)、(19)式得: x3=5/2 20) (20)是基础可行解 x4=1/2 得到了新的顶点X 得到了新的顶点X(2)=(0,0,5/2,1/2,0,0,0)T
(4- (3- 因为M为无限大值,所以(4 因为M为无限大值,所以(4-M)x1 、 (3-M)x2 、 (8- 负值, 不是最优解。 (8-3M)x3是负值, S(X(0))不是最优解。
4. 换元 A、原则
将目标函数S 系数为负且最小的元换入( 将目标函数S中系数为负且最小的元换入(本例为 的元换入 (8- ),作为基本变量。 作为基本变量 (8-3M)x3),作为基本变量。 计算各约束条件式中比值: 计算各约束条件式中比值: 第 一 次 换 元

单纯形法求解线性规划的步骤

单纯形法求解线性规划的步骤

单纯形法求解线性规划的步骤单纯形法求解线性规划的步骤1>初始化将给定的线性规划问题化成标准形式,并建立一个初始表格,它最右边的单元格都是非负的(否则无解),接下来的m列组成一个m*m的单元矩阵(目标行的单元格则不必满足这一条件),这m列确定了初始的基本可行解的基本变量,而表格中行用基本变量来表示2>最优化测试如果目标行的所有单元格都是非负的(除了最右列中代表目标函数值的那个单元格),就可以停止了,该表格代表了一个最优解,它的基本变量的值在最右列中,而剩下的非基本变量都为03>确定输入变量从目标行的前n个单元格中选择一个负的单元格(选择绝对值最大的那个)该单元格所在的列确定的输入变量及主元列4>确定分离变量对于主元列的每个正单元格,求出θ比率(如果主元格的单元格为负或为0,说明该问题是无解的,算法终止),找出θ比率最小的列,改行确定了分离变量和主元行5>建立下一张表格将主元行的所有单元格除以主元得到新的主元行,包括主元行在内的每一行,要减去改行主元列单元格和新主元行的成绩(除主元行为1外,这一步将主元列的所有单元格变成0).把主元列的变量名进行代换,得到新的单纯形表,返回第一步为求简单在本程序中,需要自己建立标准矩阵(比如加入松弛变量等工作需要用户自己完成),程序的输入有两种方式:1:指定行和列,由用户自行输入每一个元素SimpleMatrix(introw=0,int col=0);2:直接在主程序中初始化一个二维数组,然后利用构造函数SimpleMatrix(introw,int col,double **M) 来初始化和处理(本程序所用的实例用的是这种方法)程序中主要的函数以及说明~SimpleMatrix();销毁动态分配的数组.用于很难预先估计矩阵的行和列,所以在程序中才了动态的内存分配.需要重载析构函数bool Is_objectLine_All_Positive(); //判断目标行是否全部为非负数,最后一列不作考虑这个函数用来判断是否已经存在最优解bool Is_MainCol_All_Negative(int col);//判断主元列是否全部为负数或零这个函数用来判断线性规划是否是无解的bool Is_column_all_Positive(int col); //判断col列中是否全部为正(不包括目标行)用来判断线性规划是否存在最优解,因为如果最后一列如果有负数的化,就无解了,算法终止int InColumn(); //确定输入变量用来判断主元所在的列int DepartRow(int col); //确定分离变量(寻找主元)用来确定主元所在的行void MainItem_To_1(int row,int col); //将主元所在的行做处理,使主元变为1void SubMatrixLine(int row1,int row2,intcol);//将矩阵的其他行做处理,矩阵的两行相减这个函数是在主元行已经做处理以后调用,目的是是矩阵的其他行主元列的元素变成0.其中row2为主元所在的行,col为主元所在的列,row1为要处理的行void PrintAnswer(); //输出矩阵的最优解int GetRows(); //返回矩阵的行数int GetCols(); //返回矩阵的列数double GetItem(int row,int col); //返回矩阵第row行,第col列的元素源代码//SimpleMatrix.h#ifndef SIMPLEMATRIX_H_#define SIMPLEMATRIX_H_class SimpleMatrix{public:SimpleMatrix(int row=0,int col=0);SimpleMatrix(int row,int col,double **M);~SimpleMatrix();bool Is_objectLine_All_Positive(); //判断目标行是否全部为非负数,最后一列不作考虑 bool Is_MainCol_All_Negative(int col);//判断主元列是否全部为负数或零bool Is_column_all_Positive(int col); //判断col列中是否全部为正(不包括目标行)int InColumn(); //确定输入变量int DepartRow(int col); //确定分离变量(寻找主元)void MainItem_To_1(int row,int col); //将主元所在的行做处理,使主元变为1void SubMatrixLine(int row1,int row2,int col);//将矩阵的其他行做处理,矩阵的两行相减 void PrintAnswer(); //输出矩阵的最优解int GetRows(); //返回矩阵的行数int GetCols(); //返回矩阵的列数double GetItem(int row,int col); //返回矩阵第row行,第col列的元素private:int rowLen; //标准矩阵的行数int colLen; //标准矩阵的列数double **data; //一个二维数组,指向标准矩阵的数据成员void init(int rows,int cols); //动态分配一个rows行,cols列的二维数组};#end if//SimpleMatrix.cpp#include <iostream>#include <cmath>#include "SimpleMatrix.h"using namespace std;void SimpleMatrix::init(int rows,int cols){if(rows>0&&cols>0){rowLen=rows;colLen=cols;data = new double *[rows];for (int i=0;i<rows;i++){data[i]=new double[cols];}}elsecout<<"矩阵的行.列数不合法"<<endl;}SimpleMatrix::SimpleMatrix(int row,int col){init(row,col);for(int i=0;i<rowLen;i++){cout<<"请输入矩阵中第"<<i+1<<"行的系数"<<endl;for(int j=0;j<colLen;j++)cin>>data[i][j];}}SimpleMatrix::SimpleMatrix(int row,int col,double **M) {rowLen=row;colLen=col;init(row,col);for (int i=0;i<row;i++)for(int j=0;j<col;j++){data[i][j]=*((double*)M+col*i+j); ;}}SimpleMatrix::~SimpleMatrix(){if(colLen*rowLen != 0 ){for(int i=rowLen-1;i>=0;i--){if (data[i]!=NULL)delete[] data[i];}if (data!=NULL)delete[] data;}}bool SimpleMatrix::Is_objectLine_All_Positive() {for(int i=0;i<colLen-1;i++)if(data[rowLen-1][i]<0)return false;return true;}bool SimpleMatrix::Is_MainCol_All_Negative(int col) {for(int i=0;i<rowLen;i++)if(data[i][col]>0)return false;return true;}bool SimpleMatrix::Is_column_all_Positive(int col) {for(int i=0;i<rowLen-1;i++){if(data[i][col-1]<0)return false;}return true;}int SimpleMatrix::InColumn(){int count=0;for(int i=0;i<colLen-1;i++){int temp=GetItem(rowLen-1,i);if(temp>=0){count++;}elsebreak;}double maxItem=fabs(GetItem(rowLen-1,count));int index_col;for(i=0;i<colLen-1;i++){double temp=GetItem(rowLen-1,i);if(temp<0){if(maxItem<=fabs(temp)){maxItem=fabs(temp);index_col=i;}}}return index_col;}int SimpleMatrix::DepartRow(int col){int index_row;int count=0;for(int i=0;i<rowLen;i++){if(data[i][col]<0)count++;elsebreak;}double minItem=data[count][colLen-1]/data[count][col]; index_row=count;double temp;for(i=0;i<rowLen-1;i++){temp=data[i][col];if(temp>0){temp=data[i][colLen-1]/temp;if(temp<minItem){minItem=temp;index_row=i;}}}return index_row;}void SimpleMatrix::MainItem_To_1(int row,int col){double temp=GetItem(row,col);//double temp=data[row-1][col-1];for (int i=0;i<colLen;i++){#include "SimpleMatrix.h"using namespace std;int main(){double M[4][7]={{5,3,1,1,0,0,9},{-5,6,15,0,1,0,15},{2,-1,1,0,0,-1,5},{-10,-15,-12,0,0,0,}};SimpleMatrix Matrix(4,7,(double **)M);if(Matrix.Is_column_all_Positive(5)) //判断是否存在最优解{bool p=Matrix.Is_objectLine_All_Positive(); //判断主元列是否全部为正,确定是否已经取得最优解while(!p){int col=Matrix.InColumn(); //确定主元所在的行if(Matrix.Is_MainCol_All_Negative(col)) //确定线性规划的解是否为无解的{cout<<"线性规划问题是无界的,没有最优解"<<endl;exit(EXIT_FAILURE);}else{int mainRow=Matrix.DepartRow(col); //确定主元所在的行Matrix.MainItem_To_1(mainRow,col); //将主元所在的行做变换,使主元变成1 int i=0;while(i<Matrix.GetRows()){if(i!=mainRow){Matrix.SubMatrixLine(i,mainRow,col); //处理矩阵中其他的行,使主元列的元素为0 i++;}else{i++;}}}for(int i=0;i<Matrix.GetRows();i++) //输出变换以后的矩阵,判断是否正确处理{for (int j=0;j<Matrix.GetCols();j++){cout<<Matrix.GetItem(i,j)<<" ";}cout<<endl;}p=Matrix.Is_objectLine_All_Positive();}Matrix.PrintAnswer();}elsecout<<"线性规划无解"<<endl;return0;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
等式右边常数项 Q= 换入元的系数
x1 +x3 -x4 +x6 =2(5) x2+2x3-x5+x7=5(6)
本例由( 本例由(5)式:Q1=2/1 12)可见Q (12)可见Q1 < Q2 由(6)式:Q2=5/2 可以将( 式中基本变量x 换出。) 因为Q (因为Q1<Q2,可以将(5)式中基本变量x3换出。) 若换入元中的系数均为负, 若换入元中的系数均为负,则该目标函数不存在最 系数均为负 优解, 无约束条件。 优解,为无约束条件。
S=4x1+3x2+8x3+0x4+0x5=min
( 4)
现有5个变量, m+n=5,由于未知变量n=2 n=2, 现有5个变量,即m+n=5,由于未知变量n=2, 故在可行 域集合的顶点,5个变量中有3个为0 ,5个变量中有 域集合的顶点,5个变量中有3个为0, 即m=3 令x1=x2=x3=0,则由(1)(2)式解出: 则由( )(2 式解出: x 4= - 2 初始解不在可行域内) x5=-5 (初始解不在可行域内) 不满足x ≥0的条件 的条件。 此解x 此解x4,x5不满足xj≥0的条件。
x3=2-x1+x4-x6 (13) 13) 5/2- /2+ /219) x3=5/2-x2/2+x5/2-x7/2 (19)
第一节 单纯形法
为了表述方便起见, 为了表述方便起见,假设我们可研究的线 性规划问题是寻求目标函数的最小值 性规划问题是寻求目标函数的最小值(如果存 寻求目标函数的最小值( 在的话) 在的话),若碰到线性规划问题中寻求目标函 数的最大值,则只需将目标函数中系数的正 数的最大值,则只需将目标函数中系数的正、 将目标函数中系数的正、 负符号均改成与原来相反的符号即可 负符号均改成与原来相反的符号即可。这样做 即可。 的结果,与求解目标函数的极小值是等效的。 的结果,与求解目标函数的极小值是等效的。
(4- (3- 因为M为无限大值,所以(4 因为M为无限大值,所以(4-M)x1 、 (3-M)x2 、 (8- 负值, 不是最优解。 (8-3M)x3是负值, S(X(0))不是最优解。
4. 换元 A、原则
将目标函数S 系数为负且最小的元换入( 将目标函数S中系数为负且最小的元换入(本例为 的元换入 (8- ),作为基本变量。 作为基本变量 (8-3M)x3),作为基本变量。 计算各约束条件式中比值: 计算各约束条件式中比值: 第 一 次 换 元
(8)
18)、(19)式代入( )、(19 式得到目标函数 目标函数: 将(18)、(19)式代入(8)式得到目标函数:
(M- 21) S=4x1-x2+4x5+Mx6+(M-4)x7+20 (21) 第
三 次 判 定 因为(21) 的系数为负 所以不是最优解 不是最优解。 因为(21)中x2的系数为负,所以不是最优解。
得到了新的顶点X 得到了新的顶点X(1)=(0,0,2,0,0,0,1)T
判别新的顶点X 是否为最优解。 判别新的顶点X(1)=(0,0,2,0,0,0,1)T是否为最优解。
再判定— 再判定—是否最优解 再换元— 再换元—最小系数的 变量为基本变量
将(13)、(14)、(15)式 13)、(14)、(15) )、(14)、(15 代入( 代入(8)式: x 3= 2 15) (15) x 7= 1
2.因为初始解不在可行域 2.因为初始解不在可行域 因为 xj ≥ 0 (j=1,2,3) 再引入x 内,再引入x6、 x7 目标函数S 目标函数S=4x1+3x2+8x3=min 进行( 进行(0)迭代 约束条件: 则约束条件: x1+x3-x4+x6=2 ( 5) x2+2x3-x5+x7=5 ( 6) (j= xj≥0 (j=1,2,3,4,5,6,7) ( 7) 目标函数: 目标函数:
(3-M)x (8-2M)x (3M- S=(2M-4)x1+(3-M)x2+(8-2M)x4+Mx5+(3M-8)x6+16 (16) (2M-
第 二 次 换 元
其中x 的系数最小且为负 换元( 换入)。 其中x4的系数最小且为负,换元(将x4换入)。
x3=2-x1+x4-x6 (13) 13) 14) x7=5-x2-2x3+x5=1+2x1―x2―2x4+x5+2x6 (14)
先任取一顶点X 先任取一顶点X(0),代入目标函数S,得到 代入目标函数S ),然后在 然后在X S(X(0)),然后在X(0)的基础上换一个顶点 X(1), 且使得S <S( 且使得S( X(1))<S(X(0))。
这样,用迭代法一次次迭代, 这样,用迭代法一次次迭代,经过有限个 步骤就可以求出线性规划问题的最优解。 步骤就可以求出线性规划问题的最优解。
由式(13): ):Q 由式(13):Q1=-2/1 由式(14): ):Q 由式(14):Q2=1/2
17)可见Q (17)可见Q1 < Q2
所在式中的基本变量x 由于Q 负值, 由于Q1为负值,取Q2所在式中的基本变量x7换出作 非基本变量,进行第二次迭代。 为非基本变量,进行第二次迭代。
此时: 基本变量; 此时:x3、x4为基本变量; 作为非基本变量 非基本变量。 x1、x2、x5、x6、x7作为非基本变量。
x3=2-x1+x4-x6 (13) 13) 14) x7=1+2x1―x2―2x4+x5+2x6 (14)
S=4x1+3x2+8x3+Mx6+Mx7=min(8)
第 二 次 判 定 S=4x1+3x2+8(2-x1+x4-x6 )+Mx6+ M(1+2x1―x2―2x4+x5+2x6) (2M- (3-M)x (8-2M)x =(2M-4)x1+(3-M)x2+(8-2M)x4+ (3M- 16) Mx5+(3M-8)x6+16 (16) 16)式可见x 的系数为负 由(16)式可见x2、x4的系数为负, 因此X(1)不是最优解。 因此X 不是最优解。
实质上,单纯形法是利用 是利用线性规划的基 实质上,单纯形法是利用线性规划的基 本原理和迭代的方法来求解目标函数最小值 本原理和迭代的方法来求解目标函数最小值 的一种方法,单纯形法是求解线性规划问题 的一种方法, 最主要的方法之一。 最主要的方法之一。
Байду номын сангаас
二.单纯形法的计算方法
通过下面例子来说明单纯形法的具体计算方法及步骤。 通过下面例子来说明单纯形法的具体计算方法及步骤。 例: x 1+ x 3 ≥ 2 约束条件 x2+2x3 ≥ 5 xj ≥ 0 (j=1,2,3) 目标函数
由式(19): ):Q 由式(19):Q1=5 由式(18): ):Q 由式(18):Q2=1
(22)可见Q1 < Q2 22)可见Q
因为Q 可以将Q 所在式中基本变量x 换出, 因为Q1<Q2,可以将Q2所在式中基本变量x4换出, 非基本变量。 作为非基本变量 作为非基本变量。
作为基本变量 基本变量; 选x3、x2作为基本变量; 非基本变量。 x1、x4、x5、x6、x7为非基本变量。
B.换元后以x3、x7为基本变量; 换元后以x 基本变量; 非基本变量。 x1、x2、x4、x5、x6为非基本变量。
由 ( 5) 式 : x1 +x3 -x4 +x6 =2(5) 13) x3=2-x1+x4-x6 (13) x2+2x3-x5+x7=5(6) 、(13 13) 由(6)式、(13)式: x7=5-x2-2x3+x5=1+2x1―x2―2x4+x5+2x6 (14) 14) 求解(13)、(14)式得: )、(14 令x1=x2=x4=x5=x6=0, 求解(13)、(14)式得: x 3= 2 x 7= 1 (15)是基础可行解 15)
第 判定X 是否为最优解。 判定X(0)=(0,0,0,0,0,2,5)T是否为最优解。 一 次 代入(8)式,相应的 : 代入( 判 定 S(X(0))=4x +3x +8x +Mx +Mx =min
1 2 3 6 7
S(X(0))=4x1+3x2+8x3+M(2-x1-x3+x4) +M(5-x2-2x3+x5) (4- (3- (8- =(4-M)x1+(3-M)x2+(8-3M)x3+ 11) x 4 + M x 5 + 7M (11)
第二章
求解线性规划的主要方法
一般有两个变量的线性规划问题有可能利用图 一般有两个变量的线性规划问题有可能利用图 解法求解,但对于具有更多变量的线性规划问题 解法求解,但对于具有更多变量的线性规划问题 就无法用图解法求解了,在这里我们介绍一下单纯 就无法用图解法求解了,在这里我们介绍一下单纯 形法和匈牙利法。 形法和匈牙利法。 第一节 第二节 单纯形法 匈牙利法 匈牙利法
x3=2-x1+x4-x6 (13) 13) 14) x7=5-x2-2x3+x5=1+2x1―x2―2x4+x5+2x6 (14)
由(14)式得: 14)式得: 1/2+ /2+ /2+ 18) x4=1/2+x1-x2/2+x5/2+x6-x7/2 (18) 由(13)、(18)式: 13)、(18) )、(18 5/2- /2+ /219) x3=5/2-x2/2+x5/2-x7/2 (19) 求解(18)、(19)式得: )、(19 令x1=x2=x5=x6=x7=0, 求解(18)、(19)式得: x3=5/2 20) (20)是基础可行解 x4=1/2 得到了新的顶点X 得到了新的顶点X(2)=(0,0,5/2,1/2,0,0,0)T
判别新的顶点X 是否最优解。 判别新的顶点X(2)=(0,0,5/2,1/2,0,0,0)T是否最优解。
1/2+ /2+ /2+ 18) x4=1/2+x1-x2/2+x5/2+x6-x7/2 (18) x3=5/2-x2/2+x5/2-x7/2 (19) 5/2- /2+ /219)
S=4x1+3x2+8x3+Mx6+Mx7=min
一.单纯形法的指导思想
由线性规划原理,我们知道:目标函数的 由线性规划原理,我们知道: 最小值, 的某个顶点达到, 最小值,能够在可行域 K 的某个顶点达到,而 且顶点的个数是有限的。 且顶点的个数是有限的。 循着这条思路, 循着这条思路,可以找到一个使目标函数 达到最小值的途径 途径: 达到最小值的途径:
相关文档
最新文档