5

この質問は「C++の数値レシピ」に関するものですので、少しだけ知っている人には予約されています多次元最適化。数値レシピ/多次元根検索(newtを使用):最大誤差を最小限に抑える方法

多次元ルートを検索する必要があるプログラムを作成していますが、それを解決するために、多次元ニュートンルート検索メソッド、つまり"newt"プロシージャを使用しています。

詳細に興味のある人にとっては、私は、いくつかの特徴点(2つのカメラに見られる特徴点)に基づいて、変形可能な3Dモデルを物体の遠景に表示しようとしています。このため

、私は次のようにイモリの手順を使用しています:

  • 11入力パラメータ:私の変形可能なモデルは11個のパラメータ(5つの幾何学的パラメータで構成され、自由の6 deegresでモデル化することができます
  • 14出力パラメータ私はルートを見つける必要があります:カメラで特定されたフィーチャポイントに基づいて、「入力パラメータ」のセットを指定すると、カメラによって見られる特徴点とそれらの理論的な距離との間の距離カチオン。私はこれらの点のうち7点を持っているので、私は14パラメータ(2つのカメラで距離を計算するので距離7を2倍にします)を与えてくれます。

私の問題は、 11):「newt」と呼ばれるたびに、アルゴリズムは常に収束しますが、最初の11個の出力パラメータをほぼ完全に最小化するソリューションが見つかるでしょうが、残りの3つのパラメータには多くのエラーがあります。

しかし、エラーを出力パラメータ間で一様に分割したいと思います。

私は、すでに以下のアプローチを試してみました:

  1. は( たとえば、あなたが代わりに 両方の距離を使用しての、いくつかの距離の平均値を取る)11パラメータに14個の出力パラメータを組み合わせるようにしてください。しかし、私は、以下の原則に
  2. ミックスいくつかのソリューションこのアプローチに100%満足していない:
    • コールmnewt、見つかったルート
    • 変更14出力パラメータの順序
    • 再びmnewtの呼び出しを暗記し、溶液は、2つの見つかった根の平均で見出さルート
    • 計算を記憶

誰かがより一般的なアプローチを知っていますか?ルート検索アルゴリズムは、最初のパラメータを優先する代わりに、出力パラメータ間で一様に分割されたエラーを優先しますか?

+0

1つの「距離メトリック」を設定しないのはなぜですか。あなたの7つの特徴点すべての距離の平方和を計算し、最適化ルーチンを実行します。 Levenberg-Marquardtはふさわしいようだ。 –

+1

私はすでにそれを試みました、そして、それは失敗でした。 NRブックの多次元最適化を読んだら、multidimルート検索を最小限の検索(あなたの提案通り)に変換しようとするのは悪い考えであることがわかります(そして私はそれらを信じています)。 1つの方向でフラットゾーンのローカル最小値と*ロット*を持つ関数を最小化します(つまり、1つの要素で派生した値はnullです:ニュートンのようなメソッドの悪夢) –

+0

しかし、私は最小化を実行しようとしますnewtによって与えられた出発点。おそらく、偽の局所的な最小値に収束する可能性は低くなります。 –

答えて

2

f(x)=0を解くことによって、F(x)を最小化しようとします。ここで、xはm次元のベクトルであり、fはこれをn次元のベクトルに写像します。あなたの最適化問題は、m < n(あなたの場合は14)の場合、未定義です。

これらのシステムの場合、それらを解決する一般的な方法は、ベクトルノルムxに最小化することです。 xラグランジュ乗数cの両方について、システムx^T A x + c f(x)^T f(x)を最小化することでこれを行うことができます。さらに詳しい情報がなければ、Aをnxn 単位行列にすることができます。これにより、f(x)=0を解決するxが見つかっていますが、最も小さいノルムを持ちます。

ニュートンの方法でこれを行う方法の詳細については、これはpaperです。

+0

うわー、いい答え、ありがとう! –

関連する問題