在archipelago中使用pygmo2 simulated_annealing()算法时,我发现只有最初的冠军似乎是进化的,而所有其他的岛都保持不变。
考虑以下测试用例:
archi=pg.archipelago(n=1,algo=pg.de(),pop_size=10,prob=pg.rosenbrock(10),seed=32)
archi[0].get_population().get_f()
array([[ 1444075.45],
[ 769751.435],
[ 1539132.29],
[ 867545.07],
[ 1139524.14],
[ 1294374.29],
[ 1313308.78],
[ 1402739.85],
[ 1734627.42],
[ 1329435.20]])
archi.evolve(); archi.wait()
archi[0].get_population().get_f()
array([[ 1444075.45],
[ 754109.13],
[ 946288.71],
[ 409444.50],
[ 1139524.14],
[ 1216399.25],
[ 1313308.78],
[ 1402739.85],
[ 834097.30],
[ 173612.94]])但是如果我使用algo=pg.simulated_annealing()运行同样的命令,那么初始population_f为
array([[ 1408097.05],
[ 1765715.34],
[ 1547757.08],
[ 1851529.02],
[ 440838.40],
[ 1673630.76],
[ 867374.45],
[ 2636693.48],
[ 1809012.67],
[ 650619.19]])在一次调用evolve()之后,
array([[ 1408097.05],
[ 1765715.34],
[ 1547757.08],
[ 1851529.02],
[ 2.15709202],
[ 1673630.76],
[ 867374.45],
[ 2636693.48],
[ 1809012.67],
[ 650619.19]])请注意,只有在开始时适应度最小的岛屿才是唯一进化的岛屿。这发生在不同的问题、不同的算法和不同数量的岛上。看起来像个虫子?
发布于 2018-03-18 02:57:52
这是从开发人员那里得到的:
这里没什么奇怪的。所有都是预期的行为。
上面详述的群岛和算法的使用有几个问题。
如果您将群岛与pg.de和pop_size=1一起使用,则会出现“错误发生”,因为de是一种基于种群的算法,至少需要4大小的种群。
当一个群岛在岛上引发错误时,您可以通过调用wait_check方法来检查这些异常。参见https://esa.github.io/pagmo2/docs/python/tutorials/using_archipelago.html#managing-exceptions。如果你这样做了,你会发现这个例外很可能是“至少需要4个人……”
模拟退火不是基于群体的,正如文献所述,它只在群体中进化一个选定的个体。这就是上面的代码所显示的。
“注意,只有适应度最小的岛”应该是“注意,只有适应度最小的染色体”->,这就是sa应该做的事情。
“大多数适应度向量使用pg.de()改变”,->也是de的预期行为。因为用户只进化一代(使用默认参数)
https://stackoverflow.com/questions/49329324
复制相似问题