1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJWTkpxx
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
其中第一级控制为两个并行模块:绿灯交通强度控制模块与红灯交通强度控制模块。绿灯交通强度控制模块的输入为绿灯相位的排队长度与入口流量,输出绿灯相位的交通强度;红灯相位模块的输入为红灯相位的排队长度,输出为红灯相位的交通强度。
第二级控制是在第一级控制基础上的一个总控制模块,做出是否转换当前相位的决定。其输入为第一级两个模块的输出即绿灯相位交通强度与红灯相位交通强度,输出为是否转换该改相位的决策,该决策的结果只有两个,要么终止当前相位转到下一相位,要么把该相位延长一个延长绿时间,继续显示该相位。
4.部分源码
...................................................................
Times = 1:1:4000;
for i = 1:length(Times)
t = Times(i);
% r%红灯时间,s
r = 30;
% g%——绿灯时间;
g = 60;
% ld%——绿信比(绿灯时间与周期的比值);
ld= g/C;
% y%——流量比,y=q/s;
y = q/s;
% s%——饱和流量(s=0.4辆/s)
S = s/3600;
%排队长度计算公式
Q = v/3600 * (r-6) * (1 + 1/(s/v-1)) * L/n/Fu;
%统计平均延误时间
d(i) = C*(1-ld)^2/(2*(1-y)) + X^2/(2*q*(1-X)) - 0.65*(C/q/q)^(1/3)*X^(2+5*g/C);
end
...........................................................
%加入模糊控制器的对比
Tmin = 10;
Tmax = 20;
Gj = 60;
RR = readfis('Red_controller');
GG = readfis('Green_controller');
RG = readfis('GA_FNN.fis');
figure(2);
subplot(311);plotmf(RG,'input',1); title('R隶属函数变化-GA优化前');
subplot(312);plotmf(RG,'input',2); title('G隶属函数变化-GA优化前');
subplot(313);plotmf(RG,'output',1); title('RG隶属函数变化-GA优化前');
for i = 1:length(Times)
t = Times(i);
%控制器初始状态
if i == 1
% r%红灯时间,s
r = 30;
% g%——绿灯时间;
g = Gj;
% s%饱和流率,辆/h
s = 300;
% v%到达率,辆/h
v = 290;
% L%车辆长度(包括车辆间的距离、)
L = 4.8;
% n%车道数
n = 4;
% Fu%车道利用系数
Fu= 0.6;
% X%——饱和度;
X = 0.9;
% C%——周期时长;
C = g + r;
% q%——流量;
if mod(i,5) == 1;
q = 80 + 10*sin(2*pi*t) + 5*randn;
end
% ld%——绿信比(绿灯时间与周期的比值);
ld= g/C;
% y%——流量比,y=q/s;
y = q/s;
% s%——饱和流量(s=0.4辆/s)
S = s/3600;
else
%调用控制器
%绿灯排队长度计算公式
Qg = v/3600 * (g-6) * (1 + 1/(s/v-1)) * L/n/Fu;
%路口流量
traffic_flow = q;
...................................................................................
%最终控制输出
gout;
%总的判决
if g >= Tmin & g <= Tmax
g = gout;
end
if g <= Tmin
g = Tmin;
end
if g >= Tmax
g = Tmax;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% r%红灯时间,s
r = 30;
% s%饱和流率,辆/h
s = 300;
% v%到达率,辆/h
v = 290;
% L%车辆长度(包括车辆间的距离、)
L = 4.8;
% n%车道数
n = 4;
% Fu%车道利用系数
Fu= 0.6;
% X%——饱和度;
X = 0.9;
% C%——周期时长;
C = g + r;
% q%——流量;
if mod(i,5) == 1;
q = 80 + 10*sin(2*pi*t) + 5*randn;
end
% ld%——绿信比(绿灯时间与周期的比值);
ld= g/C;
% y%——流量比,y=q/s;
y = q/s;
% s%——饱和流量(s=0.4辆/s)
S = s/3600;
end
%统计平均延误时间
d(i) = C*(1-ld)^2/(2*(1-y)) + X^2/(2*q*(1-X)) - 0.65*(C/q/q)^(1/3)*X^(2+5*g/C);
d(i) = d(i)/2;
end
figure(1);
hold on;
plot(Times,d,'k');
hold on;
%加入GA+模糊控制器的对比
%加入GA+模糊控制器的对比
%加入GA+模糊控制器的对比
%加入GA+模糊控制器的对比
Tmin = 10;
Tmax = 20;
Gj = 60;
RR = readfis('Red_controller');
GG = readfis('Green_controller');
RG = readfis('GA_FNN.fis');
figure(2);
subplot(311);plotmf(RG,'input',1); title('R隶属函数变化-GA优化前');
subplot(312);plotmf(RG,'input',2); title('G隶属函数变化-GA优化前');
subplot(313);plotmf(RG,'output',1); title('RG隶属函数变化-GA优化前');
%GA优化
RG_opt = readfis('GA_FNN_OPT.fis');
figure(3);
subplot(311);plotmf(RG_opt,'input',1); title('R隶属函数变化-GA优化后');
subplot(312);plotmf(RG_opt,'input',2); title('G隶属函数变化-GA优化后');
subplot(313);plotmf(RG_opt,'output',1); title('RG隶属函数变化-GA优化后');
for i = 1:length(Times)
t = Times(i);
%控制器初始状态
if i == 1
% r%红灯时间,s
r = 30;
% g%——绿灯时间;
g = Gj;
% s%饱和流率,辆/h
s = 300;
% v%到达率,辆/h
v = 290;
% L%车辆长度(包括车辆间的距离、)
L = 4.8;
% n%车道数
n = 4;
% Fu%车道利用系数
Fu= 0.6;
% X%——饱和度;
X = 0.9;
% C%——周期时长;
C = g + r;
% q%——流量;
if mod(i,5) == 1;
q = 80 + 10*sin(2*pi*t) + 5*randn;
end
% ld%——绿信比(绿灯时间与周期的比值);
ld= g/C;
% y%——流量比,y=q/s;
y = q/s;
% s%——饱和流量(s=0.4辆/s)
S = s/3600;
else
%调用控制器
%绿灯排队长度计算公式
Qg = v/3600 * (g-6) * (1 + 1/(s/v-1)) * L/n/Fu;
%路口流量
traffic_flow = q;
%红灯排队长度计算公式
Qr = v/3600 * (r-6) * (1 + 1/(s/v-1)) * L/n/Fu;
%绿灯相位控制器
G_Power = evalfis([Qg,traffic_flow],GG);
%红灯相位控制器,红灯排队长度越长,那么红灯强度减弱,红灯排队长度越短,那么红灯强度减强,
R_Power = evalfis(Qr,RR);
%GA模糊控制器,输出gout
gout = evalfis([G_Power,R_Power],RG_opt);
%最终控制输出
gout;
%总的判决
if g >= Tmin & g <= Tmax
g = gout;
end
if g <= Tmin
g = Tmin;
end
if g >= Tmax
g = Tmax;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% r%红灯时间,s
r = 30;
% s%饱和流率,辆/h
s = 300;
% v%到达率,辆/h
v = 290;
% L%车辆长度(包括车辆间的距离、)
L = 4.8;
% n%车道数
n = 4;
% Fu%车道利用系数
Fu= 0.6;
% X%——饱和度;
X = 0.9;
% C%——周期时长;
C = g + r;
% q%——流量;
if mod(i,5) == 1;
q = 80 + 10*sin(2*pi*t) + 5*randn;
end
% ld%——绿信比(绿灯时间与周期的比值);
ld= g/C;
% y%——流量比,y=q/s;
y = q/s;
% s%——饱和流量(s=0.4辆/s)
S = s/3600;
end
%统计平均延误时间
d(i) = C*(1-ld)^2/(2*(1-y)) + X^2/(2*q*(1-X)) - 0.65*(C/q/q)^(1/3)*X^(2+5*g/C);
d(i) = d(i)/2;
end
figure(1);
hold on;
plot(Times,d,'r');
legend('不加控制器的平均延误时间','加控制器的平均延误时间','加控制器(GA优化)的平均延误时间');
xlabel('times');
ylabel('平均延误时间');
grid on;
hold on;
10_024_m