实验6最短路求解的编程实现.docx

上传人:b****5 文档编号:3862117 上传时间:2022-11-25 格式:DOCX 页数:20 大小:115.22KB
下载 相关 举报
实验6最短路求解的编程实现.docx_第1页
第1页 / 共20页
实验6最短路求解的编程实现.docx_第2页
第2页 / 共20页
实验6最短路求解的编程实现.docx_第3页
第3页 / 共20页
实验6最短路求解的编程实现.docx_第4页
第4页 / 共20页
实验6最短路求解的编程实现.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

实验6最短路求解的编程实现.docx

《实验6最短路求解的编程实现.docx》由会员分享,可在线阅读,更多相关《实验6最短路求解的编程实现.docx(20页珍藏版)》请在冰豆网上搜索。

实验6最短路求解的编程实现.docx

实验6最短路求解的编程实现

实验6最短路求解--的编程实现

实验6最短路问题的编程实现

成绩

专业班级数学121学号201212010131姓名覃绍强报告日期.

实验类型:

●验证性实验○综合性实验○设计性实验

实验目的:

熟练最短路问题的Dijkstra算法。

实验内容:

最短路问题的Dijkstra算法。

实验原理最短路问题的Dijkstra算法:

首先对图中的所有节点赋予双标号,即临时标号和永久标号,然后按一定的策略,依次判断并修改节点的临时标号,知道最后将终点改为永久标号求出最短路径。

实验步骤

1要求上机实验前先编写出程序代码

2编辑录入程序

3调试程序并记录调试过程中出现的问题及修改程序的过程

4经反复调试后,运行程序并验证程序运行是否正确。

5记录运行时的输入和输出。

预习编写程序代码:

实验报告:

根据实验情况和结果撰写并递交实验报告。

实验总结:

参考程序

函数文件:

dijkstra.m

function[min,path]=dijkstra(w,start,terminal)

n=size(w,1);label(start)=0;f(start)=start;

%初始化

fori=1:

n

ifi~=start

label(i)=inf;

end

end

s

(1)=start;u=start;

whilelength(s)

fori=1:

n

ins=0;

forj=1:

length(s)

ifi==s(j)

ins=1;

end

end

ifins==0

v=i;

iflabel(v)>(label(u)+w(u,v))

label(v)=(label(u)+w(u,v));

f(v)=u;

end

end

end

%

v1=0;

k=inf;

fori=1:

n

ins=0;

forj=1:

length(s)

ifi==s(j)

ins=1;

end

end

ifins==0

v=i;

ifk>label(v)

k=label(v);

v1=v;

end

end

end

s(length(s)+1)=v1;

u=v1;

end

min=label(terminal);path

(1)=terminal;

i=1;

whilepath(i)~=start

path(i+1)=f(path(i));

i=i+1;

end

path(i)=start;

L=length(path);

path=path(L:

-1:

1);

 

求解下图中的最短路

求解过程:

输入输出:

>>x=

0218InfInfInfInfInfInfInf

20Inf61InfInfInfInfInfInf

1Inf07InfInf9InfInfInfInf

8670512InfInfInfInf

Inf1Inf503Inf21InfInf

InfInfInf1304Inf6InfInf

InfInf92Inf40Inf31Inf

InfInfInfInf2InfInf07InfInf

InfInfInfInfInf637012

InfInfInfInfInfInf1Inf101

InfInfInfInfInfInfInfInf210

>>start=1;

>>terminate=11;

>>[min,path]=dijkstra(x,start,terminate)

min=

6

path=

125911

结果分析:

即最短路径为:

v1→v2→v5→v9→v11,最短距离为:

16,手工计算的结果为:

上述两种结果一致。

 

总结:

通过编程,将最短路的算法加深了印象,也熟悉了matlab编程,颇有收获的一次实验,给力!

 

实验7最大流问题的编程实现

成绩

专业班级数学121学号201212010128姓名秦柯柯报告日期.

实验类型:

●验证性实验○综合性实验○设计性实验

实验目的:

熟练最大流问题的求解算法。

实验内容:

最大流问题的求解算法。

实验原理:

先给定初始可行流,然后找出可扩充路(增广链),调整可扩充路上的流量,使可行流增大,不断重复上述过程,直到不存在可扩充路为止。

实验步骤

1要求上机实验前先编写出程序代码

2编辑录入程序

