Формула / функция задержки Пуассона для VB? - PullRequest
2 голосов
/ 22 августа 2011

У меня есть требование, когда мне нужно поспать в течение некоторого времени Пуассона перед отправкой следующего пакета. Текущая формула, которую я могу придумать:

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

Однако для временных шагов 280 и более факт (t) устареет из-за переполнения.

Может кто-нибудь помочь мне обойти этот традиционный способ в VB .NET?

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Я думаю, что вы ищете время прибытия.Случайное время прибытия может быть сгенерировано с использованием

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

. Вы разместили формулу, которая определяет вероятность , что в вашемcase) прибытия в течение определенного периода времени.

См. статью в Википедии о генерации пуассоновских распределений .

0 голосов
/ 22 августа 2011

Даже если факториальное значение становится чрезвычайно большим (как вы заметили), член λ k также становится несколько большим для компенсации.Для способа представления распределения, учитывающего это, см. статью Википедии о распределении Пуассона:

enter image description here

Реализация 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 может быть достаточно приличным приближением для высоких значений (идея, которую вы получаете из теории вероятностей, заключается в том, что эти значения действительно очень близки к нулюв любом случае).

...