遺傳演算法種群大小
Ⅰ 遺傳演算法tsp 城市100個 種群個數應該是多少
C語言實現遺傳演算法解決TSP問題,帶完整代碼,應用最基礎的遺傳演算法思想。帶實驗報告,並在實驗報告中與模擬退火演算法進行對比。
//以下是cpp文件完整代碼:
#include
#include
#include
#include
#include
#include
using namespace std;
const int N = 30;//城市個數
const int MAXN = 50;//最大城市個數
const int population = 100;//種群個體數
const int MAXpopulation = 100;//最大種群個數 const double mutation_rate = 0.4;//變異率
const double crossover_rate = 0.65;//交配率
const int iter = 200;//迭代次數
//城市結構體
struct city
{
//char id;
int x, y;
};
//路徑結構體
struct path
{
city cities[MAXN];
double length;
};
double D[MAXN][MAXN];//存儲城市之間的長度 city bcity[MAXN];//存儲最優路徑的各個城市 path bpath[MAXpopulation];//存儲種群所有個體
double fitness[MAXpopulation];//存儲種群個體的適應度
//產生x-y的隨機整數
int randInt(int x, int y)
{
return rand()%(y-x+1)+x;
}
double randDouble()
{
Ⅱ 怎麼根據工件數確定遺傳演算法中種群大小,是2N+1,還是必須為偶數,為什麼書上用的是基數
在基本遺傳演算法中,交叉操作都是成對進行的,所以種群大小一般都是偶數,
如果改進了遺傳演算法的交叉操作,有可能就沒有這一限制了
看看演算法的遺傳操作,分析一下為什麼是奇數吧
Ⅲ 遺傳演算法中初始種群的數量怎麼設定,我用的是matlab2010a,優化工具箱中的GA演算法,,
設置population size為50
Ⅳ 遺傳演算法中種群大小必須為偶數嗎
遺傳演算法(Genetic Algorithm)是模擬達爾文生物進化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜索最優解的方法,它最初由美國Michigan大學J.Holland教授於1975年首先提出來的,並出版了頗有影響的專著《Adaptation in Natural and Artificial Systems》,GA這個名稱才逐漸為人所知,J.Holland教授所提出的GA通常為簡單遺傳演算法(SGA)。 遺傳演算法是從代表問題可能潛在的解集的一個種群(population)開始的,而一個種群則由經過基因(gene)編碼的一定數目的個體(indivial)組成。每個個體實際上是染色體(chromosome)帶有特徵的實體。染色體作為遺傳物質的主要載體,即多個基因的集合,其內部表現(即基因型)是某種基因組合,它決定了個體的形狀的外部表現,如黑頭發的特徵是由染色體中控制這一特徵的某種基因組合決定的。因此,在一開始需要實現從表現型到基因型的映射即編碼工作。由於仿照基因編碼的工作很復雜,我們往往進行簡化,如二進制編碼,初代種群產生之後,按照適者生存和優勝劣汰的原理,逐代(generation)演化產生出越來越好的近似解,在每一代,根據問題域中個體的適應度(fitness)大小選擇(selection)個體,並藉助於自然遺傳學的遺傳運算元(genetic operators)進行組合交叉(crossover)和變異(mutation),產生出代表新的解集的種群。這個過程將導致種群像自然進化一樣的後生代種群比前代更加適應於環境,末代種群中的最優個體經過解碼(decoding),可以作為問題近似最優解。傳演算法是解決搜索問題的一種通用演算法,對於各種通用問題都可以使用。搜索演算法的共同特徵為: ① 首先組成一組候選解; ② 依據某些適應性條件測算這些候選解的適應度; ③ 根據適應度保留某些候選解,放棄其他候選解; ④ 對保留的候選解進行某些操作,生成新的候選解。 在遺傳演算法中,上述幾個特徵以一種特殊的方式組合在一起:基於染色體群的並行搜索,帶有猜測性質的選擇操作、交換操作和突變操作。這種特殊的組合方式將遺傳演算法與其它搜索演算法區別開來。 遺傳演算法還具有以下幾方面的特點: (1)遺傳演算法從問題解的串集開始嫂索,而不是從單個解開始。這是遺傳演算法與傳統優化演算法的極大區別。傳統優化演算法是從單個初始值迭代求最優解的;容易誤入局部最優解。遺傳演算法從串集開始搜索,覆蓋面大,利於全局擇優。 (2)許多傳統搜索演算法都是單點搜索演算法,容易陷入局部的最優解。遺傳演算法同時處理群體中的多個個體,即對搜索空間中的多個解進行評估,減少了陷入局部最優解的風險,同時演算法本身易於實現並行化。 (3)遺傳演算法基本上不用搜索空間的知識或其它輔助信息,而僅用適應度函數值來評估個體,在此基礎上進行遺傳操作。適應度函數不僅不受連續可微的約束,而且其定義域可以任意設定。這一特點使得遺傳演算法的應用范圍大大擴展。 (4)遺傳演算法不是採用確定性規則,而是採用概率的變遷規則來指導他的搜索方向。 (5)具有自組織、自適應和自學習性。遺傳演算法利用進化過程獲得的信息自行組織搜索時,硬度大的個體具有較高的生存概率,並獲得更適應環境的基因結構。由於遺傳演算法的整體搜索策略和優化搜索方法在計算是不依賴於梯度信息或其它輔助知識,而只需要影響搜索方向的目標函數和相應的適應度函數,所以遺傳演算法提供了一種求解復雜系統問題的通用框架,它不依賴於問題的具體領域,對問題的種類有很強的魯棒性,所以廣泛應用於許多科學,下面我們將介紹遺傳演算法的一些主要應用領域: 1、 函數優化。 函數優化是遺傳演算法的經典應用領域,也是遺傳演算法進行性能評價的常用算例,許多人構造出了各種各樣復雜形式的測試函數:連續函數和離散函數、凸函數和凹函數、低維函數和高維函數、單峰函數和多峰函數等。對於一些非線性、多模型、多目標的函數優化問題,用其它優化方法較難求解,而遺傳演算法可以方便的得到較好的結果。 2、 組合優化 隨著問題規模的增大,組合優化問題的搜索空間也急劇增大,有時在目前的計算上用枚舉法很難求出最優解。對這類復雜的問題,人們已經意識到應把主要精力放在尋求滿意解上,而遺傳演算法是尋求這種滿意解的最佳工具之一。實踐證明,遺傳演算法對於組合優化中的NP問題非常有效。例如遺傳演算法已經在求解旅行商問題、 背包問題、裝箱問題、圖形劃分問題等方面得到成功的應用。 此外,GA也在生產調度問題、自動控制、機器人學、圖象處理、人工生命、遺傳編碼和機器學習等方面獲得了廣泛的運用。
Ⅳ 遺傳演算法是不是種群規模選取越大,全局最優解越好!
種群規模是指任意一代中的個體總數,這個是人為設定的,種群規模越大越可能找到全局解,但運行時間也相對較長,一般在40-100之間取值,像我就習慣選60.
至於你所處理的問題,可以對比不同的種群規模下最優解和運行時間,然後折衷取。
Ⅵ 49種群大小遺傳演算法參數設置該怎麼設置
進化代數隨意,可100,可200,交叉概率一般比變異概率要高,可0.8,可0.9 ,修正系數不是基本遺傳演算法中的 請註明出處
Ⅶ C++實現遺傳演算法時,設定染色體長度和種群大小偏大時程序無法運行,該怎麼辦
有事發程序上來先。。。
Ⅷ 遺傳演算法問題:群體大小N,染色體長度M,為了收斂可能性較大,那麼N 和M 是不是有一定關系啊,講講收斂吧
N和M沒有關系的,收不收斂跟你採取的運算元策略(選擇、交叉、變異)有關系,跟種群大小也有點關系,但跟染色體長度沒關系。
Ⅸ 遺傳演算法,種群選擇100或者50的區別,如果選擇過多會怎麼樣
數量越少越容易發生遺傳漂變,偏離理論值。