3调试程序并记录调试过程中出现的问题及修改程序的过程

4经反复调试后,运行程序并验证程序运行是否正确。

5记录运行时的输入和输出。

预习编写程序代码:

实验报告:

根据实验情况和结果撰写并递交实验报告。

实验总结:

参考程序

 

使用lingo求解

model:

sets:

point/v1,v2,v3,v4,v5/;

route(point,point)/v1v2,v1v3,v2v3,v2v4,v4v3,v3v5,v4v5/:

transport,capacity;

endsets

data:

capacity=3212042;

enddata

max=z;

z=@sum(point(j)|@in(route,@index(point,v1),j):

transport(1,j));

@for(point(i)|i#ne#@index(point,v1)#and#i#ne#@index(point,v5):

@sum(point(j)|@in(route,i,j):

transport(i,j))=@sum(point(j)|@in(route,j,i):

transport(j,i)));

@for(route:

transport<=capacity);

end

运行结果:

Globaloptimalsolutionfound.

Objectivevalue:

5.000000

Totalsolveriterations:

0

 

VariableValueReducedCost

Z5.0000000.000000

TRANSPORT(V1,V2)3.0000000.000000

TRANSPORT(V1,V3)2.0000000.000000

TRANSPORT(V2,V3)1.0000000.000000

TRANSPORT(V2,V4)2.0000000.000000

TRANSPORT(V4,V3)0.0000000.000000

TRANSPORT(V3,V5)3.0000000.000000

TRANSPORT(V4,V5)2.0000000.000000

CAPACITY(V1,V2)3.0000000.000000

CAPACITY(V1,V3)2.0000000.000000

CAPACITY(V2,V3)1.0000000.000000

CAPACITY(V2,V4)2.0000000.000000

CAPACITY(V4,V3)0.0000000.000000

CAPACITY(V3,V5)4.0000000.000000

CAPACITY(V4,V5)2.0000000.000000

RowSlackorSurplusDualPrice

15.0000001.000000

20.0000001.000000

30.000000-1.000000

40.0000000.000000

50.000000-1.000000

60.0000000.000000

70.0000001.000000

80.0000001.000000

90.0000000.000000

100.0000001.000000

111.0000000.000000

120.0000001.000000

实验总结:

最大流问题的基本思路是:

先给出初始可行流,再找到可扩充路,不断进行优化,直至无法找到可扩充路为止。

 

实验8排队论与存储论问题的编程实现

成绩

专业班级数学121学号201212010128姓名秦柯柯报告日期.

实验类型:

●验证性实验○综合性实验○设计性实验

实验目的:

了解非线性规划的模型与求解算法。

实验内容:

实验原理

按照存储问题的基本模型类型,通过求解使总费用最小的优化问题,求出最优订购批量、生产批量、最大存储量和最大缺货量、订货周期、间隔等数量指标。

实验步骤

1要求上机实验前先编写出程序代码

2编辑录入程序

3调试程序并记录调试过程中出现的问题及修改程序的过程

4经反复调试后,运行程序并验证程序运行是否正确。

5记录运行时的输入和输出。

预习编写程序代码:

实验报告:

根据实验情况和结果撰写并递交实验报告。

实验总结:

参考程序

 

问题:

某电气公司的生产流水线需要某种零件,该零件需要靠订货得到。

为此公司考虑到了如下费用结构:

1)批量订购的订货费12000元/次

2)每个零件的单位成本10元/件

3)每个零件的存储费用0.3元/(件.月)

4)每个零件的缺货损失1.1元/(件.月)

Lingo求解:

min=0.5*C_P*(Q-S)^2/Q+C_D*D/Q+0.5*C_S*S^2/Q;

N=D/Q;

@gin(N);

data:

C_D=12000;

D=96000;

C_P=3.6;

C_S=13.2;

enddata

运行结果:

Localoptimalsolutionfound.

Objectivevalue:

81257.14

Extendedsolversteps:

3

Totalsolveriterations:

895

 

VariableValueReducedCost

C_P3.6000000.000000

Q32000.000.000000

S6857.1430.000000

C_D12000.000.000000

D96000.000.000000

C_S13.200000.000000

N3.000000-3085.704

RowSlackorSurplusDualPrice

181257.14-1.000000

20.000000-3085.704

 

实验9排队论问题的编程实现

成绩

专业班级数学121学号201212010128姓名秦柯柯报告日期.

