資源簡介
遺傳算法實現公交車調度,人工智能課程設計,自己原創,在MATLAB上調試通過。

代碼片段和文件信息
clear?all;
close?all;
clc;
%變量初始化
populationSize=80;???%群體大小??
generationSize=800;?????%進化代數
codeLength=35;??%編碼長度
children=zeros(populationSize7);?%存儲子代分量及適應度
pr=0.15;????%復制概率?
pm=0.1;?????%變異概率
pc=0.60;????%交叉概率
E=round(rand(populationSizecodeLength));????%隨機產生二進制串
%主函數
for?k=1:1:generationSize
????
for?s=1:1:populationSize
x=E(s:);
temp=zeros(17);%臨時保存子代各分量的十進制值
%編碼
for?i=1:35
????if?i<=6
????????temp(1)=temp(1)+x(i)*2^(i-1);
????elseif?i>=7?&&?i<=13
????????temp(2)=temp(2)+x(i)*2^(i-6-1);
????elseif?i>=14?&&?i<=19
????????temp(3)=temp(3)+x(i)*2^(i-13-1);
????elseif?i>=20?&&?i<=25
????????temp(4)=temp(4)+x(i)*2^(i-19-1);
????elseif?i>=26?&&?i<=30
????????temp(5)=temp(5)+x(i)*2^(i-25-1);
????elseif?i>=31?&&?i<=35
????????temp(6)=temp(6)+x(i)*2^(i-30-1);
????end
end
children(s1)=round(60*temp(1)/(2^6-1));
children(s2)=round(70*temp(2)/(2^7-1));
children(s3)=round(60*temp(3)/(2^6-1));
children(s4)=round(50*temp(4)/(2^6-1));
children(s5)=round(20*temp(5)/(2^5-1));
children(s6)=round(30*temp(6)/(2^5-1));
children(s7)=round(children(s1)+children(s2)+children(s3)+children(s4)+children(s5)+children(s6));
while?children(s1)+children(s6)<60||children(s1)+children(s2)<70||children(s2)+children(s3)<60||...
????????children(s3)+children(s4)<50||children(s4)+children(s5)<20||children(s5)+children(s6)<30
????E(s:)=round(rand(1codeLength));
????x=E(s:);
????temp=zeros(17);
?for?i=1:35
????if?i<=6
????????temp(1)=temp(1)+x(i)*2^(i-1);
????elseif?i>=7?&&?i<=13
????????temp(2)=temp(2)+x(i)*2^(i-6-1);
????elseif?i>=14?&&?i<=19
????????temp(3)=temp(3)+x(i)*2^(i-13-1);
????elseif?i>=20?&&?i<=25
????????temp(4)=temp(4)+x(i)*2^(i-19-1);
????elseif?i>=26?&&?i<=30
????????temp(5)=temp(5)+x(i)*2^(i-25-1);
????elseif?i>=31?&&?i<=35
????????temp(6)=temp(6)+x(i)*2^(i-30-1);
????end
?end
children(s1)=round(60*temp(1)/(2^6-1));
children(s2)=round(70*temp(2)/(2^7-1));
children(s3)=round(60*temp(3)/(2^6-1));
children(s4)=round(50*temp(4)/(2^6-1));
children(s5)=round(20*temp(5)/(2^5-1));
children(s6)=round(30*temp(6)/(2^5-1));
children(s7)=round(children(s1)+children(s2)+children(s3)+children(s4)+children(s5)+children(s6));
end
end
%?Step?1?:?確定適應度函數
fitness=1./children(:7);??????????????????????
[orderFitnessindexFitness]=sort(fitness);?????%orderFitness按行從小到大排序的新矩陣indexFitness元素位置構成的新矩陣?????????????????????????????????????????????????????????????????????????????????
bestFitness=orderFitness(populationSize);??????%bestFitness=max(fitness)
bestS=E(indexFitness(populationSize):);???????%bestS?精英保留
%Step?2?:?復制操作
sumFitness=sum(fitness);
fitnessSize=(orderFitness/sumFitness)*populationSize;
fitnessSelect=floor(fitnessSize);????????%朝負無窮大方向取整????????????????????????
kk=1;
for?i=1:1:populationSize
????for?j=1:1:fitnessSelect(i)????????????%Select?and?Reproduce?
????????TempE(kk:)=E(indexFitness(i):);??
????????kk=kk+1;????????????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????91648??2014-03-21?19:37??GeneticAlgorithm\BusDispatch.doc
?????文件???????3981??2013-06-20?22:23??GeneticAlgorithm\GeneticAlgorithm.m
?????目錄??????????0??2014-03-21?19:50??GeneticAlgorithm
-----------?---------??----------?-----??----
????????????????95629????????????????????3
- 上一篇:基于MATLAB的單純形法PID尋優程序
- 下一篇:SFLA_Func01
評論
共有 條評論