我想在适应性不增加时停止遗传算法。
我在python中使用DEAP库。
通常,我有以下日志文件:
const stuff = 'a,b,c';
// Nested Array
// React is fine with it and automatically assigns keys
// Sample data: [[a, <br />], [b, <br />], [c, <br />]]
const Foo = () => <div>{stuff.split(',').map(itm => [itm, <br />])}</div>;
// Flat Array
// React warns me that I should assign a key to each element in array
// Sample data: [a, <br />, b, <br />, c, <br />]
const Bar = () => <div>{stuff.split(',').map(itm => [itm, <br />]).reduce((a, b) => a.concat(b), [])}</div>;
我最初设置ngen = 200,但正如您所看到的,适应度函数在第22代达到局部最大值。所以我想在发生这种情况时停止遗传算法。
答案 0 :(得分:1)
def main():
random.seed(64)
pop = toolbox.population(n=100)
CXPB, MUTPB = 0.5, 0.2
print "Start of evolution"
fitnesses = list(map(toolbox.evaluate, pop))
for ind, fit in zip(pop, fitnesses):
ind.fitness.values = fit
print " Evaluated %i individuals" % len(pop)
fits = [ind.fitness.values[0] for ind in pop]
g = 0
while max(fits) < 0.67 and g < 1000000:
g = g + 1
print "-- Generation %i --" % g
offspring = toolbox.select(pop, len(pop))
offspring = list(map(toolbox.clone, offspring))
for child1, child2 in zip(offspring[::2], offspring[1::2]):
if random.random() < CXPB:
toolbox.mate(child1, child2)
del child1.fitness.values
del child2.fitness.values
for mutant in offspring:
if random.random() < MUTPB:
toolbox.mutate(mutant)
del mutant.fitness.values
invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
fitnesses = map(toolbox.evaluate, invalid_ind)
for ind, fit in zip(invalid_ind, fitnesses):
ind.fitness.values = fit
pop[:] = offspring
fits = [ind.fitness.values[0] for ind in pop]
print "fitness-- ",max(fits)
print "-- End of (successful) evolution --"
best_ind = tools.selBest(pop, 1)[0]
triangle_to_image(best_ind).save('best.jpg')
这将在达到所需的适应性值时终止代码或超过特定数量的世代
您可以设置以下方式:当健身一段时间未改变时,它会停止,即当达到局部最大值并卡在此处时
第12行 当健身度超过0.67时,此示例停止运行 然后保存结果
这是当您不使用名人堂之类的方法时要做的 不知道该怎么做,如果你也找到它告诉我
答案 1 :(得分:0)
老实说,我最近也在研究这个问题。 经过我最近在这里完成的研究,我发现了:
我还没有尝试过以上任何一种方法,但是我非常确定它会起作用。