【优化求解】基于遗传算法的城市区域交通信号优化控制matlab代码

188 阅读4分钟

1 简介

城市交通的拥堵是当今社会普遍关注的问题,它严重影响着城市经济的发展以及人们日常的生活出行。交叉口做为城市道路交通的集散点,是交通拥堵的多发地点,因此对交叉口进行良好的信号控制是解决道路拥堵的有效途径。然而城市道路错综复杂,交叉口之间具有关联性,单独对某个拥堵的交叉口或者某条交通干道进行优化控制并不能从根本上解决问题,而应根据交通子区划分原则将一些交叉口划分到同一子区进行协调控制,这样才能起到一定的改善作用。本文结合国内外城市交通控制的现状,通过对交通控制的基本理论以及交通控制子区的划分原则和方法的阐述,构建了以区域内交叉口总延误最小为目标的城市交通区域信号控制优化模型。在优化控制的模型中所采用的延误计算公式分为两类,一类为路网边缘进入车流的延误计算;另一类为路网中间车流的延误计算,其中第二类延误计算公式将两个交叉口之间的相位差作为延误的影响参数引入计算中。通过对所要优化区域的实际调查,得到了区域内各交叉口的信号配时、信号周期以及延误等数据,将所调查得到的配时、周期等参数带入延误计算模型求出延误,然后与实际调查延误进行对比,验证模型的可行性;之后将建立的优化控制模型分别应用在干线和区域的交通优化控制上。​

2 部分代码

%% GA
%% 清空环境变量
clc,clear,close all
warning off
feature jit off
%% 遗传算法参数初始化
maxgen = 50;                      % 进化代数,即迭代次数
sizepop = 50;                     % 种群规模
pcross = [0.7];                    % 交叉概率选择,0和1之间
pmutation = [0.01];                 % 变异概率选择,0和1之间
% 城市交通信号系统参数
C = 140;
L = 10;
load('data.mat')  % 包含交通流量q以及饱和流量xij
q = q./3600;      % 转化为秒s
xij = xij./3600;  % 转化为秒s
%染色体设置
lenchrom=ones(1,3);    % t1、t2、t3
bound=[38,59;26,37;33,44;];   % 数据范围
%---------------------------种群初始化------------------------------------
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]);  %将种群信息定义为一个结构体
avgfitness = [];                      %每一代种群的平均适应度
bestfitness = [];                     %每一代种群的最佳适应度
bestchrom = [];                       %适应度最好的染色体

%% 初始化种群
for i=1:sizepop
   % 随机产生一个种群
   individuals.chrom(i,:)=Code(lenchrom,bound); % 编码(binary和grey的编码结果为一个实数,float的编码结果为一个实数向量)
   x=individuals.chrom(i,:);
   % 计算适应度
   individuals.fitness(i)=fun(x);   % 染色体的适应度 
end

%% 找最好的染色体
[bestfitness bestindex] = min(individuals.fitness);
bestchrom = individuals.chrom(bestindex,:);    % 最好的染色体
% 记录每一代进化中最好的适应度和平均适应度
trace = [bestfitness]; 

%% 迭代求解最佳初始阀值和权值
% 进化开始
for i=1:maxgen
   disp(['迭代次数: ',num2str(i)])
   % 选择
   individuals=Select(individuals,sizepop);
   % 交叉
   individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);
   % 变异
   individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);
   % 计算适应度
   for j=1:sizepop
       x=individuals.chrom(j,:);        % 解码
       individuals.fitness(j)=fun(x);   % 染色体的适应度 
   end

   % 找到最小和最大适应度的染色体及它们在种群中的位置
  [newbestfitness,newbestindex]=min(individuals.fitness);
  [worestfitness,worestindex]=max(individuals.fitness);
   % 代替上一次进化中最好的染色体
   if bestfitness>newbestfitness
       bestfitness=newbestfitness;
       bestchrom=individuals.chrom(newbestindex,:);
   end
   individuals.chrom(worestindex,:)=bestchrom; % 剔除最差个体
   trace=[trace;bestfitness]; %记录每一代进化中最好的适应度
end
x = [bestchrom, C-L-sum(sum(bestchrom))]       % 最佳个体值
D = trace(end)       % 延误误差D
E = D./sum(sum(q));  % 平均延误E

%% 遗传算法结果分析 
figure('color',[1,1,1]),
plot(1:length(trace),trace(:,1),'b--');
title(['适应度曲线 ' '终止代数=' num2str(maxgen)]);
xlabel('进化代数');   ylabel('适应度');
legend('fz最佳适应度');

3 仿真结果

4 参考文献

[1]赵宇航. 基于遗传算法的城市区域交通信号优化控制[D]. 大连交通大学, 2019.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,有科研问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。