APLIKACJA JAVA, UMOŻLIWIAJĄCA ZAAWANSOWANE ĆWICZENIA PRAKTYCZNE Z ZAKRESU LICZB PSEUDOLOSOWYCH



Podobne dokumenty
Porównanie generatorów liczb losowych wykorzystywanych w arkuszach kalkulacyjnych

Sterowanie wielkością zamówienia w Excelu - cz. 3

Technologie informacyjne - wykład 12 -

Dostawa oprogramowania. Nr sprawy: ZP /15

Programowanie i techniki algorytmiczne

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Instytut Fizyki Politechniki Łódzkiej Laboratorium Metod Analizy Danych Doświadczalnych Ćwiczenie 3 Generator liczb losowych o rozkładzie Rayleigha.

zna metody matematyczne w zakresie niezbędnym do formalnego i ilościowego opisu, zrozumienia i modelowania problemów z różnych

Struktura systemu operacyjnego. Opracował: mgr Marek Kwiatkowski

Algorytm. a programowanie -

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Sposoby przedstawiania algorytmów

Instytut Politechniczny Państwowa Wyższa Szkoła Zawodowa. Diagnostyka i niezawodność robotów

Metody symulacji komputerowych Modelowanie systemów technicznych

Mechatronika i inteligentne systemy produkcyjne. Modelowanie systemów mechatronicznych Platformy przetwarzania danych

Technologie Informacyjne

Wykład z Technologii Informacyjnych. Piotr Mika

Przewodnik użytkownika (instrukcja) AutoMagicTest

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Temat 20. Techniki algorytmiczne

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Procesy i systemy dynamiczne Nazwa przedmiotu SYLABUS A. Informacje ogólne

SVN. 10 października Instalacja. Wchodzimy na stronę i pobieramy aplikację. Rysunek 1: Instalacja - krok 1

Programowanie obiektowe

INŻYNIERIA OPROGRAMOWANIA

Tom 6 Opis oprogramowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli obmiaru do celów fakturowania

PRZEWODNIK PO PRZEDMIOCIE

Maciej Piotr Jankowski

OpenAI Gym. Adam Szczepaniak, Kamil Walkowiak

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 1 Wprowadzenie do narzędzia CASE. Materiały dla nauczyciela

Sieci Mobilne i Bezprzewodowe laboratorium 2 Modelowanie zdarzeń dyskretnych

Analiza i projekt systemu pracy grupowej z zastosowaniem metodyki SCRUM w technologii SharePoint Karolina Konstantynowicz

Scenariusz lekcji opartej na programie Program nauczania informatyki w gimnazjum DKW /99

Język programowania C C Programming Language. ogólnoakademicki

Informatyka I stopień (I stopień / II stopień) ogólno akademicki (ogólno akademicki / praktyczny) podstawowy (podstawowy / kierunkowy / inny HES)

Egzamin / zaliczenie na ocenę*

Testowanie hipotez statystycznych. Wnioskowanie statystyczne

Jak ustawić cele kampanii?

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Sposoby prezentacji problemów w statystyce

1. Synteza automatów Moore a i Mealy realizujących zadane przekształcenie 2. Transformacja automatu Moore a w automat Mealy i odwrotnie

Zdalne monitorowanie i zarządzanie urządzeniami sieciowymi

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI

Zastosowanie symulacji Monte Carlo do zarządzania ryzykiem przedsięwzięcia z wykorzystaniem metod sieciowych PERT i CPM

SCENARIUSZ LEKCJI. Dzielenie wielomianów z wykorzystaniem schematu Hornera

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

( x) Równanie regresji liniowej ma postać. By obliczyć współczynniki a i b należy posłużyć się następującymi wzorami 1 : Gdzie:

Programowanie w Javie nazwa przedmiotu SYLABUS A. Informacje ogólne

SCENARIUSZ LEKCJI. TEMAT LEKCJI: Projektowanie rozwiązania prostych problemów w języku C++ obliczanie pola trójkąta

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

EFEKTY KSZTAŁCENIA DLA KIERUNKU STUDIÓW

Współpraca FDS z arkuszem kalkulacyjnym

biegle i poprawnie posługuje się terminologią informatyczną,

Programowanie komputerów

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

Modelowanie jako sposób opisu rzeczywistości. Katedra Mikroelektroniki i Technik Informatycznych Politechnika Łódzka

