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

线性规划问题的单纯形法求解步骤线性规划是一种优化问题,它的解决方法有很多种,在这里我们来介绍其中一种常用的方法——单纯形法。
我们将介绍单纯形法的求解步骤,以帮助读者更好地理解和掌握这种求解方法。
1. 建立数学模型任何一个线性规划问题的解决都需要先进行建模。
我们将问题转换成数学模型,然后使用数学方法进行求解。
线性规划问题的一般形式为:max cxs.t.Ax ≤ bx ≥ 0其中,c、x、b、A都是向量或矩阵,x≥0表示各变量都是非负数。
其中c表示目标函数,A和b表示约束条件。
2. 计算初始基可行解我们需要从初始点开始,逐步优化目标函数。
但是,在开始优化前我们需要先找到一个基可行解。
基可行解的定义是:如果所有非基变量的取值都是0,并且所有基变量的取值都是非负的,则该解被称为基可行解。
当基可行解找到后,我们就可以开始进行优化。
3. 确定进入变量在单纯形法中,每次迭代中我们都需要找到进入变量。
进入变量是指,通过操作非基变量可以使得目标函数增加的变量。
我们需要找到一个使得目标函数增加最多的非基变量,将其称为进入变量。
4. 确定离开变量在确定进入变量后,我们需要确定一个离开变量。
离开变量是指,通过操作基变量可以使得目标函数增加的变量。
我们需要找到一个离开变量,使得当进入变量增加到某个值时,该离开变量的值为0。
这样,我们就找到了一个最小的正根比率,使得通过基本变量出基到进入变量变为零而得到的新解是可行的。
5. 交换变量接下来,我们需要将已选定的进入变量和离开变量进行交换。
此时,我们将进入变量转变为基变量,离开变量转变为非基变量。
通过这种交换,我们还需要调整我们的基向量。
由于这个交换,我们将得到一个新的基可行解,并且它可以比之前的解更好。
6. 重复迭代我们需要重复上述步骤,直到我们找到最优解。
重复迭代意味着我们将不断查找新的进入变量和离开变量,并进行变量交换。
这种找到最优解的过程可能非常复杂,但是单纯形法的效率很高,通常可以在很短的时间内找到最优解。
运筹学 线性规划问题的单纯形法

线性规划的单纯形法
由上表可知:
S=100*X1+80*X2
约束条件:
2*X1+4*X2<=80
3*X1+1*X2<=60
X1,X2>=0
由此可以引入松弛变量:
2*X1+4*X2+k1<=80
3*X1+1*X2+k2<=60
S=100*X1+80*X2+(0)*k1+(0)*k2〃k1和k2为闲置时间不产生利润
可建表
注:Zj为Cj列的每行数分别与XI,X2,k1,k2列相乘然后加的结果(例如:0=0*2+0*3)由表可知X1所在列为最有列,所以K2退出基变组(列表下,红字部分表示交换格)
而由表可知要消去图中绿字所在行必须是图中绿字所在行-2*红字所在行。
消去后的表的情
注:此时由上表可知X2所在列是最有解,切Cj-Zj依旧为正。
所以,此时K1出基(将k1行中各数据*3/10)得到如下表:
注:由表可知此时Cj-Zj为零,如果接续下去此值将会为负所以此时由最大利润为2560即:当摩托车生产16辆,自行车生产12辆是有最大利润。
本题只是为了让和我有一样迷惑的人有一个解题案例,如若真正搞懂线性规划问题的单纯形法还得去以参考书为准。
线性规划问题的解法

线性规划问题的解法线性规划(Linear Programming,LP)是一种数学优化方法,用于求解线性约束条件下的最大化或最小化目标函数的问题。
线性规划问题在经济学、管理学、工程学等领域都具有广泛的应用,其求解方法也十分成熟。
本文将介绍线性规划问题的常用解法,包括单纯形法和内点法。
一、单纯形法单纯形法是解决线性规划问题最常用的方法之一。
它通过在可行解空间中不断移动,直到找到目标函数的最优解。
单纯形法的基本步骤如下:1. 标准化问题:将线性规划问题转化为标准形式,即将目标函数转化为最小化形式,所有约束条件均为等式形式,且变量的取值范围为非负数。
2. 初始可行解:选择一个初始可行解,可以通过人工选取或者其他启发式算法得到。
3. 进行迭代:通过不断移动至更优解来逼近最优解。
首先选择一个非基变量进行入基操作,然后选取一个基变量进行出基操作,使目标函数值更小。
通过迭代进行入基和出基操作,直到无法找到更优解为止。
4. 结束条件:判断迭代是否结束,即目标函数是否达到最小值或最大值,以及约束条件是否满足。
单纯形法的优点是易于理解和实现,而且在实际应用中通常具有较好的性能。
但是,对于某些问题,单纯形法可能会陷入循环或者运算效率较低。
二、内点法内点法是一种相对较新的线性规划求解方法,它通过在可行解空间的内部搜索来逼近最优解。
与单纯形法相比,内点法具有更好的数值稳定性和运算效率。
内点法的基本思想是通过将问题转化为求解一系列等价的非线性方程组来求解最优解。
首先,将线性规划问题转化为等价的非线性优化问题,然后通过迭代求解非线性方程组。
每次迭代时,内点法通过在可行解空间的内部搜索来逼近最优解,直到找到满足停止条件的解。
内点法的优点是在计算过程中不需要基变量和非基变量的切换,因此可以避免单纯形法中可能出现的循环问题。
此外,内点法还可以求解非线性约束条件下的最优解,具有更广泛的适用性。
三、其他方法除了单纯形法和内点法,还有一些其他的线性规划求解方法,如对偶方法、割平面法等。
线性规划问题的单纯形解法

