一、遺傳算法簡介
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 = 100; % 種群規模
pcross = [0.7]; % 交叉機率選擇,0和1之間
pmutation = [0.1]; % 變異機率選擇,0和1之間
%染色體設定
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
%% 改進的GA
%% 清空環境變量
% clc,
clear % ,close all % 清除變量空間
warning off % 消除警告
% feature jit off % 加速代碼執行
%% 遺傳算法參數初始化
maxgen = 50; % 進化代數,即疊代次數
sizepop = 100; % 種群規模
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)=fun1(x); % 染色體的适應度
end
%% 找最好的染色體
[bestfitness bestindex] = min(individuals.fitness);
bestchrom = individuals.chrom(bestindex,:); % 最好的染色體
% 記錄每一代進化中最好的适應度和平均适應度
trace = [bestfitness];
%% 疊代求解最佳初始閥值和權值
% 進化開始
for i=1:maxgen
disp(['疊代次數: ',num2str(i)])
% 選擇
individuals=Select1(individuals,sizepop);
% 交叉
individuals.chrom=Cross1(pcross,lenchrom,individuals.chrom,sizepop,bound);
% 變異
individuals.chrom=Mutation1(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);
% 計算适應度
for j=1:sizepop
x=individuals.chrom(j,:); % 解碼
individuals.fitness(j)=fun1(x); % 染色體的适應度
end
fmax = max(individuals.fitness); % 适應度最大值
fmin = min(individuals.fitness); % 适應度最小值
favg = mean(individuals.fitness); % 适應度平均值
individuals.fitness = (individuals.fitness + abs(fmin))./(fmax+fmin+delta); %适應度标定
[newbestfitness,newbestindex]=min(individuals.fitness);
[worestfitness,worestindex]=max(individuals.fitness);
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=individuals.chrom(newbestindex,:);
end
三、運作結果
四、matlab版本及參考文獻
1 matlab版本
2014a
2 參考文獻
《智能優化算法及其MATLAB執行個體(第2版)》包子陽 餘繼周 楊杉著 電子工業出版社