这是 Python 的 pyevolve 库的示例,
from pyevolve import G1DList
from pyevolve import GSimpleGA
import time
def eval_func(chromosome):
score = 0.0
for value in chromosome:
if value == 50:
score += 1
return score
genome = G1DList.G1DList(20)
genome.evaluator.set(eval_func)
ga = GSimpleGA.GSimpleGA(genome)
ga.evolve(freq_stats=10)
print ga.bestIndividual()
在这个例子中,分数是有意义的,因为分数的每一次增加,输出都会变得更加准确。
但是如果我希望染色体元素的总和是某个特定的值,比如 200,那么如何确定分数或创建分数的最佳方法是什么。
谢谢
编辑:
这是 sum 的代码,但它没有给出正确/期望的输出。它总是大于或小于所需的答案。
from pyevolve import G1DList
from pyevolve import GSimpleGA
import time
def eval_func(chromosome):
score = 0.0
sum_ = 0.0
for value in chromosome:
sum_ = sum_ + value
score_ = abs(200 - sum_)
score = float(1/score_)
return score
genome = G1DList.G1DList(20)
genome.evaluator.set(eval_func)
ga = GSimpleGA.GSimpleGA(genome)
ga.evolve(freq_stats=10)
print ga.bestIndividual()
请建议一些更好的分数评估方法。