天天看點

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

一、遺傳算法簡介

1 引言

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】
【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

2 遺傳算法理論

2.1 遺傳算法的生物學基礎

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

2.2 遺傳算法的理論基礎

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

2.3 遺傳算法的基本概念

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】
【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】
【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】
【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】
【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

2.4 标準的遺傳算法

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】
【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

2.5 遺傳算法的特點

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】
【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

2.6 遺傳算法的改進方向

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

3 遺傳算法流程

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】
【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】
【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

4 關鍵參數說明

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

二、部分源代碼

%% 改進的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   %變異結束           

三、運作結果

【優化求解】基于matalb改進的遺傳算法求解IGA城市交通信号優化問題【含Matlab源碼 215期】

四、matlab版本及參考文獻

1 matlab版本

2014a

2 參考文獻

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