2010-08-24 70 views
2

如果我有一個由15 x 15個單元(但是變量)組成的網格,我將使用什麼公式或算法來隨機選擇20個聚集在中心單元周圍的單元?公式/算法來選擇網格中的中心單元格?

我想我會非常希望能夠設置中心點,半徑集羣,密度等等

任何指針將非常感激!乾杯。

+0

嗯......你需要選擇合適的分佈,給每個單元分配一個概率(他們最好加起來爲1)。然後,繼續抓住0和1之間的隨機數,然後選擇* right *單元格。當你在(0,0)處的單元格開始時,右邊的單元格就是你最終的位置,如果你的rand num大於那個概率,那麼移動到下一個單元格,同時也減去那個單元格的概率。這不是最快的方法,但是對於15 x 15來說,這樣做會很好。訣竅是選擇正確的電網分佈,這將有利於中心 - 這取決於你,因爲有很多選擇。 – 2010-08-24 15:51:52

+0

查看離散分佈的cdf vs pdf。 http://en.wikipedia.org/wiki/Discrete_probability_distribution你不需要跳入繁重的數學,只需瞭解離散分佈的cdf和pdf之間的區別。這應該解釋爲什麼你會繼續從一個單元格移動到另一個單元格,直到你找到*正確*一個。你如何訂購細胞取決於你。你可以按照螺旋狀的方式排列它們,然後應用某種三角形分佈。你也可以將網格分成幾個正方形或圓形,並且說形狀上的任何位置的概率都是相同的。 – 2010-08-24 15:57:22

+0

對於15x15左右的網格,您可以手動調整快速且髒的分佈 - 只需增加中心的重量即可。如果你可以有很多不同的網格,那麼你最好使用一個聰明的公式,但是再一次,它不需要是完美的。你只是想確保在最後「相對概率」「正常化」,這樣一切都加起來就是1.例如,在平方(x,y)處的概率可以與1/r成比例,其中r是距離到中心。對於中心本身,你想要承擔一些足夠高的概率,而不是1/0。當你得到相對號碼 – 2010-08-24 16:01:46

回答

3

monte carlo?

<pseudocode>

found=false 
sigma2=3;    // variance 
centrex=8; centrey=8; // centre point 
while !found 
    x=random(15)  //for a 15x15 grid of course! 
    y=random(15) 
    r2=(x-centrex)^2 + (y-centrey)^2 // squared distance to chosen point 
    p=exp(-r2/sigma)     // probability of accepting this point 
    if(p>rand(1)) found=true;  // (calcluated as gaussian distribution) 
end 

</pseudocode>

可以使用在p=線公式選擇你的分佈。 這裏可以使用sigma值來控制分佈的傳播。例如,對於半徑爲3的扁平分佈,使用p=r2<9

對於高斯,半徑和密度在本質上是一樣的東西,作爲px積分和y必須加起來爲1

+0

非常感謝 - 這似乎正是我所追求的! 我只需要添加一個方法來檢查重複的單元格,並用不同大小的x和y尺度進行實驗 - 這是否會像預期的那樣工作,如11 * 15網格還是需要保持平方? – davivid 2010-08-24 17:37:12

+1

它可以與任何大小的網格一起使用,但是按照它的情況,選定單元的分佈將保持圓形。爲了使它變成橢圓形,在r2中改變比例,即'r2 =((x-centrex)* 15/11)^ 2 +(y-centrey)^ 2'來保持形狀。 – 2010-08-24 18:04:05

+1

哦,爲了防止重複,您應該跟蹤之前選擇的項目,並使用布爾15x15數組初始化爲false。然後將'found'行改爲:if(p> rand(1)&!previouslyChosen [x,y]){found = true; previouslyChosen [X,Y] = TRUE; }' – 2010-08-24 18:07:03

1

圈內的隨機性是已知的自相矛盾的問題(參見Bertrand的悖論)。所以你需要考慮如何隨機分配點數。選擇從0到指定半徑的隨機距離,並從圓心(網格中心)隨機選擇一個方向,可能不是您想要的,因爲您將在整個區域內分佈不均勻(更多集羣朝向中央)。我可以計算圓的面積(即:具有指定半徑的圓內的單元格),可以將它們存儲在臨時數組中,並隨機選擇n個(例如20個)。我不確定這是完全有用的,但主要想法是:隨意考慮你的意思。

+0

謝謝,還有更多要考慮的地方!目前上面的答案似乎解決了我的問題 – davivid 2010-08-24 17:42:25

相關問題