Mój algorytm pseudolosujący
- RafalMajewskiPL
- Użytkownik

- Posty: 17
- Rejestracja: 5 kwie 2017, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Pomógł: 1 raz
Mój algorytm pseudolosujący
Witam. Najpierw krótki wstęp. Przeglądając algorytmy losujące nie spodobały mi się ich cechy: wylosowane liczby zależały od ilości już wygenerowanych liczb, polegały na liczbach pierwszych lub dawały słabej jakości liczby pseudolosowe. Wtedy przypomniała mi się funkcja Weierstrassa. Po paru edycjach otrzymałem to:
\(\displaystyle{ \sum_{i=0}^{ p_{1} } \sin \left( p_{2}^{i}x \right)}\)
gdzie
\(\displaystyle{ p_{2}}\) nie należy do przedziału \(\displaystyle{ \left\langle -1,1 \right\rangle}\)
Żeby otrzymać liczbę z przedziału <0,1) wystarczy:
\(\displaystyle{ \sum_{i=0}^{ p_{1} } \left( \sin \left( p_{2}^{i}x \right) \right) -floor \left( \sum_{i=0}^{ p_{1} } \left( \sin \left( p_{2}^{i}x \right) \right) \right)}\)
Im większa wartość \(\displaystyle{ p_{1}}\) i \(\displaystyle{ abs \left( p_{2} \right)}\) tym lepiej.
Można uznać za ziarno generatora liczby \(\displaystyle{ x}\) i \(\displaystyle{ p_{2}}\).
A teraz jak to wygląda:
(wynik przemnożyłem przez 2 i zastosowałem funkcję floor żeby otrzymać 0 lub 1)
(u góry wynik z mojego algorytmu, a na dole z funkcji random(0,1) z biblioteki math w lua)
\(\displaystyle{ p_{1}=10}\), \(\displaystyle{ p_{2}=2}\) \(\displaystyle{ p_{1}=10}\), \(\displaystyle{ p_{2}=2.1}\)
(wynik przemnożyłem przez 100 i zastosowałem funkcję floor żeby otrzymać liczbę od 0 do 99) Co o tym sądzicie?
\(\displaystyle{ \sum_{i=0}^{ p_{1} } \sin \left( p_{2}^{i}x \right)}\)
gdzie
\(\displaystyle{ p_{2}}\) nie należy do przedziału \(\displaystyle{ \left\langle -1,1 \right\rangle}\)
Żeby otrzymać liczbę z przedziału <0,1) wystarczy:
\(\displaystyle{ \sum_{i=0}^{ p_{1} } \left( \sin \left( p_{2}^{i}x \right) \right) -floor \left( \sum_{i=0}^{ p_{1} } \left( \sin \left( p_{2}^{i}x \right) \right) \right)}\)
Im większa wartość \(\displaystyle{ p_{1}}\) i \(\displaystyle{ abs \left( p_{2} \right)}\) tym lepiej.
Można uznać za ziarno generatora liczby \(\displaystyle{ x}\) i \(\displaystyle{ p_{2}}\).
A teraz jak to wygląda:
(wynik przemnożyłem przez 2 i zastosowałem funkcję floor żeby otrzymać 0 lub 1)
(u góry wynik z mojego algorytmu, a na dole z funkcji random(0,1) z biblioteki math w lua)
\(\displaystyle{ p_{1}=10}\), \(\displaystyle{ p_{2}=2}\) \(\displaystyle{ p_{1}=10}\), \(\displaystyle{ p_{2}=2.1}\)
(wynik przemnożyłem przez 100 i zastosowałem funkcję floor żeby otrzymać liczbę od 0 do 99) Co o tym sądzicie?
Ostatnio zmieniony 17 lip 2017, o 11:43 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości. Punkt 2.7 instrukcji LaTeX-a. Funkcje matematyczne należy zapisywać: sinus - \sin, logarytm - \log, logarytm naturalny - \ln itd.
Powód: Poprawa wiadomości. Punkt 2.7 instrukcji LaTeX-a. Funkcje matematyczne należy zapisywać: sinus - \sin, logarytm - \log, logarytm naturalny - \ln itd.
- kerajs
- Użytkownik

- Posty: 8708
- Rejestracja: 17 maja 2013, o 10:23
- Płeć: Mężczyzna
- Podziękował: 335 razy
- Pomógł: 3431 razy
Mój algorytm pseudolosujący
Że ilość przeprowadzonych prób jest zbyt mała aby można było coś powiedzieć.
Wygeneruj 100 000 liczb i sprawdź czy każda z możliwych 100 liczb wystąpiła około 1000 razy.
Wygeneruj 100 000 liczb i sprawdź czy każda z możliwych 100 liczb wystąpiła około 1000 razy.
- RafalMajewskiPL
- Użytkownik

- Posty: 17
- Rejestracja: 5 kwie 2017, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Pomógł: 1 raz
- kerajs
- Użytkownik