例1、解线性规划问题
解:引进松弛变量
于是所给线性规划问题化为标准形式
得到单纯形矩阵
基变量用圆圈标出
检验数绝对值 大的为主列
正元素种比值 小者为主元
例2、解线性规划问题
得到单纯形矩阵
解得:
所以无穷多解为:
最优值为检验行的常数项maxS=1
ቤተ መጻሕፍቲ ባይዱ
解:将约束条件中第一个线性方程式乘以-1,于是所给线性规划问题化为 标准形式
例5、将下面的线性规划问题化为标准形式
于是所给线性规划问题化为标准形式
定义6.3:已知线性规划问题,将它化为标准形式后,写出约束条件中 线性方程组的增广矩阵,在下面添加检验数和常数项,得到的矩阵称 为单纯形矩阵,记作T,单纯形矩阵最下面一行称为检验行 下面通过例子说明求解的一般方法
于是此线性规划问题化为标准形式:
自由未知量称为非基变量, 非自由未知量称为基变量 基变量特征:在线性方程组 的系数中只有一个是1,其 余都是0
问题关键:目标函数的表达式中只显含自由未知量(非基变量),且其系 数皆为负数
基本线性规划问题的单纯形矩阵为
判断此初始基本可行解是否是最优解,方法如下:
下面通过具体例子说明如何寻找新的基变量
§6
线性规划问题的单纯形解法
目标函数 最大值
例1、将下面的线性规划问题化为标准形式
于是所给线性规划问题化为标准形式
例2、将下面的线性规划问题化为标准形式
于是所给线性规划问题化为标准形式
例3、将下面的线性规划问题化为标准形式
于是所给线性规划问题化为标准形式
例4、将下面的线性规划问题化为标准形式
单纯形法解线性规划问题

单纯形法解线性规划问题金融83 周慧媛0812178摘要:线性规划是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法.研究线性约束条件下线性目标函数的极值问题的数学理论和方法,英文缩写LP。
自1946年G.B.Dantizig提出单纯形法以来,它一直是求解线性规划问题的最有效的数学方法之一。
单纯形法的理论根据是:线性规划问题的可行域是n维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。
顶点所对应的可行解称为基本可行解。
通过引入普通单纯形法,依次迭代并判断,逐步逼近,最后得到最优解。
关键字:线性规划,单纯形法,最优值,最优解一、单纯形法的基本思想任何一种单纯形法的迭代算法必须解决三个问题:1.从哪一个顶点开始?2.用一条什么样的有效途径进行出一个顶点向另一个较好的顶点移动?3.何时停止该过程?单纯形法即从一个粗的解开始,成功改进现有的解,直到所要求的目标满足为止。
对于一个迭代算法,要求一个停止规划,以检查是否达到目标。
单纯形法的计算方法:1.找出一个初始的可行基B12.求出对应的典式及检验数向量&3.求&k = max {&j /j=1,2,3….n}4.若&k<=0,停止。
随着经济全球化的不断深化,企业面临更加激烈的市场竞争。
企业须不断提高管理水平,增强其获利能力,在生产、销售、新产品研发等一系列过程中只有自己的优势,提高企业效率,降低成本,形成企业的核心竞争力。
过去很多企业在生产、运输、市场营销等方面没有利用线性规划进行合理的配置,从而增加了企业的生产,使企业的利润不能达到最大化。
在竞争日益激烈的今天,如果还按照过去的方式,是难以生存的,所以就有必要利用线性规划的知识对战略计划、生产、销售各个环节进行优化从而降低生产成本,提高企业的效率。
在各类经济活动中,经常遇到这样的问题:在生产条件不变的情况下,如何通过统筹安排,改进生产组织或计划,合理安排人力、物力资源,组织生产过程,使总的经济效益最好。
用单纯形法解决线性规划问题