MVVM Light Toolkit. Julita Borkowska

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Zapisywanie algorytmów w języku programowania

Projekt Hurtownia, realizacja rejestracji dostaw produktów

Programowanie obiektowe

Temat: Programujemy historyjki w języku Scratch tworzymy program i powtarzamy polecenia.

Informatyka wspomaga przedmioty ścisłe w szkole

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/17

Analiza wariancji. dr Janusz Górczyński

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

Webowy generator wykresów wykorzystujący program gnuplot

Projekt z przedmiotu Specjalizowane języki programowania Temat: Zastosowanie programowania obiektowego w środowisku LabView

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

PRZEWODNIK PO PRZEDMIOCIE

PODSTAWY PROGRAMOWANIA STRUKTURALNEGO (C) SYLABUS A. Informacje ogólne

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wymagania edukacyjne na ocenę z informatyki klasa 3

Wykład 1 Inżynieria Oprogramowania

Numeracja dla rejestrów zewnętrznych

PRZEWODNIK PO PRZEDMIOCIE

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 3 AUTOMATYKA

Autorski program nauczania

Ćwiczenie numer 4 JESS PRZYKŁADOWY SYSTEM EKSPERTOWY.

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Podstawy Programowania Obiektowego

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

SYLABUS/KARTA PRZEDMIOTU

Programowanie sterowników przemysłowych / Jerzy Kasprzyk. wyd. 2 1 dodr. (PWN). Warszawa, Spis treści

Opis efektów kształcenia dla programu kształcenia (kierunkowe efekty kształcenia) WIEDZA. rozumie cywilizacyjne znaczenie matematyki i jej zastosowań

KARTA PRZEDMIOTU. Programowanie aplikacji internetowych

Kumulowanie się defektów jest możliwe - analiza i potwierdzenie tezy

Temat 1. Więcej o opracowywaniu tekstu

Wprowadzenie do analizy korelacji i regresji

Wykład 14. Testowanie hipotez statystycznych - test zgodności chi-kwadrat. Generowanie liczb losowych.

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE

Transkrypt:

