2017-05-30 62 views
0

到目前爲止,我理解使用方法Trust-ncg的最小化函數,「方法特定」參數「max_trust_radius」是新步驟優化的最大值。 但是,我經歷了一個奇怪的行爲。 我在我的博士學位數據的工作,我必須調用最小化功能(與信任NCG法) 傳遞參數使用trust-ncg方法最小化函數提出的值大於max_trust_radius

{ 
    'initial_trust_radius':0.1, 
    'max_trust_radius':1, 
    'eta':0.15, 
    'gtol':1e-5, 
    'disp': True 
} 

我調用最小化功能的代碼:

res = minimize(bbox, x0, method='trust-ncg',jac=bbox_der, hess=bbox_hess,options=opt_par) 

其中

  • bbox是評估目標函數的函數
  • x0是初始猜測
  • bbox_der是梯度函數
  • bbox_hess粗麻功能
  • opt_par是以上所述參數的字典。

Bbox調用模擬代碼並獲取數據。它的工作原理是:儘量減少來回運行,提出新的值,bbox調用模擬。

一切正常,直到我有一個奇怪的問題。 「x」向量包含8個值。我意識到其中一個迭代,最後一個值大於1. 根據max_trust_radius,我認爲它應該小於1,但它是1.0621612802208713e + 00 此問題會導致問題,因爲bbox無法接收值大於1,因爲它調用了一個模擬程序,並且有一個約束,它不能接收1或大於1.

我找到了scipy代碼並試圖查看我是否能找到一個bug或某個東西錯,但我不是。

我的主要問題是:

  • 我的理解是,有在SciPy的一個bug作爲新的值大於max_trust_radius較大減少代碼。

  • 如何操作或控制值以避免值變得大於1?

  • 您是否建議調查問題?

回答

0

max_trust_radius控制多大步驟你被允許採取:

max_trust_radius : float 
        Maximum value of the trust-region radius. 
        No steps that are longer than this value will be proposed. 

因爲你很可能會最小化過程中需要很多步驟,每個步驟可以達到1長,您(假設||x0||=0)最終以||x|| > 1結尾並不奇怪。

如果您的問題嚴格限定,那麼您需要應用支持參數邊界的優化算法。 對於scipy.optimize.minimize只有L-BFGS-B,TNCSLSQP方法似乎支持bounds=關鍵字。

相關問題