Dodaj wpis w tym temacie
Spis tematów | Strona: 1 Wyślij wiadomość do admina |
Przewiń wpisy ↓ | Generatory pseudolosowe |
2006-11-06 (23:17) Aniel Data rejestracji: 2005-11-07 00:00:00 Ilość postów: 590 | wpis nr 80 674 [ CZCIONKA MONOSPACE ] Moim zdaniem dobrym sposobem moze byc tworzenie zestawow przez generatory pseudolosowe. Moze macie jakies linki do takich generatorów albo cos w tym stylu. Generator np jest w programie MultiSys3. Ale moze macie jakies inne. |
2006-11-06 (23:48) Darek Data rejestracji: 2003-10-13 00:00:00 Ilość postów: 213 | wpis nr 80 675 [ CZCIONKA MONOSPACE ] Ja raz stworzylem baze wynikow losowo komputerem zeby porownac z lotkiem i liczby byly rownomiernie rozsiane bez zaburzen tak jak w lotku. To taka mala uwaga o generatorach losowych. Acha i metoda chybil trafil jest gosza od najglupszej analizy bo wspolczynnik trafienia na chybil trafil jest najblizszy modelowi prawdopodobienstwa (potwierdzilem to robiac experyment). pozdro |
2006-11-07 (08:40) dylong Data rejestracji: 2006-07-21 00:00:00 Ilość postów: 2814 | wpis nr 80 681 [ CZCIONKA MONOSPACE ] Aniel - chcialbym Ci zaproponowac kilka malenkich programów generatorów autorstwa Saliu. PermuteCombine.exe http://saliu.com/pub/PermuteCombine.exe Combinations.exe http://saliu.com/pub/Combinations.exe BellCurveGenerator.exe http://dl.winsite.com/bin/downl?17500000036945 Ten progran jest pobierany z innej strony (nie z portalu Saliu) i troche trwa zanim rozpocznie sie jego zasysanie. Jest generator zestawów wykorzystujacy FFG autorstwa Saliu (Fundamental Formula of Gambling). Generuje zestawy mieszczace sie posrodku krzywej dzwonowej, w zwiazku z czym skrajnosci sa odrzucane (ja na kilkadziesiat tysiecy wygenerowanych zestawów nie otrzymalem ani jednego rozpoczynajacego sie od liczby 1) RandomNumbers.exe http://www.saliu.com/pub/RandomNumbers.exe Jeden z nowszych programów - mozna wykorzystac tu opcje odstepu czasowego pomiedzy generowanymi liczbami. Ma to na celu symulacje prawdziwego losowania gdzie kule pojawiaja sie stopniowo. Oczywiscie dowolne zestawy mozna generowac korzystajac z MDIEditor And Lotto WE którego Version 4.0_WE ~ Final niedawno sie ukazala. Zdecydowanie polecam http://www.download.com%2F3001-2647_4-10593963.html Nie wiem czy ten link u góry dobrze sie wkleil, w kazdym razie linki do tych i innych programów mozna znalezc na http://www.saliu.com/infodown.html Pozdrawiam |
2006-11-07 (14:00) Darek Data rejestracji: 2003-10-13 00:00:00 Ilość postów: 213 | wpis nr 80 707 [ CZCIONKA MONOSPACE ] Dzieki za fajny link o generatorach Ciekawe jakie algorytmy koles uzyl do generowania liczb bo ja znam tylko ten z windy co wykozystuje ziarno i potem je mieli pozdro |
2006-11-07 (15:56) dylong Data rejestracji: 2006-07-21 00:00:00 Ilość postów: 2814 | wpis nr 80 712 [ CZCIONKA MONOSPACE ] Saliu twierdzi, ze jego generatory sa naprawde losowe. Na stronie http://www.saliu.com/random-numbers.html zamiescza przyklad najprostszego generatora (w jezyku PowerBasic) daje porcje teorii o zasadach tworzenia generatorów oraz wyjasnia, czym jego produkty odrózniaja sie od innych. Mój angielski kulawy a slownictwo Saliu z górnej pólki, ale tak w skrócie (moze nie popelnie kardynalnych bledów). Komputery moga generowac liczby o wysokim stopniu losowosci poprzez reczny wybór lub w oparciu o urzadzenia zewnetrzne. Pierwszym niezbednym warunkiem jest wygenerowania tzw. random seeds (losowego ziarna). W przypadku wykorzystania do tego zegara komputera losowosc wygenerowanych liczb jest bardzo niska - nie losowa a pseudo-losowa. Drugim niezbednym warunkiem zapewnienia losowosci jest predkosc wykonania. Im wyzsza predkosc tym nizszy stopien losowosci. Przykladowo program pobiera liczbe zmiennopozycyjna 18-cyfrowa i wytwarza pierwsza liczbe losowa (która jest liczba zmiennopozycyjne w przedziale od 0 do 1). Potem program mnozy te liczbe przez najwieksza liczbe w grze lotto. Wszystko dzieje sie bardzo szybko. Potem program generuje nastepna liczbe zmiennopozycyjna i mnozy to jeszcze raz itd. Poniewaz obliczenia sa niezwykle szybkie, efektem pracy takiego generatora sa zestawy skladajace sie z liczb sasiadów (bardzo blisko siebie lezacych). Saliu wspomina czasy kiedy korzystal z komputera Atari do wytwarzania liczb losowych - liczby wytwarzane przez ten komputerek zapewnialy znacznie wyzszy stopien losowosci niz wspólczesny pecet. Obecnie, nalezy opózniac generowanie liczb aby poprawic stopien losowosci. Jak wyglada przykladowy zly generator: FOR Counter = 1 to 6 RANDOMIZE TheSeed Lottonumber(Counter) = CLNG(RND * 49) + 1 NEXT Counter Taka konstrukcja zapewnia, ze w generowanych zestawach pewne liczby beda sie czesto powtarzac badz zestawy beda sie skladac z liczb lezacych blisko siebie. Saliu zauwazyl, ze dla poprawy dzialania nalezy: - polecenie generowania SEED wyprowadzic przed petle FOR - przed instrukcje NEXT wprowadzic opóznienie DELAY Dalej Saliu pisze, ze najwazniejsze jest wygenerowanie losowego parametru SEED. W kodzie który przedstawil korzysta on nie z zegara systemowego ale z funkcji daty i czasu. Jak pisze wielu myli losowosc z prawdopodobienstwem. Jesli SEED zawiera sie w przedziale od 1 do 10 to nie mozna mówic o losowosci. Im wieksze pasmo SEED tym i jego losowosc jest wieksza. Jesli uzywa sie funkcji TIMER zawierajacej tylko 86400 wartosci (liczba sekund w dobie) to moze sie zdarzyc, ze uruchamiajac generator w tym samym czasie ale innego dnia otrzymamy identyczna sekwencje liczb nie losowych a pseudo-losowych. Saliu pisze, ze nawet prosty SEEDER który przedstawil na swej stronie potrafi wytworzyc miliony (miliardy) niepowtarzalnych parametrów SEED. Oczywiscie programik którego kod zródlowy przedstawil jest tylko najprostsza konstrukcja poprawnego generatora. W swoich programach uzywa on nawet dwunastu sprzegnietych ze soba algorytmów. Oczywiscie nie zamierza on ich publikowac. |
2006-11-07 (18:35) Aniel Data rejestracji: 2005-11-07 00:00:00 Ilość postów: 590 | wpis nr 80 746 [ CZCIONKA MONOSPACE ] Dzieki Dylong za podane linki - zanim to ``przetrawie`` to pewnie troche czasu minie. |
2006-11-08 (17:13) Darek Data rejestracji: 2003-10-13 00:00:00 Ilość postów: 213 | wpis nr 80 858 [ CZCIONKA MONOSPACE ] Witam Twoj angielski i tak jest lepszy od mojego. Ten gosc napisal tak: \"W przypadku wykorzystania do tego zegara komputera losowosc wygenerowanych liczb jest bardzo niska\" (zgodnie z twoim tlumaczeniem) Nie wiem jakich generatorow uzywaja inne jezyki ale c++ ma fajny generator i tworzy ziarno z aktualnego czasu i nie sadze zeby to bylo nie wystarczajace bo ten czas jest liczony w sekundach od 00:00 1.01.1970 wiec minelo juz 36 lat od poczatku licznika i jeszcze sie nie przekrecil A dokladnie mamy 31 536 000 sekund rocznie (okolo) a pojemnosc licznika to liczba 4 bajtowa czyli 4 294 967 295 i wystarczy licznika na 136 lat. Wiec moim zdaniem tyle czasu wystarczy a zawsze mozna skomplikowac algorytm poprzez losowe sortowanie losowej tablicy itp. Zainteresowanym moze wyjasnie jak wyglada tworzenie liczby losowej w c++ Funkcja przenosi ziarno (ilosc sekund od 1970) do zmiennej holdrand i wykonuje tylko jedna linijke kodu ! return ((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff; Wyglada to tak: Aktualna wartosc holdrand mnozy przez 214013 i dodaje 2531011 I tu jest sekret bo licznik sie przekreca i ma nowa wartosc a potem jeszcze robi >> 16 czyli starsze 2 bajty zapisuje na miejsce mlodszych 2 bajtow nie wiem czy sie nie myle ale to jest chyba odpowiednik dzielenia przez 65536 (wystarczy przesunac wartosc o 16 bitow (2 bajty) w prawo a kazde 1 przesuniecie to dzielenie przez 2 a 16 przesuniec to dzielenie przez 2 do potegi 16 czyli 65536) Po tej operacji robi jeszcze & 0x7fff czyli zerowanie 2 starszych bajtow na wszelki wypadek i mamy 2 bajtowa liczbe losowa z przedzialu od 0 do 65535 ktora jeszcze na koniec zapisuje program na pozycje naszego poprzedniego holdrand I teraz za kazdym wykonaniem tego samego kodu mamy inna liczbe \"losowa\" ktora spelnia wymagania losowosci. Generatory losowe sa wykozystywane w grach przez internet np w expekt Oczywiscie nie takie proste jak ten opisany tylko maja swoje zatwierdzone i kontrolowane przez odpowiednie instytucje. Pozdrawiam. |
2006-11-08 (19:16) dylong Data rejestracji: 2006-07-21 00:00:00 Ilość postów: 2814 | wpis nr 80 873 [ CZCIONKA MONOSPACE ] Darku - masz racje. Pan Saliu tworzy swe dziela w dosc egzotycznych jezykach (na przyklad PowerBasic), i z pewnoscia przyklad do którego sie odwoluje (pasmo dla SEED równe ilosci sekund w dobie) nie ma zastosowania w chwili obecnej w jakimkolwiek generatorze i raczej mowa jest o takim przypadku dla celów dydaktycznych. Twój przyklad tez jest oczywiscie najprostszym i na pewno do zaawansowanych zastosowan nie jest uzywany, tym niemniej jest to w tej chwili domyslny generator w Windows (sposób liczenia czasu rzecz jasna z Unixa). Tak naprawde nie powinno miec to dla nas zadnego znaczenia, wazny jest koncowy (generowane zestawy, ich jakosc czytaj \"losowosc\") - mysle jednak, ze o takich podstawach warto pamietac. I rozmyslac - od rozmyslania o konstrukcji generatorów liczb losowych blisko bowiem do rozmyslania o samej naturze losowosci a potem to juz krok do kasyna czy kolektury Pozdrawiam i zycze zadowolenia z produktów Saliu |
2007-08-07 (19:26) Nicolas Data rejestracji: Ilość postów: | wpis nr 102 434 [ CZCIONKA MONOSPACE ] Nice... |
2008-11-18 (21:46) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4948 | wpis nr 163 852 [ CZCIONKA MONOSPACE ] Gdzieś w sieci znalazłem fajne makro do excela generujące dowolną ilość zestawów. Option Explicit Option Base 1 Public jj As Long Public Const iteration = 240 \'*********************************************************************** \'* Resampling Process * \'*********************************************************************** Sub Resample() Dim i As Long Dim hold(80) As Single, Hold2(80) As Single Randomize For i = 1 To 80 Hold2(i) = i Next i For jj = 1 To iteration For i = 1 To 80 hold(i) = Rnd Next i Call DoubleSort(80, hold, Hold2) For i = 1 To 3 Cells(jj, i) = Hold2(i) Next i Next jj End Sub \'*********************************************************************** \'* Sorting Process - Sort array y based on array x * \'*********************************************************************** Sub DoubleSort(n As Long, x() As Single, y() As Single) Dim xTemp As Double Dim yTemp As Double Dim i As Long Dim j As Long For j = 2 To n xTemp = x(j) yTemp = y(j) For i = j - 1 To 1 Step -1 If (x(i) <= xTemp) Then GoTo 10 x(i + 1) = x(i) y(i + 1) = y(i) Next i i = 0 10 x(i + 1) = xTemp y(i + 1) = yTemp Next j End Sub Zmieniając wartość w linijce kodu Public Const iteration = 240 zmieniamy ilość generowanych zestawów. Zmieniając wartość w linijce kodu For i = 1 To 3 zmieniamy ilość liczb w zestawie ( w tym konkretnym przypadku makro tworzy 240 zestawów po 3 liczby). Zwracam się do znawców Excela , czy nie można tego makra przerobić tak, aby tworzył on zestawy z liczb własnych użytkownika. Np. w kolumnie J wpisałbym powiedzmy 40 wybranych liczb a makro generowało by 240 zestawów tylko z tych liczb,które są wpisane w kolumnie J. A może ktoś zna jakieś inne makro excela generujące zestawy z liczb użytkownika. Pozdrawiam i liczę na Waszą pomoc |
2008-11-19 (17:32) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4948 | wpis nr 164 004 [ CZCIONKA MONOSPACE ] Problem rozwiązany.Otrzymałem pomoc od kolegów na innym forum.Podaję pełne makro, które tworzy zestawy z liczb wpisanych do kolumny \"J\".Być może komuś się przyda taki generatorek Option Explicit Option Base 1 Public jj As Long Public Const iteration = 240 \'*********************************************************************** \'* Resampling Process * \'*********************************************************************** Sub Resample() Dim i As Long, ile As Long Dim hold() As Single, Hold2() As Single Randomize ile = Cells(Rows.Count, \"J\").End(xlUp).Row ReDim hold(1 To ile) ReDim Hold2(1 To ile) For i = 1 To ile Hold2(i) = i Next i For jj = 1 To iteration For i = 1 To ile hold(i) = Rnd Next i Call DoubleSort(ile, hold, Hold2) For i = 1 To 3 Cells(jj, i) = Cells(Hold2(i), \"J\") Next i Next jj End Sub \'*********************************************************************** \'* Sorting Process - Sort array y based on array x * \'*********************************************************************** Sub DoubleSort(n As Long, x() As Single, y() As Single) Dim xTemp As Double Dim yTemp As Double Dim i As Long Dim j As Long For j = 2 To n xTemp = x(j) yTemp = y(j) For i = j - 1 To 1 Step -1 If (x(i) <= xTemp) Then GoTo 10 x(i + 1) = x(i) y(i + 1) = y(i) Next i i = 0 10 x(i + 1) = xTemp y(i + 1) = yTemp Next j End Sub |
2008-11-19 (17:53) login_2009 Data rejestracji: 2008-10-09 00:00:00 Ilość postów: 464 | wpis nr 164 006 [ CZCIONKA MONOSPACE ] Heja! Identyczne co twoje, tylko odrobinkę prostsze: Sub NumberGen() Range(\"A1\").Value = RandomNumber() Range(\"A2\").Value = RandomNumber() Range(\"A3\").Value = RandomNumber() Range(\"A4\").Value = RandomNumber() Range(\"A5\").Value = RandomNumber() Range(\"A6\").Value = RandomNumber() Range(\"A7\").Value = RandomNumber() Range(\"A8\").Value = RandomNumber() Range(\"A9\").Value = RandomNumber() Range(\"A10\").Value = RandomNumber() Range(\"B1\").Value = RandomNumber() Range(\"B2\").Value = RandomNumber() Range(\"B3\").Value = RandomNumber() Range(\"B4\").Value = RandomNumber() Range(\"B5\").Value = RandomNumber() Range(\"B6\").Value = RandomNumber() Range(\"B7\").Value = RandomNumber() Range(\"B8\").Value = RandomNumber() Range(\"B9\").Value = RandomNumber() Range(\"B10\").Value = RandomNumber() Range(\"C1\").Value = RandomNumber() Range(\"C2\").Value = RandomNumber() Range(\"C3\").Value = RandomNumber() Range(\"C4\").Value = RandomNumber() Range(\"C5\").Value = RandomNumber() Range(\"C6\").Value = RandomNumber() Range(\"C7\").Value = RandomNumber() Range(\"C8\").Value = RandomNumber() Range(\"C9\").Value = RandomNumber() Range(\"C10\").Value = RandomNumber() End Sub Function RandomNumber() As Integer \' Create a pseudo random number pool Randomize \' We do this below so not to get 0 RandomNumber = Int((22 - 1) * Rnd + 1) End Function |
2008-11-19 (18:09) kleszek Data rejestracji: 2006-05-27 00:00:00 Ilość postów: 4948 | wpis nr 164 011 [ CZCIONKA MONOSPACE ] login_2009 sprawdziłem Twoje makro i niezupełnie jest takie samo jak ja podałem.Twoje makro generuje liczby w komórkach bez sprawdzenia czy w wierszach nie powtarza się ta sama liczba. U mnie na przykład po uruchomieniu tego makra wyszedł układ 7,7, 11 co dyskwalifikuje ten układ jako trójkę |
| Dodaj wpis w tym temacie | Spis tematów | Wyniki lotto | Strona: 1 Wyślij wiadomość do admina |