天天看點

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

一、遺傳算法簡介

1 引言

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

2 遺傳算法理論

2.1 遺傳算法的生物學基礎

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

2.2 遺傳算法的理論基礎

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

2.3 遺傳算法的基本概念

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

2.4 标準的遺傳算法

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

2.5 遺傳算法的特點

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

2.6 遺傳算法的改進方向

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

3 遺傳算法流程

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】
【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

4 關鍵參數說明

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

二、部分源代碼

%% 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
           

三、運作結果

【優化求解】改進的遺傳算法(GA+IGA)求解城市交通信号優化問題【Matlab 213期】

四、matlab版本及參考文獻

1 matlab版本

2014a

2 參考文獻

《智能優化算法及其MATLAB執行個體(第2版)》包子陽 餘繼周 楊杉著 電子工業出版社

繼續閱讀