Piotr Rojewski Walery Susłow Politechnika Koszalińska Wydział Elektroniki i Informatyki ul. Śniadeckich 2, 75-543 Koszalin swalover@ie.tu.koszalin.pl APLIKACJA JAVA, UMOŻLIWIAJĄCA ZAAWANSOWANE ĆWICZENIA PRAKTYCZNE Z ZAKRESU LICZB PSEUDOLOSOWYCH Streszczenie: Przedstawiono projekt autorskiej aplikacji dydaktyczno-naukowej Java, przeznaczonej do konstruowania i testowania generatorów liczb pseudolosowych. Aplikacja stwarza warunki do szczegółowego sterowania modelem generatora oraz parametrami produkowanych ciągów pseudolosowych. Weryfikacji wybranych algorytmów symulacyjnych dokonano poprzez zbadanie pracy generatorów znanych modeli, jak generator Fishmana. 1. WSTĘP Metoda wytwarzania ciągów liczb pseudolosowych poprzez wykorzystanie programu implementującego konkretny model matematyczny generatora zyskała wielu zwolenników wraz z upowszechnieniem się komputerów jako przeciwstawna do wykorzystania generatorów fizycznych oraz tablicowych. Wszelkie programowe metody wytwarzania takich ciągów oparte są na ścisłej procedurze matematycznej. Tak, więc wytworzone w ten sposób zbiory liczb nie stanowią rzeczywistych ciągów losowych. Jednak niektóre z nich spełniają postawione przed nimi wymagania praktyczne na tyle dobrze, że z pewnym przybliżeniem mogą być traktowane jako generatory liczb losowych. Programowe generatory liczb pseudolosowych znajdują swoje zastosowania np. w kryptografii, algorytmach symulacyjnych lub grach komputerowych, do których wnoszą one zmienność i przypadkowość w wynikach obliczeń. Generatory te tworzą liczbowe ciągi, które w ramach danego zastosowania są nieodróżnialne od ciągów losowych. Oznacza to, że dla użytkownika aplikacji każda z liczb ciągu wydaje się być wybrana w sposób zupełnie przypadkowy, bez jakiegokolwiek związku z pozostałymi elementami tegoż ciągu. Jednocześnie, każda z tych liczb mieści się w dowolnym, ustalonym zakresie wartości z określonym prawdopodobieństwem, co tworzy ciąg liczb losowych o danym rozkładzie [1] i umożliwia wykorzystanie tego ciągu w konstrukcjach algorytmicznych. Obecnie każdy z dostępnych systemów operacyjnych i języków programowania udostępnia nam kilka standardowych sposobów generacji ciągów pseudolosowych. Dla środowiska programowania Java jest to klasa java.util.random, która pozwala na generowanie ciągów pseudolosowych, lecz nie daje możliwości ustawiania punktu pracy generatora czy zachowywania stanu jego pracy do ponownego uruchomienia. Te standardowe sposoby generacji nie mogą zaspokoić potrzeb praktycznych we wszystkich sytuacjach, dlatego warto mieć możliwość rozszerzania palety generatorów, projektowania generatora na zamówienie, przy tym pozostając w ramach niezależnej od platformy technologii programowania, jaką jest Java. Udzielenie odpowiedzi na pytania: czy dany generator w danej sytuacji może być uznany za losowy, czy rzeczywiście generuje on ciągi liczbowe o żądanym rozkładzie nie stanowi łatwego zadania. W tym celu zazwyczaj posługują się najróżniejszego rodzaju testami i sposobami oceniania. Można wymienić tutaj testy zgodności z rozkładem (test chi-kwadrat), testy zgodności wybranych statystyk zmiennej losowej (test sum, test średniej), czy testy kombinatoryczne (test pokerowy lub kolekcjonera) [1-3]. Obecnie tematyka ćwiczeń praktycznych z zakresu liczb pseudolosowych występuje w różnych kursach, czytanych na uczelniach wyższych technicznych. Przykładem mogą służyć kursy Algorytmy i struktury danych czy Reprogramowalne układy cyfrowe. Dlatego propozycja aplikacji naukowo-dydaktycznej, przeznaczonej do konstruowania i do testowania generatorów liczb pseudolosowych ma znaczenie stricte praktyczne. 2. ZAŁOŻENIA KONCEPTUALNE I OPIS STWORZONEJ APLIKACJI W fundamencie budowy aplikacji autorskiej umieszczone są trzy nadrzędne założenia: generator obiektem niezależnym, generator jednostką sparametryzowaną i inicjowalną oraz interfejsy generatora o budowie otwartej. Zgodnie z modelem programowania obiektowego, który dominuje w języku Java, generator liczb pseudolosowych ma być postrzegany w stworzonym systemie jako niezależny obiekt z zaimplementowanym algorytmem produkowania liczb pseudolosowych. Algorytm ten ma być sterowalny z poziomu GUI aplikacji przy pomocy odpowiednich parametrów. Parametry sterowania generatora można rozdzielić na statyczne oraz dynamiczne. Parametry statyczne mają

