scipy.optimize.basinhopping公司对目标函数使用非数值参数

2024-04-16 20:57:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用模拟退火/basinhopping来找到一个语法对象的最小描述长度,并根据该语法找到数据。在

我自己定义了语法对象,以及take_step(这是语法的一个变体):

def total_energy(self, grammar_and_data):  #the objective function

    # ...operations....

    return encoder.totalLength(grammar,data)

def optimize(self, data):

    initial_grammar_and_data = array((initial_grammar, data))
    take_mutation = MyTakeStep()

    ret = basinhopping(self.total_energy,
                 initial_grammar_and_data,
                 niter=100,
                 T=1.0,
                 #stepsize=0.5,
                 #minimizer_kwargs=None,
                 take_step=take_mutation,
                 #accept_test=None,
                 #callback=None,
                 #interval=50,
                 #disp=False,
                 #niter_success=None
                 )

问题:我得到一个错误:

^{pr2}$

我怎样才能使算法单独引用步进函数,以便找到目标函数当前值附近的邻居?此处无法定义较小的步长。在

也许盆地跳跃不能用非数值的参数来解释? 如果是这样的话,您是否知道Python中的通用模拟退火算法可以做到这一点(我可以自己编写一个,但是它的效率远远低于scipy…)?在


Tags: and对象selfnonedata定义defstep