✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
上层模型
微循环路网的主要目的是缓解干道压力,减少拥堵,提高区域路网的交通效率,因此对微循环路网组织优化模型的目标如下:
(1)路网交通效率最大
交通效率最大可表示为所有车辆通过研究区域的时间总和最小。
(2)干道饱和度最小
为了防止干道发生拥堵,应该把干道饱和度最小也作为模型优化的目标之一。
(3)微循环支路饱和度最小
微循环路网虽用于缓解干道交通,但其是人们生活的主要场所,微循环路网也不能过度拥挤,所以将微循环支路饱和度最小作为模型优化的目标之一。
将三个目标赋予一定的权重ω1、ω2、ω3,代表优化目标的侧重程度,从而将多目标调整成单目标函数,当单目标函数达到最小时,其中包含的(3)(4)(5)式三个目标不一定同时达到最小,但却是总体最优的情况,上层规划的目标函数表达式如下:
下层模型
下层模型是基于用户平衡分配的交通流分配模型,下层模型的决策变量是各个路段的机动车交通量xa,模型的数学表达如下。
⛄ 部分代码
% 文件名:dijkstra.m
% 时间:2020年9月12日
% 来源:https://blog.csdn.net/lishan132/article/details/108527271
% 功能:利用dijkstra算法计算两点间的最短路径
% dist:起点与终点之间的最短距离值
% path:最短路径索引
% Distance:最短路径下的距离值
% A:邻接矩阵
% strat:起点编号
% dest:终点编号
function [dist,path,Distance] = dijkstra(A,start,dest)
% 测试数据 A =[0,12,inf,inf,inf,16,14;12,0,10,inf,inf,7,inf;inf,10,0,3,5,6,inf;inf,inf,3,0,4,inf,inf;inf,inf,5,4,0,2,8;16,7,6,inf,2,0,9;14,inf,inf,inf,8,9,0];
% 测试数据 start = 1;
% 测试数据 dest = 4;
% 计算程序运行时间
tic %开始计时
% 初始化操作
p = size(A,1); %计算顶点数目
S(1) = dest; %初始化集合S,已加入到路径中的顶点编号
U = 1:p; %初始化集合U,未加入到路径中的顶点编号
U(dest) = []; %删除终点编号
Distance = zeros(2,p); %初始化所有顶点到终点dest的距离
Distance(1,:) = 1:p; %重赋值第一行为各顶点编号
Distance(2,1:p) = A(dest,1:p); %重赋值第二行为邻接矩阵中各顶点到终点的距离
new_Distance = Distance;
D = Distance; %初始化U中所有顶点到终点dest的距离
D(:,dest) = []; %删除U中终点编号到终点编号的距离
path = zeros(2,p); %初始化路径
path(1,:) = 1:p; %重赋值第一行为各顶点编号
path(2,Distance(2,:)~=inf) = dest; %距离值不为无穷大时,将两顶点相连
% 寻找最短路径
while ~isempty(U) %判断U中元素是否为空
index = find(D(2,:)==min(D(2,:)),1); %剩余顶点中距离最小值的索引
k = D(1,index); %发现剩余顶点中距离终点最近的顶点编号
%更新顶点
S = [S,k]; %将顶点k添加到S中
U(U==k) = []; %从U中删除顶点k
%计算距离
new_Distance(2,:) = A(k,1:p)+Distance(2,k); %计算先通过结点k,再从k到达终点的所有点距离值
D = min(Distance,new_Distance); %与原来的距离值比较,取最小值
%更新路径
path(2,D(2,:)~=Distance(2,:)) = k; %出现新的最小值,更改连接关系,连接到结点k上
%更新距离
Distance = D; %更新距离表为所有点到终点的最小值
D(:,S) = []; %删除已加入到S中的顶点
end
dist = Distance(2,start); %取出指定起点到终点的距离值
toc %计时结束
% 输出结果
fprintf('找到的最短路径为:');
while start ~= dest %到达终点时结束
fprintf('%d-->',start); %打印当前点编号
next = path(2,start); %与当前点相连的下一顶点
start = next; %更新当前点
end
fprintf('%d\n',dest);
fprintf('最短路径对应的距离为:%d\n',dist);
end
⛄ 运行结果
⛄ 参考文献
[1]石丽娟. 遗传算法求解函数优化问题的Matlab实现[J]. 福建电脑, 2010(6):3.
⛳️ 完整代码
❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料