使用列表位置中包含的项目进行计算(遗传算法适合度)
Calculating with items enclosed in list positions (genetic algorithms fitness)
population = [[[0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1], [1], [0]],
[[0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1], [3], [1]],
[[0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0], [4], [2]],
[[1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0], [3], [3]]]
def ProbabilityList2(population):
fitness = [chromosome[1] for chromosome in population]
total_weight=sum(fitness)
relative_fitness= [(chromosome[1]+1)/total_weight for chromosome in population]
return (relative_fitness)
我正在尝试 return 一个基于比例适应值的列表,逻辑如下:[[chromosome],[fitness],[counter]]
。我想要做的就是为列表中的所有项目(个人)生成基于此操作的概率列表,但我收到错误:
TypeError: unsupported operand type(s) for +: 'int' and 'list'
我在使用字典之前解决了这个问题,但是在程序循环期间我得到了重复的条目并且选择函数崩溃了,因为人口中的个体数量和概率(按位置索引)是不均匀的。关于如何以这种格式计算它有什么想法吗?
chromosome[1]
是一个列表。您可以使用 chromosome[1][0]
访问它,或者将它存储在列表之外。
`
假设fitness
列表是来自种群的适应度列表。因此,要获得适应度的总和,您必须通过遍历范围来获得其中子列表的总和。
def ProbabilityList2(population):
fitness = [ chromosome[1] for chromosome in population ]
total_weight=0
for i in range(len(fitness)):
total_weight+=sum(fitness[i])
这将为您提供以下健身列表和总和
[[1], [3], [4], [3]] # fitness list
11 # sum
试试这个功能:
def probabilityList2(population):
fitness = [chromosome[1][0] for chromosome in population]
total_weight=sum(fitness)
relative_fitness= [((chromosome[1][0])+1)/total_weight for chromosome in population]
return relative_fitness
probabilityList2(population)
population = [[[0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1], [1], [0]],
[[0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1], [3], [1]],
[[0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0], [4], [2]],
[[1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0], [3], [3]]]
def ProbabilityList2(population):
fitness = [chromosome[1] for chromosome in population]
total_weight=sum(fitness)
relative_fitness= [(chromosome[1]+1)/total_weight for chromosome in population]
return (relative_fitness)
我正在尝试 return 一个基于比例适应值的列表,逻辑如下:[[chromosome],[fitness],[counter]]
。我想要做的就是为列表中的所有项目(个人)生成基于此操作的概率列表,但我收到错误:
TypeError: unsupported operand type(s) for +: 'int' and 'list'
我在使用字典之前解决了这个问题,但是在程序循环期间我得到了重复的条目并且选择函数崩溃了,因为人口中的个体数量和概率(按位置索引)是不均匀的。关于如何以这种格式计算它有什么想法吗?
chromosome[1]
是一个列表。您可以使用 chromosome[1][0]
访问它,或者将它存储在列表之外。
`
假设fitness
列表是来自种群的适应度列表。因此,要获得适应度的总和,您必须通过遍历范围来获得其中子列表的总和。
def ProbabilityList2(population):
fitness = [ chromosome[1] for chromosome in population ]
total_weight=0
for i in range(len(fitness)):
total_weight+=sum(fitness[i])
这将为您提供以下健身列表和总和
[[1], [3], [4], [3]] # fitness list
11 # sum
试试这个功能:
def probabilityList2(population):
fitness = [chromosome[1][0] for chromosome in population]
total_weight=sum(fitness)
relative_fitness= [((chromosome[1][0])+1)/total_weight for chromosome in population]
return relative_fitness
probabilityList2(population)