pozostawać niezmienne cały cykl życia generatora. Natomiast dynamiczne będą podlegały zmianom w miarę kolejnych generacji. Do parametrów statycznych można zaliczyć również te, które są inicjowane jednorazowo podczas uruchamiania generatora, aby ustalić jego punkt pracy. Przyjęliśmy, że lista parametrów sterowania ma być otwarta, by umożliwić eksperymentowanie z budową generatora podczas prac konstruktorskich. Generator Liczb Pseudolosowych obiektem niezależnym jednostką inicjowalną i sparametryzowaną łatwość obsługi i dokumentowania Rys. 1. Koncepcja budowy aplikacji wspomagającej prace projektowe przy generatorach liczb pseudolosowych Każdy z parametrów sterowania określamy poprzez nazwę (identyfikator), typ przechowywanej wartości oraz samą wartość. Aplikacja ma automatycznie rozpoznawać posiadane parametry badanego generatora i umożliwiać ich zmianę. Dzięki temu powstaje szansa na sprawdzenie sposobu funkcjonowania algorytmu tworzenia ciągów liczb pseudolosowych w zależności od zadanych wartości tych parametrów. Do przechowywania wartości parametrów wykorzystujemy trzy typy danych: całkowity, rzeczywisty oraz generator. Ostatni z typów jest zdefiniowany w aplikacji, pozwala on na uzależnienie określonego parametru od wartości zaczerpniętej z innego generatora. Umożliwia to łatwe budowanie kaskadowych generatorów liczb pseudolosowych. Dzięki sparametryzowaniu generatorów istnieje możliwość zapisywania do pliku parametrów aktualnego stanu pracy generatora. To zapewnia sposobność przerywania pracy generatora i kontynuowania jej w dalszej generacji poprzez wczytanie zapisanych danych. Dzięki tej decyzji zostaje spełniony warunek, który pozwala stosować takowy generator w symulacjach dydaktycznych, bowiem istnieje możliwość zrekonstruowania danego stanu generatora i powtórzenia ćwiczenia. Założyliśmy, że aplikacja ma przewidywać trzy sposoby uruchamiania generatora. Pierwszy polega na starcie generatora bez zmian jego parametrów. Drugi, nazwany z inicjowaniem, umożliwia wykonanie ponownego przydzielenia dla generatora zmiennych statycznych jak i dynamicznych, np. przy resetowaniu jego pracy do stanu początkowego. Natomiast trzeci sposób, z reinicjowaniem, polega na ponownym wyznaczeniu parametrów dynamicznych do wartości wyjściowych w zależności od parametrów statycznych, co daje możliwość powtórzenia generowanej sekwencji. Jednym z podstawowych założeń projektu było również wykorzystanie możliwości kreowania interfejsów. Dzięki zastosowanym zabiegom konstrukcyjnym należało osiągnąć efekt łatwego dodawania do programu nowych algorytmów generacji liczb losowych, przeprowadzania obliczeń i testów na wygenerowanych danych, a także wizualizowania otrzymanych wyników. Aplikacja ma stanowić jakoby platformę, do której można dodawać nowe elementy i dzięki temu poszerzać jej funkcjonalność. Aplikacja autorska o nazwie GenerProj została napisana w języku programowania Java w oparciu o zestaw narzędzi programowych sdk 1.3. Jej zadaniem jest wspieranie procesu tworzenia oraz testowania generatorów. W swoim działaniu umożliwia ona: otwarta budowa interfejsów stworzenie żądanego generatora na bazie zaimplementowanego kodu algorytmu, przetestowanie generatora pod kątem różnych ustawień, sprawdzenie jakości generowanych ciągów liczb pseudolosowych. Cechę modułowości aplikacji osiągnięto dzięki opracowaniu w pierwszym kroku jej projektowania przejrzystego interfejsu programistycznego, który pozwoliłby na tworzenie poszczególnych elementów systemu wytwarzania, stosowania i testowania generatorów. Jednocześnie zadbano o to, aby interfejs programistyczny był całkowicie niezależny od graficznego interfejsu użytkownika. Interfejsy unikatowe: Moduy bazowe: Klasy pomocnicze: Pliki stanu generatora: GenParam.xml Aplikacja Implementująca GLP Podstawowy parametryzujący (ParameterInterface) GeneratorDataInterface ViewDataInterface LaborDataInterface Algorytm Generatora Prezentacji Danych Przekształceń Danych GenerStoreFile.class GenProj.xml NumberStoreOne.class Środowisko Projektowania GLP Rys. 2. Schematyczne przedstawienie współdziałania modułów projektu Schemat, przedstawiony na rysunku 2, obrazuje interfejsy wewnętrzne stworzonej aplikacji. Jak można zauważyć, interfejsem nadrzędnym jest interfejs parametryzowania. Takie założenie narzuca na podrzędne elementy konieczność tworzenia cech algorytmu, określających jego funkcjonowanie. Jednocześnie implementując nowy algorytm uzależnia się go od konkretnych zmiennych, na które może mieć wpływ użytkownik. Dzięki temu umożliwiono ustalanie punktu pracy algorytmu albo nacechowanie go określonymi właściwościami. Kolejne, podrzędne interfejsy, dotyczą konkretnych zastosowań. Jest to interfejs generatora, który pozwala na implementowanie algorytmów wytwarzania ciągów liczbowych. Następnie interfejs wizualizowania danych oraz interfejs przetwarzania danych, czyli algorytmy testowania i obróbki matematycznej.

