Python 绘制遗传算法的适应度。如何访问函数中的对象值
我有一个遗传算法,设计用于切割一个7个字母的字符串,每个群体20个个体,600代 我想创建一个图表,显示每一代人的适应度平均值 我决定做的第一件事是创建一个列表来存储每一代的平均值,这样我以后就可以绘制它了Python 绘制遗传算法的适应度。如何访问函数中的对象值,python,function,Python,Function,我有一个遗传算法,设计用于切割一个7个字母的字符串,每个群体20个个体,600代 我想创建一个图表,显示每一代人的适应度平均值 我决定做的第一件事是创建一个列表来存储每一代的平均值,这样我以后就可以绘制它了 def initialize_population(): population = [] for i in range(0, GENES): adn = [random.choice(string.printable[:-5]) for _ in range(
def initialize_population():
population = []
for i in range(0, GENES):
adn = [random.choice(string.printable[:-5]) for _ in range(0, len(desired_string))]
fitness = obtain_fitness(dna, desired_string)
candidate = Individual(dna, fitness)
population.append(candidate)
return poblacion
上面的函数调用不同的函数,以获取适应值等,并创建候选总体(列表),每个候选总体(列表)具有一个dna(字符串)和一个适应值。上述函数位于另一个名为simulation的函数中,该函数执行脚本
我想要的是得到每个候选人的适应值,但我没有做到这一点
progress = []
for i in range(0, MAX_GENERATION):
progress.append(numpy.mean(sum(candidate.fitness[i])))
但这给了我一个错误:
NameError: name 'candidate' is not defined
正如您所看到的,
candidate
是在initialize_population函数中定义的,但我不知道如何调用它。首先,您的函数似乎返回了poblacion
,而我在函数的任何地方都没有看到定义,我假设它是一个打字错误。
由于您在循环GENES
中多次创建候选对象,即使您将候选对象设置为全局,如果在函数完成后调用它,您将只获得分配的最后一个
我假设你已经调用了这个函数
yourlist = initialize_population()
然后你可以通过yourlist[i]
访问你想要的候选人,其中i
是你想要的索引。
但是我仍然不确定你的候选人是否有一个属性.fitness
,除非你在代码的其余部分为该对象定义了它。
我希望这是有意义的我认为您缺少的是正确的变量范围 上面的函数
initialize_population()
无法查看候选对象。
要使其可见,请在初始化candidate
内部initialize_population()
之前使用global
关键字。这种解决方案的缺点是,它只会让您看到最后一个候选者
def initialize_population():
人口=[]
全球候选人
对于范围内的i(0,基因):
adn=[random.choice(string.printable[:-5]),用于范围内的(0,len(所需的字符串))]
适合度=获得适合度(dna,所需字符串)
候选人=个人(dna、适合度)
人口.追加(候选人)
返回人口
无论如何,我认为在您的情况下访问候选者是不正确的。所有候选者都已经在population
列表中,因此请尝试使用该列表访问他们。缺少大量信息,否则无法找到错误。请提供一份报告。