- Posty: 8708
- Rejestracja: 17 maja 2013, o 10:23
- Płeć: Mężczyzna
- Podziękował: 335 razy
- Pomógł: 3431 razy
Mój algorytm pseudolosujący
Nawet nieźle wyszło, a sądziłem że będzie zdecydowanie gorzej.
Sugerowałbym kilkukrotne powtórzenie tego losowania i sprawdzenie czy największe nadmiary/ niedomiary są przypadkowe/ powtarzają się dla tych samych liczb.
Sugerowałbym kilkukrotne powtórzenie tego losowania i sprawdzenie czy największe nadmiary/ niedomiary są przypadkowe/ powtarzają się dla tych samych liczb.
- RafalMajewskiPL
- Użytkownik

- Posty: 17
- Rejestracja: 5 kwie 2017, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Pomógł: 1 raz
Mój algorytm pseudolosujący
\(\displaystyle{ p_{1}=10}\), \(\displaystyle{ p_{2}=2}\)
\(\displaystyle{ p_{1}=10}\), \(\displaystyle{ p_{2}=2.1}\)
\(\displaystyle{ p_{1}=10}\), \(\displaystyle{ p_{2}=2.5}\)
\(\displaystyle{ p_{1}=12}\), \(\displaystyle{ p_{2}=2.3}\)-- 13 lip 2017, o 21:43 --
\(\displaystyle{ p_{1}=10}\), \(\displaystyle{ p_{2}=2.1}\)
\(\displaystyle{ p_{1}=10}\), \(\displaystyle{ p_{2}=2.5}\)
\(\displaystyle{ p_{1}=12}\), \(\displaystyle{ p_{2}=2.3}\)-- 13 lip 2017, o 21:43 --
- kerajs
- Użytkownik

- Posty: 8708
- Rejestracja: 17 maja 2013, o 10:23
- Płeć: Mężczyzna
- Podziękował: 335 razy
- Pomógł: 3431 razy
Mój algorytm pseudolosujący
Co prawda nie o to mi chodziło, ale przy okazji ujawnił się największy problem tych generatorów.
Otrzymywane liczby się powtarzają przy każdej inicjacji generatora, brakuje niezbędnego elementu losowości.
Otrzymywane liczby się powtarzają przy każdej inicjacji generatora, brakuje niezbędnego elementu losowości.
- RafalMajewskiPL
- Użytkownik

- Posty: 17
- Rejestracja: 5 kwie 2017, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Pomógł: 1 raz
Mój algorytm pseudolosujący
Oto mi chodziło od początku. Np. jak generujesz szum perlina 1D i chcesz wylosować wartość w danym punkcie to podstawiasz jego pozycję x do wzoru i masz wartość.kerajs pisze:Co prawda nie o to mi chodziło, ale przy okazji ujawnił się największy problem tych generatorów.
Otrzymywane liczby się powtarzają przy każdej inicjacji generatora, brakuje niezbędnego elementu losowości.
- kerajs
- Użytkownik

- Posty: 8708
- Rejestracja: 17 maja 2013, o 10:23
- Płeć: Mężczyzna
- Podziękował: 335 razy
- Pomógł: 3431 razy
Re: Mój algorytm pseudolosujący
A jaki sens w generatorze który przy każdym wznowieniu działania daje identyczne serie wyników?
To tak jakby przy pierwszym rzucie kostką zawsze wypadała 3, a szóstka zawsze była wynikiem w drugim i piątym rzucie.
To tak jakby przy pierwszym rzucie kostką zawsze wypadała 3, a szóstka zawsze była wynikiem w drugim i piątym rzucie.
- RafalMajewskiPL
- Użytkownik

- Posty: 17
- Rejestracja: 5 kwie 2017, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Pomógł: 1 raz
Re: Mój algorytm pseudolosujący
No napisałem, że przy generowaniu szumu perlina. Wystarczy zmienić parametr \(\displaystyle{ p_{2}}\) żeby otrzymać inne wyniki (czyli inny szum).kerajs pisze:A jaki sens w generatorze który przy każdym wznowieniu działania daje identyczne serie wyników?
To tak jakby przy pierwszym rzucie kostką zawsze wypadała 3, a szóstka zawsze była wynikiem w drugim i piątym rzucie.
- kerajs
- Użytkownik

- Posty: 8708
- Rejestracja: 17 maja 2013, o 10:23
- Płeć: Mężczyzna
- Podziękował: 335 razy
- Pomógł: 3431 razy
Re: Mój algorytm pseudolosujący
Nie, nigdzie nie napisałeś że wyniki będą wykorzystywane do generowania szumu.
Na Twoim miejscu sprawdziłbym dodatkowo czy największe odchylenia powtarzają się ilub powiększają się gdy wygenerujesz więcej liczb (np 200 000, 300 000, 500 000, ...). Warto wybrać ten wzór który ma najmniejsze odchyłki.
Na Twoim miejscu sprawdziłbym dodatkowo czy największe odchylenia powtarzają się ilub powiększają się gdy wygenerujesz więcej liczb (np 200 000, 300 000, 500 000, ...). Warto wybrać ten wzór który ma najmniejsze odchyłki.
- RafalMajewskiPL
- Użytkownik

