【问题标题】:Pyevolve Score in Evaluation function评估功能中的 Pyevolve 分数
【发布时间】:2016-10-08 00:30:23
【问题描述】:

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

请推荐一些更好的分数评估方法。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 它确实有效,但没有给出完美的输出......谢谢
    • 它给出了什么输出?如果您实现了 Superman 的建议,您是否也可以发布代码以便其他人判断它是否正确?
    猜你喜欢
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    相关资源
    最近更新 更多