用C 實現遺傳演算法

2022-12-25 14:06:06 字數 1409 閱讀 7988

/* 本程式試用遺傳演算法來解決rosenbrock函式的全域性最大值計算問題:

max f(x1,x2) = 100 (x1^2-x2)^2 + (1-x1)^2

-2.048 ≤ xi ≤ 2.048i=1,2)*/

#include

#include<>

#include <>

#include

using namespace std;

const int m=8,t=2m 群體大小,pc 交叉概率,pm 變異概率,t 終止代數

const double pc=0.6,pm=0.01;

struct population定義群體結構

p[m];

void initial(population初始化函式

void evaluefitness(population計算適應度

void select(population選擇複製函式

void crossover(population交叉函式

void mutation(population變異函式

void decoding(population解碼函式

void print(population顯示函式

int main遺傳演算法主函式

decoding(&p[0]);

evaluefitness(&p[0]);

cout<<"最後得出的滿意解為:"< for(int i=0;i cout<<"x1:"

}初始化函式

int rand01用於隨機取0或1的函式

void initial(population *t) //群體初始化函式

計算適應值函式

void evaluefitness(population *t計算適應值函式

for(po=t;po

}選擇複製函式

double randab(double a,double b在區間(a,b)內生成乙個隨機數

void select(population *t選擇運算元函式

else continue;

} i++;

} for(i=0;i for(int j=0;j<20;j++)

p[i].x[j]=pt[i].x[j];

}交叉函式

void crossover(population *t交叉運算元函式

} else continue; }}

變異函式

void mutation(population *t) //變異運算元函式 }}

解碼函式

void decoding(population *t解碼函式

{population *po;

int temp,s1=0,s2=0;

遺傳演算法原理及應用

07計本張雷 070701010116 遺傳演算法是由美國的j.holland教授於1975年在他的專著 自然界和人工系統的適應性 中首先提出的,它是一類借鑑生物界自然選擇和自然遺傳機制的隨機化搜尋演算法 遺傳演算法模擬自然選擇和自然遺傳過程中發生的繁殖 交叉和基因突變現象,在每次迭代中都保留一組候...

蟻群演算法 遺傳演算法 模擬退火演算法介紹

窮舉法列舉所有可能,然後乙個個去,得到最優的結果。如圖一,需要從a點一直走到g點,才能知道,f是最高的 最優解 這種演算法得到的最優解肯定是最好的,但也是效率最低的。窮舉法雖然能得到最好的最優解,但效率是極其低下的。為了能提高效率,可以不要列舉所有的結果,只列舉結果集中的一部分,如果某個解在這部分解...

基於遺傳演算法的模具企業車間作業排程演算法設計研究

摘要 針對模具生產典型的離散生產過程,對模具生產的工藝過程和工件的特徵進行了研究。結合企業的生產特點,從通用類模具生產例項入手,建立了生產單元分配方法,利用遺傳演算法的強魯棒性,提出了一種實用的生產排程演算法,並進行了詳細的演算法設計與計算。關鍵詞 遺傳演算法 模具 車間作業排程 the desig...