Jako opcję dodatkową w aplikacji zapewniono prosty sposób tworzenia opisów do generatorów, dzięki czemu można nimi posługiwać się nawet przy ich małej znajomości. Przyjęte rozwiązanie zakłada tworzenie dokumentów w formacie podstawowym HTML. Ponieważ jest to ogólnie znany standard, więc stworzenie dokumentacji do generatora nie powinno nastręczać większego problemu. Jednocześnie daje to sposobność płynnej zmiany domyślnych wersji opisu na dowolny język. 3. PRZYKŁADOWA IMPLEMENTACJA GENERATORA FISHMANA Aby zaprezentować sposób wykorzystania udostępnionych interfejsów, posłużyliśmy się przykładem dwóch implementacji generatorów Fishman a. Pierwszy z nich [3] został zaproponowany w roku 1990 i bazuje na algorytmie liniowego generatora kongruentnego. Ów algorytm charakteryzuje się wzorem: X[n+1]=(a*X[n]+c) mod M. Fishman zaproponował dla jego pracy następujące wartości parametrów: M=2 32 (jest to 2147483648), c=0 oraz a=1099087573. Drugi, z roku 1986, różni się zaledwie swoimi parametrami. Wynoszą one odpowiednio: M=2 31-1 (jest to 1073741823), c=0, a=742938285. Aby zaimplementować jeden z owych generatorów należało stworzyć klasę Javy, która byłaby poszerzona o metody abstrakcyjne interfejsu GeneratorInterface. Metody te wypełnialiśmy, kodując w ich wnętrzu algorytm funkcjonowania liniowego generatora kongruentnego. Dzięki temu, że interfejs GeneratorInterface stanowi poszerzenie abstrakcyjnej klasy parametryzującej mogliśmy w jej parametrach umiejscowić parametry generatora: generowaną zmienną losową X oraz argumenty algorytmu: a, c i m. Do poprawnego funkcjonowania algorytmu potrzebna była również wartość inicjująca początkowy stan generatora, określana jako ziarno (seed). Ten parametr również dodaliśmy do listy. Tym sposobem otrzymaliśmy oczekiwany generator, gotowy już do swojej pracy. Sparametryzowanie generatora dało również drugą, dość istotną zaletę. Stworzony generator, z określonymi parametrami funkcjonowania algorytmu, można było zapisać w postaci pliku projektu generatora. Plik ów tworzony jest przez aplikację w postaci kodu XML i może być załadowany później w dowolnym programie Java przy pomocy udostępnionej klasy GenerStoreFile.class. Jest to sposób na zastosowanie praktyczne wyników przeprowadzonych symulacji. Plik stanu generatora uzyskany dla generatora Fishmana z 1990 został wylistowany poniżej. Tab. 1. Listing pliku XML, opisującego stan przykładowego generatora LCG (Fishman, 1990) <?xml version='1.0' encoding='latin1'?> <generator class='generator.generatorlcg'> <parameter name='zm. losowa'> <Long>0</Long> <parameter name='a'><long>1099087573</long> <parameter name='c'><long>0</long> <parameter name='m'><long>2147483648</long> <parameter name='ziarno'> <generator class='generator.generatorsystemtime'> <parameter name='zm. Losowa'> <Integer>0</Integer> </generator> </generator> Plik stanu generatora w formacie XML przechowuje wszystkie parametry przykładowego generatora. Ponieważ generator nie był wykorzystywany jeszcze do pracy, zmienna losowa posiada wartość zerową. Plik przechowuje także informację o klasie zawierającej algorytm generatora, dla jakiego został stworzony (generator.generatorlcg). Można również zauważyć, że ziarno generatora jest inicjowane poprzez klasę generator.generatorsystemtime innego generatora, która pobiera czas z zegara systemowego. Taki plik stanu, po załadowaniu z wykorzystaniem metody loadgeneratorfromfile klasy GenerStoreFile, udostępni generator Fishman a w programie użytkownika, który będzie mógł się doń odwołać wykorzystując proponowany interfejs GeneratorInterface. 4. TESTOWANIE GENERATORÓW Nieodłącznym elementem projektowania jest testowanie otrzymanych wyników. Stworzone środowisko projektowe GenerProj realizuje również i ten etap. Wykorzystuje ono przy tym dwa unikatowe interfejsy - LaborDataInterface oraz ViewDataInterface. Przeznaczeniem pierwszego z nich jest implementowanie algorytmów matematycznego przekształcania zbioru danych liczbowych. Przekształcenie takie może być równoznaczne z przeprowadzeniem określonego testu statystycznego na wygenerowanym zbiorze. Omawiany interfejs oferuje bowiem dwie podstawowe metody: setinputdata oraz getoutputdata. Metoda setinputdata, jak wskazuje nazwa, pozwala na podawanie danych, natomiast getoutputdata na pobieranie rezultatów przekształcenia. Istotnym założeniem środowiska jest to, iż dane nie muszą być przekazywane jednorazowo, lecz mogą być podawane pakietami. Jednak od momentu rozpoczęcia pobierania wyników strumień wejściowy przestaje być uwzględniany i nie wpływa na stan wyjścia. Odbieranie danych od przekształcenia również może zachodzić w sposób pakietowy. Sytuacja taka ma miejsce, kiedy przekształcenie generuje znaczną liczbę danych w stosunku do ograniczonej pojemności środowiska. Wyniki są wtedy dzielone na mniejsze fragmenty, które kolejno są oddawane na zewnątrz. Po uzyskaniu wszystkich danych strumień wyjściowy jest blokowany. W praktyce przekształcenia są realizowane na dwa podstawowe sposoby. Wśród algorytmów można wyodrębnić takie, które do wykonania przekształcenia potrzebują całościowego zbioru danych liczbowych oraz takie, które mogą na bieżąco wykonywać obliczenia.

