运筹学实验报告.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

运筹学实验报告

一、实验目的:

通过实验熟悉单纯形法的原理,掌握matlab循环语句的应用,提高编程的能力和技巧,体会matlab在进行数学求解方面的方便快捷。

二、实验环境:

Matlab2012b,计算机

三、实验内容(包含参数取值情况):

构造单纯形算法解决线性规划问题

Minz=cx

s.t.Ax=b

xj>=0,j=1,…,n

函数功能如下:

function[S,val]=danchun(A1,C,N)

其中,S为最优值,Val为最优解,A1为标准形式LP问题的约束矩阵及最后一列为资源向量(注:资源向量要大于零),A1=[A+b];C是目标函数的系数向量,C=c;N为初始基的下标(注:请按照顺序输入,若没有初始基则定义N=[])。

先输入A1,C,N三个必要参数,然后调用danchun(A1,C,N)进行求解。在此函数中,首先判断N的长度是否为空,若为空,则flag=1,进入初始解问题的迭代求值,添加辅助问题,构建单纯形表,求g所对应的RHS值,若其>0,则返回该问题无解,若其=0,则返回A1,C,N三个参数,继续构造单纯形表求解。A1为经过变换后的系数及资源向量,C为单纯形表的第一行,N为经过辅助问题求解之后的基的下标。否则,直接构建单纯形表,对该问题进行求解,此时flag=2,多次迭代后找到解。另外,若在大于零的检验数所对应的系数均小于零时,会显示“此问题无界”。

若找到最优解和最优值时,会输出“val”和“S=”以及具体数值。

四、源程序(在matlab中输入edit后回车,写在.M文件中,并保存为danchun.M)function[S,val]=danchun(A1,C,N)

if(length(N)==0)

gN=zeros(1,length(A1(:,1)));

gC=[-C,gN,0];%原文题的检验数的矩阵

Z=gC;

G=[zeros(1,length(C)),-ones(1,length(gN)),0];

val=zeros(1,length(C));%val为最优解;

fori=(length(C)+1):length(C)+length(A1(:,1))%生成基变量

gN(i-length(C))=i;

end

Nn=gN;

%%%%%%%

ll=zeros(1,length(N));%比值最小原则

%生成除了最上端两行的表的矩阵

gb=A1(:,length(C)+1);

A1(:,length(C)+1)=[];

l=zeros(length(gN),length(gN));

gA=[A1,l,gb];

fori=1:length(gb)

gA(i,gN(i))=1;

end

fori=1:length(gN)%J为基本可行基所对应的检验数

J(i)=G(gN(i));

end

fori=1:length(gN)%找到基本可行基的检验数,将其赋值为0

if(J(i)~=0)

G=G-(J(i)/gA(i,gN(i)))*gA(i,:);

end

end

flag=1;

else

flag=2;

A=A1;

Z=[-C,0];%单纯形表的第一行

val=zeros(1,length(C));%val为最优解;

ll=zeros(1,length(N));%比值最小原则

end

%%初始解问题

whileflag==1

fori=1:length(gN)%J为基本可行基所对应的G的检验数

J(i)=G(gN(i));

JZ(i)=Z(gN(i));%JZ为基本可行基所对应的Z的检验数

end

fori=1:length(gN)%找到基本可行基的检验数,将其赋值为0

if(J(i)~=0)

G=G-(J(i)/gA(i,gN(i)))*gA(i,:);

Z=Z-(JZ(i)/gA(i,gN(i)))*gA(i,:);

end

end

G1=G;%G1为检验数

G1(:,length(G1))=[];

D=max(G1);%找到检验数的最大值

if(D<=0)%检验数都小于0

if(G(length(G))>=1)

disp('此情况无解');

flag=0;

else

if(G(length(G))>=0)

fori=1:length(gN)

if(max(gN)<=length(A1(1,:)));

flag=2;

forj=1:length(Nn)

a=Nn(1);

gA(:,a)=[];

Z(a)=[];

end

A=gA;

N=gN;

break;

end

end

end

end

els

文档评论(0)

189****1877 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体天津市武清区仲夏信息咨询工作室
IP属地天津
统一社会信用代码/组织机构代码
92120222MA829GNN0C

1亿VIP精品文档

相关文档