1. 程式人生 > >遺傳演算法解決車輛路徑問題

遺傳演算法解決車輛路徑問題

車輛路徑問題

車輛路線問題(VRP)最早是由Dantzig和Ramser於1959年首次提出,它是指一定數量的客戶,各自有不同數量的貨物需求,配送中心向客戶提供貨物,由一個車隊負責分送貨物,組織適當的行車路線,目標是使得客戶的需求得到滿足,並能在一定的約束下,達到諸如路程最短、成本最小、耗費時間最少等目的。

關於設有一場站(depot),共有M 輛貨車,車輛容量為Q,有N位顧客(customer),每位顧客有其需求量D。車輛從場站出發對客戶進行配送服務最後返回場站,要求所有顧客都被配送,每位顧客一次配送完成,且不能違反車輛容量的限制,目的是所有車輛路線的總距離最小。車輛路線的實際問題包括配送中心配送、公共汽車路線制定、信件和報紙投遞、航空和鐵路時間表安排、工業廢品收集等。

車輛路線問題之學術研究文獻眾多,也提出了相當多的求解策略與方法,Bodin and Golden(1981)將眾多之求解方法歸納成以下七種:


數學解析法(Exact Procedure)

人機互動法(Interactive);

先分群再排路線(Cluster First–Route Second);

先排路線再分群(Route First–Cluster Second);

節省法或插入法(Saving or Insertion);
     改善或交換法(Improvement or Exchanges);

      數學規劃近似法(Mathematical programming)。 

遺傳演算法介紹

遺傳演算法(Genetic Algorithm)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜尋最優解的方法。遺傳演算法是從代表問題可能潛在的解集的一個種群(population)開始的,而一個種群則由經過基因(gene)編碼的一定數目的個體(individual)組成。每個個體實際上是染色體(chromosome)帶有特徵的實體。染色體作為遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因組合,它決定了個體的形狀的外部表現,如黑頭髮的特徵是由染色體中控制這一特徵的某種基因組合決定的。因此,在一開始需要實現從表現型到基因型的對映即編碼工作。由於仿照基因編碼的工作很複雜,我們往往進行簡化,如二進位制編碼,初代種群產生之後,按照適者生存和優勝劣汰的原理,逐代(generation)演化產生出越來越好的近似解,在每一代,根據問題域中個體的適應度(fitness)大小選擇(selection)個體,並藉助於自然遺傳學的遺傳運算元(genetic operators)進行組合交叉(crossover)和變異(mutation),產生出代表新的解集的種群。這個過程將導致種群像自然進化一樣的後生代種群比前代更加適應於環境,末代種群中的最優個體經過解碼(decoding),可以作為問題近似最優解。

遺傳演算法是解決搜尋問題的一種通用演算法,對於各種通用問題都可以使用。搜尋演算法的共同特徵為:
① 首先組成一組候選解
② 依據某些適應性條件測算這些候選解的適應度
③ 根據適應度保留某些候選解,放棄其他候選解
④ 對保留的候選解進行某些操作,生成新的候選解。
在遺傳演算法中,上述幾個特徵以一種特殊的方式組合在一起:基於染色體群的並行搜尋,帶有猜測性質的選擇操作、交換操作和突變操作。這種特殊的組合方式將遺傳演算法與其它搜尋演算法區別開來。

遺傳演算法還具有以下幾方面的特點:
(1)遺傳演算法從問題解的串集開始搜尋,而不是從單個解開始。這是遺傳演算法與傳統化演算法的極大區別。傳統優化演算法是從單個初始值迭代求最優解的;容易誤入區域性最優解。遺傳演算法從串集開始搜尋,覆蓋面大,利於全域性擇優。
(2)遺傳演算法同時處理群體中的多個個體,即對搜尋空間中的多個解進行評估,減少了陷入區域性最優解的風險,同時演算法本身易於實現並行化。
(3)遺傳演算法基本上不用搜索空間的知識或其它輔助資訊,而僅用適應度函式值來評估個體,在此基礎上進行遺傳操作。適應度函式不僅不受連續可微的約束,而且其定義域可以任意設定。這一特點使得遺傳演算法的應用範圍大大擴充套件。
(4)遺傳演算法不是採用確定性規則,而是採用概率的變遷規則來指導他的搜尋方向。
(5)具有自組織、自適應和自學習性。遺傳演算法利用進化過程獲得的資訊自行組織搜尋時,適應度大的個體具有較高的生存概率,並獲得更適應環境的基因結構。
(6)此外,演算法本身也可以採用動態自適應技術,在進化過程中自動調整演算法控制引數和編碼精度,比如使用模糊自適應法。


主要原始碼1:種群初始化            建構函式,初始化種群,將適應度,選擇概率,期望概率,是否被選擇均置為0,利用隨機函式為每個基因分配一個城市序列。最後呼叫initdistance函式將34個城市之間的距離初始化。

               2.計算每個種群每個基因個體的適應度,選擇概率,期望概率,和是否被選擇。 

               3.填充函式

                 4 . 交叉函式

                5.變異

                 6 判斷是否結束

                 7.計算程式執行時間