我想请教下高手为什么我手头的这个MATLAb程序运行不起来
最短路一Logit逐次分配算法的实现程序
%%%%%%%子函数1:给出节点o,d之间的交通量信息q%%%%%%%%%%%%
function (o,d川=choose(1)
switch 1
ca se 1
o= l;d =1 2;q =4 30 ;
ca se 2
o=9 ;d =4 ;q= 43 0;
ca se 3
o= 12; d= l;q =4 30 ;
ca se 4
o=4 ;d =9 ;q= 43 0;
end
%%%%%%%%%%%%子函数2:求节点o,d之间路段路权为U 时的最短路
%%%%%%%%%%%
function p=path(o,d,U)
n=12;
k=1;V=zeros(n);S=zeros(n);Q=300"ones(n);
fo ri =l :n
for j= l:n
V(i ,j)= U( ij) ;S( i,j)= J;
en d
end
wh ile k -=n+1
fo ri =i :n
for j= l:n
ifV (i, j)< =V (i, k)+ V( kj )
S(i ,j)= S( ij) ;
else S (ij ) =S (i, k);
V(i ,j)= V (i,k )+ V( k j) ;
en d
k= k+ 1;
end
P=[ol,
while S(o,d)一二d
p= [p,S (o .d)];
o=S (o ,d) ;
en d
p=[Rd];
p
%%%%%%%%%%%%%%%子函数3:将x个OD分表分到最短路集合AA中所有路径上时,
按Logit模型算得的各个路径的分配率%%%%%%%%%%%%
function tf=tflow(x,AA,R,q)
[s,tl=size(AA);
m=10;
for i= 1 :s
Cp (i)= 0;
for j= 1:( t-1)
ifA A (ij )- 0& A A( ij+ l) "=0
Cp (i)= Cp (i) +R (A A( ij) ,A A(i,j+l));
en d
en d
en d
sum=0;
y=-0.1;
for i= 1 :s
sum =s um +e xp (y` Cp (i));
en d
for i= l :s
Pr(i )=e xp (y" Cp (i)) lsu m;
tf(i )=x `q 'P r(i) lm ;
en d
A A
tf
%%%%%%%%%%%%%%%%%主函数%%%%%%%%%%%%%%%%%
%%%%%%%%%路网几何信息;零流路权R、节点个数n、路段通行能力Q、路段流量X
及XX, OD表等分为m份%%%%%%%%%%%%
R=[0,4.2,inf,inf,4.1,infinf,f,斌inf1,1inf,f,inf,f,jinf,,ininf,
4.2 ,0, 4.2 ,inf,inf,4,infin f,inf;inf,inf,inf;
inf, 4.2 ,0 ,4.2,inf,inf,4,inf,inf,inf,inf,inf;
inf, inf ,4. 2,0,inf,inf,inf,4.1,inf,inf,infin f;
4.1 ,in f,in f,inf,0,3.5,inf,inf,4.2,inf,inf,inf;
inf ,4, inf ,inf,3.5,0,3.5,infinf,4,in式栩云
inf ,in f,4 ,inf,inf,3.5,0,3.5,inf,inf,4,inf;
inf in f,in f,4.l,inf,inf,3.5,0,infin f,inf,4.2;
inf ,in f,i nf,inf,4.2,inf,inf,inf,0,4.l,inf,inf,
inf ,in f,i nf,inf,inf,4,inf,inf,4.1,0,4.2,inf;
inf ,in f,i nf,inf,inf,inf,4,inf,inf,4.2,0,4.1;
inf ,inf ,in f,inf,inf,inf,inf,4.2,inf,inf,4.1,0];
R1=R;
W=R;
[n,nl=size(R);
X=eps*ones(n);Q=300*ones(n);XX=eps*ones(n);
m=10;
A=repmat([l,[1,1,4]);
for ss=1:m
%%%%%%%%%%%%求各个OD对之间的最短路集合%%%%%%%%%%%%%%%
fo r1 =1 :4
[o,d ,g l=c ho ose o);
U= W ;
p=p at h(o ,d, U) ;
[u,v ]= siz e(p );
for i= 1 :v
A(s s,i ,l)= p( i);
en d
en d
A(: ,:,1 )
%%%%%%%%%%%%%按照IAgit模型配流,每次分配流量开始路网流量清零
%%%%%%%%%%%%%%%%
X= X X;
for 1= 1 :4
AA =A (:, :,I) ;
[s,t ]=s ize (A A);
Y= rep ma t(z ero s(n),[l,l,s]);
[o,d ,g l=c ho ose o) ;
tf= tflo w( ss, AA ,R,q);
for i= 1 :s
for j= 1 :(t -1)
Y(A A (ij ),A A (i,j +l) ,i)= tf( i);
en d
en d
for i= 1: s
X= X+ Y (:,: ,i);
en d
en d
W=R l+(R I
ss
/Q."4).*(X."4);
end
%%%%%%%%%%%将每个OD 对的最短路集合中重复的路径去掉
%%%%%%%%%%%%%%%
for 1=1:4
fo rt =1 :4
fo ri= 1 :1 0- t
ifA (i+ t,: ,l)= =A (i ,:,l)
A(i ,:,I )=0 ;
en d
en d
en d
end
%%%%%%%%%在零流情况下,采用逐次(m次)分配,每次依M Logit模型配流
%%%%%%%%%%%%
for ss=1:m
fo r1 =1 :4
[o,d ,gj=choose(l);
[u,v ]=size(A(:,:,1));
for i=1:u
for j= l:v
AA (ij )= A(i ,j,l );
en d
en d
[s,t j=size(AA);
Y= regmal(zeros(n),[l,l,s});
tf= tflow(1,AA,R,心;
fo ri =l:s
ifA A (i,:) 一二 0
for j= l:(t -1)
Y(A A (i,j ),A A (ij + l) ,i) =tf (i);
en d
en d
en d
X二XX;
for i= 1:s
X= X+Y(:,:,i);
end
XX=X;
W=Rl+(R1./Q.^4).*(X.^4);
R=W;
endend
%%%%%%%%%%%%%求路网总的通行时间%%%%%%%%%%%%%%
sum=0;
for i=1:n
forj= 1:n
ifW (i j) <1000
sum = sum + W ( i,j );
en d
end
end
X
W
surn
%%%%%%%%%%%%%求分配到流量的路径的流量%%%%%%%%%%%%%
f=zeros(10,4)
for 1=1:4
for i=1:10
[u,vj=s ize(A(i,:,l));
ifA (i,:,1)一=0
fat j= 1:(v -1)
f(i, l)= f(i, l)+X(A(i,j,l),A(i,j+lj));
en d
else f(i,l)=f(i,l);
end(12)
end
end
%%%%%%%%%%%%%求被分配到流量的路径的路权%%%%%%%%%%%%%
g=zeros(10,4)
for 1=1:4
for i=1:10
[u,v ]= siz e(A(i,:,l));
ifA (i, :,l) 一,0
for j= l:(v -1 )
g(i ,l)= g(i ,l) +W (A (ij ,l ),A(ij+ 1,1));
en d
else g (i,l )=g(i,l);
en d
end
g
end