数学建模实验7解答

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告7

1.某产品从仓库运往市场销售,已知各仓库的可供量、各市场需求量及从i 仓库至j市场的路径的运输能力如下表所列(表中数字0代表无路),试求从仓库

解:应用最大流算法必须是单源单汇的网络.构造一个虚拟的源点v s,由于A,B,C 的可供量为20,20,100,则弧v s A,v s B,v s C上的容量分别为20,20,100,构造一个虚拟的汇点v t,由于市场1,2,3,4的需求量分别为20,20,60,20,市场1,2,3,4分别记为D、F、H、I,则弧Dv t,Fv t,Hv t,Iv t的容量分别为20,20,60,20。构造赋权有向图(V,E,W),其中V为顶点集合,E为弧的集合,W为各个弧上的容量构成的权重矩阵,具体计算时把顶点v s,A,B,C,D,F,H,I,v t分别编号为1,2,...,9,从仓库到市场的最大流问题归结为求从v s到v t的最大流,可以使用Ford-Fulkerson算法求最大流。

clc,clear

a=zeros(9);

a(1,[2:4])=[20,20,100];

a(2,[5,6,8])=[30,10,40];

a(3,[7,8])=[10,50];

a(4,[5:8])=[20,10,40,5];

a([5:8],9)=[20,20,60,20];

a=sparse(a);

[b,c]=graphmaxflow(a,1,9)

运行结果为:

b=

110

c=

(1,2)20

(1,3)15

(1,4)75

(4,5)20

(2,6)10

(3,7)10

(4,7)40

(2,8)10

(3,8)5

(4,8)5

(5,9)20

(6,9)20

(7,9)50

(8,9)20

即求得从仓库运往市场的最大流量为110单位,其中市场3只能满足50单位,差10单位。

2.某单位招收懂俄、英、日、德、法文的翻译各一名,有5人应聘。已知乙懂俄文,甲、乙、丙、丁懂英文,甲、丙、丁懂日文,乙、戊懂德文,戊懂法文,问这5个人是否都能得到聘书?最多几个得到聘书,招聘后每人从事哪一方面翻译工作?

解:将5个人与5个外语语种分别用点表示,把各个人与懂得的外语语种之间用弧相连。为了求单源和单汇网络的最大流,再加一个虚拟的单源vs,vs与5个人之间各有一条弧,再加一个虚拟的单汇vt,在5个外语语种和vt之间各有一条弧。规定每条弧的容量为1,求出上述网络的最大流数字即为最多能得到招聘的人数。计算时把源点vs,甲乙丙丁戊5个人,俄英日德法5个外语语种和汇点vt 分别编号为1,2, (12)

clc,clear

a=zeros(12);

a(1,[2:6])=1;

a(2,[8,9])=1;

a(3,[7,8,10])=1;

a(4,[8,9])=1;

a(5,[8,9])=1;

a(6,[10,11])=1;

a([7:11],12)=1;

a=sparse(a);

[b,c]=graphmaxflow(a,1,12)

运行结果:

b=

4

c=

(1,3)1

(1,4)1

(1,6)1

(3,7)1

(5,8)1

(4,9)1

(6,10)1

(7,12)1

(8,12)1

(9,12)1

(10,12)1

求得只有4个人得到招聘,乙—俄,丁—英,丙—日,戊—德,甲未能得到应聘.

3.将下表所列的某运输问题的相关数据转化为最小费用最大流问题,画出

解:为了使用最大流算法,必须构造单源单汇的网络,加一个虚拟的源点v s,一个虚拟的汇点v t,得到的网络图如图,其中弧旁的第一个数字为单位流的费用,第二数字表示容量.

首先求出最大流的流量为15,

n=7

C=zeros(7)

C(1,[2,3])=[8,7]

C(2,[4,5,6])=[8,8,8]

C(3,[4,5,6])=[777]

C(4,7)=4

C(5,7)=5

C(6,7)=6

运行结果为:

wf=

15

No=

8000000

再建立求最小费用的线性规划模型,求得最小费用为240。求最小费用的程序如下:

model:

sets:

nodes/s,a,b,1,2,3,t/:d;

arcs(nodes,nodes)/s a,s b,a1,a2,a3,b1,b2,b3,1t,2t,3t/:b,c,f;

endsets

data:

b=0020245302220000;

c=87888777456;

d=1500000-15;!最大流为15;

enddata

n=@size(nodes);!顶点的个数;

min=@sum(arcs:b*f);

@for(nodes(i):@sum(arcs(i,j):f(i,j))-@sum(arcs(j,i):f(j,i))=d(i));

@for(arcs:@bnd(0,f,c)); end

相关文档
最新文档