2017-05-30 11 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
  • opt_parパラメータと上記辞書である
  • bbox_hessヘッセ関数の勾配関数です。

Bboxはシミュレーションコードを呼び出してデータを取得します。それは動作します:前後に行くことを最小限に抑え、新しい値を提案し、bboxはシミュレーションを呼び出します。

私は奇妙な問題が発生するまで、すべてうまく動作します。 "x"ベクトルには8つの値が含まれています。私は反復のうちの1つが最後の値が1より大きいことを認識しています。 max_trust_radiusによると、1より小さいはずですが、1.0621612802208713e + 00です bboxは値シミュレーションプログラムを呼び出すときに1より大きい、1より大きい値を受け取ることができないという制約があります。

私はscipyコードを見つけて、バグや何かを見つけることができるかどうかを試しました間違っているが、私はそうではない。

私の主な懸念事項は以下のとおりです。

  • 私の理解では、scipyのダウンロードのバグは、新しい値が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-BTNCおよびSLSQPメソッドはbounds=キーワードをサポートしているようです。

関連する問題