2014-12-19 26 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