MODELOWANIE SYMULACYJNE Simulation Modelling (ang.) Edycja 2013/2014
Metody Symulacyjne w Telekomunikacji (MEST) Wykład 4: Generowanie zdarzeń
description
Transcript of Metody Symulacyjne w Telekomunikacji (MEST) Wykład 4: Generowanie zdarzeń
Metody Symulacyjne w Telekomunikacji (MEST)
Wykład 4: Generowanie zdarzeń
Dr inż. Halina Tarasiuk
([email protected]), p. 337, tnt.tele.pw.edu.pl
Zagadnienia
• Wstęp
• Planowanie zdarzeń
• Generowanie zdarzeń a zmienne losowe
• Generatory liczb losowych
• Generowanie wartości zmiennych losowych dla wybranych rozkładów
Zagadnienia
• Wstęp
• Planowanie zdarzeń
• Generowanie zdarzeń a zmienne losowe
• Generatory liczb losowych
• Generowanie wartości zmiennych losowych dla wybranych rozkładów
Wstęp (1)
• Symulacja, która ma jakiekolwiek losowe elementy musi angażować pewne próbki lub generować liczby losowe z rozkładów prawdopodobieństwa
• Rozkłady są często wynikiem dopasowania pewnych rozkładów, np. rozkładu wykładniczego, gamma, Poissona, do danych pochodzących z obserwacji rzeczywistego systemu
Wstęp (2)
• Źródła losowości dla przykładowych systemów– Przemysł
• Czas życia maszyn, czas naprawy maszyn
– Komunikacja• Odstęp między wiadomościami, typ wiadomości, długość
wiadomości
– Transport• Czas załadunku statku, odstęp między klientami
przybywającymi do odprawy
Zagadnienia
• Wstęp
• Planowanie zdarzeń
• Generowanie zdarzeń a zmienne losowe
• Generatory liczb losowych
• Generowanie wartości zmiennych losowych dla wybranych rozkładów
Planowanie zdarzeń – przykład (1)
• Symulacja prostego systemu kolejkowego z jednym serwerem obsługi i jedną kolejką
Serwerobsługi
KolejkaNapływ klientów
Wypływ klientów
Rys. 1: Prosta reprezentacja modelu systemu
Planowanie zdarzeń - przykład(2)
Przybycie do
systemu
Opuszczenie systemu
Graf zdarzeń, model kolejkowy
inicjalizacja
Możliwe przejście
Zagadnienia
• Wstęp
• Planowanie zdarzeń
• Generowanie zdarzeń a zmienne losowe
• Generatory liczb losowych
• Generowanie wartości zmiennych losowych dla wybranych rozkładów
Generowanie zdarzeń a zmienne losowe
• Symulacja systemów o parametrach wejściowych opisanych pewnymi zmiennymi losowymi wymaga określenia rozkładów prawdopodobieństwa tych zmiennych
• Przykłady – Zmienne losowe opisujące:
• Odstępy między klientami napływającymi do systemu kolejkowego
• Czas obsługi klientów w systemie kolejkowym
Zmienne losowe a generowanie zdarzeń
• Założenie– parametry wejściowe modelu symulacyjnego
• zmienne losowe opisane danym rozkładem
• Przebieg symulacji– wartości zmiennych losowych generowane
zgodnie z przyjętym rozkładem
Zmienne losowe i ich własności
• Oznaczenia zmiennych losowych– X, Y, Z
• Założenia– Eksperyment – pewien proces, którego wynik nie jest znany – Zbiór wszystkich możliwych wyników jest określany zbiorem
próbek, S– Zmienna losowa jest pewną funkcją, która przypisuje wartość ze
zbioru liczb rzeczywistych każdemu z wyników eksperymentu ze zbioru S
• Wartości, które może przyjmować zmienna losowa– x, y, z
Zmienne losowe i ich własności
• Dystrybuanta zmiennej losowej X jest zdefiniowana dla każdego x, jako
– Gdzie P(X≤x) oznacza prawdopodobieństwo skojarzone ze zdarzeniem, że {X≤x}
• Własności dystrybuanty– 0 ≤F(x) ≤1 dla wszystkich x
– F(x) nie jest malejąca
xdlaxXPxF
Zmienna losowa dyskretna
6
1
3
1
2
1
3
2
6
5
1
1
2 3 4
)(xp
x x
6
1
3
1
2
1
3
2
6
5
1
1
2 3 4
)(xF
,...3,2,1 idlaxXPxp ii
1
1i
ixp
xX
ixpxF
Zmienna losowa ciągła (1)
• Zmienna losowa X jest zmienną losową ciągłą, jeżeli istnieje nieujemna funkcja f(x) taka, że dla dowolnego zbioru liczb rzeczywistych
B
dxxfidxxfBXP 1
xwszystkichdladyyfx,XPxF
dyyfxx,xXP
wówczas0xiliczbąjestxJezeli
0dyyfx,xXPxXP
x
xx
x
x
x
Zmienna losowa ciągła (2)• f(x) – funkcja gęstości
• f(x)=F’(x)
• Ponadto– jeżeli I=[a,b] dla każdej
liczby rzeczywistej a i b, takiej że a < b,
b
aaFbFdyyfIXP
x
)(xf
xxx xx ''x
xxxXP ,
xxxXP ','
Rozkład równomierny
• Funkcja gęstości dla rozkładu równomiernego na odcinku [0,1]
hprzypadkachpozostalycw0
1x0dla1{xf
0 1
1
x
f(x)
Rozkład wykładniczy
• Funkcja gęstości
• Dystrybuanta
01 / xdlaexf x
//
01
1 xtxedtexF
Zagadnienia
• Wstęp
• Planowanie zdarzeń
• Generowanie zdarzeń a zmienne losowe
• Generatory liczb losowych
• Generowanie wartości zmiennych losowych dla wybranych rozkładów
Generatory liczb losowych
• Generowanie liczb losowych– Umożliwia otrzymywanie wartości zmiennych
losowych z przyjętego rozkładu
• Załóżmy, że rozkład jest znany– Chcemy wygenerować liczby losowe zgodnie z
danym rozkładem, aby przeprowadzić symulację dla przyjętego modelu symulacyjnego
Ciągi losowe
• Wyróżniamy trzy typy ciągów losowych– Prawdziwie losowe
• Generowane przez losowy proces fizyczny
– Pseudolosowe• Liczby generowane wg ścisłej procedury matematycznej, czyli
reprodukowalne
– Quasilosowe• Ciągi, które nie muszą spełniać kryteriów losowości, ale
jedynie dawać poprawne rozwiązania problemów• Ciągi quasilosowe tworzy się na użytek już postawionych
zadań
Metody generowania liczb losowych
• Dla celów badań symulacyjnych, w których opisujemy zmienne losowe za pomocą rozkładów prawdopodobieństwa stosujemy metody generowania liczb pseudolosowych
• Jednak w dalszej części liczby pseudolosowe będziemy określać jako liczby losowe
• W praktyce nie przeprowadzamy badań symulacyjnych z ciągiem liczb prawdziwie losowych
• Interesują nas wyniki w pewien sposób powtarzalne– Np. aby porównać dwa systemy
Metodologia generowania liczb losowych
• Pierwszy generator arytmetyczny– Generator von Neumanna i Metropolisa (lata
40-te XX wieku)– Bazujący na metodzie średniokwadratowej
Wymagania na arytmetyczny generator liczb losowych
• Przede wszystkim, generowane liczby powinny – Pokrywać się z rozkładem równomiernym na odcinku [0,1]
– Nie powinny wykazywać korelacji, w przeciwnym przypadku wyniki symulacji nie będą prawidłowe
• Powinniśmy móc otrzymać taki sam ciąg liczb powtórnie– Np. w celu powtórzenia eksperymentu symulacyjnego
– Lub w celu porównania działania dwóch systemów
• Generator powinien umożliwić – łatwe generowanie kilku oddzielnych ciągów liczb losowych
(jeden ciąg dedykowany dla jednego źródła losowego)
Przykład – metoda średniokwadratowa
• Rozpocznijmy od czterocyfrowej dodatniej liczby całkowitej Z0
• Podnieśmy ją do kwadratu, aby uzyskać liczbę całkowitą ośmiocyfrową (jeżeli konieczne uzupełnijmy zerami z lewej strony)
• Należy wybrać cztery środkowe cyfry, które będą stanowić kolejną czterocyfrową liczbę całkowitą Z1
• Aby uzyskać pierwszą liczbę losową z rozkładu równomiernego U1(0,1) tworzymy w oparciu o Z1 liczbę dziesiętną
Przykład – metoda średniokwadratowa
i Zi Ui Z2i
0 7182 - 51,581,124
1 5811 0.5811 33,767,721
2 7677 0.7677 58,936,329
3 9363 0.9363 87,665,769
4 6657 0.6657 44,315,649
5 3156 0.3156 09,960,336
. . . .
. . . .
. . . .
Przykład – metoda średniokwadratowa
• Ocena metody– Metoda ma tendencję dążenia do zera i
pozostawania w tym stanie– Można to zaobserwować np. w rozważanym
przykładzie dla większej liczby kroków lub np. dla Z0=1009
Metody generowania liczb losowych
• Metoda generowania zmiennych losowych z rozkładu równomiernego na odcinku [0,1]
0 1
1
x
f(x)
hprzypadkachpozostalycw0
1x0dla1{xf
Generatory kongruencyjne liniowe
• Wiele generatorów liczb losowych stosowanych obecnie to generatory kongruencyjne liniowe, LCG (Linear Congruential Generator)– Sekwencja liczb całkowitych Z1, Z2, ... jest wyznaczana
następująco:
– Gdzie m, a, c, Z0 - wartość początkowa, są to liczby całkowite nieujemne
mmodcaZZ 1ii
Generatory kongruencyjne liniowe
• Aby otrzymać żądaną liczbę losową stosujemy wzór:
– gdzie 0<m, a<m, c<m i Z0<m
m
ZU i
i
Przykład
• Rozważmy generator LCG o parametrach– m=16,
– a=5,
– c=3,
– Z0=7
i Zi Ui
0 7 -
1 6 0.375
2 1 0.063
3 8 0.500
4 11 0.688
5 10 0.625
6 5 0.313
7 12 0.750
8 15 0.938
9 14 0.875
10 9 0.563
. . .
mmodcaZZ 1ii
m
ZU i
i
Przykład
• Podsumowanie– W rozważanym przypadku obserwujemy
cykliczne powtarzanie się otrzymywanych wyników
– Długość cyklu jest określana jako okres– W rozważanym przykładzie okres wynosi 16
Generator LCG
• Generator LCG jest generatorem pełno-okresowym
• Jeżeli generator jest pełno-okresowy dowolny wybór wartości Z0 z przedziału {0, 1, ..., m-1} będzie generował pełny ciąg
Generator LCG
• Twierdzenie– Generator LCG opisany wzorem
– ma pełny okres wtedy i tylko wtedy, jeżeli spełnione są następujące warunki
• Jedyną dodatnią liczbą całkowitą, która dzieli bez reszty m i c jest 1
• Niech q będzie liczbą pierwszą, jeżeli m jest podzielne przez q, wówczas a-1 jest również podzielne przez q
• Jeśli m jest podzielne przez 4 wówczas a-1 jest również podzielne przez 4
mmodcaZZ 1ii
Przykład – generator rand()Random number generator.
rand uses a multiplicative congruential random number generator with period 2 to the 32nd
power to return successive pseudorandom numbers in the range from 0 to RAND_MAX. The
symbolic constant RAND_MAX is defined in stdlib.h.
Return Value
rand returns the generated pseudorandom number.
Borland C++ 5.0 Programmer's Guide
Przykład – generator rand()#include <stdlib.h> #include <stdio.h> int main(void) { int i; randomize(); printf("Ten random numbers from 0 to 99\n\n"); for(i=0; i<10; i++) printf("%d\n", rand() % 100); return 0; } Borland C++ 5.0 Programmer's Guide
Zagadnienia
• Wstęp
• Planowanie zdarzeń
• Generowanie zdarzeń a zmienne losowe
• Generatory liczb losowych
• Generowanie wartości zmiennych losowych dla wybranych rozkładów
Generowanie wartości zmiennych losowych
• Załóżmy, iż – chcemy wygenerować zmienną losową X, która
jest zmienną losową ciągłą– Zmienna ta ma dystrybuantę F, która jest ciągła
i rosnąca, gdy 0<F(x)<1– Niech F-1 będzie funkcją odwrotną do funkcji F
Generowanie wartości zmiennych losowych
• Metodologia– Wówczas algorytm generowania zmiennej
losowej X mającej dystrybuantę F jest następujący
• Generujemy
• Zwracamy
1,0U~U UFX 1
Rozkład wykładniczy
• Funkcja gęstości
• Dystrybuanta
01 / xdlaexf x
//
01
1 xtxedtexF
Przykład
• Niech X będzie zmienną losową mającą rozkład wykładniczy z wartością średnią
• Dystrybuanta rozkładu dana jest funkcją
• Aby znaleźć F-1, przyjmujemy u=F(x) i w ten sposób znajdujemy x
//
01
1 xtxedtexF
Przykład
• Funkcja odwrotna przyjmuje wartość u1lnuF 1
Przykład – kod C++
double EXP( double mean )
{
double RND;
do { RND = double( rand())/RAND_MAX ;} while ( RND == 0 );
return -mean*log(RND);
}