数学建模课件-中国邮路问题

余年寄山水
616次浏览
2021年01月04日 14:41
最佳经验
本文由作者推荐

原来你什么都不想要-从你的全世界路过影评

2021年1月4日发(作者:窦遵)


数学建模课件-中国邮路问题0-1规划法
首先建立matlab函数文件:
function [D,path]=floyd1(a)

a(find(a==0))=inf;

n=size(a,1); %¼ÆËã³öaµÄ¹æÄ£µÄ´óС.

D=a;path=zeros(n,n);%ÉèÖÃDºÍpathµÄ³õÖµ.

for i=1:n

for j=1:n

if D(i,j)~=inf

path(i,j)=j;

end

end

end

%×ön´Îµü´ú£¬Ã¿´Îµü´ú¾ù¸üРD(i,j)ºÍpath(i,j)

for k=1:n

for i=1:n

for j=1:n

if D(i,k)+D(k,j)
D(i,j)=D(i,k)+D(k,j);

path(i,j)=path(i,k);

end

end

end

end
for i=1:n

D(i,i)=0;

path(i,i)=0;

end

根据文献中距离矩阵
D

0

,在命令窗口中输入对应的矩阵a(实际上可以在excel
中输入
D

0

中非零数,但

置为0,所得数据再拷入 matlab命令窗口中):
>> a

a =

0 2 8 1 0 0 0 0 0 0 0
2 0 6 0 1 0 0 0 0 0 0
8 6 0 7 5 1 2 0 0 0 0
1 0 7 0 0 0 9 0 0 0 0
0 1 5 0 0 3 0 2 9 0 0
0 0 1 0 3 0 4 0 6 0 0
0 0 2 9 0 4 0 0 3 1 0
0 0 0 0 2 0 0 0 7 0 9


0 0 0 0 9 6 3 7 0 1 2
0 0 0 0 0 0 1 0 1 0 4
0 0 0 0 0 0 0 9 2 4 0
根据a求出奇点:
b=a>0;

n=length(b);

for i=1:n

if mod(sum(b(i,:)),2)==1

c(i)=i;

end

end

c


c =

1 2 0
c中非零数及对应奇点
>> [D,path]=floyd1(a)

D =

0 2 7
2 0 5
7 5 0
1 3 7
3 1 4
6 4 1
9 7 2
5 3 6
11 9 4
10 8 3
13 11 6


path =

1 2 2
1 2 5
6 6 3
1 1 3
2 2 6
5 5 3
3 3 3
5 5 5
4 5
1 3
3 1
7 4
0 4
4 0
7 3
9 6
6 2
8
7
10
4 2
1 5
4 6
4 1
2 5
5 5
4 3
5 5
0 7
6 9
4 7
1 2
7 9
3 6
0 3
3 0
5 8
5 2
4 1
7 4
2 2
5 5
6 7
1 7
6 6
6 3
3 7
5 5
8 0
5 11
3 9
6 4
6 11
2 8
5 5
8 2
0 7
7 0
8 1
9 2
2 2
5 5
6 7
1 7
8 6
5 3
3 10
8 9
10 11
10 13
8 11
3 6
10 13
7 10
4 7
1 4
8 9
1 2
0 3
3 0
2 2
5 5
7 7
7 7
6 6
3 3
10 10
9 11









11
10
13








10 10 10 10 10 10 10 8 9 10 11
7 7 7 7 7 7 7 9 9 10 9
9 9 9 9 9 9 9 8 9 9 11
其中D为最短距离矩阵
然后,在D中找到奇点对应的距离矩阵e,可以如下取得
>> r=c(c>0)

r =

1 2 4 5 7 8 10 11
>> e=D(r,r)

e =

0 2 1 3 9 5 10 13
2 0 3 1 7 3 8 11
1 3 0 4 9 6 10 13
3 1 4 0 6 2 7 10
9 7 9 6 0 8 1 4
5 3 6 2 8 0 8 9
10 8 10 7 1 8 0 3
13 11 13 10 4 9 3 0
最后将数据e写入如下lingo程序:

sets:
v1..8;
vv(v,v):e,x;
endsets
data:
e=
0 2 1 3 9 5 10 13
0 0 3 1 7 3 8 11
0 0 0 4 9 6 10 13
0 0 0 0 6 2 7 10
0 0 0 0 0 8 1 4
0 0 0 0 0 0 8 9
0 0 0 0 0 0 0 3
0 0 0 0 0 0 0 0;
enddata
min=@sum(vv:e*x);
@for(vv(i,j)|i#ge#j:x(i,j)=0);
@for(v(i):@ sum(v(k):x(k,i))+@sum(v(j):x(i,j))=1);
@for(vv:@bin(x));
部分结果显示:
Global optimal solution found.


Objective value: 12.00000
Objective bound: 12.00000
Infeasibilities: 0.000000
Extended solver steps: 0
Total solver iterations: 0


Variable Value Reduced Cost
X( 1, 3) 1.000000 1.000000
X( 2, 4) 1.000000 1.000000
X( 5, 7) 1.000000 1.000000
X( 6, 8) 1.000000 9.000000


一笼小确幸-知识产权论文


四物汤的功效与作用-雷锋的小故事


错位节拍-栖息的近义词


低谷英文-课本剧


dnf模型修改-文员简历


圣诞礼物图片-七一建党节


缓解视疲劳-尼古拉斯狂想曲


奎因新皮肤-苗助长