Przykładowo, wyznaczanie minimum zbioru może być wykonywane w trakcie otrzymywania danych wejściowych. Natomiast określenie częstości występowania konkretnych wartości w grupach, bez znajomości zakresu danych, wymaga odczekania algorytmu na całościową informację. Tak więc właściwy algorytm przekształcenia danych zostaje uruchomiony albo w momencie podawania danych metodą setinputdata, albo w momencie pobierania wyników poprzez metodę getoutputdata. Drugi interfejs ViewDataInterface powstał z myślą o zagospodarowaniu przestrzeni prezentacji otrzymywanych wyników przekształceń. Klasy realizujące to zadanie w prezentowanym środowisku projektowania są zobowiązane do stosowania pary podstawowych metod: metody sekwencyjnego przyjmowania danych do zinterpretowania, setdata, oraz metody obrazowania ich w ustalonej przez siebie formie showview. Dodatkowymi metodami, które uwzględnia interfejs ViewDataInterface są refreshview, odświeżania obrazowanej informacji, oraz getview, zwracającej obiekt widoku, jeżeli zaistnieje potrzeba zamieszczenia go w podrzędnej strukturze. Aby praktycznie przyjrzeć się funkcjonowaniu zaprezentowanych interfejsów można przeanalizować przebieg testu chi-kwadrat na wcześniej zaprojektowanym generatorze LCG proponowanym przez Fishman a z 1990. Test ten pozwala na sprawdzenie zbieżności otrzymywanych danych do zadanego rozkładu i stwierdza wobec niego, czy uzyskane dane pseudolosowe są rozłożone w sposób zbyt mocno od niego odbiegający lub zbyt zgodny. Test ten przeprowadziliśmy wykonując go 15 razy na wymienionym generatorze z liczebnością próbki wynoszącą 10.000 oraz określając liczbę stopni swobody na 19 (czyli 20 klas wedle których zostaną poszeregowane wygenerowane dane). Przed każdym testem generator był inicjowany przez ziarno, zaczerpnięte z systemowego zegara, co zapewniało ustalenie nowego początkowego punktu pracy. Efektem końcowym testu jest ciąg piętnastu wartości chi-kwadrat, które przedstawione są w zaokrągleniu do czwartego miejsca po przecinku w tabeli 2. Tab. 2. Wyniki testu Chi Kwadrat (15 próbek po 10.000 liczb) dla LCG Fishmana z 1990 24.9684 20.4839 11.0378 33.5752 11.7966 8.1337 14.38 19.196 15.6947 20.3906 27.6927 36.556 21.04 27.72 21.712 Dane te można ocenić na podstawie tabeli wartości krytycznych rozkładu chi-kwadrat, której fragment, odpowiadający liczbie stopni swobody ν=19 zamieszczamy w tabeli 3 [7]. Ciekawostką jest to, że generator Fishmana z roku 1986 nie wykazuje dobrej jakości generowanych ciągów, hipoteza liniowości rozkładu danych pseudolosowych zostaje odrzucona. Jest to zgodne z doświadczeniem autorów publikacji [6]. Tab. 3. Wartości krytyczne rozkładu chi-kwadrat dla stopni swobody ν=19, w zależności od parametru α 0,01 0,05 0,1 0,2 0,3 7,633 10,117 11,651 13,716 15,352 0,4 0,5 0,6 0,7 0,8 16,850 18,338 19,910 21,689 23,900 0,9 0,95 0,99 27,204 30,144 36,191 Do przeglądania wyników testowania można wykorzystać tryb prezentacji dostępny w aplikacji autorskiej. Mechanizm prezentacji działa poprzez klasę ViewTestChiSquare (Rysunek 3), realizującą interfejs ViewDataInterface. Postać prezentowanych wyników klasa opiera o wizualizację zaprezentowaną w [3]. Uzyskane wyniki podzielone są na 4 kategorie: Odrzucone, Podejrzane, Akceptowalne oraz Zaakceptowane. Każda kategoria jest oznaczona swoim prywatnym kodem (wyniki zaakceptowane są oznaczone pustą kratką) oraz jest wyznaczona przez swój próg prawdopodobieństwa. Próg jednoprocentowy oznacza, że wynik zawiera się w zakresie wartości krytycznych określonych dla prawdopodobieństw 0-1% lub 99-100%, pięcioprocentowy dla prawdopodobieństw 1-5% lub 95-99% itd. Tak więc ustalony próg powoduje automatyczne odcięcie wartości od dołu (dla rozkładu zbyt prawdopodobnego) oraz od góry (dla rozkładu zbytnio odbiegającego od założonego rozkładu statystycznego). Rys. 3. Prezentacja graficzna testów Chi Kwadrat Innym z ciekawszych testów, stosowanych względem generatorów multiplikatywnych jest test struktury przestrzennej. Sposób jego przeprowadzenia oparto na publikacji [3]. Polega on na zobrazowaniu wyników otrzymywanych z generatora pseudolosowego w postaci graficznego wykresu, na którym zamieszcza się zbiór punktów utworzonych z par kolejno generowanych liczb. Ćwiczenie to, podobnie jak w przykładzie autora, wykonano w oparciu o generator multiplikatywny o następujących parametrach: a=12, m=101. Wynik, zobrazowany na rysunku 4 przedstawia zbiór punktów, który układa się w specyficzne linie. Niezależne ciągi losowe charakteryzują się równomiernym rozkładem naniesionych punktów, czego efektem byłoby wypełnienie całej przestrzeni

