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