首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >评价函数中的进化评分

评价函数中的进化评分
EN

Stack Overflow用户
提问于 2016-10-08 00:30:23
回答 1查看 330关注 0票数 1

这里是Python的化纤库的一个例子,

代码语言:javascript
复制
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的代码,但它没有给出正确的/期望的输出。它总是要么大于要么低于所需的答案。

代码语言:javascript
复制
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()

请提出一些更好的评分方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-08 00:39:55

让评估函数获取列表中的每个元素,并添加列表中每个元素的值。然后从所得到的值中减去所需的值,并取结果的绝对值。最后,将其置于1/(值)这样的分数之下,以返回最小数的最高值。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39927468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档