有關遺傳演算法

來源:互聯網
上載者:User

遺傳演算法(Genetic Algorithm, GA)是近幾年發展起來的一種嶄新的全域最佳化演算法,它借用了生物遺傳學的觀點,通過自然選擇、遺傳、變異等作用機制,實現各個個體的適應性的提高。這一點體現了自然界中"物競天擇、適者生存"的進化過程。

1962年Holland教授首次提出了GA演算法的思想,從而吸引了大批的研究者,迅速推廣到最佳化、搜尋、機器學習等方面,並奠定了堅實的理論基礎。

用遺傳演算法解決問題時,首先要對待解決問題的模型結構和參數進行編碼,一般用字串表示,這個過程就將問題符號化、離散化了。也有在連續空間定義的GA(Genetic Algorithm in Continuous Space, GACS),暫不討論。

一個串列運算的遺傳演算法(Seguential Genetic Algoritm, SGA)按如下過程進行:

(1) 對待解決問題進行編碼;

(2) 隨機初始化群體X(0):=(x1, x2, … xn);

(3) 對當前群體X(t)中每個個體xi計算其適應度F(xi),適應度表示了該個體的效能好壞;

(4) 應用選擇運算元產生中間代Xr(t);

(5) 對Xr(t)應用其它的運算元,產生新一代群體X(t+1),這些運算元的目的在於擴充有限個體的覆蓋面,體現全域搜尋的思想;

(6) t:=t+1;如果不滿足終止條件繼續(3)。

GA中最常用的運算元有如下幾種:

(1) 選擇運算元(selection/reproduction): 選擇運算元從群體中按某一機率成對選擇個體,某個體xi被選擇的機率Pi與其適應度值成正比。最通常的實現方法是輪盤賭(roulette wheel)模型。

(2) 交叉運算元(Crossover): 交叉運算元將被選中的兩個個體的基因鏈按機率pc進行交叉,產生兩個新的個體,交叉位置是隨機的。其中Pc是一個系統參數。

(3) 變異運算元(Mutation): 變異運算元將新個體的基因鏈的各位按機率pm進行變異,對二值基因鏈(0,1編碼)來說即是取反。

上述各種運算元的實現是多種多樣的,而且許多新的運算元正在不斷地提出,以改進GA的某些效能。系統參數(個體數n,基因鏈長度l,交叉機率Pc,變異機率Pm等)對演算法的收斂速度及結果有很大的影響,應視具體問題選取不同的值。

GA的程式設計應考慮到通用性,而且要有較強的適應新的運算元的能力。OOP中的類的繼承為我們提供了這一可能。定義兩個基本結構:基因(ALLELE)和個體(INDIVIDUAL),以個體的集合作為群體類TPopulation的資料成員,而TSGA類則由群體派生出來,定義GA的基本操作。對任一個應用執行個體,可以在TSGA類上派生,並定義新的操作。

TPopulation類包含兩個重要過程:

FillFitness: 評價函數,對每個個體進行解碼(decode)並計算出其適應度值,具體操作在使用者類中實現。

Statistic: 對當前群體進行統計,如求總適應度sumfitness、平均適應度average、最好個體fmax、最壞個體fmin等。

SGA的結構及類定義如下(用C++編寫):

typedef char ALLELE; // 基因類型
typedef struct{
ALLELE *chrom;
float fitness; // fitness of Chromosome
}INDIVIDUAL; // 個體定義
class TPopulation{ // 群體類定義
public:
int size; // Size of population: n
int lchrom; // Length of chromosome: l
float sumfitness, average;
INDIVIDUAL *fmin, *fmax;
INDIVIDUAL *pop;
TPopulation(int popsize, int strlength);
~TPopulation();
inline INDIVIDUAL &Individual(int i){ return pop[i];};
void FillFitness(); // 評價函數
virtual void Statistics(); // 統計函數
};
class TSGA : public TPopulation{ // TSGA類派生於群體類
public:
float pcross; // Probability of Crossover
float pmutation; // Probability of Mutation
int gen; // Counter of generation
TSGA(int size, int strlength, float pm=0.03, float pc=0.6):
TPopulation(size, strlength)
{gen=0; pcross=pc; pmutation=pm; } ;
virtual INDIVIDUAL& Select();
virtual void Crossover(INDIVIDUAL &parent1, INDIVIDUAL
&parent2,INDIVIDUAL &child1, INDIVIDUAL &child2);
virtual ALLELE Mutation(ALLELE alleleval);
virtual void Generate(); // 產生新的一代
};

使用者GA類定義如下:

class TSGAfit : public TSGA{
public:
TSGAfit(int size,float pm=0.0333,float pc=0.6)
:TSGA(size,24,pm,pc){};
void print();
};

由於GA是一個機率過程,所以每次迭代的情況是不一樣的;系統參數不同,迭代情況也不同。在實驗中參數一般選取如下:個體數n=50-200,變異機率Pm=0.03, 交叉機率Pc=0.6。變異機率太大,會導致不穩定。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.