先附上**
%%輸入初始資訊
o=[1,1,2,2,3,4,4,5,5,6,7,8,9];%網路節點
d=[2,4,3,5,6,5,7,6,8,9,8,9,9];%網路節點
w=[2,2,2,2,2,1,2,1,2,2,2,2,0];%權重
linkweight=sparse(o,d,w);%構建稀疏矩陣
%起點origin=1;
destination=9;
num_nodes=length(o);
%求起點到終點最短路
%dis=zeros(9,9);
for i=1:9 %可改
for j=1:9
[dist,path]=graphshortestpath(linkweight,i,j);%最短路工具箱
dis(i,j)=dist;
end
end
r=dis(1,:);%起點到任何一節點的最短路
s=dis(:,9);%任何一點到終點的最短路
%定義發點
for i=1:9
m=find(o==i);
oi=[d(m)];
end
%定義收點
for i=1:9
m=find(d==i);
di=[o(m)];
end di=1;
%計算likelihood
theta=1;
for i=1:9
for j=1:9
if r(i)s(j)
l(i,j)=exp(theta*(r(j)-r(i)-linkweight(i,j)));
end
end
end
l(9,:)=zeros(1,9);%補全矩陣
%setp 2 先前計算權重,將l變為稀疏矩
for i=1:length(o)
l(i,1)=l(o(i),d(i))
endlsparse=sparse(o,d,l(1:length(d)));
%前向計算路段權重
wi=weight(lsparse,o,di,d,oi,origin,destination);
%反向裝載路段流量
q=1000;destination=9;
xi=flow(o,di,d,oi,wi,q,destination,origin);
定義路段權重函式
function wi=weight(lsparse,o,di,d,oi,origin,destination)
wi=sparse(o,d,zeros(1,length(o)));
for k=1:10
for i=1:destination
if di==origin
%if di==1
wi(i,oi)=lsparse(i,oi);
else
wi(i,oi)=lsparse(i,oi)*sum(wi(di,i));
endend
end
end
定義似然估計函式
function lsparse=likelihood(r,s,theta,w,o,d)
l=zeros(1,length(o));
for k=1:length(o)
if r(o(k))s(d(k))
l(k)=exp(theta*(r(d(k))-r(o(k))-w(k)));
endendlsparse=sparse(o,d,l);
end
路段流量計算
function xi=flow(o,di,d,oi,wi,q,destination,origin)
xi=sparse(o,d,zeros(1,length(o)));
for k=1:150
for i=max(o):-1:origin
%if oi==9
if oi==destination
xi(i,oi)=q*wi(i,oi)/sum(wi(di,oi));
xi(di,i)=wi(di,i)*sum(xi(i,oi))/sum(wi(di,i));
endif wi(di,i)~=0
xi(di,i)=wi(di,i)*sum(xi(i,oi))/sum(wi(di,i));
endend
endend
that』s! all
後續再介紹原理。
參考《交通規劃原理》
靜態分配和動態分配
記憶體的靜態分配和動態分配的區別主要是兩個 一是時間不同。靜態分配發生在程式編譯和連線的時候。動態分配則發生在程式調入和執行的時候。二是空間不同。堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式 靜態分配和動態分配。靜態分配是編譯器完成的,比如區域性變數的分配。動態分配由函式malloc進行分配...
記憶體分配靜態陣列
include include 靜態陣列 void main1 增加 查詢 刪除 修改 int a 10 int length 10 void main2 int num 3 刪除陣列裡的3 for int i 0 i length i 判定要刪除的物件是不是最後乙個,是的話直接長度 1 else ...
動態分配與靜態分配記憶體
記憶體的靜態分配和動態分配的區別主要是兩個 一是時間不同。靜態分配發生在程式編譯和連線的時候。動態分配則發生在程式調入和執行的時候。二是空間不同。堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式 靜態分配和動態分配。靜態分配是編譯器完成的,比如區域性變數的分配。動態分配由函式malloc進行分配...