2

次のパケットを送信する前に、ポアソン期間スリープする必要があるという要件があります。私が考えることができる現在の式は

( e^(-lambda) X lambda^t ) / fact(t)

ただし、時間ステップが 280 以上の場合、オーバーフローのためにファクト(t) が無効になります。

誰かがVB .NETでこの従来の方法を回避するのを手伝ってくれますか?

4

2 に答える 2

2

到着間隔を探していると思います。ランダムな到着間隔は、を使用して生成できます

t = (Math.log(1.0-Math.random())/-lambda

あなたが投稿した式は、特定の期間内に正確にt(あなたの場合)の到着がある確率を定義するものです。

ポアソン分布の生成に関するウィキペディアの記事を参照してください。

于 2011-08-22T00:49:48.307 に答える
0

階乗値が非常に大きくなっていますが (ご覧のとおり)、λ k項も補正のために多少大きくなっています。これを考慮した分布を表す方法については、ポアソン分布に関するウィキペディアの記事を参照してください。

ここに画像の説明を入力

VB の実装は次のようになります。

Module Module1

    Sub Main()
        Console.WriteLine(Poisson(4, 250))
        Console.ReadKey()
    End Sub

    Function Poisson(ByVal lambda As Integer, ByVal k As Integer) As Double
        Poisson = Math.Exp(k * Math.Log(lambda) - lambda - SumOverLn(1, k))
    End Function

    Function SumOverLn(ByVal start As Integer, ByVal endval As Integer) As Long
        Dim i As Integer
        SumOverLn = 0
        For i = start To endval
            SumOverLn = SumOverLn + Math.Log(i)
        Next

    End Function

End Module

しばらくすると 0 に近づき、そのように登録されるように見えます。表示の精度を調整して小数点以下の桁数を増やすことができる場合がありますが、0 は高い値の適切な近似値である可能性があります (確率論から得られる概念は、これらの値が実際にはゼロに非常に近いようです)。とりあえず)。

于 2011-08-22T00:25:15.170 に答える