gpt4 book ai didi

python - 在 python 中创建一个非常简单的 'evolutionary' 算法

转载 作者:行者123 更新时间:2023-12-01 09:29:42 25 4
gpt4 key购买 nike

我正在尝试用 python 创建一个非常简单的“进化”算法。

我最初想要创建一个由大约 100 个人组成的群体,具有四个数字属性 (a1-4),使用函数从这些属性中获取分数,然后删除得分最差的 20 个人。

这就是我目前所拥有的

import random
population = 100

class Individual(object):
def __init__(self, a1, a2, a3, a4):
self.a1 = a1
self.a2 = a2
self.a3 = a3
self.a4 = a4

starting_population = list()

for i in range (population):
a1 = random.randint(1,10)
a2 = random.randint(1,10)
a3 = random.randint(1,10)
a4 = random.randint(1,10)
starting_population.append(Individual(a1,a2,a3,a4))

def fitness(x):
fitness = a1*a2/a3*a4
return fitness

我不知道如何将函数应用于人口列表的成员?

另外,我对 Python 很陌生,我确信我做的一些事情很糟糕,所以非常感谢任何提示!

谢谢

最佳答案

循环有什么问题?

for person in starting_population:
person.fitness = person.a1*person.a2/person.a3*person.a4 #Add fitness to object

另请注意,操作顺序为:

((a1*a2)/a3)*a4)

如果你的意思有所不同。您可以考虑让健身成为一种个人的方法:

class Individual(object):
def __init__(self, a1, a2, a3, a4):
self.a1 = a1
self.a2 = a2
self.a3 = a3
self.a4 = a4

def fitness(self,x):
fitness = self.a1*self.a2/self.a3*self.a4
return fitness

starting_population = list()
for i in range (population):
a1 = random.randint(1,10)
a2 = random.randint(1,10)
a3 = random.randint(1,10)
a4 = random.randint(1,10)
starting_population.append(Individual(a1,a2,a3,a4))

这样您就可以立即调用 starting_population[i].fitness(),或计算 __init__ 中的值并将其设为字段。

另一个解决方案,放弃代码的对象清晰度,转而使用 numpy 数组来提高速度:

import numpy.random as rnd
rnd.seed(78943598743)
starting_population=rnd.randint(1,10,size=100*4).reshape(100,4) #100 rows, 4 columns, each row a person
fitness_vector = starting_population[:,0]*starting_population[:,1]/starting_population[:,2]*starting_population[:,3]

关于python - 在 python 中创建一个非常简单的 'evolutionary' 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50074811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com