实验类型:

●验证性实验○综合性实验○设计性实验

实验目的:

了解非线性规划的模型与求解算法。

实验内容:

实验原理

按照排队论的基本模型:

M/M/1、M/M/c等会计算排队系统的数量指标,包括队长、排队等待的队长、逗留时间、等待时间、忙期、闲期及排队系统的优化。

实验步骤

1要求上机实验前先编写出程序代码

2编辑录入程序

3调试程序并记录调试过程中出现的问题及修改程序的过程

4经反复调试后,运行程序并验证程序运行是否正确。

5记录运行时的输入和输出。

预习编写程序代码:

实验报告:

根据实验情况和结果撰写并递交实验报告。

实验总结:

参考程序

 

程序文件:

%*****************************************

%初始化顾客源

%*****************************************

%总仿真时间

Total_time=10;

%队列最大长度

N=10000000000;

%到达率与服务率

lambda=10;

mu=6;

%平均到达时间与平均服务时间

arr_mean=1/lambda;

ser_mean=1/mu;

arr_num=round(Total_time*lambda*2);

events=[];

%按负指数分布产生各顾客达到时间间隔

events(1,:

)=exprnd(arr_mean,1,arr_num);

%各顾客的到达时刻等于时间间隔的累积和

events(1,:

)=cumsum(events(1,:

));

%按负指数分布产生各顾客服务时间

events(2,:

)=exprnd(ser_mean,1,arr_num);

%计算仿真顾客个数,即到达时刻在仿真时间内的顾客数

len_sim=sum(events(1,:

)<=Total_time);

%*****************************************

%计算第1个顾客的信息

%*****************************************

%第1个顾客进入系统后直接接受服务,无需等待

events(3,1)=0;

%其离开时刻等于其到达时刻与服务时间之和

events(4,1)=events(1,1)+events(2,1);

%其肯定被系统接纳,此时系统内共有

%1个顾客,故标志位置1

events(5,1)=1;

%其进入系统后,系统内已有成员序号为1

member=[1];

fori=2:

arr_num

%如果第i个顾客的到达时间超过了仿真时间,则跳出循环

ifevents(1,i)>Total_time

break;

else

number=sum(events(4,member)>events(1,i));

%如果系统已满,则系统拒绝第i个顾客,其标志位置0

ifnumber>=N+1

events(5,i)=0;

%如果系统为空,则第i个顾客直接接受服务

else

ifnumber==0

%其等待时间为0

2009.1516

%PROGRAMLANGUAGEPROGRAMLANGUAGE

events(3,i)=0;

%其离开时刻等于到达时刻与服务时间之和

events(4,i)=events(1,i)+events(2,i);

%其标志位置1

events(5,i)=1;

member=[member,i];

%如果系统有顾客正在接受服务,且系统等待队列未满,则第i个顾客进入系统

elselen_mem=length(member);

%其等待时间等于队列中前一个顾客的离开时刻减去其到达时刻

events(3,i)=events(4,member(len_mem))-events(1,i);

%其离开时刻等于队列中前一个顾客的离开时刻加上其服

%务时间

events(4,i)=events(4,member(len_mem))+events(2,i);

%标识位表示其进入系统后,系统内共有的顾客数

events(5,i)=number+1;

member=[member,i];

end

end

end

end

%仿真结束时,进入系统的总顾客数

len_mem=length(member);

%*****************************************

%输出结果

%*****************************************

%绘制在仿真时间内,进入系统的所有顾客的到达时刻和离

%开时刻曲线图(stairs:

绘制二维阶梯图)

stairs([0events(1,member)],0:

len_mem);

holdon;

stairs([0events(4,member)],0:

len_mem,'.-r');

legend('到达时间','离开时间');%标签

holdoff;

gridon;%添加网格线

%绘制在仿真时间内,进入系统的所有顾客的停留时间和等

%待时间曲线图(plot:

绘制二维线性图)

figure;

plot(1:

len_mem,events(3,member),'r-*',1:

len_mem,events(2,member)+events(3,member),'k-');

legend('等待时间','停留时间');

gridon;

运行图像:

ans=

2.0092e+003

 

实验10运筹学综合应用

成绩

专业班级数学121学号201212010128姓名秦柯柯报告日期.

实验类型:

○验证性实验●综合性实验○设计性实验

实验目的:

培养用运筹理论与方法解决实际问题的能力。

