Dokumentacja końcowa projektu z ZPR



Podobne dokumenty
Co to jest NODE.JS? Nowoczesne środowisko programistyczne

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

Wprowadzenie do biblioteki klas C++

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Instalacja i konfiguracja IIS-a na potrzeby dostępu WEB do aplikacji Wonderware InTouch Machine Edition

Zaawansowane aplikacje internetowe - laboratorium

AZACO Eksporter. Instrukcja konfiguracji oraz automatycznego eksportu danych. Przygotowanie środowiska...2. Konfiguracja zadań eksportu danych...

AJAX. Wykonał: Marcin Ziółkowski, AGH Kraków, AiR rok 5.

Pliki zorganizowano w strukturze drzewiastej odzwierciedlając strukturę logiczną aplikacji:

Instalacja i konfiguracja IIS-a na potrzeby dostępu WEBowego/Secure

Wprowadzenie do środowiska Qt Creator

Aplikacje WWW - laboratorium

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Instrukcja logowania do systemu e-bank EBS

Instrukcja obsługi programu Profile GT

Kancelaria instalacja programu

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

REFERAT O PRACY DYPLOMOWEJ

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Spring Web MVC, Spring DI

Instrukcja instalacji v2.0 Easy Service Manager

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Paweł Rajba,

VinCent v.1.40 zmiany w programie

Aktualizacja firmware w urządzeniu za pośrednictwem FTP

MentorGraphics ModelSim

Trojan bankowy Emotet w wersji DGA

Uruchomienie aplikacji Plan lekcji w przeglądarce Internet Explorer

Webowy generator wykresów wykorzystujący program gnuplot

Tomasz Greszata - Koszalin

Tworzenie pliku źródłowego w aplikacji POLTAX2B.

Opcje Fiery1.3 pomoc (klient)

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Zarządzanie licencjami dla opcji Fiery na komputerze klienta

Laboratorium 1 Wprowadzenie do PHP

Informatyka I : Tworzenie projektu

procertum CLIDE Client 2.1 wersja 1.0.2

Konfiguracja konta pocztowego w Thunderbird

Instrukcja laboratoryjna cz.3

Konfiguracja współpracy urządzeń mobilnych (bonowników).

Najczęściej występujące problemy z instalacją i konfiguracją i ich rozwiązania.

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

Serwery Statefull i Stateless

I. Informacje ogólne. Jednym z takich systemów jest Mambo.

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

Referat Pracy Dyplomowej

Electronic Infosystems

Opcje Fiery1.3 pomoc (serwer)

Programowanie niskopoziomowe

UNIFON podręcznik użytkownika

HermesEX. Dokumentacja serwisowa v

Materiały dodatkowe. Raspberry Pi

Widżety KIWIPortal. tworzenie umieszczanie na stronach internetowych opcje zaawansowane. Autor: Damian Rebuś Data: Wersja: 1.

Poradnik korzystania z usługi FTP

Zaawansowane aplikacje internetowe

Praca z programami SAS poza lokalną siecią komputerową UZ. Zestawienie tunelu SSH oraz konfiguracja serwera proxy w przeglądarce WWW

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

4. Podstawowa konfiguracja

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Informacje o aktualizacji oprogramowania

Graficzny terminal sieciowy ABA-X3. część druga. Podstawowa konfiguracja terminala

Instrukcja instalacji usługi Sygnity Service

INSTRUKCJA INSTALACJI PŁATNOŚCI TRANSFERUJ.PL

HELIOS pomoc społeczna

INSTALACJA SERWERA LOKALNEGO TYPU WAMP NA PRZYKŁADZIE PAKIETU KRASNAL SERV 2.7

Mirror Tool.

WINDOWS Instalacja serwera WWW na systemie Windows XP, 7, 8.

Szczegółowa specyfikacja funkcjonalności zamawianego oprogramowania.

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat usługi DHCP.

Współpraca z platformą Emp@tia. dokumentacja techniczna

Dokumentacja fillup - MS SQL


Instrukcja konfiguracji funkcji skanowania

Dokumentacja techniczna. Młodzieżowe Pośrednictwo Pracy

Przewodnik użytkownika (instrukcja) AutoMagicTest

Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Wybrane działy Informatyki Stosowanej

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat protokołu http.

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wyszukiwanie plików w systemie Windows

Instalacja Wirtualnego Serwera Egzaminacyjnego

Projekt Fstorage. Łukasz Podkalicki Bartosz Kropiewnicki

ABA-X3 PXES v Podręczna instrukcja administratora. FUNKCJE SIECIOWE Licencja FDL (bez prawa wprowadzania zmian)

Bioinformatyka. Ocena wiarygodności dopasowania sekwencji.

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

BACKUP BAZ DANYCH FIREBIRD

Archiwizacja baz MSSQL /BKP_SQL/ opis oprogramowania

Pobieranie komunikatów GIF

Generatory pomocy multimedialnych

Odseparowanie kodu PHP i warstwy prezentacji od dawna było celem

