遺傳演算法C語言原始碼

2021-07-31 16:38:29 字數 1388 閱讀 4348

遺傳演算法是上學時曾經研究過的演算法,它是一種基於基因遺傳思想的快速搜尋遍歷演算法。簡單理解,它就是比一般的盲搜尋和其他的一些搜尋快的演算法。其主要目的就是為了能快速準確搜尋所求的值,用於求解一些複雜的數值應用,以及一些實時性要求高的演算法應用中。以下是以前練習過的**,歡迎有需要的同學學習交流。

#include #include #include #include #include #define n 30000000000

#define pi 3.14159265

#define min_(a,b) ((a)<(b)?(b):(a))//定義求最大值函式min_(a,b)

#define size 50

#define maxgen 50

#define p_corss 0.75

#define p_mutation 0.05

#define len 22

typedef struct node//定義結構體,表示染色體,x是染色體二進位制編碼,fitness是該染色體的適應值,fitsum是當前所有染色體的適應值的總和

node;

node cur[size], next[size], max, min;//定義結構體陣列,有當前染色體種群,下一代染色體種群,以及最優和最差染色體。

double randd()

int randi(int k)

//計算當前種群中各個個體的適應度

void cal_fitness()

}void init()//初始化染色體種群,共size個,每個都是二進位制len長度的串

} cal_fitness();//計算當前種群各個個體的適應度

}int sel()//選擇種群中某個染色體

}//換代

void tran()

for (int k = 0; kelse//否則不交叉,

//變異

if (randd()}

//找下一代的最差個體

min = next[0], j = 0;

for (i = 1; inext[j] = max;

memcpy(cur, next, sizeof(cur));//把整個改良過的(經過交叉,變異,替換等操作的)next代的值賦給當前種群cur,供下一次迴圈優化

cal_fitness();

}//列印個體適應度和二進位制編碼

void print(node tmp)

//列印種群

void printcur()

void ga()

ans = cur[0].fitness;

for (int i = 1; iprintf("%.6lf\n", ans);

}int main()

遺傳演算法 C

示例為計算函式為y x x 1024的最大值,32 x 31.參考 採用輪盤賭演算法作為選擇運算元的演算法 更新下一代 基於輪盤選擇選擇方法,進行基因型的選擇 private static void updatenext else console.writeline totalfitvalue to...

遺傳演算法 C

chromosome的定義,沒有定義複製方法,所以,在往子代傳遞的時候,變成了引用傳遞,在傳遞了幾代之後,後代其實全部變成了乙個染色體 隨機數取值的時候臨時定義的random變數,導致迴圈中每次取到的隨機數有很大程度是一樣的 輪盤賭選擇時,沒有定義子代種群,直接在當前種群中操作,會覆蓋一部分父代,導...

C語言實現遺傳演算法

演算法框架 1.generateinitialpopulation 生成初代種群 2.evaluatepopulation 評估種群 3.generatenextpopulation 產生下一代 1 selectionoperator 選擇 2 crossoveroperator 交叉 random...