遺傳演算法求解步驟
1.使用隨機方法產生乙個有n個染色體的初始種群
2.對群體中的每乙個染色體,計算其適應值
3.從群體中隨機選擇一些染色體構成乙個新的群體(常用方法:輪盤賭選擇,錦標賽選擇)
4.以一定概率進行交叉(單點交叉、多點交叉)
5.以一定概率進行變異
6.返回第2步,以一定的迭代次數進行迴圈
例項
取值範圍的區間長度為3,pow(2,21) < 3 *1000000#include
#include
using
namespace std;
const
double pi =
3.14159265
;const
double pcross =
0.7;
//交叉概率
const
double pmutate =
0.001
;//變異概率
const
int len =22;
//22位的染色體
const
int daishu =
500;
//更迭代數
const
int size =
500;
//種群規模
double bestval;
//適應值最大值
typedef
struct node node;
node bestchromo;
//記錄最優個體
node group[size]
;//記錄種群中的個體的陣列
node temp[size]
;//記錄種群中的個體的臨時陣列
void
gouzao
(node& c)
}void
decode
(node& c,
double
& x)
x =(3
/ num * tem)-1
;}doublef(
double x)
double
fitness
(node& c)
void
cross
(node& c1, node& c2,
int point)
for(
int j =
0; j < len - point; j++)}
void
mutate
(node& c)
double
inline
rand0()
void
select
(node group[size]
)for
(int i =
0; i < size; i++
)for
(int i =
0; i < size; i++
)for
(int i =
1; i < size; i++
)for
(int i =
0; i < size; i++)}
if(j == size -1)
}for
(int i =
0; i < size; i++
)for
(int i =
0; i < size; i++)}
intgetbest
(node group[size]
,double
& x,
double
& number)
int id =0;
for(
int i =
1; i < size; i++)}
decode
(group[id]
, x)
; number =
f(x)
;return id;
}voidga(
double
& x,
double
& number)
bestchromo = group[
getbest
(group, x, bestval)];
for(
int i =
0; i < daishu; i++)}
}for
(int k =
0, pre =-1
; k < size; k++)}
getbest
(group, x, number)
; cout <<
"第"<< i <<
"代"<<
"最優x值為:"
<< x <<
"函式值為"
<<
f(x)
<< endl;
//結果的輸出}}
intmain()
over
用遺傳演算法求解二元函式最大值
為了更好的理解遺傳演算法的運算過程,下面用手工的計算間的模擬遺傳演算法的各個主要的執行步驟 例 求下述二元函式的最大值 max f x1,x2 x1 2 x2 2 1 個體編碼 遺傳演算法的運算物件是表示個體的符號串,所以必須把變數x1,x2編碼位一種符號串。本題中,用無符號二進位制整數來表示。因x...
Matlab遺傳演算法求函式最大值
主函式函式main.m global bitlength 定義3個全域性變數 global boundsbegin global boundsend boundsbegin 2 boundsend 2 precision 0.0001 運算精確度 bitlength ceil log2 bounds...
使用遺傳演算法計算方程的最大值
遺傳演算法使用電腦程式來模擬生物的進化過程,形象的來說,就是通過 繁殖 變異 競爭 以及自然選擇來得到問題的最優解。遺傳演算法的基本結構如下 t 0 initialize p t 找出原始解集 evaluate p t 評估解集中是否有最優解 while not termination condit...