遺傳演算法求解函式最大值c 實現

2021-10-01 09:20:35 字數 2522 閱讀 4342

遺傳演算法求解步驟

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...