Random-Generation

生成帶有約束的隨機向量

  • March 11, 2011

我需要創建滿足以下約束的實數 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.

有效生成這種向量的典型算法是什麼?

如果我理解正確,只有少量 n 維空間中的點滿足您的限制。

您的第一個約束將其限制在超球體的內部,這讓我想起了 comp.graphics.algorithms 常見問題解答“球體上的均勻隨機點”如何在 3-d 單位球中生成均勻分佈的點? 第二個約束從超球面切出一點,其他約束進一步縮小到滿足您的約束的體積。

我認為最簡單的做法是常見問題解答建議的方法之一:

  • 選擇一些我們確定包含整個體積的任意軸對齊邊界框。在這種情況下,-c < a_1 < c, -c < a_2 < c, … -c < a_n < c 包含整個約束體積,因為它包含第一個約束描述的超球面,而其他約束不斷縮小遠在那個音量。
  • 該算法在整個邊界框中統一選取點。在這種情況下,算法將候選向量的每個坐標獨立地設置為從-c到+c的某個獨立的均勻分佈的隨機數。(我假設您希望點在整個體積中以相等的密度分佈。我想您可以使算法選擇具有泊松分佈或其他非均勻分佈的部分或全部坐標,如果您有理由這樣做)。
  • 一旦你有了一個候選向量,檢查每個約束。如果其中任何一個失敗,請返回並選擇另一個點。
  • 一旦你有了一個候選向量,就將它存儲在某個地方以備後用。
  • 如果您沒有足夠的存儲向量,請返回並嘗試生成另一個向量。

使用足夠高質量的隨機數生成器,這將為您提供一組存儲的坐標,這些坐標符合您的標準,具有(預期的)均勻密度。

唉,如果你有一個相對較高的維度 n(即,如果你從一個相對較長的坐標列表中構造每個向量),那麼內接球體(更不用說你的縮減體積)在總體積中的比例非常小。總邊界框,因此它可能需要執行許多迭代,其中大多數在您的約束區域之外生成被拒絕的點,然後才能在您的約束區域內找到一個點。由於現在的計算機速度非常快,那會足夠快嗎?

引用自:https://stats.stackexchange.com/questions/8157

comments powered by Disqus

相關問答