2014-12-19 47 views

回答

3

使用callback关键字参数。

scipy.optimize.minimize可以采用关键字参数callback。这应该是一个接受参数当前向量作为输入的函数。这个函数在每次迭代之后调用。

例如,

from scipy.optimize import minimize 

def objective_function(xs): 
    """ Function to optimize. """ 
    x, y = xs 
    return (x-1)**2 + (y-2)**4 

def print_callback(xs): 
    """ 
    Callback called after every iteration. 

    xs is the estimated location of the optimum. 
    """ 
    print xs 

minimize(objective_function, x0 = (0., 0.), callback=print_callback) 

通常情况下,一个人想保留不同调用回调,如之间的信息,例如,迭代次数。要做到这一点的方法之一是使用闭包:

def generate_print_callback(): 
    """ 
    Generate a callback that prints 

     iteration number | parameter values | objective function 

    every tenth iteration. 
    """ 
    saved_params = { "iteration_number" : 0 } 
    def print_callback(xs): 
     if saved_params["iteration_number"] % 10 == 0: 
      print "{:3} | {} | {}".format(
       saved_params["iteration_number"], xs, objective_function(xs)) 
     saved_params["iteration_number"] += 1 
    return print_callback 

调用具有最小化功能:

minimize(objective_function, x0 = (0., 0.), callback=generate_print_callback()) 
+0

嗯并不为我工作。没有打印 – Taylor 2016-04-07 21:28:04