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
Author: Borneq
Date: Fri, 16 Dec 2016 18:35
Date: Fri, 16 Dec 2016 18:35
8 lines
1451 bytes
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
Author: bartekltg
Date: Fri, 16 Dec 2016 19:07
Date: Fri, 16 Dec 2016 19:07
14 lines
1522 bytes
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
Author: Borneq
Date: Fri, 16 Dec 2016 19:13
Date: Fri, 16 Dec 2016 19:13
9 lines
1432 bytes
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
Author: bartekltg
Date: Fri, 16 Dec 2016 19:15
Date: Fri, 16 Dec 2016 19:15
40 lines
2439 bytes
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
Author: bartekltg
Date: Fri, 16 Dec 2016 19:16
Date: Fri, 16 Dec 2016 19:16
19 lines
1610 bytes
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
Author: Borneq
Date: Fri, 16 Dec 2016 19:42
Date: Fri, 16 Dec 2016 19:42
18 lines
1781 bytes
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
Author: bartekltg
Date: Fri, 16 Dec 2016 20:06
Date: Fri, 16 Dec 2016 20:06
69 lines
3052 bytes
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
Author: Borneq
Date: Fri, 16 Dec 2016 20:24
Date: Fri, 16 Dec 2016 20:24
14 lines
1832 bytes
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
Author: bartekltg
Date: Fri, 16 Dec 2016 20:27
Date: Fri, 16 Dec 2016 20:27
25 lines
2105 bytes
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
Author: Borneq
Date: Fri, 16 Dec 2016 20:40
Date: Fri, 16 Dec 2016 20:40
11 lines
1651 bytes
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
Author: bartekltg
Date: Fri, 16 Dec 2016 21:07
Date: Fri, 16 Dec 2016 21:07
30 lines
2476 bytes
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
Author: bartekltg
Date: Fri, 16 Dec 2016 21:08
Date: Fri, 16 Dec 2016 21:08
35 lines
2728 bytes
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
Author: Borneq
Date: Fri, 16 Dec 2016 21:09
Date: Fri, 16 Dec 2016 21:09
9 lines
1639 bytes
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
Author: bartekltg
Date: Fri, 16 Dec 2016 21:13
Date: Fri, 16 Dec 2016 21:13
20 lines
2075 bytes
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
Author: Borneq
Date: Sat, 17 Dec 2016 19:36
Date: Sat, 17 Dec 2016 19:36
15 lines
1675 bytes
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
Author: Borneq
Date: Sat, 17 Dec 2016 20:00
Date: Sat, 17 Dec 2016 20:00
12 lines
1392 bytes
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
Author: bartekltg
Date: Sat, 17 Dec 2016 23:52
Date: Sat, 17 Dec 2016 23:52
27 lines
2000 bytes
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