交通分配之用户均衡分配模型二(matlab源码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例
总流量为100,走行函数为:
⎪⎭⎫ ⎝⎛+=40)(6.04)(111t x x c ⎪⎭
⎫ ⎝⎛+=40)(9.06)(222t x x c ⎪⎭
⎫ ⎝⎛+=60)(3.02)(333t x x c ⎪⎭⎫ ⎝⎛+=40)(75.05)(444t x x c ⎪⎭
⎫ ⎝⎛+=40)(45.03)(555t x x c 模型求解的Matlab 源码:
syms lambda ;
tt =[0 0 0 ];
xx = [0 0 0 0 0] ;
t1 = 4 + (0.6/40)*xx(1,1);
t2 =6 + (0.9/40) *xx(1,2);
t3 = 2 + (0.3/60) *xx(1,3);
t4 = 5 + (0.75/40) *xx(1,4) ;
t5 = 3 + (0.45/40) *xx(1,5) ;
Q = 100;
N=8 ; % 迭代次数 ,本例只设置最大迭代次数。也可另外设置收敛条件
tt(1,1)= t1 +t4 ;
tt(1,2) = t2 + t5 ;
tt(1,3) =t1+ t3 +t5 ;
y = [0 0 0]; %置初值
Min = 50000;
for j = 1 : 3
if tt(1 ,j) index = j; end end % y(1,index) = Q; if index ==1 xx(1,1)= Q; xx(1,4)=Q; elseif index ==2 xx(1,2)= Q; xx(1,5)=Q; else xx(1,1)= Q; xx(1,3)=Q; xx(1,5)=Q; end for i =1 :N y = [0 0 0 0 0 ]; t1 = 4 + (0.6/40)*xx(1,1); t2 =6 + (0.9/40) *xx(1,2); t3 = 2 + (0.3/60) *xx(1,3); t4 = 5 + (0.75/40) *xx(1,4) ; t5 = 3 + (0.45/40) *xx(1,5) ; tt(1,1)= t1 +t4 ; tt(1,2) = t2 + t5 ; tt(1,3) =t1+ t3 +t5 ; fprintf('第%d 次迭代的路径时间值:' , i); tt Min = 50000; for j = 1 : 3 if tt(1 ,j) index = j; end end if index ==1 y(1,1)= Q; y(1,4)=Q; elseif index ==2 y(1,2)= Q; y(1,5)=Q; else y(1,1)= Q; y(1,3)=Q; y(1,5)=Q; end % 分配流量给辅助流 fprintf('第%d 次迭代的辅助流量值是:' , i); y zz = xx + lambda * (y-xx); % 按方向(y-xx)进行一维搜索,步长为lamda t1 = 4 + (0.6/40)*zz(1,1); t2 =6 + (0.9/40) *zz(1,2); t3 = 2 + (0.3/60) *zz(1,3); t4 = 5 + (0.75/40) *zz(1,4) ; t5 = 3 + (0.45/40) *zz(1,5) ; f =( y(1,1) -xx(1,1)) * t1 + (y(1,2) -xx(1,2))* t2 +(y(1,3) -xx(1,3))* t3 +(y(1,4) -xx(1,4))* t4 +(y(1,5) -xx(1,5))* t5 ; lambda1 =double( solve(f)) ; %求解方程,确定步长。 k = length(lambda1); % 如步长lambda1的解不唯一,取实数,且大于0 小于1; if k == 1 lambda2 =lambda1; else for m=1: k if lambda1(m,1) > 0 && lambda1(m,1) < 1 && isreal(lambda1(m,1)) lambda2 =lambda1(m,1); end end end fprintf('第%d 次迭代的最优步长值是:' , i); lambda2 fprintf('第%d 次迭代的路段流量值是:' , i); xx = xx + lambda2*(y - xx ) % 得到下一步的流量值,且进行下一次迭代 end