评估功能中的 Pyevolve 分数
Pyevolve Score in Evaluation function
这里是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,那么如何确定分数或创建分数的最佳方法是什么。
谢谢
编辑:
这是求和的代码,但它没有给出 correct/desired 输出。它总是大于或小于所需的答案。
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/(value) 到 return 最小数字的最高值。
编辑:
您应该将代码更改为 1/(1+value) 以便如果 value 为零,它会给出正确的输出 1 而不是错误
这里是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,那么如何确定分数或创建分数的最佳方法是什么。
谢谢
编辑:
这是求和的代码,但它没有给出 correct/desired 输出。它总是大于或小于所需的答案。
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/(value) 到 return 最小数字的最高值。
编辑: 您应该将代码更改为 1/(1+value) 以便如果 value 为零,它会给出正确的输出 1 而不是错误