SAS Institute TECHNICAL SUPPORT )

Ministerstwo Finansów

Instrukcja obsługi aplikacji MobileRaks 1.0

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Instalacja i konfiguracja Symfonia.Common.Server oraz Symfonia.Common.Forte

Transkrypt:

Dokumentacja końcowa projektu z ZPR Temat projektu: Prowadzący projekt: Zespół projektowy: Losowe przeszukiwanie stanów dr inż. Robert Nowak Piotr Krysik Kamil Zabielski

1. Opis projektu Projekt ma za zadanie rozwiązać problem kombinatoryczny jakim są n-puzzle, metodą błądzenia przypadkowego(random ). Pełna dokumentacja implementacji jest dostępna w folderze doc. 2. Opis aplikacji Rys. 1 Schemat pokazujący działanie aplikacji a. Opis interfejsu użytkownika Rozwiązanie problemu n-puzzli przy użyciu algorytmu błądzenia losowego (random walk) zostało wykorzystane do zbudowania aplikacji internetowej. Działanie tej aplikacji polega na znajdowaniu rozwiązania dla zadanego przez użytkownika ustawienia puzzli. Na rysunku xxxxx przedstawiony został schemat aplikacji. Składa się ona z: klienta stanowiącego interfejs użytkownika uruchamiany w przeglądarce serwera HTTP zaimplementowanego w języku python modułu Pythona n_puzzle zaimplementowanego w języku C++, w którego skład wchodzi rozwiązanie problemu n-puzzli oraz biblioteka zawierająca algorytmy random walk i random sampling b. Opis Serwera http Serwer został zaimplementowany w całości w języku Python przy wykorzystaniu modułów BaseHTTPRequestHandler i HTTPServer. Logika aplikacji została zawarta w klasie PuzzleServHandler obsługującej żądania do serwera i dziedziczącej po BaseHTTPRequestHandler. Zadaniem serwera jest dostarczanie przeglądarce plików zawierających opis strony www oraz kod javascript

aplikacji użytkownika. Serwer obsługuje też asynchroniczne wywołanie XMLHttpRequest generowane po stronie przeglądarki będące żądaniem rozwiązania układanki o zadanym rozmiarze (wymiarze boku układanki) oraz ustawieniu. Te parametry serwer przekazuje do funkcji obliczającej rozwiązanie. Wyniki obliczeń są zapisywane w plikach w katalogu webapp/results/. Pliki te składają się ze strzałek oznaczających kolejne przesunięcia pustego elementu układanki, które prowadzą do rozwiązania. Serwer jest uruchamiany przez skrypt run_server.sh (run_server.bat w systemie Windows). Po uruchomieniu serwer nasłuchuje na porcie 8080 w oczekiwaniu na wywołania ze strony aplikacji klienckich. c. Opis aplikacja klienta Aplikacja kliencka została zaimplementowana jako strona www w znacznym stopniu wykorzystująca program napisany w języku javascript. Program ten korzysta z biblioteki jquery wraz ze zmodyfikowanym przez nas komponentem jqpuzzle. JqPuzzle odpowiada za tworzenie planszy z puzzlami oraz pozwala na zmianę przez użytkownika ustawienia puzzli. Wprowadzone przez nas zmiany polegają na: dodaniu możliwości odczytania ustawienia puzzli, dostarczeniu wywołania wysyłającego do serwera rozmiar i ustawienie puzzli, dołączeniu do układanki przycisku wywołującego wysłanie tego wywołania do serwera, umożliwieniu prezentacji wyniku. Przykładowa sesja klienta Komunikacja klienta z serwem zostanie przedstawiona na przykładzie. Po uruchomieniu serwer nasłuchuje na porcie 8080. Użytkownik uruchamia aplikację kliencką wchodząc na stronę http://<adres_serwer>:8080 (w GET /query?x=1&x=2&x=3&x=4&x=9&x=6&x=7&x=5&x=8&size=3 sytuacji gdy serwer uruchomiony jest na tym samym komputerze: http://localhost:8080). Na rysunku 1 przedstawiony jest interfejs programu wraz z przykładowym ustawieniem puzzli. Po wciśnięciu przycisku "Wyslij" do serwera zostanie wysłane żądanie metodą GET o następującej treści: Serwer przetworzy odebrany URL na listę puzzle_arr = [1,2,3, 4,9,6, 7,5,8] i rozmiar puzzle_size = 3. Liczba 9 reprezentuje pusty element. Te dane zostaną przesłane do obiektu typu n_puzzle a uzyskany rezultat zostanie zapisany w pliku out1.txt w katalogu webapp/results ("1" w nazwie oznacza pierwsze wywołanie). Do klienta zostanie odesłana w formacie JSON długość ścieżki prowadzącej do rozwiązania oraz nazwa pliku zawierającego rozwiązanie: Rysunek 1: Interfejs aplikacji klienckiej {"result_len": 4, "result_fname":"out1.txt"} Po odebraniu tych informacji aplikacja kliencka pobierze i wyświetli plik z rozwiązaniem w ramce znajdującej się obok układanki (rys. 2).

