0

ほぼすべてのプログラミング言語で、$ number = rand(1,100)を実行すると、フラットな確率が作成され、各数値が1%の確率で出現します。

ロケットを宇宙に打ち上げるなど、奇妙なことを抽象化しようとしている場合はどうなりますか。そのため、湾曲した(または角度の付いた)確率チャートが必要です。 しかし、私は「段階的な」チャートは必要ありません。 (重要:私は数学オタクではないので、おそらく完全にスキップしたり、知らなかったりする用語や概念があります!)ただし、角度の付いたグラフは問題ありません。

したがって、1から100の結果が得られる確率が必要な場合は...1が最も一般的な結果になります。2次に一般的な。あるポイントまで直線で-たとえば50の場合、チャートの角度、および51のローリングの確率は49のローリングの確率よりも低くなります。次に75で再び角度を付けるため、75を超える結果が得られる確率は単純に25%ですが、チャートによっては、信じられないほど小さい数値であり、おそらく10%または5%程度です。

この質問は意味がありますか?これをPHPでどのように実行できるかを具体的に確認したいのですが、必要なロジックはかなり移植性が高いと思います。

4

4 に答える 4

2

あなたの質問に対する簡単な答えは、そうです、これは理にかなっています、そしてそうです、それは可能です。

あなたが話していることの専門用語は、確率密度関数です。直感的には、それはまさにそのように聞こえます。これは、ランダムなサンプルを描画した場合に、それらのサンプルがクラスター化する密度(およびそれらのクラスターがどのように見えるか)を示す関数です。「フラット」関数として識別するものは、「フラット」関数とも呼ばれます。均一な密度; 標準ライブラリに組み込まれることが多いもう1つの非常に一般的なものは、「正規」またはガウス分布です。ご覧のとおり、ベルカーブ分布とも呼ばれます。

ただし、いくつかの制限がありますが、任意のディストリビューションを使用でき、一方を他方から構築するのは比較的簡単です。

それは良いニュースです。悪いニュースは、それが数学オタクの領域だということです。確率密度関数の背後にある考え方は非常に直感的で理解しやすいものですが、それらを使用することの全力は、ほんの少しの微積分で解き放たれます。たとえば、関数の制限の1つは、合計確率が1でなければならないことです。これは、曲線の下の領域が正確に1である必要があると言うのと同じです。あなたが説明する正確なケースでは、関数はすべて直線であるため、その制約を支援するために微積分は厳密には必要ありません...しかし、一般的なケースでは、実際にそうします。

探すべき2つの良い用語は、「変換方法」(いくつかあります)と「棄却サンプリング」です。棄却サンプリングの背後にある基本的な考え方は、使用できる関数(この場合は一様分布)と必要な関数があるということです。一様分布を使用して一連の点(x、y)を作成し、目的の関数をy座標に対するテストとして使用して、x座標を受け入れるか拒否します。

それは写真なしではほとんど意味がありませんが、残念ながら、これについて話すための最良の方法はすべて微積分に基づいています。以下のリンクには、かなり良い説明とかなり良いイラストがあります。

http://www.stats.bris.ac.uk/~manpw/teaching/folien2.pdf

于 2012-05-20T00:34:45.957 に答える
0

基本的には、乱数を選択してから、おそらく指数関数にフィードして数値を選択するだけで済みます。

結果にどの程度の重みを付けるかを判断すると、使用する数式が異なります。

PHPにランダムなdouble関数があると仮定して、これをランダムと呼びます。

$ num = 100 * pow(random()、2);

これにより、乱数はそれ自体で2倍になり、0から1までの数値を返すため、乱数は小さくなり、より低い数値になる可能性が高くなります。正確な比率を得るには、この形式で遊ぶ必要があります。

于 2012-05-19T04:27:47.070 に答える
0

私には、対数関数(湾曲している)が必要なようです。それでも乱数を引くことはできますが、得られる値はほとんどの場合100より1に近くなります。だから私はこれがうまくいくと思います:

function random_value($min=0, $max=100) {
    return log(rand($min, $max), 10) * 10;
}

ただし、確認するために自分で調べたい場合があります。

于 2012-05-19T04:28:08.200 に答える
0

湾曲した確率を達成する最も簡単な方法は、たとえばゲームの賞金を多くの勝者と敗者に分配する方法を考えることです。あなたの例を単純化するために、私は16人のプレーヤーと4つの賞を取ります。次に、賞のシンボル(1,2,2,3,3,3,3,3,4,4,4,4,4,4,4)を使用して配列を作成し、この中からランダムに数字を選びます配列。数学的には、賞1 = 1:16、賞2 3:16、賞3 5:16、賞47:16の確率があります。

于 2012-05-19T07:56:30.760 に答える