🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.c
17 messages
17 total messages Started by Borneq Fri, 16 Dec 2016 18:35
[C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308943
Author: Borneq
Date: Fri, 16 Dec 2016 18:35
8 lines
1451 bytes
Chcę zrobić symulację sieci Jacksona. Tam elementy mają przybywać z 
opóźnieniami w zadanym rozkładzie. Kwant czasu niech będzie 1/10 
sekundy. Teraz mam rozkład równomierny przez rand (ale w C# a nie C++) i 
chcę uzyskać kwant od 0 czy 1 do nieskończoności z malejącym 
prawdopodobieństwem: np uzyskać opóźnienie 1,7,25 czy 100 kwantów czasu.
A może lepiej co jeden kwant wywoływać jakieś losowanie, i jeśli się uda 
to od razu będzie rozkład wykładniczy? np. losuję z prawdopodobieństwem 
1/10 i za 15-tym razem się udało.
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308944
Author: bartekltg
Date: Fri, 16 Dec 2016 19:07
14 lines
1522 bytes
On 16.12.2016 19:35, Borneq wrote:
> Chcę zrobić symulację sieci Jacksona. Tam elementy mają przybywać z
> opóźnieniami w zadanym rozkładzie. Kwant czasu niech będzie 1/10
> sekundy. Teraz mam rozkład równomierny przez rand (ale w C# a nie C++) i
> chcę uzyskać kwant od 0 czy 1 do nieskończoności z malejącym
> prawdopodobieństwem: np uzyskać opóźnienie 1,7,25 czy 100 kwantów czasu.

Napisz po ludzku, jakim rozkłądem mają być  generowane są te kolejne
dojscia?

Przeczytaj co to jest proces Poissona, o o to chodzi?

pzdr
bartekltg
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308945
Author: Borneq
Date: Fri, 16 Dec 2016 19:13
9 lines
1432 bytes
W dniu 16.12.2016 o 20:07, bartekltg pisze:
> Napisz po ludzku, jakim rozkłądem mają być  generowane są te kolejne
> dojscia?
>
> Przeczytaj co to jest proces Poissona, o o to chodzi?
https://pl.wikipedia.org/wiki/Proces_Poissona
"jest ciągiem niezależnych zmiennych losowych o rozkładzie wykładniczym 
z jednakowym dla każdej ze zmiennych parametrem \lambda."
czyli jak rozumiem czasy między przybyciami są w rozkładzie wykładniczym?
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308947
Author: bartekltg
Date: Fri, 16 Dec 2016 19:15
40 lines
2439 bytes
On 16.12.2016 20:07, bartekltg wrote:
> On 16.12.2016 19:35, Borneq wrote:
>> Chcę zrobić symulację sieci Jacksona. Tam elementy mają przybywać z
>> opóźnieniami w zadanym rozkładzie. Kwant czasu niech będzie 1/10
>> sekundy. Teraz mam rozkład równomierny przez rand (ale w C# a nie C++) i
>> chcę uzyskać kwant od 0 czy 1 do nieskończoności z malejącym
>> prawdopodobieństwem: np uzyskać opóźnienie 1,7,25 czy 100 kwantów czasu.
>
> Napisz po ludzku, jakim rozkłądem mają być  generowane są te kolejne
> dojscia?
>
> Przeczytaj co to jest proces Poissona, o o to chodzi?

Urwało mi...

Jeśli tak, to, poza oczywistą i upierdliwą możliwością
generowania wielu liczb z rozkłądu wykłądzniczego,
można zrobić to szybciej.

Niech interesuje nas rozkłąd czasu [t1, t2]
gęstość procesu wynosi lambda.

Losujemy N z rozkłądu poissona o parametrze lambda * (t2-t1)

A potem N (tak, te wylosowane N) liczb X_i z rozkłądu _jednostajnego_
na [t1, t2].

Sortujesz, mamy wynik.

Ten ciąg (traktowany jako zmienna losowa) jest procesem poissona,
tzn odstępy pomiędzy kolejnymi punktami mają rozkład wykładniczy,
oczekiwana ilość punktów w dowolnym przedziale [s1,s2] zadana jest
rozkłądem Poiss((s2-s1)*lambda).

Oczywiście, to dla ciągłych, ale sam na wstępie mówisz o rozkłądzie
wykłądzniczym, więc mimo 'dyskretyzacji' czasu wcale Ci to nie
przeszkadza.

pzdr
bartekltg
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308946
Author: bartekltg
Date: Fri, 16 Dec 2016 19:16
19 lines
1610 bytes
On 16.12.2016 20:13, Borneq wrote:
> W dniu 16.12.2016 o 20:07, bartekltg pisze:
>> Napisz po ludzku, jakim rozkłądem mają być  generowane są te kolejne
>> dojscia?
>>
>> Przeczytaj co to jest proces Poissona, o o to chodzi?
> https://pl.wikipedia.org/wiki/Proces_Poissona
> "jest ciągiem niezależnych zmiennych losowych o rozkładzie wykładniczym
> z jednakowym dla każdej ze zmiennych parametrem \lambda."
> czyli jak rozumiem czasy między przybyciami są w rozkładzie wykładniczym?

Tak.

Czas pomiędzy kolejnymi przybyciami.

Patrz kontuynuacja postu.

pzdr
bartekltg
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308948
Author: Borneq
Date: Fri, 16 Dec 2016 19:42
18 lines
1781 bytes
W dniu 16.12.2016 o 20:15, bartekltg pisze:
> Niech interesuje nas rozkłąd czasu [t1, t2]
> gęstość procesu wynosi lambda.
>
> Losujemy N z rozkłądu poissona o parametrze lambda * (t2-t1)
>
> A potem N (tak, te wylosowane N) liczb X_i z rozkłądu _jednostajnego_
> na [t1, t2].
>
> Sortujesz, mamy wynik.

Czy dobrze rozumiem: nie mam t1, t2, tylko ciągłą animację, którą mogę 
zatrzymać, gdy zatrzymam po 3 minutach mam t1=0, t2=1800
Losuję z rozkładu Poissona. Jak? losuję jednostajnie k a potem liczę 
f(k,lambda)?
Załóżmy że długi interwał i wylosowałem 100 liczb, jak je wylosuję i 
posortuję to czy odstępy będą w rozkładzie wykładniczym? Jeśli tak, to 
mogę pominąć rozkład Poissona i przyjąć od razu 100?
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308949
Author: bartekltg
Date: Fri, 16 Dec 2016 20:06
69 lines
3052 bytes
On 16.12.2016 20:42, Borneq wrote:
> W dniu 16.12.2016 o 20:15, bartekltg pisze:
>> Niech interesuje nas rozkłąd czasu [t1, t2]
>> gęstość procesu wynosi lambda.
>>
>> Losujemy N z rozkłądu poissona o parametrze lambda * (t2-t1)
>>
>> A potem N (tak, te wylosowane N) liczb X_i z rozkłądu _jednostajnego_
>> na [t1, t2].
>>
>> Sortujesz, mamy wynik.
>
> Czy dobrze rozumiem: nie mam t1, t2, tylko ciągłą animację, którą mogę
> zatrzymać, gdy zatrzymam po 3 minutach mam t1=0, t2=1800
> Losuję z rozkładu Poissona.Jak?

Ja losuję tak
http://en.cppreference.com/w/cpp/numeric/random/poisson_distribution
Co jest w C#, pojecia nie mam, ale na pewno coś jest.

Uwaga, jeśli nie ma biblitecznej, nie zadowalaj się peirwszym
lepszym kodem z googla.


> losuję jednostajnie k a potem liczę
> f(k,lambda)?

Nic nie zrozumiałem.

Losujesz JEdną liczbę z rozkłądu Poiss (  (t2-t1)*lambda ),
nazywasz ją N.

Losujesz N liczb z rozkłądu jednostajnego, nazywasz je x_i
Sortujesz. Koniec.


> Załóżmy że długi interwał i wylosowałem 100 liczb, jak je wylosuję i
> posortuję to czy odstępy będą w rozkładzie wykładniczym?

Konkretne liczby nie są w żadnem rozkłądzie.
Ale, modulo nieścisłość, tak.


> Jeśli tak, to
> mogę pominąć rozkład Poissona i przyjąć od razu 100?

Wtedy nie "będą w rozkłądzie wykładzniczym".
:)

Ale im większy przedział (a włąściwie wartość oczekiwana N),
tym mniej wylosowane N będzie się względnie rożnic od E(N).

Jeśli bardzo chcesz uniknać Poissona, ale zależy Ci jednak
na tym, by liczby były z wykłądzniczego,
możesz je wyliczyć bezpośrednio z wykałdzniczego.
Do tego tylko logartym potrzebny:

u ~ jednostajny (0,1)
x = - 1/lambda ln(u)

x jest liczbą losową o rozkłądz wykładzniczy z parametrem lambda.

Generujesz 100, dodajesz (tek jak w definiczji procesu na wiki).


100 logarytmów na 3 minuty gra przezyje.

pzdr
bartekltg
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308950
Author: Borneq
Date: Fri, 16 Dec 2016 20:24
14 lines
1832 bytes
W dniu 16.12.2016 o 21:06, bartekltg pisze:
> Generujesz 100, dodajesz (tek jak w definiczji procesu na wiki).
> 100 logarytmów na 3 minuty gra przezyje.

A po trzech minutach będzie szło dalej. Wtedy między ostatnim z tych 
trzech minut a pierwszym następnych będzie nieścisłość.
To co chcę zrobić :
mam dwa suwaki - sterujące prędkością przybywania i zdejmowania z 
kolejki. Nie mam ustawionego czasu 3 minut, program chodzi w 
nieskończoność, tylko że mogę go zatrzymać. Wzór z logarytmem chyba 
wygodniejszy, tylko że nie mam interwału czasowego.
Czy można by losować co każdy kwant? losuję 15 razy z 
prawdopodobieństwem 1/10 i wreszcie wylosuję, (albo już po 6 razach) i 
wtedy wkładam lub zdejmuję z kolejki?
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308952
Author: bartekltg
Date: Fri, 16 Dec 2016 20:27
25 lines
2105 bytes
On 16.12.2016 21:24, Borneq wrote:
> W dniu 16.12.2016 o 21:06, bartekltg pisze:
>> Generujesz 100, dodajesz (tek jak w definiczji procesu na wiki).
>> 100 logarytmów na 3 minuty gra przezyje.
>
> A po trzech minutach będzie szło dalej. Wtedy między ostatnim z tych
> trzech minut a pierwszym następnych będzie nieścisłość.
> To co chcę zrobić :
> mam dwa suwaki - sterujące prędkością przybywania i zdejmowania z
> kolejki. Nie mam ustawionego czasu 3 minut, program chodzi w
> nieskończoność, tylko że mogę go zatrzymać. Wzór z logarytmem chyba
> wygodniejszy, tylko że nie mam interwału czasowego.
> Czy można by losować co każdy kwant? losuję 15 razy z

A na cholerę?
Przeiceż to więcej roboty dla komputera.

> prawdopodobieństwem 1/10 i wreszcie wylosuję, (albo już po 6 razach) i
> wtedy wkładam lub zdejmuję z kolejki?

A czemu nie masz mieć w kolejce numeru najbliższej ramki, w której
coś się dzieje?

pzdr
bartekltg
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308951
Author: Borneq
Date: Fri, 16 Dec 2016 20:40
11 lines
1651 bytes
W dniu 16.12.2016 o 21:27, bartekltg pisze:
>> prawdopodobieństwem 1/10 i wreszcie wylosuję, (albo już po 6 razach) i
>> wtedy wkładam lub zdejmuję z kolejki?
>
> A czemu nie masz mieć w kolejce numeru najbliższej ramki, w której
> coś się dzieje?

Nie rozumiem jednej rzeczy: nie mam tak że ustalę 3 minuty, wylosuję 100 
czasów t_i i koniec. Mam start, a potem DOWOLNIE długi czas, podczas 
tego czasu mogę suwakami przyśpieszać i zwalniać przychodzenie i 
odchodzenie elementów.
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308953
Author: bartekltg
Date: Fri, 16 Dec 2016 21:07
30 lines
2476 bytes
On 16.12.2016 21:40, Borneq wrote:
> W dniu 16.12.2016 o 21:27, bartekltg pisze:
>>> prawdopodobieństwem 1/10 i wreszcie wylosuję, (albo już po 6 razach) i
>>> wtedy wkładam lub zdejmuję z kolejki?
>>
>> A czemu nie masz mieć w kolejce numeru najbliższej ramki, w której
>> coś się dzieje?
>
> Nie rozumiem jednej rzeczy: nie mam tak że ustalę 3 minuty, wylosuję 100
> czasów t_i i koniec. Mam start, a potem DOWOLNIE długi czas, podczas
> tego czasu mogę suwakami przyśpieszać i zwalniać przychodzenie i
> odchodzenie elementów.

Kończy się wcześniej policzony zapas, liczysz nowy
i po posortowaniu wsadzasz w kolejkę.
Ktoś przesunął suwak, kasujesz kolejkę, robisz nową
z nowym parametrem.

Przy symulacji bezpośredneij, liczysz sobie tylko jeden punkt
do przodu z rozkładu wykładniczego (albo ciut wiecej, jeśli
w jednek klatce moze przybyc wiecej obiektów).
Potem siedzisz i czekasz aż czas nadejdzie.
Wyświatlasz wtedy obiekt i losujesz kolejny czas oczekiwania.
Pamiętaj, że po zmianie suwaka nowe losowanie musi nastąpić
natychmiast, nie po tym, jak poprzedni obiekt zejdzie z jednoelementowej
kolejki (inaczej jak ktoś przesunie suwak na b. wolno, a potem na
szybko, naczeka sie na efekt)

pzdr
bartekltg
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308954
Author: bartekltg
Date: Fri, 16 Dec 2016 21:08
35 lines
2728 bytes
On 16.12.2016 22:07, bartekltg wrote:
> On 16.12.2016 21:40, Borneq wrote:
>> W dniu 16.12.2016 o 21:27, bartekltg pisze:
>>>> prawdopodobieństwem 1/10 i wreszcie wylosuję, (albo już po 6 razach) i
>>>> wtedy wkładam lub zdejmuję z kolejki?
>>>
>>> A czemu nie masz mieć w kolejce numeru najbliższej ramki, w której
>>> coś się dzieje?
>>
>> Nie rozumiem jednej rzeczy: nie mam tak że ustalę 3 minuty, wylosuję 100
>> czasów t_i i koniec. Mam start, a potem DOWOLNIE długi czas, podczas
>> tego czasu mogę suwakami przyśpieszać i zwalniać przychodzenie i
>> odchodzenie elementów.
>
> Kończy się wcześniej policzony zapas, liczysz nowy
> i po posortowaniu wsadzasz w kolejkę.
> Ktoś przesunął suwak, kasujesz kolejkę, robisz nową
> z nowym parametrem.
>
> Przy symulacji bezpośredneij, liczysz sobie tylko jeden punkt
> do przodu z rozkładu wykładniczego (albo ciut wiecej, jeśli
> w jednek klatce moze przybyc wiecej obiektów).
> Potem siedzisz i czekasz aż czas nadejdzie.
> Wyświatlasz wtedy obiekt i losujesz kolejny czas oczekiwania.
> Pamiętaj, że po zmianie suwaka nowe losowanie musi nastąpić
> natychmiast, nie po tym, jak poprzedni obiekt zejdzie z jednoelementowej
> kolejki (inaczej jak ktoś przesunie suwak na b. wolno, a potem na
> szybko, naczeka sie na efekt)


BTW, jeśli byś chciał w każdej klatce losować liczbę elementów,
które się pojawi, będzie ona zadana rokładem Poissona;>

Pzdr
bartekltg
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308955
Author: Borneq
Date: Fri, 16 Dec 2016 21:09
9 lines
1639 bytes
W dniu 16.12.2016 o 22:07, bartekltg pisze:
> Kończy się wcześniej policzony zapas, liczysz nowy
> i po posortowaniu wsadzasz w kolejkę.
> Ktoś przesunął suwak, kasujesz kolejkę, robisz nową
> z nowym parametrem.

Dzięki, już wiem. Tylko trzeba to nowe wsadzić w kolejkę odpowiednio. Co 
najmniej dwie możliwości: jak mam 3 minuty: to pierwszy nowego liczę od 
czasu 1800, lub od czasu ostatniego zdarzenia
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308956
Author: bartekltg
Date: Fri, 16 Dec 2016 21:13
20 lines
2075 bytes
On 16.12.2016 22:09, Borneq wrote:
> W dniu 16.12.2016 o 22:07, bartekltg pisze:
>> Kończy się wcześniej policzony zapas, liczysz nowy
>> i po posortowaniu wsadzasz w kolejkę.
>> Ktoś przesunął suwak, kasujesz kolejkę, robisz nową
>> z nowym parametrem.
>
> Dzięki, już wiem. Tylko trzeba to nowe wsadzić w kolejkę odpowiednio. Co
> najmniej dwie możliwości: jak mam 3 minuty: to pierwszy nowego liczę od
> czasu 1800, lub od czasu ostatniego zdarzenia

To pierwsze. Przecież dla czasu [0, 1800] już losowałeś.
Tylko dlatego, że ostatnie zdarzenie jest w 1600s nie
powinno powodować, żę dla odcinka [1600, 1800] losujesz dwa razy;>

Jeśli byś zrobił 'od ostatneigo zdarzenia' będziesz miał delikatne
zagęszczenie próbek w końcówkach obszarów.

pzdr
bartekltg
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308958
Author: Borneq
Date: Sat, 17 Dec 2016 19:36
15 lines
1675 bytes
W dniu 16.12.2016 o 21:06, bartekltg pisze:
> Jeśli bardzo chcesz uniknać Poissona, ale zależy Ci jednak
> na tym, by liczby były z wykłądzniczego,
> możesz je wyliczyć bezpośrednio z wykałdzniczego.
> Do tego tylko logartym potrzebny:
>
> u ~ jednostajny (0,1)
> x = - 1/lambda ln(u)
>
> x jest liczbą losową o rozkłądz wykładzniczy z parametrem lambda.
>
> Generujesz 100, dodajesz (tek jak w definiczji procesu na wiki).

A jak się ma 100 do lambda? Czy w tym przypadku lambda = 100? i generuję 
zawsze lambda ? Czy też lambda = długość okresu czasu / 100?
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308959
Author: Borneq
Date: Sat, 17 Dec 2016 20:00
12 lines
1392 bytes
W dniu 16.12.2016 o 20:15, bartekltg pisze:
> Niech interesuje nas rozkłąd czasu [t1, t2]
> gęstość procesu wynosi lambda.
>
> Losujemy N z rozkłądu poissona o parametrze lambda * (t2-t1)
>
> A potem N (tak, te wylosowane N) liczb X_i z rozkłądu _jednostajnego_
> na [t1, t2].
>
> Sortujesz, mamy wynik.

Czyli gdy N duże to zamiast z rozkładu można przyjąć N=lambda?
Re: [C#]Losowanie z rozkładu Poissona czy wykładniczego względem czasu
#308957
Author: bartekltg
Date: Sat, 17 Dec 2016 23:52
27 lines
2000 bytes
On 17.12.2016 20:36, Borneq wrote:
> W dniu 16.12.2016 o 21:06, bartekltg pisze:
>> Jeśli bardzo chcesz uniknać Poissona, ale zależy Ci jednak
>> na tym, by liczby były z wykłądzniczego,
>> możesz je wyliczyć bezpośrednio z wykałdzniczego.
>> Do tego tylko logartym potrzebny:
>>
>> u ~ jednostajny (0,1)
>> x = - 1/lambda ln(u)
>>
>> x jest liczbą losową o rozkłądz wykładzniczy z parametrem lambda.
>>
>> Generujesz 100, dodajesz (tek jak w definiczji procesu na wiki).
>
> A jak się ma 100 do lambda? Czy w tym przypadku lambda = 100? i generuję
> zawsze lambda ? Czy też lambda = długość okresu czasu / 100?

Lambda to gęstość.

Lambda = 100 da ci średnio 100 obiektów na jednostkę czasu, raczej nie
tego chcesz:)

Używaj wiki do takich pierdół jak zrozumienie oznaczeń we wzorkach,
które wziąłeś z wiki ;>

pzdr
bartekltg
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads