遺傳演算法得到旅行商問題的滿意解

2021-07-10 04:35:21 字數 1224 閱讀 5503

遺傳演算法是一種仿生演算法,用於獲得一些問題的滿意解,自己感覺這種演算法很有意思,就寫了這個程式(後來交了大作業)。

源**:

遺傳演算法(genetic algorithm)是模擬

達爾文生物進化

論的自然選擇和

遺傳學機理的生物進化過程的計算

模型,是一種通過模擬自然進化過程搜尋

最優解的方法。遺傳演算法是從代表問題可能潛在的解集的乙個

種群(population)開始的,而乙個種群則由經過

基因(gene)編碼的一定數目的個體(individual)組成。每個個體實際上是

染色體(chromosome)帶有特徵的實體。染色體作為

遺傳物質

的主要載體,即多個基因的

集合,其內部表現(即

基因型)是某種基因組合,它決定了個體的形狀的外部表現,如黑頭髮的特徵是由染色體中控制這一特徵的某種基因組合決定的。因此,在一開始需要實現從

表現型到基因型的對映即

編碼工作。由於仿照基因編碼的工作很複雜,我們往往進行簡化,如

二進位制編碼,初代種群產生之後,按照適者生存和優勝劣汰的原理,逐代(generation)演化產生出越來越好的近似解,在每一代,根據問題域中個體的

適應度(fitness)大小選擇(selection)個體,並借助於自然遺傳學的遺傳

運算元(genetic operators)進行組合交叉(crossover)和變異(mutation),產生出代表新的解集的種群。這個過程將導致種群像自然進化一樣的後生代種群比前代更加適應於環境,末代種群中的最優個體經過

解碼(decoding),可以作為問題近似最優解。

在優選的過程中我選擇了輪盤賭:

int group::select()   //輪賭盤選擇法

return i;

}

下面是變異過程的**:

void group::acrossandvariation()  //負責傳代時的交叉和變異

else

if(randis() > p_variation)

}memcpy(group,groupnext,sizeof(group));

}

程式截圖:

自我感覺遺傳演算法可能不是很快速的演算法,但是它的普適性很強。

TSP 旅行商問題 遺傳演算法

問題描述 對於n組城市座標,尋找最短路徑使其經過所有城市並回到起點。問題資料集 tsp.eil51問題1 37 52 2 49 49 3 52 64 4 20 26 5 40 30 6 21 47 7 17 63 8 31 62 9 52 33 10 51 21 11 42 41 12 31 32 ...

遺傳演算法解決旅行商問題

給出常數 城市數量 變異概率 種群數 子群數,父代傳遞比例 隨機生成城市距離矩陣,將經過城市的順序作為基因序列進行編碼,適應度和走過n個城市的總距離成反比。先隨機構建出第一批種群的個體,按照父代傳遞比例按適應度從高到底選出個體複製進子群 我選的是0.2 之後子群其他個體通過父代種群進行雜交和變異生成...

python實現遺傳演算法(旅行商問題)

網上找到一篇不錯的 然後我用python對其做了演算法實現,貼 from matplotlib import pyplot as plt import numpy as np import random def coordinate init size 產生座標字典 coordinate dict ...