Rysunek 2: Ścieżka prowadząca do rozwiązania Strzałki oznaczają kolejne przesunięcia pustego elementu, które prowadzą do rozwiązania. c. Opis modułu n_puzzle Moduł n_puzzle to wrapper metody z c++ do pythona. Pozwala to na szybka i elastyczną zmiane kodu wywoływanego(oraz sposobu wywołania) z poziomu aplikacji klienckiej d. Opis modułu logicznego Ten w tym module odbywa się rozwiązanie problemu kombinatorycznego czyli faktyczne generowanie odpowiedzi (ścieżki) metodą losową dla zadanego ustawienia planszy wysłanego przez serwer http. Cały algorytm wytyczania ścieżki znajduje się w klasie puzzle_solution, a dokładniej w metodzie solve_puzzle( ). W skład tego modułu wchodzą pliki n_puzzle_solution.cpp oraz n_puzzle_solution.hpp. Wiecej informacji można uzyskać w dokumentacji kodu. e. Opis modułu bibliotecznego Moduł dostarcza klas implementujących algorytmy błądzenia przypadkowego oraz próbkowania losowego: RandomWalk(plik RandomWalk.hpp) i RandomSampling (plik RandomSamoling.hpp). Są one zaimplementowane jako szablony które wystarczy dołączyć do plików korzystających z nich poprzez #include. Więcej informacji można uzyskać w dokumentacji kodu. 3. Kompilacja Projekt do poprawnej kompilacji wymaga zainstalowania biblioteki boost(wersja przynajmniej 1.38) oraz biblioteki pyton (przynajmniej w wersji 2.6). Ponad to pod Linuxem do kompilacji używamy programu Scons oraz kompilatora G++, natomiast pod Windows em środowiska programistycznego Visual Studio(przynajmniej wersja z roku 2005). a. Windows Pod systemem Windows do kompilacji trzeba użyć środowiska programistycznego Visual Studio 2005 albo nowszej. Uruchamiamy środowisko i ładujemy ustawienia projeku przez opcję open project i wyszukujemy plik random.sln. Po załadowaniu projektu trzeba jeszcze ustawić ścieżki do plików *.hpp i *.h, przechodzimy do Project->properties->configuration properties->c/ C++/General, w polu Additional Includes Directories dodajemy ścieżki do boost(np. C:\Program Files\boost_1_38\) i pyton(np. C:\Python28\include). Jeszcze tylko pozostało ustawić ścieżki do bibliotek potrzebych do kompilacji:, przechodzimy do Project->properties- >configuration properties->linker->general w polu Additional Library Directories dodajemy ściezki do plików *.libboost np. " C:\Program Files\boost_1_38\stage\lib" oraz do bibliotek phyton a ( np. C:\Python31\libs) UWAGA: Należy mieć na uwadze ze project korzysta z boost::python w z wiazku z czym trzeba mieć bibliotekę statyczną libboost_python.lib skompilowaną. Zdarza się że bjam nie skompiluje tej części biblioteki boost, w związku z czym trzeba ręcznie skonfigurować i user_config.jam b. Linux Pod Linuxem wystarczy przejść do folderu w którym znajduje się project i wywołać polecenie scons z konsoli. Ewentualnie będzie potrzebna modyfikacja ścieżki do python a

4. Wnioski i uwagi. a. Wielowątkowość Zarówno moduł logiczny jak i moduł biblioteczny są wielowątkowe w tym sensie iż można stworzyć osobny obiekt dla każdego wątku i nie będą zachodziły zjawiska niepożądane (wyścigi, dereferencja wskaźnika), dopóki jest zapewniony odpowiedni czas życia obiektów. Zapewnione jest to poprzez użycie generatorów liczb pseudolosowych z biblioteki boost::random. Ponadto do klas puzzle_solution jak i RandomSampling jest również prawdzie stwierdzenie iż wiele wątków może korzystać z tych samych obiektów tych klas. Ponieważ obiekty klasy RandomWalk przechowują obiekty z których losują użycie jednego obiektu w wielu wątkach jest dosyć niebezpieczne. b. Wydajność Ponieważ np macierz 3x3 ma 9!(ok. 350.tyś )możliwych kombinacji a macierz 4x4 to już 16! (ok. 20*10^12), wytyczanie ścieżki może być trwać dosyć długo(możemy oczekiwać ścieżek nawet na poziomie n=9! dla macierzy 3x3). Dlatego też moduł logiczny oraz moduł biblioteczny zostały zaimplementowane w sposób prosty ale wydajny. c. Poprawność rozwiązania Jak się okazuje dla macierzy 4x4 i większych stany można podzielić na 2 grupy. Od jednego stanu do innego da się przejść tylko wtedy gdy należą do tej samej grupy. Wiec z części stanów nie da się dojść do stanu końcowego(uporządkowanego.)