scipy basinhopread_test:什么是f_new和f_old

时间:2017-03-01 22:53:58

标签: python numpy scipy

我正在尝试使用模拟退火来优化天线布局和方向问题。我相信scipy.basinhopping会做我需要的但我不理解在accept_test函数中f_new和f_old的含义。我没有在文档中看到解释。如果有人能够启发我那些伟大的那些小丑的意义。我困惑的具体可调用语是:

 accept_test : callable, accept_test(f_new=f_new, x_new=x_new, f_old=fold, x_old=x_old), optional

谢谢,

朗高

1 个答案:

答案 0 :(得分:1)

来自文档https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.basinhopping.html#scipy-optimize-basinhopping

accept_test : callable, ``accept_test(f_new=f_new, x_new=x_new, f_old=fold, x_old=x_old)``, optional
    Define a test which will be used to judge whether or not to accept the
    step.  This will be used in addition to the Metropolis test based on
    "temperature" ``T``.  The acceptable return values are True,
    False, or ``"force accept"``. If any of the tests return False
    then the step is rejected. If the latter, then this will override any
    other tests in order to accept the step. This can be used, for example,
    to forcefully escape from a local minimum that ``basinhopping`` is
    trapped in.

您可以从中收集的信息是,调用参数a

  1. a是可调用的,因此可以提供函数。
  2. a的行为与进化算法的决定相同。可能的返回值是True和False,它们与Metropolis条件结合使用(即两个条件必须为接受的步骤返回True)和“force accept”。如果您想在Metropolis拒绝的情况下强制接受,则必须使用后一种选择。
  3. 您可以使用当前步骤x_oldf_old的值(这里是值,而非callables)以及您的新步骤x_newf_new的值自定义标准。
  4. 下面,我设置了一个玩具示例,其中当步骤在参数空间中

    时,accept_test函数强制接受
    def f(x):
        return x**2
    
    def a(f_new, x_new, f_old, x_old):
        if x_new>x_old:
            return "force accept"
        else:
            return True
    
    basinhopping(f, 1, accept_test=a)