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