人工智慧實驗 使用遺傳演算法求函式最值

2021-09-16 12:17:08 字數 2089 閱讀 9270

完整**:

#include #define indiv_per_group    (50) //乙個種群中個體的數目

#define probability (60) //變異概率

#define genmax (100) //最大產生代數

using namespace std;

typedef struct indi //乙個個體

indi;

typedef struct group//乙個種群

group;

/* 計算適應值函式(也是我們需要求解的函式) */

int fx(int x)

group group;

char *stop;

//1.初始化:隨機產生5位二進位制數

void init()

group.individuals[j].x = strtol(group.individuals[j].bi,&stop,2);

group.individuals[j].live = true;

}}//2.個體評價:得到每個個體的適應度

void assess()

}//3.選擇運算:使用輪轉盤法進行選擇與淘汰

void choose(int gen)

group.best.fx = group.individuals[0].fx;

group.best.x = group.individuals[0].x;

double tmp_add = 0;

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

continue;

}else

}//選出這個種群的最優個體,並儲存

if(group.best.fx > group.individuals[0].fx)

}//4.交叉運算:單點交叉

void cross()

second = rand() % indiv_per_group;

if(group.individuals[second].live == true)

break;

}char str[5];

for(int k=0;k<3;k++)

str[k]=group.individuals[first].bi[k];

for(int k=3;k<5;k++)

str[k]=group.individuals[second].bi[k];

int new_x=strtol(str,&stop,2);

int new_fx=fx(new_x);

if(new_fx>group.individuals[first].fx && new_fx > group.individuals[second].fx)

elseelse

}group.individuals[j].live = true;}}

return;

}//5.變異運算 :位點變異——隨機每個位置50%機率取反

//對乙個個體的變異運算

void mutation_one(int x)

group.individuals[x].bi[k]^=1;

}group.individuals[x].x=strtol(group.individuals[x].bi,&stop,2);

group.individuals[x].fx=fx(group.individuals[x].x);

if(group.individuals[x].fx > group.best.fx)

}//對乙個種群的全部個體都進行變異運算

void mutation()

}}//總呼叫函式,決定乙個種群的進化

//對乙個種群進行求解。

void sovel()

}int main()

{ //時間種子產生隨機數

srand(time(0));

sovel();

cout實驗結果:

人工智慧 遺傳演算法

這是一類智慧型的演算法,沒有什麼固定的模式,就是乙個演算法思想,可以給我們一些有價值的指導,當我們想要做一些相關工作的時候,可以擴寬我們的視野,開啟我們的腦洞,借鑑其中的原理。我不想多說裡面的什麼數學和公式,只要你懂裡面的思想會遷移到實際的應用中就很不錯,更好的則是在其基礎上形成自己的思維,需要用的...

人工智慧 遺傳演算法

實驗過程 結果分析 摘要 設計遺傳演算法求解乙個 tsp 問題,要求求得的解不超過最優解的 10 設計較好的交叉操作,並且引入多種區域性搜尋操作 和之前的模擬退火演算法 採用相同的區域性搜尋操作 進行比較 得出設計高效遺傳演算法的一些經驗,並比較單點搜尋和多點搜尋的優缺點。遺傳演算法思想流程 實現遺...

簡單遺傳演算法求函式極值

引言 遺傳演算法求函式極值算是遺傳演算法的一種最簡單的應用,這裡就介紹一種簡單的,全文基本翻譯自codeproject的一篇文章,作者為luay al wesi,軟體工程師。例子中的函式為y x2 5 大家可以將其改為其他複雜一些的函式,比如說f x 10sin 5x 7cos 4x 等。本篇文章適...