1 1 es進化策略python實現

2021-10-06 15:15:11 字數 2336 閱讀 8654

import numpy as np

import matplotlib.pyplot as plt

'''1+1 es進化策略

'''dna_size =

1# dna (real number)

dna_bound =[0

,5]# solution upper and lower bounds

n_generations =

200# 進化

mut_strength =5.

# 統一定義的變異強度

deff

(x):

return np.sin(

10* x)

* x + np.cos(

2* x)

* x # to find the maximum of this function

# find non-zero fitness for selection

defget_fitness

(pred)

:return pred.flatten(

)def

make_kid

(parent)

:# 無交叉僅變異

k = parent + mut_strength * np.random.randn(dna_size)

# 根據父代基因資訊以及變異強度進行變異

k = np.clip(k,

*dna_bound)

# 控制範圍

return k

defkill_bad

(parent, kid)

:global mut_strength

fp = get_fitness(f(parent))[

0]# 計算得分

fk = get_fitness(f(kid))[

0]p_target =1/

5# 變異強度的變異規則所定

if fp < fk:

# kid better than parent

parent = kid

ps =1.

# kid win -> ps = 1 (successful offspring)

else

: ps =0.

# adjust global mutation strength

# np.exp(b) : 求e的冪次方、np.sqrt(b):求b的開方

mut_strength *= np.exp(1/

3*(ps - p_target)/(

1- p_target)

)# 變異強度的變異規則

print

(mut_strength)

return parent

parent =

5* np.random.rand(dna_size)

# parent dna

plt.ion(

)# something about plotting

# 在指定的間隔內返回均勻間隔的數字 200個

x = np.linspace(

*dna_bound,

200)

for _ in

range

(n_generations)

:# es part

kid = make_kid(parent)

# 生孩子

py, ky = f(parent)

, f(kid)

parent = kill_bad(parent, kid)

# 淘汰不好的

# something about plotting

plt.cla(

) plt.scatter(parent, py, s=

200, lw=

0, c=

'red'

, alpha=

0.5,

) plt.scatter(kid, ky, s=

200, lw=

0, c=

'blue'

, alpha=

0.5)

plt.text(0,

-7,'mutation strength=%.2f'

% mut_strength)

plt.plot(x, f(x)

) plt.pause(

0.05

)print

(parent)

plt.ioff(

)plt.show(

)

有問題希望可以提出,多多交流~

已經更新其他相關的進化演算法(ga、es、cma-es、ep等)~

進化策略與進化規劃演算法 ES與EP

github 智慧型演算法的課件和參考資料以及實驗 進化策略和遺傳演算法統稱為進化演算法,二者的思想很類似,但步驟和應用方向有所差別。我們舉個二元函式最大值優化問題,分別用這兩種演算法簡單搜尋最優值 用matlab實現 es f2.m function y f2 x1,x2 二元函式求最大值的優化問...

阿里雲CDN的雙11再進化

從2009年11月11日開始,雙11從最初的 到後來的天貓 購物 活動,到後來演變成為中國各大購物 全國性的購物狂壞,成為廣大顧客購物的盛大節日。雙11的成交額也從最初的不到1億,呈指數上公升,一直 到2015年的912億,去年突破千億,2017年達到1682億元!成交額節節攀公升背後的技術,是整個...

ES學習筆記 11 ES6中物件

es6允許把宣告的變數直接賦值給物件 let name jie let skill web var obj console.log obj let key skill var obj console.log obj.skill web物件方法就是把兌現中的屬性,用匿名函式的形式程式設計方法 var ...