-
大小: 11KB文件類型: .cpp金幣: 1下載: 0 次發布日期: 2021-05-28
- 語言: C/C++
- 標簽: GA??遺傳算法??Rosenbrocks??
資源簡介
利用C++語言模擬遺傳算法進行對Rosenbrocks函數的最小值求值。之前自動漲上去的,重新把積分減下來了
代碼片段和文件信息
//?GA_work.cpp?:?此文件包含?“main“?函數。程序執行將在此處開始并結束。
//
#include?“pch.h“
#include?
#include
#include?
#include?
#include?
using?namespace?std;
#define?DIMESIONS?2????//維度N
const?double?Fmax?=?97888.9;
int?best_indexworst_index;
int?gen?=?0;
const?int?M?=?50?T?=?100?s?=?17;//M代表群體大小,一般取20~100;T代表終止進化代數,一般取100~500
const?double?pc?=?0.75?pm?=?0.01;//pc交叉概率,一般取0.4~0.99;pm變異概率,一般取0.0001~0.1
const?double?Umax?=?5.12?Umin?=?-5.12;??//argx[DIMESIONS]在[UminUmax]
double?averagefit[T];
double?min[T];
double?max[T];
struct?population??????//定義每個個體的結構
{
int?x[DIMESIONS][s];??????????//定義編碼長度為17*DIMESIONS位,計算精度為1/10000
double?argx[DIMESIONS];?????//DIMESIONS?個變量的Rosenbrocks函數
double?fit;??????????//每個個體的適應度
double?sumfit;
double?value;
//struct?population?*next;
}p[M]*best=&p[0]*worst=&p[0];
double?bestIndividual?=?Fmax;
double?worstIndividual?=?Fmax;
double?currentBestIndividual?=?Fmax;
double?currentWorstIndividual?=?Fmax;
void?initial();?//初始化函數
void?evalueFitness();//計算適應度
void?select();//選擇復制函數
void?crossOver();//交叉函數
void?mutation();//變異參數
void?decoding();//解碼函數
void?print();//顯示函數
void?FindBestIndividual();
double?RosenbrockFunc(population?t);???//rosenbrocks函數
void?getNextGeneration();
int?setCharCode01();
double?randR(double?a?double?b);???????//在區間(ab)內產生一個隨機數r
/******************????遺傳算法主函數??????????******************/
int?main()???????????//Umax=5.12Umin=-5.12
{
srand((unsigned)time(NULL));
initial();//隨機獲得初始解
decoding();//先解碼
evalueFitness();//計算適應度值與累計適值
FindBestIndividual();
while?(gen?<=?T)
{
cout?<“*******************???第“?< cout?< getNextGeneration();
gen++;
}
/*initial();//隨機獲得初始解
print();
//cout?<“initialed!“?< decoding();//先解碼
print();
evalueFitness();//計算適應度值與累計適值
//cout?<“evalued!“?< print();
while?(gen?<=?T)
{
cout?<“\n\n\n$$$$$$$$$$$$??????遺傳算法第“?< cout?< cout?< FindBestIndividual();
select();//執行選擇操作
print();
decoding();
print();
evalueFitness();
//cout?<“selected!“?< print();
crossOver();//執行交叉操作
print();
decoding();
evalueFitness();
//cout?<“crossOvered!“?< print();
mutation();//執行變異操作
print();
decoding();
evalueFitness();
//cout?<“mutated!“?< print();
FindBestIndividual();
gen++;
}
decoding();
evalueFitness();*/
//cout?<“最后解為:“?< /*for?(int?i?=?0;?i? {
cout?<“個體“?< for?(int?m?=?0;?m? cout?<“x“?< cout?<“適度值:“?< }*/
FindBestIndividual();
cout?<“min:??“?< for?(int?k?=?0;?k? cout?< cout?< cout?<“max:??“
- 上一篇:棧實現中綴表達式到后綴表達式的轉換
- 下一篇:學分管理源代碼
評論
共有 條評論