两阶段算法求解线性规划问题(运筹学实验)

两阶段算法求解线性规划问题(运筹学实验)

ID:13449159

大小:31.00 KB

页数:6页

时间:2018-07-22

两阶段算法求解线性规划问题(运筹学实验)_第1页
两阶段算法求解线性规划问题(运筹学实验)_第2页
两阶段算法求解线性规划问题(运筹学实验)_第3页
两阶段算法求解线性规划问题(运筹学实验)_第4页
两阶段算法求解线性规划问题(运筹学实验)_第5页
资源描述:

《两阶段算法求解线性规划问题(运筹学实验)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、两阶段算法求解线性规划问题(运筹学实验)%此函数是使用两阶段算法求解线性规划问题function[x,minf,optmatrx,flag]=linp(A,c,b)%x可行解minf最优解oprmatrx最优解对应的单纯形表flag判断解的情况的标志fprintf('n请输入约束条件的系数矩阵!n');A=input('A=');fprintf('n请输入最右端的列向量!n');b=input('b=');%b为列向量fprintf('n请输入目标函数的系数矩阵!n');c=input('c=');formatrat%可以让结果用分数输出[m,n]=size(

2、A);[p,q]=size(b);fori=1pifb(i)0A(i,)=A(i,)-1;b(i)=b(i)-1;endend%第一阶段辅助问题的求解auxchart=zeros(m+2,m+n+1);%确定第一张辅助单纯形表,并将其置0auxchart(1,)=[-c,zeros(1,m+1)];%给表的第一行赋值auxchart(2,)=[zeros(1,n),-1ones(1,m),0];%给表的第二行赋值auxchart([3m+2],)=[A,eye(m,m),b];%将变量系数和右端向量填到表中basvar=[n+1n+m];%基变量是辅助变量%使

3、基变量的检验数为零fori=3m+2auxchart(2,)=auxchart(2,)+auxchart(i,);end%进行辅助问题的换基迭代checknum1=find(auxchart(2,[1m+n])0);%checknum1向量中记录检验数大于零的位置while~isempty(checknum1)column1=checknum1(1);%取第一个大于零的数postivecheck1=auxchart([3m+2],column1);%postivecheck1为记录检验数大于零的列向量rightvector1=auxchart([3m+2],m

4、+n+1);%rightvector1为记录右端向量的矩阵temp1=find(postivecheck10);%在postivecheck1向量中找大于零的位置ifisempty(temp1)fprintf('n此问题不存在最优解!n');x=[]minf=[]optmatrx=[]flag=-1returnendmin1=Inf;%初始化最小值为无穷fori=3m+2ifpostivecheck1(i-2)0&rightvector1(i-2)postivecheck1(i-2)min1%找最小比min1=rightvector1(i-2)postivec

5、heck1(i-2);row1=i;%记录位置endendauxchart(row1,)=auxchart(row1,)auxchart(row1,column1);%化为一fori=1m+2%进行初等行变换ifi~=row1auxchart(i,)=auxchart(i,)+(-1auxchart(i,column1)auxchart(row1,));endendbasvar(row1-2)=column1;%出基和进基checknum1=find(auxchart(2,[1m+n])0);%重新找检验向量中大于零的数的位置end%如果辅助问题的最优解大于零

6、,则原问题无可行解ifauxchart(2,m+n+1)0fprintf('n此问题不存在最优解!n');x=[]minf=[]optmatrx=[]flag=-1returnendjudge=find(basvarn);%如果辅助问题的最优解等于零,且基变量中无辅助变量,则直接删除表中第二行和人工变量ifauxchart(2,m+n+1)==0&isempty(judge)ifisempty(judge)auxchart(2,)=[];auxchart(,[n+1n+m])=[];end%如果基变量中存在辅助变量,则直接进行换基迭代直到基变量中不存在人工变量

7、elsewhileauxchart(2,m+n+1)==0&(~isempty(judge))row2=judge(1)+2;temp2=find(auxchart(row2,[1n])~=0)ifisempty(temp2)auxchart(row2,)=[];%直接删除全为零的行judge(1,)=[];%删除人工变量elsecolumn2=temp2(1);%记录下第一个不为零的列数auxchart(row2,)=auxchart(row2,)auxchart(row2,column2);basvar(row2-2)=column2;%记录下进基变量fo

8、ri=1m+n+1%进行初等行变换if

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。