运筹学实验报告文档格式.docx

上传人:b****1 文档编号:13512760 上传时间:2022-10-11 格式:DOCX 页数:16 大小:17.33KB
下载 相关 举报
运筹学实验报告文档格式.docx_第1页
第1页 / 共16页
运筹学实验报告文档格式.docx_第2页
第2页 / 共16页
运筹学实验报告文档格式.docx_第3页
第3页 / 共16页
运筹学实验报告文档格式.docx_第4页
第4页 / 共16页
运筹学实验报告文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

运筹学实验报告文档格式.docx

《运筹学实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《运筹学实验报告文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

运筹学实验报告文档格式.docx

最优解时x=[].

minf:

输出线性规划问题的最优值,当线性规划问题没有可行解时minf=[],

当线性规划问题有可行解无最优解时minf=-Inf。

flag:

线性规划问题的求解结果标志值,当线性规划问题有最优解时flag=1,

当线性规划问题有可行解无最优解时flag=0,当线性规划问题没有可行解时flag=-1.

cpt:

输出最优解对应的单纯性表,当线性规划问题没有可行解或有可

行解无最优解时cpt=[].

三、Linp函数

%此函数是使用两阶段算法求解线性规划问题

function[x,minf,flag,cpt]=linp(A,b,c);

fori=1:

p%判断b是否<

将b转换成大于0;

ifb(i)<

A(i,:

)=-1*A(i,:

);

b(i)=-1*b(i);

end

end

%返回值:

x,第一张单纯形表,基,标志参数A,c,b

%********第一张单纯形表的初始化

[m,n]=size(A);

%获得矩阵A的维数

[p,q]=size(b);

dcxb=zeros(m+2,m+n+1);

%确定第一张单纯形表的大小

dcxb(1,:

)=[-c,zeros(1,m+1)];

给表的第一行赋值

dcxb(2,:

)=[zeros(1,n),-1*ones(1,m),0];

给表的第二行赋值

dcxb([3:

m+2],:

)=[A,eye(m,m),b];

%添A和b到表中

jxl=[n+1:

n+m];

fori=3:

m+2

)=dcxb(2,:

)+dcxb(i,:

dxcb(2,:

)=dxcb1(2,:

)+dxcb1(i,:

dxcb;

%************辅助问题换基迭代**********************

dyl=find(dcxb(2,[1:

m+n])>

0);

while~isempty(dyl)

firstnum=dyl

(1);

dll=dcxb([3:

m+2],firstnum);

youduanb=dcxb([3:

m+2],m+n+1);

look=find(dll>

ifisempty(look)

dcxb(2,firstnum)=0;

else

min=Inf;

fori=3:

ifdll(i-2)>

0&

youduanb(i-2)/dll(i-2)<

min

min=youduanb(i-2)/dll(i-2);

line1=i;

dcxb(line1,:

)=dcxb(line1,:

)/dcxb(line1,firstnum);

fori=1:

m+2

ifi~=line1

dcxb(i,:

)=dcxb(i,:

)+(-1*dcxb(i,firstnum)*dcxb(line1,:

));

jxl(line1-2)=firstnum;

dyl=find(dcxb(2,[1:

dcxb

ifdcxb(2,m+n+1)>

fprintf('

g>

0,´

此问题没有可行解'

x=[];

minf=inf;

cpt=[];

flag=-1;

return

look1=find(jxl>

n);

ifdcxb(2,m+n+1)==0%等于0,判断基变量中是否有人工变量;

if~isempty(look1)%´

存在时进行处理

while~isempty(look1)

line2=look1

(1)+2;

chdy0=find(dcxb(line2,[1:

n])~=0);

ifisempty(chdy0)%´

存在人工变量都为零的那一行,去掉该行

dcxb(line2,:

)=[];

look1

(1)=[];

jxl(line2-2)=[];

else%否则进行换基迭代

secondnum=chdy0

(1);

)=dcxb(line2,:

)/dcxb(line2,secondnum);

jxl(line2-2)=secondnum;

ifi~=line2

)+(-1*dcxb(i,secondnum)*dcxb(line2,:

end;

%去掉人工变量,得到单纯性的第一张表

dcxb(:

[n+1:

n+m])=[];

%有可行解,判断z

dcxb2=dcxb;

look2=find(dcxb2(1,[1:

n])>

while~isempty(look2)

thirdnum=look2

(1);

duilie=dcxb2([2:

m+1],thirdnum);

youduanb1=dcxb2([2:

m+1],n+1);

look3=find(duilie>

ifisempty(look3)

´

此问题有可行解,但没有最优解'

x=zeros(n,1);

[mi,n1]=size(jxl);

n1

x(jxl(i))=dcxb2(i+1,n+1);

可行解为'

x

minf=-Inf

cpt=[]

flag=0

min1=Inf;

m

ifduilie(i)>

youduanb1(i)/duilie(i)<

min1%找最小比值

min1=youduanb1(i)/duilie(i);

line=i+1;

%记录行数

dcxb2(line,:

)=dcxb2(line,:

)/dcxb2(line,thirdnum);

m+1

ifi~=line

dcxb2(i,:

)=dcxb2(i,:

)+(-1*dcxb2(i,thirdnum)*dcxb2(line,:

jxl(line-1)=thirdnum;

dcxb2

look2=find(dcxb2(1,[1:

minf=dcxb2(1,n+1);

x=zeros(n,1);

[p,q]=size(jxl);

fprintf('

\最优解已找到n'

q

最优可行解为:

'

x

最优值为:

minf

cpt=dcxb2;

最优解对应的单纯形表为:

cpt

flag=1

return

例题1.

A=[1/211/2-2/3;

3/203/40];

b=[2;

3];

c=[4030];

运行结果:

>

[x,minf,flag,cpt]=linp(A,b,c)

请一次输入系数矩阵A;

输入右端向量b;

输入所求问题的向量c

dcxb=

-4.00000-3.00000000

2.00001.00001.2500-0.6667005.0000

0.50001.00000.5000-0.66671.000002.0000

1.500000.7500001.00003.0000

00-1.0000002.66678.0000

01.00000.2500-0.66670-1.33331.0000

01.00000.2500-0.66671.0000-0.33331.0000

1.000000.5000000.66672.0000

0000-1.0000-1.00000

最优解已找到!

x=

2

1

0

minf=

8

cpt=

00-1.000008.0000

01.00000.2500-0.66671.0000

1.000000.500002.0000

flag=

ans=

例题2

A=[1/211/2-2/3;

3/203/40;

3-604];

3;

0];

运行结果

Columns1through6

-4.00000-3.0000000

5.0000-5.00001.25003.333300

0.50001.00000.5000-0.66671.00000

1.500000.7500001.0000

3.0000-6.000004.000000

Columns7through8

00

05.0000

02.0000

03.0000

1.00000

0-8.0000-3.00005.333300

05.00001.2500-3.333300

02.00000.5000-1.33331.00000

03.00000.7500-2.000001.0000

1.0000-2.000001.333300

Columns7through

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1