一、遺傳算法簡介
1 引言

2 遺傳算法理論
2.1 遺傳算法的生物學基礎
2.2 遺傳算法的理論基礎
2.3 遺傳算法的基本概念
2.4 标準的遺傳算法
2.5 遺傳算法的特點
2.6 遺傳算法的改進方向
3 遺傳算法流程
4 關鍵參數說明
二、部分源代碼
%% 改進的GA %% 清空環境變量 clc,clear,close all % 清除變量空間 warning off % 消除警告 feature jit off % 加速代碼執行 %% 遺傳算法參數初始化 maxgen = 50; % 進化代數,即疊代次數 sizepop = 50; % 種群規模 pcross = [0.7]; % 交叉機率選擇,0和1之間 pmutation = [0.01]; % 變異機率選擇,0和1之間 delta = 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); t4 = C-L - t(1)-t(2)-t(3); flag=1; if (t(1)<bound(1,1))||(t(2)<bound(2,1))||(t(3)<bound(3,1))||(t(1)>bound(1,2))||(t(2)>bound(2,2))||(t(3)>bound(3,2))||t4<22||t4>33 flag=0; end function ret=Mutation(pmutation,lenchrom,chrom,sizepop,num,maxgen,bound) % 本函數完成變異操作 % pcorss input : 變異機率 % lenchrom input : 染色體長度 % chrom input : 染色體群 % sizepop input : 種群規模 % opts input : 變異方法的選擇 % pop input : 目前種群的進化代數和最大的進化代數資訊 % bound input : 每個個體的上屆和下屆 % maxgen input :最大疊代次數 % num input : 目前疊代次數 % ret output : 變異後的染色體 k1 = 0.6; k2 = 0.7; k3 = 0.001; k4 = 0.01; % 計算适應度 for j=1:sizepop x=chrom(j,:); % 解碼 f(j)=fun(x); % 染色體的适應度 end fmax = max(f); % 适應度最大值 fmin = min(f); % 适應度最小值 favg = mean(f); % 适應度平均值 for i=1:sizepop %每一輪for循環中,可能會進行一次變異操作,染色體是随機選擇的,變異位置也是随機選擇的, %但該輪for循環中是否進行變異操作則由變異機率決定(continue控制) % 随機選擇一個染色體進行變異 pick=rand; while pick==0 pick=rand; end index=ceil(pick*sizepop); f1 = fun( chrom(index(1),:) ); % 個體适應度值 f3 = max(f1); % 兩者中大者 if f3>=favg pmutation = k3*(fmax - f3)./(fmax-favg); else pmutation = k4; end % 變異機率決定該輪循環是否進行變異 pick=rand; if pick>pmutation continue; end flag=0; num = 0; chrom1 = chrom(i,:); while flag==0&&num<=20 % 變異位置 pick=rand; while pick==0 pick=rand; end pos=ceil(pick*sum(lenchrom)); %随機選擇了染色體變異的位置,即選擇了第pos個變量進行變異 pick=rand; %變異開始 fg=(rand*(1-num/maxgen))^2; if pick>0.5 chrom(i,pos)=chrom(i,pos)+(bound(pos,2)-chrom(i,pos))*fg; else chrom(i,pos)=chrom(i,pos)-(chrom(i,pos)-bound(pos,1))*fg; end %變異結束
三、運作結果
四、matlab版本及參考文獻
1 matlab版本
2014a
2 參考文獻
《智能優化算法及其MATLAB執行個體(第2版)》包子陽 餘繼周 楊杉著 電子工業出版社