私はデバッグ最適化ルーチンです。私は最適化ルーチンの各反復で目的関数の値を追跡するログ・テキスト・ファイルを生成します。ここでC++、非常に予期しない-1#INF
は文脈である:私は4つのパラメータで線形であるモデルで、カーブフィッティング問題で動作し、Xデータに
Y = PARAM1*X^3+PARAM2*X^2+PARAM3*X+PARAM4
を多項式と私はunnoised公平なデータに最適化ルーチンを実行しますアルゴリズムをテストするためにこのモデルから生成される。
ログファイルでは、最初の最適化手順は問題ありません。関数の評価には2倍の値があります。各反復で、5つの関数値が計算されます(ログファイルに表示されます)。与えられた反復から、事態は悪化します。目的関数がこの時点(!)で既に正常に評価されていますが、1つの関数評価は-1#INF
になります。次の反復では、「悪い点」は-1#INF
で評価され続け、1つの他の点も-1#INFで評価されます。これらの点でのYの計算は、公式を前提にして、以前に適切に評価されたという事実を考慮すると、苦労はありません。
また、メモリ管理のような別の原因が考えられます。あなたはこれについて何か考えているのでしょうか、あるいは問題をより近づけるためのアドバイスはありますか?
編集
私は、ログファイルに-1#INF
の最初の出現を参照してください。関数は各繰り返しで5点で評価されますが、その5点のうちの1点のみが「新しい点」です。 -1#INF
が最初に表示されると、この時点で関数は既に正常に評価されています。
ITERATION N
でのみf3
が新しい点での関数の評価であり、f1はITERATION N-1
でF1よりも、同じポイントでの関数の評価ここでは
ITERATION N-1
f1 559.011
f2 560.034
f3 562.034
f4 560.342
f5 560.344
ITERATION N
f1 -1#INF
f2 560.034
f3 558.034
f4 560.342
f5 560.344
のように見えます。
「正常に評価されました」とまったく同じ意味ですか?オーバーフローもゼロによる除算も起こっていないと確信していますか? – celtschk
メモリ管理が疑問の余地があります。あなたの反復アルゴリズムは発散しています。 INFを生成する最初の計算を試してみてください。 – Potatoswatter
デバッガを使用して(または印刷ステートメントを追加して)、エラーを引き起こすコードの正確な行を追跡します。 –