盐城师范学院运筹学期末论文题目: 用单纯形法解决线性规划问题姓名: 陈伟二级学院: 数学科学学院专业: 数学与应用数学班级: 111 班学号: 11211149成绩评定:前 言线性规划问题是数学以及日常生活中最基本的问题之一,如何快速有效的解决线性规划问题是数学家也在努力研究的科目之一。
以前中学时我们解决线性规划问题一般采用的是图解法,即画出所给条件的可行域,找出目标函数的最优解。
这种方法的优点是直观性强,计算方便,但缺点是只适用于问题中有两个变量的情况。
下面我们介绍另外一种方法—单纯形法,来解决图解法不能解决的问题。
1 单纯形法1.1 单纯形法的基本思路利用求线性规划问题基本可行解的方法求解较大规模的问题是不可行的。
有选择地取基本可行解,即从可行域的一个极点出发,沿着可行域的边界移动到另一个相邻的极点,要求新极点的目标函数值不比原目标函数值差。
在线性规划的可行域中先找出一个可行解,检验它是否为最优解,如果是最优解,计算停止;如果不是最优解,那么可以判断线性规划无有限最优解,或者根据一定步骤得出使目标函数值接近最优值的另一个基本可行解。
由于基本可行解的个数有限,所以总可以通过有限次迭代,得到线性规划的最优基本可行解或判定线性规划无有限最优解。
1.2 单纯形法的基本步骤第1步求初始基可行解,列出初始单纯形表。
对非标准型的线性规划问题首先要化成标准形式。
由于总可以设法使约束方程的系数矩阵中包含一个单位矩阵(P1,P2,…,Pm ),以此作为基求出问题的一个初始基可行解。
为检验一个基可行解是否最优,需要将其目标函数值与相邻基可行解的目标函数值进行比较。
为了书写规范和便于计算,对单纯形法的计算设计了一种专门表格,称为单纯形表(见表1—1)。
迭代计算中每找出一个新的基可行解时,就重画一张单纯形表。
含初始基可行解的单纯形表称初始单纯形表,含最优解的单纯形表称最终单纯形表。
第2步:最优性检验C j c 1 ,,, c m ,,, c j ,,, c n C j 基 bx 1 … x m … x j … x nc 1 x 1 b 1 c 2 x 2 b 2 ,, ,, ,, c m x m b m1 … 0 … a 1j … a 1n 0 … 0 … a 2j … a 2n ,, … 0 … ,, … ,, 0 … 1 … a mj … a mnc j −z j0 … 0 … c j -∑c i m i=1a ij … c i -∑c n ni=1a ij如表中所有检验数c j −z j ≤0,且基变量中不含有人工变量时,表中的基可行解即为最优解,计算结束。
单纯形法求解线性规划的步骤