实验内容:

自己发现生活、生产实际中的问题,建立其数学模型,进行求解,完成实验报告;或针对过去数学建模问题的某一部分进行建模求解,写出实验报告。

实验原理根据生活、生产实际中的问题特征,综合运筹学所学理论与方法建立相应的模型,设计求解算法,求出问题的解。

实验步骤

1要求上机实验前先编建立模型、设计求解算法、写出程序代码

2编辑录入程序

3调试程序并记录调试过程中出现的问题及修改程序的过程

4经反复调试后,运行程序并验证程序运行是否正确。

5记录运行时的输入和输出。

预习编写程序代码:

实验报告:

根据实验情况和结果撰写并递交实验报告。

实验总结:

参考程序

 

问题:

某公司有甲乙两个工厂生产两种产品,这两种产品要运到南北两个地区出售。

相关信息见表格,产品分别有两个工厂中的两个车间来完成。

公司希望采取一些措施来提高经济效益,为此要弄清楚应该关注哪些问题,是扩大销量还是改善工厂的瓶颈问题?

如果扩大销量,首先扩大哪个市场以及首先扩大哪种产品?

如果要增加工厂的有效工时,应首先关注哪一家工厂的哪个车间?

分析:

这是一个线性规划问题,重点在建模并用对偶理论进行分析。

产品收益=售价-销售费用-单价生产成本-单价运费

建模:

销量限制:

,工时限制:

故可建立模型:

s.t

求解:

下面用matlab求解:

1)建立函数文件:

function[sol,val,kk]=ssimplex(A,N)

%--求解标准型线性规划:

maxc*x;s.t.A*x=b;x>=0

%--A:

初始单纯形表,(包括:

第一行为c,最后一行是初始的检验数,最后一列是资源向量b)

%--N:

初始的基变量的下标

%--sol:

是最优解

%--val:

是最优值

%--kk:

是迭代次数

[mA,nA]=size(A);

kk=0;%迭代次数

flag=1;

whileflag

kk=kk+1;

ifA(mA,:

)<=0%已找到最优解

flag=0;

sol=zeros(1,nA-1);

fori=1:

mA-1

sol(N(i))=A(i,nA);

end

val=-A(mA,nA);

else

fori=1:

nA-1

ifA(mA,i)>0&A(1:

mA-1,i)<=0%问题有无界解

disp('haveinfinitesolution!

');

flag=0;

break;

end

end

ifflag%还不是最优表,进行转轴运算

temp=0;

fori=1:

nA-1

ifA(mA,i)>temp

temp=A(mA,i);

inb=i;%进基变量的下标

end

end

sita=zeros(1,mA-1);

fori=1:

mA-1

ifA(i,inb)>0

sita(i)=A(i,nA)/A(i,inb);

end

end

temp=inf;

fori=1:

mA-1

ifsita(i)>0&sita(i)temp=sita(i);

outb=i;%出基变量下标

end

end

%以下更新N

fori=1:

mA-1

ifi==outb

N(i)=inb;

end

end

%以下进行转轴运算

A(outb,:

)=A(outb,:

)/A(outb,inb);

fori=1:

mA

ifi~=outb

A(i,:

)=A(i,:

)-A(outb,:

)*A(i,inb);

end

end

end

end

end

2)输入输出:

>>A=[1000100010000000009000;

0100010001000000007500;

00100010001000000012000;

0001000100010000006000;

1.51.5000000000010000012000;

00220000000001000016000;

11220000000000100030000;

0000110000000001008000;

00000022000000001022000;

00002.52.52.52.5000000000140000;

2356245700000000000;

];

>>N=[9101112131415161718];

>>[sol,val,kk]=ssimplex(A,N)

sol=

8000500075008000400006000

val=

156500

kk=

3

故最优解为(8000,500,0,7500,8000,4000,0,6000),最优值为156500。

3)分析:

与本问题对应的线性规划问题中各约束条件对应的影子价格为:

w*=(0,3,5,7,|1.333,0,0,2,0,0)

由影子价格可知:

(1)销售方面:

首先应当考虑增加产品乙在北部的销量(7最大),其次考虑产品乙在南部的销售量(5次大),再考虑增加产品甲在北部的销售量(3次大),其余的由于影子价格为零,故不用考虑。

(2)工时方面:

首先

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

当前位置:首页 > 经管营销 > 企业管理

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

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