PAGMO / PYGMO:任何人都了解Corana模拟退火的选项吗?

时间:2018-01-19 15:09:47

标签: python minimization simulated-annealing

我使用PYGMO软件包来解决一些令人讨厌的非线性最小化问题,并且对使用他们的模拟退火算法非常感兴趣,但是它有很多超参数我不是真的有任何好的直觉。其中包括:

Ts (float) – starting temperature Tf (float) – final temperature n_T_adj (int) – number of temperature adjustments in the annealing schedule n_range_adj (int) – number of adjustments of the search range performed at a constant temperature bin_size (int) – number of mutations that are used to compute the acceptance rate start_range (float) – starting range for mutating the decision vector

假设我有变量和搜索范围的4维几何配准(单应性)问题:

x1: [-10,10] (a shift in x) x2: [10,30] (a shift in y) x3: [-45,0] (rotation angle) x4: [0.5,2] (scaling/magnification factor)

随机(坏)值选择的成本函数为50.良好的值约为零。

我了解TsTf是针对新解决方案的Metropolis接受标准。这意味着Ts应该与成本函数中初始更改的预期大小相关,并且Tf小到足以使得不再需要更改。

在Corana的论文中,列出了许多有意义的超参数:N_s是更改步长之前的评估周期数,N_T是之前步长变化的数量改变温度,r_T是每次降低温度的因素。但是,我无法弄清楚这些与n_T_adjn_range_adjbin_sizestart_range的pygmo参数之间的关系。

我真的很好奇是否有人可以解释如何使用pygmo的超参数,以及它们与Corana等人的原始论文有何关联?

1 个答案:

答案 0 :(得分:0)

这里要回答我自己的问题。我爬进了实际的.cpp代码并找到了答案。

在Corana的方法中,您可以选择所需退火的总迭代次数N。然后,最小化是一系列嵌套循环,您可以按用户定义的间隔更改步长,步长调整的数量和温度值。在PAGMO中,他们对此进行了更改,因此您明确指定了执行这些操作的次数。这些是n_*参数和bin_size.我不认为bin_size在这里是一个好名字,因为它实际上不是一个大小。它是通过bin范围所采取的步数,例如N=n_T_adj * n_range_adj * bin_range。我认为只需将其称为n_binsn_bins_adj就更有意义了。每个bin_size函数评估都会修改步长(请参阅下面的限制)。

在Corana的方法中,您可以指定乘法因子,以便在每次需要时降低温度;可能是你在用完迭代之前达到最低温度,反之亦然。在PAGMO中,算法会自动计算温度变化因子,以便在迭代序列结束时达到Tfr_t=(Tf/Ts)**(1/n_T_adj)

我认为start_range是这个变量的坏名字。算法中的步长是0start_range之间的分数,它定义了每个变量的上限和下限之间的搜索区间的宽度。如果是stepsize=0.5width=0.5*(upper_bound-lower_bound)。在每次迭代时,根据接受的函数调用次数调整步长。如果步长大于start_range,则会将其重置为该值。我想我会称之为step_limit。但是你去吧。