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期】
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252577.html
標籤:其他
