Re: [問題] genetic algorithm 函數最大值

作者: beatitude (...)   2014-06-02 23:54:08
Hi,
我寫了一個比較簡單的版本,
給你參考看看, thanks
# genetic algorithm
from numpy import random
import matplotlib.pyplot as plt
# environment
err = 0.5 # error tolerance
ns = 5 # number of survivor
nc = 20 # number of child
gens = 100 # generation
def get_childs(parents):
return [parent + random.randn()*err
for _ in range(nc)
for parent in parents]
def get_survivors(offsprings, f):
return sorted(offsprings, key=f, reverse=True)[:ns]
def ga(f, guess=0, lb=0):
parents = [guess]
history = []
for _ in range(gens):
offsprings = [child for child in get_childs(parents)
if child > lb]
survivors = get_survivors(offsprings, f)
parents = survivors
history.append(max(survivors))
return history
if __name__ == '__main__':
# problem
f = lambda x: -x**2 + 16*x
history = ga(f, guess=1)
plt.plot(history)
plt.show()
※ 引述《sariel0322 (sariel)》之銘言:
: python新手
: 這個是我要解的數學方程式: f(x) = –x*x + 16x
: 要在區間(0,63)中找出其最大值
: 參考了一個網站的人寫的code
: 網站來源:
: http://johnisacoolboy.pixnet.net/blog/post/89324086-%E5%9F%BA%E5%9B%A0%E6%BC%94%E7%AE%97%E6%B3%95in-python
: 想改他原本函數方程式的部分卻一直怎麼改都有問題
: 覺得是我個人理解他程式碼有問題(雖然他已經有加註解了,但目標程式碼那邊我怎麼改都錯)
: 因此還想請問大家一下應該怎麼改
: 該網站code:
: # -*- coding: utf8 -*-
: '''
:
作者: sariel0322 (sariel)   2014-06-03 00:05:00
非常感謝你,我會詳加去了解你的寫法的

Links booklink

Contact Us: admin [ a t ] ucptt.com