EDA365电子论坛网
标题:
使用双约束重力模型求解的数学模型。
[打印本页]
作者:
House
时间:
2020-5-6 13:48
标题:
使用双约束重力模型求解的数学模型。
最近在论文阅读中遇到了需要使用到双约束重力模型求解的数学模型。
8 B" {% H7 i; i
( Q" D1 r% N% W- Y* T
在论坛里关于重力模型的资料有见到过,但是双约束的还是比较少见的
0 {, c" n1 g' ~" F" u
6 Y3 S4 ^# |* N
发一个今天自己用R2015b写好的上来,交通专业的朋友如果需要的话可以试着使用一下~~
1 I/ e% K1 t3 C+ Q
(p.s. 最终写出这个程序,要献给我的女朋友阿肥,为了当初毕设未能完成的目标~)
B, b" W6 w' J; f9 a; ]9 Q8 O) h
) d* h2 w: n, v; W' W# z* n
函数需要输入的参数有4个:
8 w% h' f7 u# j" ^# n p" Q @
①起讫点OD总量,分别用两个向量表示
& J/ e2 A' d( c) z" }
7 j0 j! U) T Y" b; u
②OD间阻抗信息fc,函数里默认了fc是固定值,如果不同OD对之间阻抗不一样需要做相应的修改~
2 p4 l8 {1 `/ I
) e, v" ^! \( U- I8 `" u
③收敛阈值delta,用于判断模型系数a,b是否已达到要求
$ i0 M& E5 c* j- S' |
5 {: L# Y+ K" @
算法里有什么错误之处欢迎各位前辈批评指正!
感谢!
& M5 o) V9 A3 ^+ V; l
function GM_Mat=DCGModel(O,D,fc,delta)
%This function solves the doubly constrained gravity model during trip
%distribution
%O input vector of traffic demand in each zone
%D input vector of trip end in each zone
%fc input travel impedance function
%GM_Mat output trip distribution matrix of the input OD zone
%% index initialization
m=size(O,2);
%define vectors of factor a and b with first iteration(fi) and next
%iteration(ni) respectively
a_fi=zeros(1,size(O,2));
b_fi=zeros(1,size(D,2));
a_ni=zeros(1,size(O,2));
b_ni=zeros(1,size(D,2));
%first let all elements in a_fi=1
a_fi( : )=1;
%% iteration commences
%set judging factor flag=0
flag=0;
%use flag to judge when should the loop stop
while flag==0
%compute b_fi with a_fi
for i=1:m
for j=1:m
b_fi(i)=b_fi(i)+a_fi(j)*D(j)*fc;
end
b_fi(i)=1/b_fi(i);
end
%compute a_ni with b_fi
for i=1:m
for j=1:m
a_ni(i)=a_ni(i)+b_fi(j)*D(j)*fc;
end
a_ni(i)=1/a_ni(i);
end
%compute b_ni with a_ni
for i=1:m
for j=1:m
b_ni(i)=b_ni(i)+a_ni(j)*D(j)*fc;
end
b_ni(i)=1/b_ni(i);
end
%convergence test
for i=1:m
if a_ni(i)/a_fi(i)>1-delta && a_ni(i)/a_fi(i)<1+delta && b_ni(i)/b_fi(i)>1-delta && b_ni(i)/b_fi(i)<1+delta
judge(i)=1;
%judge is, namely, a matrix to store index for judging
else
judge(i)=0;
end
end
if prod(judge)==1
flag=1;%if all elements in judge equal to 1, iteration stops
else
flag=0;
a_fi=a_ni;
b_fi=b_ni;%else, let a_ni be a_fi, b_ni be b_fi, iteration continues
end
end
%% compute the trip ditribution matrix(with a_ni and b_ni) and print it out
for i=1:m
for j=1:m
GM_Mat(i,j)=a_ni(i)*O(i)*b_ni(j)*D(j)*fc;
end
end
7 L# Z& ]4 P N# x6 w/ Z) X, R
* X$ R1 o& u, Z B$ m9 z' U2 Q0 d
5 G1 [4 O# o7 h& _7 z+ k: _
U( I1 J- |3 Y% [" M0 `
作者:
lufeideshijie
时间:
2020-5-6 17:37
看看楼主分享的使用双约束重力模型求解的数学模型。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2