0
点赞
收藏
分享

微信扫一扫

【路径规划】基于遗传算法求解单向交通流分配优化问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:​​Matlab科研工作室​​

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

​​智能优化算法​​       ​​神经网络预测​​       ​​雷达通信 ​​      ​​无线传感器​​        ​​电力系统​​

​​信号处理​​              ​​图像处理​​               ​​路径规划​​       ​​元胞自动机​​        ​​无人机 ​​

⛄ 内容介绍

上层模型

微循环路网的主要目的是缓解干道压力,减少拥堵,提高区域路网的交通效率,因此对微循环路网组织优化模型的目标如下:

(1)路网交通效率最大

交通效率最大可表示为所有车辆通过研究区域的时间总和最小。

【路径规划】基于遗传算法求解单向交通流分配优化问题附matlab代码_最短路径

(2)干道饱和度最小

为了防止干道发生拥堵,应该把干道饱和度最小也作为模型优化的目标之一。

【路径规划】基于遗传算法求解单向交通流分配优化问题附matlab代码_最小值_02

(3)微循环支路饱和度最小

微循环路网虽用于缓解干道交通,但其是人们生活的主要场所,微循环路网也不能过度拥挤,所以将微循环支路饱和度最小作为模型优化的目标之一。

【路径规划】基于遗传算法求解单向交通流分配优化问题附matlab代码_最短路径_03

将三个目标赋予一定的权重ω1、ω2、ω3,代表优化目标的侧重程度,从而将多目标调整成单目标函数,当单目标函数达到最小时,其中包含的(3)(4)(5)式三个目标不一定同时达到最小,但却是总体最优的情况,上层规划的目标函数表达式如下:

【路径规划】基于遗传算法求解单向交通流分配优化问题附matlab代码_初始化_04

下层模型

下层模型是基于用户平衡分配的交通流分配模型,下层模型的决策变量是各个路段的机动车交通量xa,模型的数学表达如下。


【路径规划】基于遗传算法求解单向交通流分配优化问题附matlab代码_最短路径_05

⛄ 部分代码

% 文件名: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

 


⛄ 运行结果

【路径规划】基于遗传算法求解单向交通流分配优化问题附matlab代码_最小值_06

⛄ 参考文献

[1]石丽娟. 遗传算法求解函数优化问题的Matlab实现[J]. 福建电脑, 2010(6):3.


⛳️ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


举报

相关推荐

0 条评论