评估函数中的Pyevolve评分

时间:2016-10-08 00:30:23

标签: python algorithm artificial-intelligence genetic-algorithm pyevolve

这是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()

请建议一些更好的分数评估方法。

1 个答案:

答案 0 :(得分:1)

让评估函数获取列表中的每个元素,并添加列表中每个元素的值。然后从您获得的值中减去所需的值,并获取结果的绝对值。最后把它放在像1 /(值)这样的分数下,以返回最小数字的最高值。

编辑: 您应该将代码更改为1 /(1 +值),以便如果值为零,则它会提供1的正确输出而不是错误