- Posty: 17
- Rejestracja: 5 kwie 2017, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Pomógł: 1 raz
- kerajs
- Użytkownik

- Posty: 8708
- Rejestracja: 17 maja 2013, o 10:23
- Płeć: Mężczyzna
- Podziękował: 335 razy
- Pomógł: 3431 razy
Re: Mój algorytm pseudolosujący
A dlaczego funkcja? Przecież interesują Cię jedynie uzyskiwane wartości.
Chodzi mi o to, czy przy zwiększeniu ilości wygenerowanych liczb nastąpi wyrównanie ilości wystąpień różnych wyników, zmiana liczb w których są największe rozbieżności od średniej czy może powiększenie się odchyleń w tych liczbach.
Z drugiej strony dla szumu nie ma to większego znaczenia. Przecież szum nie musi być idealnie 'gęsty'.
Chodzi mi o to, czy przy zwiększeniu ilości wygenerowanych liczb nastąpi wyrównanie ilości wystąpień różnych wyników, zmiana liczb w których są największe rozbieżności od średniej czy może powiększenie się odchyleń w tych liczbach.
Z drugiej strony dla szumu nie ma to większego znaczenia. Przecież szum nie musi być idealnie 'gęsty'.
- RafalMajewskiPL
- Użytkownik

- Posty: 17
- Rejestracja: 5 kwie 2017, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Pomógł: 1 raz
Re: Mój algorytm pseudolosujący
Podczas programowania programu który mi to pokaże zauważyłem, że mam większe odchylenie standardowe od generatora z biblioteki love.math
EDIT 1: Jest coś takiego jak odchylenie standardowe idealnej zmiennej losowej?
EDIT 2:
EDIT 3: Miałem źle ustawiony generator :/ \(\displaystyle{ p_{1}}\) był zamieniony z \(\displaystyle{ p_{2}}\)
EDIT 4:
https://www.youtube.com/watch?v=jMC6UphLToY
https://www.youtube.com/watch?v=86v986nFNks
EDIT 1: Jest coś takiego jak odchylenie standardowe idealnej zmiennej losowej?
EDIT 2:
Kod: Zaznacz cały
https://www.youtube.com/watch?v=4EtRxG0jY9YEDIT 3: Miałem źle ustawiony generator :/ \(\displaystyle{ p_{1}}\) był zamieniony z \(\displaystyle{ p_{2}}\)
EDIT 4:
Kod: Zaznacz cały
https://www.youtube.com/watch?v=t8DY7ElGGV0https://www.youtube.com/watch?v=jMC6UphLToY
https://www.youtube.com/watch?v=86v986nFNks
- kerajs
- Użytkownik

- Posty: 8708
- Rejestracja: 17 maja 2013, o 10:23
- Płeć: Mężczyzna
- Podziękował: 335 razy
- Pomógł: 3431 razy
Re: Mój algorytm pseudolosujący
Dla 100 możliwych wyników 9000 losowań jest mała próbą. Zwiększenie ilości prób o jeden rząd może zmienić parametry rozkładu.RafalMajewskiPL pisze:Podczas programowania programu który mi to pokaże zauważyłem, że mam większe odchylenie standardowe od generatora z biblioteki love.math
Nie wiemRafalMajewskiPL pisze: EDIT 1: Jest coś takiego jak odchylenie standardowe idealnej zmiennej losowej?
Oglądnąłem, ale nie napiłeś w jakim celu to pokazujesz.RafalMajewskiPL pisze: EDIT 3: Miałem źle ustawiony generator :/ \(\displaystyle{ p_{1}}\) był zamieniony z \(\displaystyle{ p_{2}}\)
EDIT 4:
Kod: Zaznacz cały
https://www.youtube.com/watch?v=t8DY7ElGGV0
Kod: Zaznacz cały
https://www.youtube.com/watch?v=jMC6UphLToY
https://www.youtube.com/watch?v=86v986nFNks
Mam wrażenie że drepczemy w kółko. Powtórzę to co już napisałem wcześniej:
- Na generator to się nie nadaje ze względu na powtarzalność wyników przy każdej nowej inicjacji algorytmu.
- Na szum się nadaje.
- RafalMajewskiPL
- Użytkownik

- Posty: 17
- Rejestracja: 5 kwie 2017, o 19:44
- Płeć: Mężczyzna
- Lokalizacja: Gdańsk
- Pomógł: 1 raz
Re: Mój algorytm pseudolosujący
Chciałeś żebym sprawdził czy odchylenia się powtarzają przy zwiększeniu ilości wylosowanych liczb. Można to sprawdzić na filmach.Oglądnąłem, ale nie napiłeś w jakim celu to pokazujesz.
Co za problem wziąć czas uniksowy i przekonwertować na liczbę od (mniej więcej) 2 do 4 i wrzucić do \(\displaystyle{ p_{2}}\)Na generator to się nie nadaje ze względu na powtarzalność wyników przy każdej nowej inicjacji algorytmu.