资源描述:
《交通分配之随机配流算法matlab源码(含最短路径算法).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本文档含两个m文件dial.m和dijkstra1.m,dial需要调用dijkstra1。算例如下:算法如下:Dial.medge=[112234455678;...243565768989;...222221212222;];n=9;weight=inf*ones(n,n);Q=1000;start=1;endn=9;r=zeros(1,n);s=zeros(1,n);theta=1;L=zeros(n);OD=zeros(n);%============================================
2、========================fori=1:nweight(i,i)=0;endfori=1:size(edge,2)weight(edge(1,i),edge(2,i))=edge(3,i);endLmin=zeros(1,n);fori=1:n[dis,path]=dijkstra1(weight,i,9);s(i)=dis;%任意节点到终点s的最小时间[dis,path]=dijkstra1(weight,1,i);r(i)=dis;%起点r到任意节点最小时间endfori=1:nforj=1:ni
3、fweight(i,j)>0&&weight(i,j)s(j)L(i,j)=exp(theta*(r(j)-r(i)-weight(i,j)));%所有路段似然值endendendLMax=2000;temp=0;tempr=zeros(1,n);rr=zeros(1,n);rr=r;%出发节点i排序fori=1:nMin=2000;forj=1:nifrr(j)4、=zeros(n);%前向计算路段权重fori=1:nforj=1:nifi==startLW(tempr(i),j)=L(tempr(i),j);elsesumlw=0;fortempi=1:9sumlw=sumlw+LW(tempi,tempr(i));endLW(tempr(i),j)=L(tempr(i),j)*sumlw;endendendtemprLWMax=2000;temp=0;temps=zeros(1,n);ss=s;%到达节点j排序fori=1:nMin=2000;forj=1:nifss(j)5、nMin=ss(j);temp=j;endendss(temp)=Max;temps(i)=temp;endtemps%反向装载流量forj=1:ntempOD=0;fortempi=1:9ifOD(temps(j),tempi)>0
6、
7、OD(temps(j),tempi)==0tempOD=tempOD+OD(temps(j),tempi);endendfori=1:nsumlw=0;iftemps(j)==endnfortempi=1:9sumlw=sumlw+LW(tempi,temps(j));endOD(i,te
8、mps(j))=Q*LW(i,temps(j))/sumlw;elsefortempi=1:9sumlw=sumlw+LW(tempi,temps(j));endOD(i,temps(j))=LW(i,temps(j))*tempOD/sumlw;endendendODfunction[distance,path]=dijkstra1(A,s,e)%[DISTANCE,PATH]=DIJKSTRA(A,S,E)%returnsthedistanceandpathbetweenthestartnodeandtheendnod
9、e.%%A:adjcentmatrix%s:startnode%e:endnode%initializen=size(A,1);%nodenumberD=A(s,:);%distancevectorpath=[];%pathvectorvisit=ones(1,n);%nodevisibilityvisit(s)=0;%sourcenodeisunvisibleparent=zeros(1,n);%parentnode%theshortestdistancefori=1:n-1%BlueSethasn-1nodestemp
10、=zeros(1,n);count=0;forj=1:nifvisit(j)temp=[temp(1:count)D(j)];elsetemp=[temp(1:count)inf];endcount=count+1;end[value,index]=min(temp);j=index;visit(j)=