完整**:
#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 等。本篇文章適...