採用浮點數編碼的遺傳演算法的問題

2021-06-26 08:44:16 字數 1672 閱讀 4629

初始化種群

public

list

<

popunit

>

initpop()

);popunit unit 

=new

popunit(d, val);

pool.add(unit);

}return

pool;}

選擇操作

public

list

<

popunit

>

select(list

<

popunit

>

data)

inttmpcount 

=data.count 

-newpool.count;

for(

inti 

=dropoutcount; i 

<=

dropoutcount 

+tmpcount -1

; i++

)return

newpool;}

交叉操作:

public

void

crossover(

double

a,double

b,out

double

a1,out

double

b1)doubler =

0.1;

double

a2 =

m_random.nextdouble() *r;

double

b2 =

m_random.nextdouble() *r;

a1 =(1

-a2) *a 

+b2 *b;

b1 =(1

-b2) *b 

+a2 *a;

if(a1 

<

m_parameters.l)

a1 =

m_parameters.l;

if(b1 

<

m_parameters.l)

b1 =

m_parameters.l;

if(a1 

>

m_parameters.r)

a1 =

m_parameters.r;

if(b1 

>

m_parameters.r)

b1 =

m_parameters.r;

"crossover a1=,b1=  ->  a2=,b2=", a, b, a1, b1); }

變異操作:

public

double

mutation(

double

c)doublek =

0.2;

//k = (m_parameters.maxgenerations-t)/ (m_parameters.maxgenerations + 2d) * 0.4d;

double

res;

if(m_random.next(2) 

==1)else

"mutation:  -> ", c, res); 

return

res;}

種群大小=100,交叉概率=0.7,變異概率=0.1

浮點數的編碼

1 浮點數 小數點位置可移動的資料稱為浮點數,可用下式表示 n m re 其中,m 尾數,r 階的基數 也就是指數部分的底 r 一般取2 8或16,為約定的常數,大多數機器 r 取定為2。e 階的階碼。當基數約定後,對浮點數的編碼就只需對尾數和階碼部分進行編碼。浮點數在機器中的形式如下 尾數m用定點...

浮點數的編碼

1 浮點數 小數點位置可移動的資料稱為浮點數,可用下式表示 n m re 其中,m 尾數,r 階的基數 也就是指數部分的底 r 一般取2 8或16,為約定的常數,大多數機器 r 取定為2。e 階的階碼。當基數約定後,對浮點數的編碼就只需對尾數和階碼部分進行編碼。浮點數在機器中的形式如下 尾數m用定點...

python的浮點數演算法

本菜基本完結了pos機的第二個頁面,但是還是遇到了不少問題,本次總結其中之一,浮點數的計算。統計商品數量時,本來是直接加一就可以,但是本菜覺得應該照顧一下論斤買的商品,於是直接把 1 改為了 0.5,於是網頁乾乾脆脆的報錯不顯示了,本菜通過強化過的報錯函式,發現錯誤在於資料型別不正確,報的錯誤是 t...