数理最適化セミナーのご案内

7.2 制約違反によるエラー

 最適化計算実行後,制約式あるいは変数の上下限を違反するというエラーが出ることがあります.

(NUOPT 33) Variable bound is violated.
(NUOPT 34) Both variable bound and constraint are violated.
(NUOPT 35) Constraint is violated.
(NUOPT 36) Equality constraint is violated.

 これは最適化計算においては,スケーリング処理を施した後の問題を解き,計算の終了条件をスケーリング後の数値で判定しているためです.例えば内点法系統の解法であれば,スケーリング後の数値でKKT条件の残差を見て終了判定を行なっています.

 そのため最適化計算が正常に終了したように見えても,スケーリングを戻した後に制約式あるいは変数の上下限を違反してしまう場合があります.

 このような場合,対応方法としては以下の3つが考えられます.

  1. 問題のスケーリングを見直す
  2. 解法の停止条件を変更する
  3. スケーリング処理をオフにする

 

 1.について,ここでいう「スケーリング」は問題にあらわれる数値のばらつきの大きさになります.例えば係数行列に$10^{6}$など大きい値があらわれる一方$10^{-4}$など小さい値があらわれる場合,値がばらついていると言えます.

 このような場合,例えば問題に含まれる数値について単位が揃っていない等によってばらつきが生じている場合は,単位を揃えることによって改善する場合があります.例えば「重さ」を表す定数の場合,「kg」と「g」など単位が揃っていない場合は,問題のスケーリングを悪くすることが考えられます.この場合,単位を「kg」などに統一することにより改善する可能性があります.

 

 2.の停止条件については,対応は解法によって異なります.

 例えば内点法系統の解法であれば,終了条件となるKKT条件の残差をより小さく設定することによってエラーが解消される可能性があります.分枝限定法であれば,実行可能性閾値(tolx)をより小さく設定することにより回避できる可能性はあります.

 

 3.についてはスケーリング処理を回避することにより違反を解消できる場合があります.ただし,そもそもスケーリング処理は最適化計算の安定性を増すためにしている処置です.このため,スケーリング処理を回避した場合,最適化計算自体が不安定になる可能性はあります.

 

 上記の方策が不明な場合,あるいはそれでも解決が難しい場合は nuopt-support@ml.msi.co.jp までご相談ください.


 

 

上に戻る