我正在尝试使用 pyevolve 来实现一个真正有价值的遗传算法。(此处给出了示例文档:http: //pyevolve.sourceforge.net/examples.html#example-2-real-numbers-gaussian-mutator)
参数范围(本例中为 20)可以使用setParams
如下方式设置:
# Genome instance
genome = G1DList.G1DList(20)
genome.setParams(rangemin=-6.0, rangemax=6.0)
但是,相同的范围适用于所有 20 个。我希望参数有不同的范围。我尝试这样做的方式是更改 Initializers 文件。
文件中的原始相关部分是:
def G1DListInitializatorReal(genome, **args):
""" Real initialization function of G1DList
This initializator accepts the *rangemin* and *rangemax* genome parameters.
"""
genome.clearList()
for i in xrange(genome.listSize):
randomReal = rand_uniform(genome.getParam("rangein", 0),
genome.getParam("rangemax", 100))
genome.append(randomReal)
我的修改(假设前 15 个有一个范围,后 5 个有另一个范围)是这样的:
def G1DListInitializatorReal(genome, **args):
genome.clearList()
for i in xrange(0,15):
print i
randomReal = rand_uniform(genome.getParam("rangein_1", 0),
genome.getParam("rangemax_1", 100))
genome.append(randomReal)
for j in xrange(15,20):
print j
randomReal2 = rand_uniform(genome.getParam("rangein_2", 0),
genome.getParam("rangemax_2", 100))
genome.append(randomReal2)
我添加了索引 i 和 j 的打印,以确保我知道正在调用这个索引。我已将修改后Initializators
的文件与我的代码放在同一个文件夹中,但是当我运行它时,它会从其他地方调用原始文件。我觉得我错过了我需要在 pyevolve 中进行的更多更改,或者我没有Initializators
正确调用,或者......我不知道。
如何在 pyevolve 中成功更改我的染色体参数范围?
提前致谢。