【優化求解】基於matalb改進的遺傳算法(GA+IGA)的城市交通信號優化【含Matlab源碼 213期】

一、簡介

1 遺傳算法基本理論
遺傳學認爲,遺傳是作爲一種指令遺傳碼封裝在每個細胞中,並以基因的形式包含在染色體中,每個基因有特殊的位置並控制某個特殊的性質。每個基因產生的個體對環境有一定的適應性。基因雜交和突變可能產生對環境適應性強的後代,通過優勝劣汰的自然選擇,適應度值高的基因結構就保存下來。
遺傳算法借鑑“適者生存”的遺傳遺傳學理論,將優化問題的求解表示成“染色體”的“適者生存”過程,通過“染色體”羣的一代代複製、交叉、變異的進化,最終得到的是最適應環境的個體,從而得到問題的最優解或者滿意解。這是一種高度並行、隨機和自適應的通用的優化算法。
遺傳算法的一系列優點使它近年來越來越受到重視,在解決衆多領域的優化問題中得到了廣泛的應用,其中也包括在交通領域的成功應用。
2 遺傳算法的特點
遺傳算法是模擬生物自然環境中的遺傳和進化過程而形成的一種自適應全局優化概率搜索算法。是一類可用於複雜系統優化計算的魯棒搜索算法,與其他一些優化算法相比,它具有很多特點。
傳統的優化算法主要有三種:枚舉法、啓發式算法和搜索算法:
1.枚舉法
枚舉法在可行解集合內枚舉所有可行解,以求出精確最優解。對於連續函數,該方法要求先對其進行離散化處理,這樣就可能因離散處理而永遠達不到最優解。此外,當枚舉空間比較大時,該算法的求解效率非常低,極其耗時。
2.啓發式算法
啓發式算法尋求一種能產生可行解的啓發式規則,以找到一個最優解或近似最優解。啓發式算法的求解效率比較高,但對每一個需求解的問題必須找出其特有的啓發式規則,這個啓發式規則一般無通用性,不適合於其他問題。
3.搜索算法
搜索算法在可行解集合的一個子集內進行搜索操作,以找到問題的最優解或者近似最優解。搜索算法雖然保證不了一定能夠得到問題的最優解,但若適當的利用一些啓發知識,就可在近似解的質量和效率上達到一種較好的平衡。
3 基本遺傳算法的工作流程
在這裏插入圖片描述
4 適應度函數
在這裏插入圖片描述
5 選擇算子
選擇又稱爲複製,是在羣體中選擇生命力強的個體產生新的羣體的過程。遺傳算法使用選擇算子來對羣體中的個體進行優勝劣汰操作,根據每個個體的適應度大小選擇,適應度較高的個體被遺傳到下一代羣體中的概率較大;反之亦然。這樣就可以使得羣體中個體的適應度值不斷接近最優解。選擇算子的確定的好壞,直接影響到遺傳算法的計算結果。
下面介紹幾種典型常用的選擇算子:
1.輪盤賭選擇
2.隨機競爭選擇
3.隨機遍歷選擇
4.排序選擇
5.聯賽選擇
6 交叉算子
下面介紹幾種適合於二進制編碼個體或十進制編碼個體的交叉算子。
l.單點交叉
單點交叉(One-point Crossover)又稱爲簡單交叉,是最常用和最基本的交叉操作算子。它以二值串中的隨機選擇點開始,對每一對相互配對的個體,依設定的交叉概率在其交叉點處相互交換兩個個體的部分染色體,從而產生出兩個新的個體。
2.兩點交叉與多點交叉
兩點交叉(Two-point Crossover)是指在個體編碼串中隨即設置兩個交叉點,然後再進行部分基因交換。兩點交叉的具體過程是:
(1)在相互配對的兩個個體編碼串中隨即設置兩個交叉點。
(2)交換兩個個體在所設定的兩個交叉點之間的部分染色體。
3.均勻交叉
均勻交叉是指兩個配對個體的每個基因座上基因都以相同的交叉概率進行交換,從而形成兩個新的個體。其具體運算可通過設置一屏蔽字來確定新個體的各個基因如何由哪一個父代個體來提供。
4.算術交叉
算術交叉是指由兩個個體的線性組合而產生出兩個新的個體。爲了能夠進行線性組合運算,算術交叉的操作對象一般是浮點數編碼所表示的個體。
7 變異算子
遺傳算法中所謂的變異運算,是指將個體染色體編碼串中的某些基因座上的基因值用該基因座的其他等位基因來替換,從而形成一個新的個體。變異是遺傳算法生成新個體的主要方法之一,變異運算可以使算法在運行過程中維持種羣的多樣性,有效避免早熟,起到改善遺傳算法局部搜索能力的作用。
遺傳算法中變異算子也應根據不同的要求進行選擇和設計,下面是幾種常用的變異算子。
8 遺傳算法的改進
在這裏插入圖片描述








































二、源代碼

%% GA
%% 清空環境變量
clc,clear,close all
warning off
% feature jit off
%% 遺傳算法參數初始化
maxgen = 50;                      % 進化代數,即迭代次數
sizepop = 100;                     % 種羣規模
pcross = [0.7];                    % 交叉概率選擇,01之間
pmutation = [0.1];                 % 變異概率選擇,01之間
%染色體設置
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];                    % 交叉概率選擇,01之間
pmutation = [0.01];                 % 變異概率選擇,01之間
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

三、運行結果

在這裏插入圖片描述

四、備註

完整代碼或者代寫添加QQ1564658423。
往期回顧>>>>>>
【優化求解】基於matlab粒子羣優化灰狼算法【含Matlab源碼 006期】
【優化求解】基於matlab多目標灰狼優化算法MOGWO 【含Matlab源碼 007期】
【優化求解】基於matlab粒子羣算法的充電站最優佈局【含Matlab源碼 012期】
【優化求解】基於matlab遺傳算法的多旅行商問題【含Matlab源碼 016期】
【優化求解】基於matlab遺傳算法求最短路徑【含Matlab源碼 023期】
【優化求解】基於matlab遺傳和模擬退火的三維裝箱問題【含Matlab源碼 031期】
【優化求解】基於matlab遺傳算法求解車輛發車間隔優化問題【含Matlab源碼 132期】
【優化求解】磷蝦羣算法【含matlab源碼 133期】
【優化求解】差分進化算法【含Matlab源碼 134期】
【優化求解】基於matlab約束優化之懲罰函數法【含Matlab源碼 163期】
【優化求解】基於matlab改進灰狼算法求解重油熱解模型【含Matlab源碼 164期】
【優化求解】基於matlab蟻羣算法配電網故障定位【含Matlab源碼 165期】
【優化求解】基於matalb遺傳算法求解島嶼物資補給優化問題【含Matlab源碼 172期】
【優化求解】冠狀病毒羣體免疫優化算法(CHIO)【含Matlab源碼 186期】
【優化求解】金鷹優化求解算法(GEO)【含Matlab源碼 187期】
【多目標優化求解】基於matlab金鷹算法(MOGEO)的多目標優化求解【含Matlab源碼 188期】
【優化求解】基於matlab GUI界面之BP神經網絡優化求解【含Matlab源碼 208期】
【優化求解】基於matlab GUI界面之遺傳算法優化求解【含Matlab源碼 209期】
【優化求解】 基於matlab免疫算法的數值逼近優化分析【含Matlab源碼 211期】
【優化求解】 基於matlab啓發式算法的函數優化分析【含Matlab源碼 212期】




















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章