Python 绘制遗传算法的适应度。如何访问函数中的对象值

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(

我有一个遗传算法,设计用于切割一个7个字母的字符串,每个群体20个个体,600代

我想创建一个图表,显示每一代人的适应度平均值

我决定做的第一件事是创建一个列表来存储每一代的平均值,这样我以后就可以绘制它了

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
列表中,因此请尝试使用该列表访问他们。

缺少大量信息,否则无法找到错误。请提供一份报告。