進擊的小白Day021 遺傳演算法(三)

2021-09-09 06:16:17 字數 1652 閱讀 4855

這次不在上次的基礎上改了,先自己根據流程 寫一遍,然後再優化修改。

遺傳演算法概念及流程:

1、問題描述:

求極小值。

2、概念介紹

(1)種群、個體、染色體、基因

數學模型的乙個可行解成為一條染色體(也可以稱之為個體),乙個可行解有多個元素組成,因此每個元素成為乙個基因,一組(人為設定值,用n表示)可行解組合起來就形成了種群。

在這個問題中,1種群=n個體=n染色體=5n基因

今天實現了種群初始化、適應度計算、選擇概率和累計概率計算這幾個步驟,貼**:

#include #include #include #define pi 3.1415926

#define bound_down 0

#define bound_up (0.9 * pi)

#define pop_size 4

#define chrom_len 5

#define evo_num 500

/*目標函式值*/

float objfuncval(float *a)

/*初始化*/

void creat(float chrom[pop_size][chrom_len])

} return chrom;

}/*計算適應度*/

float fit(float *a)

/*計算選擇概率和累積概率*/

void fitnessp(float *fitness, float *choosep, float *accup)

for (i = 0; i < pop_size; i++)

else

}}void roulette(float *accup, float chrom[pop_size][chrom_len])

for (i = 0; i < pop_size; i++) //控制進行i次輪盤賭

}else}}

} /*for (int h = 0; h < chrom_len; h++)

printf("\n");*/

} for (i = 0; i < pop_size; i++) }

}void main(void)

memset(fitness, 0, sizeof(fitness));

memset(choosep, 0, sizeof(choosep));

memset(accup, 0, sizeof(accup));

srand(time(null));

creat(chrom);

for (i = 0; i < pop_size; i++)

printf("\n");

} for (i = 0; i < 1; i++)

fitnessp(fitness, choosep, accup);

for (j = 0; j < pop_size; j++)

printf("\n");

for (j = 0; j < pop_size; j++)

printf("\n");

roulette(accup, chrom);

for (a = 0; a < pop_size; a++)

printf("\n");

} }

}

進擊的小白Day012 遺傳演算法(一)

今天寫個遺傳演算法的程式,例子很簡單,y x 3,x 0,101 求y最大時x的值,今天實現到累積概率的計算。貼 include include include include define m 6 種群規模 十進位制轉二進位制 int transform int n return result 產...

遺傳演算法的理解

遺傳演算法是一種啟發式的隨機多引數優化演算法,能夠解決多種尋優問題,如揹包問題,求解函式極值點,影象配準引數優化,神經網路中的網路權係數的優化等等。遺傳演算法可以說是模擬自然界種群的進化過程。根據達爾文進化理論,生物種群在世世代代的繁衍過程中,適應環境的優良特性會一代代遺傳下去,不適應環境的特性則逐...

遺傳演算法的java實現

我們來研究一下遺傳演算法 ga ga的理論部分可以去google或者wikipedia上問,現在我們通過乙個具體的例子來說明一下。首先,遺傳演算法可以解決很多問題。比如訓練神經網路 本文主要通過下面這個例子來講解 假設有10張卡牌,上面數字為1 10,要求將這10張卡牌分為兩組,每組5張,第一組的5...