制約付きのランダムベクトルの生成


10

次の制約を満たす実数a_iのランダムベクトルを作成する必要があります。

abs(a_i) < c_i;      
sum(a_i)< A;        # sum of elements smaller than A
sum(b_i * a_i) < B; # weighted sum is smaller than B 
aT*A*a < D          # quadratic multiplication with A smaller than D

where c_i, b_i, A, B, D are constants.

この種のベクトルを効率的に生成するための典型的なアルゴリズムは何でしょうか?


1
4番目の制約、「aの大きさは..」とはどういう意味ですか
M.ティビッツ

私の間違い。説明が終了しました。フィードバックをお寄せいただきありがとうございます。
LouisChiffre

それはどのa_iように分布に従いp_i、それよりも少ないですcか?分布p_iも少ないのでc?どのディストリビューションで考えていますか?
deps_stats 2011年

@deps_stats。非常に良い点。疑似コードはあまり明確ではありませんでした。私が考えている分布はポアソン分布です。各要素は、異なるラムダを持つポアソン分布に従います。それを念頭に置いて、世代の終わりにa_iを再スケーリングしてそれを満たすことができるので、最初の条件(a_i <c)は必要ないと思います。
LouisChiffre

私は何かを聞いてみよう...ですcABおよびラムダは、固定されましたか?
deps_stats 2011年

回答:


4

私があなたを正しく理解していれば、n次元空間の一部の小さなボリュームの点だけが制約を満たします。

最初の制約は、それを超球の内部に制約します。これは、comp.graphics.algorithms FAQ 「球上の均一なランダムポイント」3次元のユニットボールに均一に分布したポイントを生成する方法を思い出させます。 2番目の制約は超球から少し切り出して、他の制約は制約を満たすボリュームでさらに削り取ります。

私がする最も簡単なことはFAQによって提案されたアプローチの1つだと思います:

  • ボリューム全体が確実に含まれる、任意の軸に沿った境界ボックスを選択します。この場合、-c <a_1 <c、-c <a_2 <c、... -c <a_n <cには、最初の制約によって記述された超球体が含まれているため、制約されたボリューム全体が含まれ、他の制約はウィットリングを続けますそのボリュームで離れて。
  • アルゴリズムは、バウンディングボックス全体で均一にポイントを選択します。この場合、アルゴリズムは、候補ベクトルの各座標を、-cから+ cまでのいくつかの独立した均一に分布した乱数に個別に設定します。(このボリューム全体に等しい密度で分布する点が必要だと想定しています。何らかの理由でポアソン分布またはその他の不均一な分布を持つ一部またはすべての座標をアルゴリズムで選択できると思います)。
  • 候補ベクトルを作成したら、各制約を確認します。いずれかに失敗した場合は、戻って別のポイントを選択してください。
  • 候補ベクトルを取得したら、後で使用できるようにどこかに保存します。
  • 保存されているベクターが十分にない場合は、戻って別のベクターを生成してみてください。

十分に高品質の乱数ジェネレーターを使用すると、(期待される)均一な密度で基準を満たす格納された座標のセットが得られます。

悲しいかな、あなたが比較的高い次元数nを持つ場合(つまり、比較的長い座標のリストから各ベクトルを構築する場合)、内接する球体(削り取られたボリュームがはるかに少ない)の合計ボリュームの驚くほど小さい部分があります。合計バウンディングボックス。多くの反復を実行する必要がある場合があります。ほとんどの反復は、制約された領域の内側のポイントを見つける前に、制約された領域の外側に拒否されたポイントを生成します。最近のコンピュータはかなり高速なので、それで十分でしょうか?


だからあなたが提案しているのは、空間を効果的にサンプリングすることです。境界ボックスの検索が静的に実行できない(IE、ハードコードできない)ことを除いて、同様の問題があります。経験上、これは、制約が次の形式である場合は機能しf1(x1) + f2(x2) == Cません。
Groostav、2015年

はい、等価( "==")制約がある場合、サンプリング方法は機能しません。球の内部(半径<= R)ではなく、球の表面または円柱の表面にある点などの制約(半径== R)。ボリューム全体で均一にポイントを選択すると、希望のサーフェスに「決して」(確率が0に近づく)ヒットします。したがって、どういうわけかその表面にある点のみを選択する必要があります。つまり、f1(x1)+ f2(x2)== Cであるような点[x1、x2、x3]を見つけるには、ランダムにx1を選択して強制することができます。 x2 = inverse_f2(C-f1(x1))。
David Cary

球の表面に均一に分布する点の特別な場合については、球上の均一なランダムな点」を参照してください。
David Cary

@Groostav:おそらく、あなたの質問は元の質問と十分に異なり、新しいトップレベルの質問として投稿できますか?「フォローアップの質問を投稿する必要があると言われましたが、その理由と方法は?」
David Cary
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.