天天看點

【優化求解】遺傳算法求解車輛發工廠中的房間隔優化問題【Matlab 132期】

1.模型介紹

1.1 公交公司營運成本分析

本設計中公交公司營運成本主要考慮的是公共汽車線上路上的營運時間成本。考慮到模型的簡便性以及求解的簡便性,是以本設計不考慮公交公司車輛的的固定費用。

【優化求解】遺傳算法求解車輛發工廠中的房間隔優化問題【Matlab 132期】

1.2 乘客出行成本分析

本設計中乘客出行成本主要考慮乘客的候車時間最短。當一天内乘客的平均候車時間最短即認為乘客的出行本最小。

一天内乘客的候車時間除以乘客數即為一天内乘客的平均候車時間:

【優化求解】遺傳算法求解車輛發工廠中的房間隔優化問題【Matlab 132期】

1.3 目标函數及限制條件的确定

将兩個函數整合得出該系統的總成本,使總成本最小,即為目标函數最小:

【優化求解】遺傳算法求解車輛發工廠中的房間隔優化問題【Matlab 132期】

2 模型求解

2.1 遺傳算法概述

遺傳算法(GA,Genetic Algorithm),也稱為進化算法。遺傳算法是受達爾文的進化論的啟發,借鑒生物進化過程而提出的一種啟發式搜尋算法。其主要特點是直接對結構對象進行操作,是以不同于其他求解最優解的算法,遺傳算法不存在求導和對函數連續性的限定,采用機率化的尋優方法,不需要确定的規則就能自動擷取和指導優化的搜尋空間,自适應地調整搜尋方向。

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

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

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

③基因:帶有遺傳資訊的DNA片段,可以通俗的将基因了解為一段資訊,這段資訊決定的生物個體的性狀;

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

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

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

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

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

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

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

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

文字述說終究還是不如圖表好了解,是以還是看圖吧(下圖将本題與自然遺傳聯系了起來):

【優化求解】遺傳算法求解車輛發工廠中的房間隔優化問題【Matlab 132期】

二、部分源代碼

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
 
%
           

三、運作結果

【優化求解】遺傳算法求解車輛發工廠中的房間隔優化問題【Matlab 132期】

四、matlab版本及參考文獻

1 matlab版本

2014a

2 參考文獻

[1] 包子陽,餘繼周,楊杉.智能優化算法及其MATLAB執行個體(第2版)[M].電子工業出版社,2016.

[2]張岩,吳水根.MATLAB優化算法源代碼[M].清華大學出版社,2017.

繼續閱讀