👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
本文基于遗传算法(整数表示)程序,以便根据单个十字路口的交通拥堵情况优化绿色时间。给定每条道路上汽车总数的总和,我们可以对道路上的每个红绿灯获得准确的结果。请注意,生成此算法的每个解决方案并不意味着是最佳解决方案,而是足够好的解决方案。轮盘用于联轴器。
📚2 运行结果
部分代码:
%% Mutation
% Create empty Matrix with length the number of mutants
popm=repmat(empty_individual,nm,1);
k=1;
while k<=nm
% Select Parent population
i=randi([1 nPop]); %nPop value 100
p=pop(i);
% Apply Mutation
nVar=4;
nmu=ceil(mu*nVar);
j=randi([1 nVar]);
prosimo=randi([-1 1]);
sigma=prosimo*0.02*(greenMax-greenMin);
mutated=p.GreenNSWE(j)+sigma;
popm(k).GreenNSWE = p.GreenNSWE;
popm(k).GreenNSWE(j)=mutated;
popm(k).GreenNSWE=max(popm(k).GreenNSWE,greenMin);
popm(k).GreenNSWE=min(popm(k).GreenNSWE,greenMax);
if(sum(popm(k).GreenNSWE)>current_cycle)
continue;
end
for j=1:nLights
% Evaluate Mutant
popm(k).TotalDelay(j)=FitnessFunction(current_cycle, popm(k).GreenNSWE(j), RoadCongestionNSWE(j),RoadcapacityNSWE(j));
end
% Summation of delay quotients
popm(k).TotalDelay=real(sum(popm(k).TotalDelay));
k=k+1; %step
end
%% INVERSION
% Create empty Matrix
popinv=repmat(empty_individual,nm,1);
k=1;
while k<=ninv
% Select Parent population
i=randi([1 nPop]);
p=pop(i);
% Apply Inversion
nVar=numel(p.GreenNSWE);
randomgene1=randi([1 4]);
randomgene2=randi([1 4]);
y=p.GreenNSWE;
popinv(k).GreenNSWE=y;
x=popinv(k).GreenNSWE(randomgene1);
popinv(k).GreenNSWE(randomgene1)=popinv(k).GreenNSWE(randomgene2);
popinv(k).GreenNSWE(randomgene2)=x;
popinv(k).GreenNSWE=max(popinv(k).GreenNSWE,greenMin);
popinv(k).GreenNSWE=min(popinv(k).GreenNSWE,greenMax);
if(sum(popinv(k).GreenNSWE)>current_cycle)
continue;
end
for j=1:nLights
% Evaluate Mutant
popinv(k).TotalDelay(j)=FitnessFunction(current_cycle, popinv(k).GreenNSWE(j), RoadCongestionNSWE(j),RoadcapacityNSWE(j));
end
% Summation of delay quotients
popinv(k).TotalDelay=real(sum(popinv(k).TotalDelay));
k=k+1;
end
% Make 2 rows 1
popinv=popinv(:);
%% Merge Population
pop=[pop
popc
popm
popinv]; %#ok
% Sort New Population according to TotalDelay
TotalDelay=[pop.TotalDelay];
[TotalDelay, SortOrder]=sort(TotalDelay);
pop=pop(SortOrder);
% Update Worst Cost
WorstDelay=max(WorstDelay,pop(end).TotalDelay);
% Keep the Best Population from the given number
pop=pop(1:nPop);
TotalDelay=TotalDelay(1:nPop);
% Store Best Solution Ever Found
BestSol=pop(1);
% Store Best Cost Ever Found
BestDelay(it)=BestSol.TotalDelay;
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]stelios krasadakis (2023). Traffic Light Management Algorithm through Genetic Algorithms .