1

浮動小数点の x 座標と y 座標 (および次元に応じた追加のコンポーネント) を指定してサーフェスの標高を評価する関数があるとします。

double ComputeElevation(double x, double y, ...., double z) { }

これは分析関数ではないため、導関数を計算することはできません。私がする必要があるのは、任意の {x, y} ペアに対してサーフェスが最も急勾配である方向を見つけることです。1 回の評価は非常にコストがかかる可能性があります (最悪の場合、数秒または数分と考えてください)。

2D の場合の私の典型的なアプローチは、{x, y} に隣接する N 個の位置でサーフェスをサンプリングし、それらのサンプルに曲線を当てはめ、最高点の曲線を検索することです。この検索は高価な評価の影響を受けないためです。

2D でのサンプリング アルゴリズムの例

上の画像では、P0 が指定された座標です。{S0、S1、S2、S3} は、P0 の周囲にランダムに配置された 4 つのサンプルであり、PM は曲線の最高点です。したがって、ベクトル PM-P0 は、最も急な上昇の方向です。

しかし、これを N 次元にスケールアップする方法や、これを行うためのよりスマートなアルゴリズムがあるかどうかはわかりません。

次元の数は潜在的に非常に大きい (数十から数百) ため、最終的に使用する方法は、次元よりもサンプルが少ない場合に機能する必要があります。私は正確な答えを探しているわけではありません。それは不可能ですが、中途半端な近似がすでに大歓迎です。

ps。私はこれを C# で行っていますが、それほど重要ではありませんが、C# 以外の言語機能にはアクセスできません。

4

2 に答える 2

2

特定のポイント付近の一連のランダム サンプルから勾配を推定しようとしているようです。

残念ながら、n次元がある場合n+1、勾配を適切に推定するには最小限のポイントが必要です。ポイントが少ないと、ディメンションをドロップアウトする必要があり、グラデーションのより低いディメンションの投影を推定することになります。kとはいえ、寸法をキャプチャすると、プロジェクトがsqrt(k/n)真のグラデーションの長さを取得する可能性があります。

ここに 1 つのアプローチがあります。k+1ポイントの周りのランダムなポイントをサンプリングし、さらにそれらが線形独立であると仮定します。そのうちの 1 つを「原点」として選択すると、kディメンションが表示されます。前のすべての点に直交する別n-kの点を見つけて、原点の値を入れます。(これにより、これらの寸法がグラデーションで表現されなくなります。)

これnで、ベクトルと、それぞれの勾配の内積の推定値が得られました。各標準単位ベクトルを取り、それをベクトルの線形結合として書きます。勾配の同じ線形結合により、勾配のその成分の推定値が得られます。すべての単位ベクトルに対してこれを行い、それらを合計すると、勾配の推定値が得られます。

いくつかの近点と遠点を使用しようとしていて、そのうちのいくつかが線形独立していない場合、このアプローチは機能せず、もっと複雑なことをする必要があることに注意してください。

于 2011-07-01T00:09:29.963 に答える
0

曲線の計算がポイントをランダムにサンプリングするよりも安価である理由は完全にはわかりませんが、これはhttp://en.wikipedia.org/wiki/Gradient_descentを思い出させます。あなたの問題は、現在の場所と新しいポイントの間の標高差を最適化しようとしていると考えることができます。ランダムな点を試すよりも速いかもしれませんし、多次元に一般化するのは本当に簡単です

関数はおそらく非単調増加であるため、境界 (開始点から x 単位内) との関係で定義することをお勧めします。

于 2011-06-30T23:38:03.487 に答える