Python 非有序列表中相对概率的累积和
我试图计算这种数据结构的累积概率,但是,我需要保持值的顺序,以便将它们索引到另一个列表中相同位置的相应个体 程序按顺序执行操作,为最后一个位置提供更高的权重,在这种情况下,这将是最低的适应度 是否有人知道是否有一种方法可以在不改变其在输出列表中的位置的情况下以正确的方式(适应值的新月顺序)执行累积和 多谢各位Python 非有序列表中相对概率的累积和,python,python-3.x,probability,cumulative-sum,Python,Python 3.x,Probability,Cumulative Sum,我试图计算这种数据结构的累积概率,但是,我需要保持值的顺序,以便将它们索引到另一个列表中相同位置的相应个体 程序按顺序执行操作,为最后一个位置提供更高的权重,在这种情况下,这将是最低的适应度 是否有人知道是否有一种方法可以在不改变其在输出列表中的位置的情况下以正确的方式(适应值的新月顺序)执行累积和 多谢各位 population_d = {'0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1': 6, '0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1': 3,
population_d = {'0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1': 6,
'0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1': 3,
'0,1,1,0,1,1,0,0,1,1,1,0,0,1,0,0': 5,
'1,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0': 1}
def ProbabilityList(population_d):
fitness = population_d.values()
total_fit = (sum(fitness))
relative_fitness = [f/total_fit for f in fitness]
probabilities = [sum(relative_fitness[:i+1]) for i in range(len(relative_fitness))]
return (probabilities)
在字典中,您将适应度(?)值与唯一标识符相关联。这些标识符可能来自程序和数据集中的其他地方。我没有试图依赖字典的构造顺序来保持这种关系,而是维护了关联,并构造了一个新的字典,其值是将适应度从低到高排序后获得的累积和
population_d = {'0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1': 6,
'0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1': 3,
'0,1,1,0,1,1,0,0,1,1,1,0,0,1,0,0': 5,
'1,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0': 1}
希望有了字典,您能够将累积总和与代码另一部分中的原始个体联系起来
我看到您一直在问与此数据集和项目相关的其他问题。您可能需要投入一些时间学习,甚至考虑将数据保存在数据库中,而不是分散在整个项目中的单个容器。 <代码>新月形的健身值< /代码>意味着什么?你能描述一下这个过程吗?您是否希望
population\u d
保留其生成的顺序?也许您正在寻找OrderedDict(请参阅),它是一个类似于字典的容器,按照条目添加到其中的顺序维护条目?所谓新月形顺序,我指的是为与更高适应值相关的概率增加更多权重,是的,保持顺序是很有趣的,因为实际的人口在另一个列表中,我相信如果我失去了列表顺序,没有其他方法来分配概率给正确的个体。当然,我可能是错的,但我相信这是让它起作用的方法。`增加与更高适应值相关的概率的权重,`你是说最后的计算(概率=…
)应该按照从最低到最高的顺序进行吗?是的,正如我所说,我不是100%确定,但我相信可能是这样。我相信这确实有效,谢谢!我一定也会检查熊猫的!
import operator
def ProbabilityList(population_d):
fitness = population_d.values()
total_fit = (sum(fitness))
#create list of (individual, fitness) tuples
items = population_d.items()
#sort by fitness value
items = sorted(items, key = operator.itemgetter(1))
#some people prefer
#items = sorted(items, key = lambda item: item[1])
#print(items)
#maintain association and calculate relative fitness
relative_fitness = [(ind,fit/total_fit) for (ind,fit) in items]
#print(relative_fitness)
cumsum = 0
probabilities = {}
for ind, fit in relative_fitness:
cumsum += fit
probabilities[ind] = cumsum
return (probabilities)
d = ProbabilityList(population_d)
for k, v in d.items():
print('key:{}, fitness:{}, cumsum:{}'.format(k, population_d[k], v))
>>>
key:1,0,0,1,1,1,0,0,1,1,0,1,1,0,0,0, fitness:1, cumsum:0.06666666666666667
key:0,0,1,1,1,0,0,1,1,0,1,1,0,0,0,1, fitness:3, cumsum:0.26666666666666666
key:0,1,1,0,1,1,0,0,1,1,1,0,0,1,0,0, fitness:5, cumsum:0.6
key:0,0,1,0,1,1,0,1,1,1,1,0,0,0,0,1, fitness:6, cumsum:1.0
>>>