单纯形法求解线性规划的步骤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)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){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++){data[row][i]/=temp;}}void SimpleMatrix::SubMatrixLine(int row1,int row2,int col) {double temp=GetItem(row1,col);//double temp=data[row1-1][col-1];double*tempLine=new double[colLen];for(int i=0;i<colLen;i++){tempLine[i]=data[row2][i];}for(i=0;i<colLen;i++){data[row1][i]=data[row1][i]-temp*tempLine[i];}delete[]tempLine;}int SimpleMatrix::GetRows(){return rowLen;}int SimpleMatrix::GetCols(){return colLen;}double SimpleMatrix::GetItem(int row,int col){return data[row][col];}void SimpleMatrix::PrintAnswer(){//先确定单位矩阵中1的位置for (int i=0;i<GetRows();i++)for (int j=0;j<GetRows();j++){if(1==data[i][j]){int index_col=j;cout<<"x"<<index_col+1<<"="<<data[i][colLen-1]<<" ";}}cout<<endl;cout<<"取得最优解,并且最优值为"<<data[rowLen-1][colLen-1];}//单纯形法.cpp#include <iostream>#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); //将主元所在的行做变换,使主元变成1int i=0;while(i<Matrix.GetRows()){if(i!=mainRow){Matrix.SubMatrixLine(i,mainRow,col); //处理矩阵中其他的行,使主元列的元素为0i++;}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;}。
用对偶单纯形法求解线性规划问题

例4-7用对偶单纯形法求解线性规划问题.Min z =5x1+3x2≥6s.t.-2 x1 + 3x2≥43 x1 - 6 x2Xj≥0(j=1,2)解:将问题转化为Max z = -5 x1 - 3 x2+ x3 = -6s.t. 2 x1 - 3x2-3 x1 + 6 x+ x4≥-42Xj≥0(j=1,2,3,4)其中,x3 ,x4为松弛变量,可以作为初始基变量,单纯形表见表4-17.在表4-17中,b=-16<0,而y≥0,故该问题无可行解.注意: 对偶单纯形法仍是求解原问题,它是适用于当原问题无可行基,且所有检验数均为负的情况.若原问题既无可行基,而检验数中又有小于0的情况.只能用人工变量法求解.在计算机求解时,只有人工变量法,没有对偶单纯形法.3.对偶问题的最优解由对偶理论可知,在原问题和对偶问题的最优解之间存在着密切的关系,可以根据这些关系,从求解原问题的最优单纯形表中,得到对偶问题的最优解.(1)设原问题(p)为Min z=CXs.t. ⎩⎨⎧≥=0X bAX则标准型(LP)为Max z=CXs.t. ⎩⎨⎧≥=0X bAX其对偶线性规划(D )为Max z=b T Y s.t. ⎩⎨⎧≥=0X bAX用对偶单纯形法求解(LP ),得最优基B 和最优单纯形表T (B )。
对于(LP )来说,当j=n+i 时,有Pj=-e i ,c j =0从而,在最优单纯形表T (B )中,对于检验数,有(σn+1,σn+2…σn+m )=(c n+1,c n+2…,c n+m )-C B B -1(Pn +1,Pn+2…,Pn+m )=- C B B -1 (-I)于是,Y*=(σn+1,σn+2…σn+m )T 。
可见,在(LP )的最优单纯形表中,剩余变量对应的检验数就是对偶问题的最优解。
同时,在最优单纯形表T (B )中,由于剩余变量对应的系数 所以B -1 =(-y n+1,-y n+2…-y n+m )例4-8 求下列线性规划问题的对偶问题的最优解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、用单纯形第Ⅰ阶段和第Ⅱ阶段解下列问题
s.t.
解:1)、将该线性问题转为标准线性问题
一、第一阶段求解初始可行点
2)、引入人工变量修改约束集合
取人工变量为状态变量,问题变量和松弛变量为决策变量,得到如下单纯形表,并是所有决策变量的值为零,得到人工变量的非负值。
2 -2 -1 1 2
1 1 -1 -1 1
2 -1 -2 1 2
5 -2 -4 1 -1 1 5
0 0 0 0 0
3)、对上述单纯形表进行计算,是目标函数进一步减小,选为要改变的决策变量,计算改变的限值。
2 -2 -1 1 2 1
1 1 -1 -1 1 0
2 -1 -2 1 2 0
5 -2 -4 1 -1 1 5 1
0 0 0 0 0
0 1 0 0 0
4)、由于,为人工变量,当其到达零值时,将其从问题中拿掉保证其值不会再变。
同时将以改变的决策变量转换为状态变量。
增加的值使目标函数值更小。
1 -3 1 1 1 0
1 1 -1 1
1 -3 1 1 1 0
0 0 0 0
0 0 0
5)使所有人工变量为零的问题变量的值记为所求目标函数的初始可行点,本例为,
二、第二阶段用单纯形法求解最优解
-2 2 1 0
1 1 -1 0
-2 1 2 1
5 1 3
要使目标函数继续减小,需要减小或的值,由以上计算,已经有两个松弛变量为零,因此或不能再减小了,故该初始可行点即为最优解。
2、求解问题
s.t.
如果目标函数变成,确定使原解仍保持最优的c值范围,并把目标函数最
大值变达成c的函数。
解:先采用单纯形法求解最优解,再对保持最优解时C值的范围进行讨论。
1)将问题华为标准线性问题
s.t.
2)用单纯形表表示约束条件,同时在不引入人工变量的前提下,取松弛变量得初始值为零值,求解初始解和最优解
10 -1 -1 -1 10
-20 1 5 1 -20
-2 -1 -1 0
0 0 0
要使目标函数继续减小,可以增大,增大的限值是10。
10 -1 -1 -1 10 0
-20 1 5 1 -20 -10
-2 -1 -1 0 -20
0 0 0
10 0 0
3)转轴。
将为零的松弛变量和决策变量交换进行转轴
10 -1 -1 -1 10
-10 4 0 -1 -10 0
-20 1 1 2 -20
0 0 0
0 0
由目标函数,增加时会继续减小。
4)由上图可得和都为0,问题变量不能继续减小,所以已到达最优解。
,,时,
目标函数。
5)如果目标函数为,由最后一次变形得,
,得
+(c-1)
-5/2 -5/2 决策变量都为零,要使最优解保持不变,则系数为正:
解得。