【優化求解】基於matlab遺傳算法求解車輛發車間隔優化問題【含Matlab源碼 132期】

1.模型介紹

1.1公交公司運營成本分析
本設計中公交公司運營成本主要考慮的是公交車在線路上的運營時間成本。考慮到模型的簡便性以及求解的簡便性,所以本設計不考慮公交公司車輛的的固定費用。
在這裏插入圖片描述
1.2乘客出行成本分析
本設計中乘客出行成本主要考慮乘客的候車時間最短。當一天內乘客的平均候車時間最短即認爲乘客的出行本最小。
一天內乘客的候車時間除以乘客數即爲一天內乘客的平均候車時間:
在這裏插入圖片描述
1.3目標函數及約束條件的確定
將兩個函數整合得出該系統的總成本,使總成本最小,即爲目標函數最小:
在這裏插入圖片描述
2.模型求解
2.1、遺傳算法概述
遺傳算法(GA,Genetic Algorithm),也稱爲進化算法。遺傳算法是受達爾文的進化論的啓發,借鑑生物進化過程而提出的一種啓發式搜索算法。其主要特點是直接對結構對象進行操作,因此不同於其他求解最優解的算法,遺傳算法不存在求導和對函數連續性的限定,採用概率化的尋優方法,不需要確定的規則就能自動獲取和指導優化的搜索空間,自適應地調整搜索方向。











以上是對遺傳算法相對抽象的總結,爲了更具體形象的解釋遺傳算法的一般原理,我們首先介紹一些生物學上的概念:

①種羣:不同生物個體形成的羣體,生物的進化以羣體的形式進行,這樣的一個羣體稱爲種羣;

②個體:組成種羣的單個生物;

③基因:帶有遺傳信息的DNA片段,可以通俗的將基因理解爲一段信息,這段信息決定的生物個體的性狀;

④表現型:根據基因形成的個體的外部表現;

⑤適應度:生物個體對於生存環境的適應程度,越適應那麼其得以存活和繁衍的概率就越大;

⑥遺傳:通過繁殖過程,子代將從父母雙方各獲取一部分基因,形成新的自己的基因,這個過程中,會發生基因的複製、交叉,也會以較低的概率發生基因突變;

⑦自然選擇:物競天擇,適者生存的自然淘汰機制。具體爲對環境適應度高的個體參與繁殖的機會比較多,後代就會越來越多。適應度低的個體參與繁殖的機會比較少,後代就會越來越少;

⑧進化:種羣通過代際繁衍不斷適應生存環境的過程,在這個過程中,以對外界環境的適應度爲評判標準,生物的性狀不斷得到改良。

瞭解了這些術語的含義,我們就可以進一步說說生物進化的過程了。由於自然選擇是客觀存在的,即生物只能改變自己去適應環境,那麼在自然選擇的過程中,適應度低的個體會被淘汰,適應度高的個體被保留,高適應度的父體與母體又有更高的概率繁衍出適應度高的子代,因此在一代又一代的繁衍之後,高適應度的個體在種羣中所佔的比例越來越大,種羣就這樣完成了進化。

現在我們要參考生物進化的過程來設計算法解決求最優解的問題。對此,遺傳算法的思路是,將要解決的問題模擬成一個生物進化的過程,通過進化來尋找最優解。以我們題目中尋找多峯函數的最大值這個問題爲例:

將(x, y)這一可能的解作爲一個個體;將多峯函數的函數值f(x, y)作爲個體的適應度;對(x, y)進行編碼作爲個體的基因;以適應度爲標準不斷篩選生物個體;通過遺傳算子(如複製、交叉、變異等)不斷產生下一代。如此不斷循環迭代,完成進化。最終,根據設定的迭代次數,可得到最後一代種羣,該種羣中的個體適應度都較高,而多峯函數的最大值就有比較大的概率存在於這一羣解中,以種羣中適應度最高的個體作爲問題的解,則可以說該解有比較高的概率就是我們希望求得的最優解。

文字述說終究還是不如圖表好理解,因此還是看圖吧(下圖將本題與自然遺傳聯繫了起來):
在這裏插入圖片描述

二、源代碼

clc
close all
clear all
%% 模型參數
lambda1=0.8;
lambda2=0.4;
To=350;
Te=1290;
alpha=0.3;
beta=0.4;
tmin=2;
tmax=50;
deltaT=0.5;
n=50;
Tnum=Te-To+2;
%% Ga參數
GenMax=20;
Pc=1;
Pv=1;
Gen=0;
Popnum=5;
% GGAP=0.2;
Chrom=struct;
while Gen<GenMax
    Gen=Gen+1;
    i=1;
    %% 生成初始種羣
    while i<Popnum+1
        Index=randperm(Tnum)+To-1;
        Chrom(i).list=Index(1:n);
        Chrom(i).list=sort(Chrom(i).list);
        interval(i,:)=diff(Chrom(i).list);
        Tmax=max(interval(i,:));
        Tmin=min(interval(i,:));
        if (Tmax<tmax) && (Tmin>tmin)                   %符合要求的留下
            Chrom(i).Time=zeros(Tnum,1);
            Chrom(i).Time(Chrom(i).list)=1;
            i=i+1;
        end
    end
    
 
end
[best_fit,best_ind]=sort([best.fit],'descend')
plot(best_fit)
title('總成本進化曲線');
xlabel('迭代次數')
ylabel('總成本')
fid=fopen('bus_time.txt','w')
temp=best(best_ind(end)).gen;
for i=1:n
fprintf(fid,'%d\n',temp(i));
end
 
%

三、運行結果

在這裏插入圖片描述

四、備註

完整代碼或者代寫添加QQ2449341593
往期回顧>>>>>>
【優化求解】基於matlab粒子羣優化灰狼算法【含Matlab源碼 006期】
【優化求解】基於matlab多目標灰狼優化算法MOGWO 【含Matlab源碼 007期】
【優化求解】基於matlab粒子羣算法的充電站最優佈局【含Matlab源碼 012期】
【優化求解】基於matlab遺傳算法的多旅行商問題【含Matlab源碼 016期】
【優化求解】基於matlab遺傳算法求最短路徑【含Matlab源碼 023期】
【優化求解】基於matlab遺傳和模擬退火的三維裝箱問題【含Matlab源碼 031期】






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