podzielonej na jednostkowe kostki. Natomiast w tym przykładzie są wypełniane zaledwie niektóre z nich i dodatkowo układają się w dobrze widoczne linie. Takie ułożenie sugeruje, iż jest to ciąg zależnych zmiennych losowych. SPIS LITERATURY [1] D. E. Knuth, Sztuka programowania. Tom 2. Algorytmy seminumeryczne, WNT, Warszawa 2002 [2] R. Zieliński, Generatory liczb losowych, WNT, Warszawa 1979 [3] R. Wieczorowski, R. Zieliński, Komputerowe generatory liczb losowych, WNT, Warszawa 1997 [4] B. P. Zeigler, Teoria modelowania i symulacji, PWN, Warszawa 1984 [5] S. Brandt, Analiza danych, rozdz. 4. Metoda Monte Carlo i generowanie liczb losowych, PWN, Warszawa 1998, [6] P. L'Ecuyer, R. J. Simard, Beware of linear congruential generators with multipliers of the form a = ±2q ±2r, ACM Trans. Math. Softw., 25(3), str. 367-374, 1999 [7] Tablice matematyczne, Wydawnictwo Adamantan, str. 374, Warszawa 2002 Rys. 4. Prezentacja struktury przestrzennej par punktów wygenerowanych z generatora multiplikatywnego o m=101 i a=12 5. PODSUMOWANIE Ćwiczenia praktyczne z zakresu liczb pseudolosowych mogą być wspierane autorską aplikacją Java, którą zaprojektowano celowo jako środowisko projektowe o budowie otwartej. Istotną zaletą aplikacji jest to, że w wyniku prac projektowych powstają wygodne warunki do implementacji przetestowanych generatorów w innych programach Java poprzez zastosowanie opracowanych interfejsów. Możliwość ta ma znaczenie szczegółowe przy opracowaniu ćwiczeń dla osób studiujących kierunek Informatyka.