這次不在上次的基礎上改了,先自己根據流程 寫一遍,然後再優化修改。
遺傳演算法概念及流程:
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...