PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA w KROŚNIE

Wielkość: px
Rozpocząć pokaz od strony:

Download "PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA w KROŚNIE"

Transkrypt

1 PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA w KROŚNIE INSTYTUT POLITECHNICZNY DZIENNE STUDIA INŻYNIERSKIE Sieciowe Systemy Informatyczne PRACA DYPLOMOWA Szelc Marcin Przegląd metod sztucznej inteligencji służących do projektowania i realizacji gier strategicznych na przykładzie wybranej gry strategicznej Ocena: Promotor: Dr inż. Mariusz Święcicki

2 KROSNO, 2006 Za pomoc przy realizacji pracy oraz udzielenie cennych wskazówek składam serdeczne podziękowania 2

3 Panu Dr inż. Mariuszowi Święcickiemu Spis treści Wstęp. 6 Cel pracy i założenia. 8 ROZDZIAŁ I Podstawy teoretyczne sztucznej inteligencji Definicja i charakterystyka sztucznej inteligencji Sztuczna inteligencja w grach strategicznych(logicznych). 13 ROZDZIAŁ II Metody przeszukiwania heurystycznego Pojęcie heurystyki Sposoby reprezentacji zadań oraz przestrzeń przeszukiwania Metody przeszukiwania drzew Porównanie algorytmów wgłąb i wrzesz Tworzenie algorytmów przeszukiwania w Java Metody rekurencyjne Metody iteracyjne. 29 ROZDZIAL III Charakterystyka programu kółko i krzyżyk Zasady i odmiany gry Założenia gry przyjęte na potrzeby pracy Opis interfejsu gry Rodzaj gry. 36 3

4 3.3.2 Jakość gracza-komputera Konfiguracja programu Zapisywanie i odtwarzanie rozgrywek Złożoność obliczeniowa i czas wykonywania. 38 ROZDZIAŁ IV Tworzenie gry kółko i krzyżyk Ogólnie o tworzeniu gry Schemat działania gry Sprawdzanie czy gra zakończona Generowanie ruchu wymuszonego Wybranie ruchów kandydujących Przeszukiwanie drzewa gry Funkcja oceniająca wartościowanie danych posunięć Zmienność algorytmu przeszukiwania oraz funkcji oceniającej Najbardziej znane algorytmy przeszukiwania drzewa gry Algorytm minimax Algorytm alfa-beta obcinanie Funkcje oceniające Charakterystyka 2 funkcji oceniających zastosowanych w programie Wyniki gier przy zastosowaniu różnych funkcji oceniających Czynniki funkcji oceniającej wpływające na szybkość działania programu Przeszukiwania drzewa gry w programie Algorytm alfa-beta, a minimax w grze Czas szukania najlepszego ruchu w grze. 64 4

5 ROZDZIAŁ V Sztuczna inteligencja w urządzeniach mobilnych Możliwość zastosowanie sztucznej inteligencji na urządzeniach mobilnych Przenoszenie aplikacji kółko i krzyżyk z aplikacji na midlet Zasady tworzenia midletu Wyświetlanie w aplikacji w porównaniem wyświetlania w midlecie Różnice bibliotek (klas) stosowanych w aplikacjach na PC - J2SE, a tych stosowanych na urządzenia mobilne - J2ME Redukcja obliczeń Testowanie Podsumowanie. 71 ROZDZIAŁ VI Podsumowanie Zakończenie Wnioski. 72 Bibliografia. 74 Spis rysunków. 75 Spis kodów źródłowych. 76 5

6 Wstęp W dobie współczesnej komputery są bardzo szybkie, a wzrost ich mocy obliczeniowej jest ciągle duży. Jednak w wielu zadaniach ta moc obliczeniowa jest niewystarczająca. Na pozór proste gry logiczne (np. kółko i krzyżyk, których tworzenie jest celem niniejszej pracy) potrzebują ogromnej mocy obliczeniowej jeśli chcemy mieć silny program, potrafiący wygrywać z bardzo dobrymi graczami. Jednak komputery są takie na jakie stać dzisiejszą technikę, natomiast duże możliwości przyspieszenia pewnych obliczeń tkwią w zastosowaniu odpowiednich algorytmów i użyciu odpowiednich technik programistycznych pozwalających na wzrost szybkości obliczeń. W pracy niniejszej do zaprogramowania gry kółko i krzyżyk użyty został język Java. Oczywiście jest to na dzień dzisiejszy niezbyt szybki język, jednak daje możliwość napisania bardzo przejrzystego kodu i zarazem utworzenia wieloplatformowego programu. Proces tworzenia różnych gier logicznych jest bardzo podobny. Różnice polegają na sposobie generacji ruchów (właściwych dla danej gry) oraz budowaniu funkcji oceniającej. Natomiast sama technika znajdywania optymalnego ruchu jest taka sama (stosowanie popularnych algorytmów przeszukiwania drzew gier, np. alfa-beta obcinanie). Tworzenie gry logicznej polega na przewidywaniu na kilka (kilkanaście) ruchów do przodu. Człowiek robi to bardzo szybko, gdyż potrafi wybrać tylko kilka sensownych ruchów z danej pozycji i przeanalizować kolejne (również tylko niektóre), uwzględniając fakt że przeciwnik również wykona dobry dla niego ruch. 6

7 Program komputerowy również analizuje tylko ruchy wpływające w znaczący sposób na stan gry, gdyż ocenianie wszystkich możliwych posunięć na kilka ruchów do przodu pochłonęłoby zbyt dużo czasu. Przykładowo dla gry kółko i krzyżyk o rozmiarach 15x15 i przewidywaniu 5 ruchów do przodu byłoby to prawie (15*15)^5, a więc około 576,650,390,000 możliwych ruchów. Zakładając, że wygenerowanie i przetestowanie 100 ruchów na komputerze trwałoby 1 milisekundę (na dobrym pececie trwa to znacznie dłużej(w programie będącej przedmiotem tej pracy ms),oczywiście w zależności od sposobu generowania ruchów i funkcji oceniającej, to sprawdzenie wszystkich posunięć na 5 ruchów do przodu trwałoby około 66 dni. Jak łatwo policzyć gdybyśmy w ten sposób chcieli sprawdzić wszystkie możliwe posunięcia 7 ruchów do przodu, to czas trwania przekroczyłby wielokrotnie czas życia człowieka. Dlatego wykorzystuje się wiele technik do skrócenia tego czasu, dzięki czemu programy komputerowe przewidują nawet na kilkanaście ruchów do przodu, co odpowiada poziomowi gry najlepszych graczy. Na dobrego gracza wystarczy kilka ruchów do przodu przy dobrej funkcji oceniającej, a na przeciętnego człowiek czasem wystarczy 1-3. W pracy przedstawione zostały metody przeszukiwanie heurystycznego wykorzystywane w tworzeniu gier strategicznych (logicznych). 7

8 Cel pracy Celem pracy jest przedstawienie metod sztucznej inteligencji służących do projektowania i realizacji gier strategicznych na przykładzie wybranej gry strategicznej ( kółko i krzyżyk ). Celem pracy nie jest stworzenie bardzo silnego programu do gry, lecz zaprezentowanie samych mechanizmów przeszukiwania heurystycznego, na przykładzie napisanej gry. Ważnym aspektem pracy jest porównywanie tych mechanizmów zarówno od strony teoretycznej jak i praktycznej (będącej wynikiem działania programu przy różnych ustawieniach). W pracy zostały także przedstawione i ocenione m.in. sposoby generowania ruchów, przeszukiwania drzewa gry, ocenianie danego ruchu. Pogram gry jak i przykłady przeszukiwania drzewa gry zrealizowane zostało w języku Java. Język Java nie jest najlepszy w szybkości działania, jednak przejrzystość kodu pisanego w tym języku programowania (stworzonego z myślą o programowaniu obiektowym) pozwala na lepsze zrozumienie niniejszej pracy. Poza tym programy napisane w języku Java działają na różnych platformach systemowych (systemy operacyjne np. Linux, Windows) jak i w różnych platformach sprzętowych (komputery PC, urządzenia mobilne - palmtopy, telefony komórkowe) oraz różne środowiska (np. aplikacyjne, www - aplety). Niniejszy program został zaimplementowany w formie aplikacji, apletu oraz midletu. W pracy został przedstawiony sposób realizacji skomplikowanych zadań sztucznej inteligencji na telefonach komórkowych, których możliwości obliczeniowe i zasoby pamięciowe są niewielkie. 8

9 W związku z tym, że obliczenia realizowane na drzewie gry doskonale nadają się do rozproszenia, pokrótce omówiony został problem stosowania rozpraszania obliczeń. Przeanalizowanie tej pracy jak również programów zrealizowanych w jej ramach mogą dać dobre podstawy do zrozumienia problematyki działania gier logicznych bazujących na sztucznej inteligencji, co jest głównym zamierzeniem tej pracy. Programy zrealizowane w ramach niniejszej pracy nie są w pełni zoptymalizowane pod względem szybkości działania, dlatego też nadają się do rozważań na temat możliwości zastosowania optymalizacji w różnych fragmentach ich działania. 9

10 Rozdział I Podstawy teoretyczne sztucznej inteligencji 1.1 Definicja i charakterystyka sztucznej inteligencji 1. Sztuczna inteligencja definicja. Definicja w odniesieniu do dziedziny informatyki. Sztuczna inteligencja (angielskie artificial intelligence, AI), dział informatyki zajmujący się konstruowaniem maszyn i algorytmów, których działanie posiada znamiona inteligencji. Rozumie się przez to zdolność do samorzutnego przystosowywania się do zmiennych warunków, podejmowania skomplikowanych decyzji, uczenia się, rozumowania abstrakcyjnego itp. Definicja w odniesieniu do człowieka. Inteligencja jest to zespół zdolności umysłowych umożliwiających jednostce sprawne korzystanie z nabytej wiedzy oraz skuteczne zachowanie się wobec nowych zadań i sytuacji (Encyklopedia Powszechna PWN z roku 1982). 2. O sztucznej inteligencji. Sztuczna inteligencja od czasów swego powstania jest nadzieją ludzkości ale zarazem budzi wiele wątpliwości oraz sprzecznych opinii. 10

11 Czy kiedykolwiek uda się zbudować maszynę naprawdę myślącą i czy to stwierdzenie nie jest naprawdę samo w sobie sprzeczne ( maszyna myśleć )? To pytanie pozostanie na długo, a może na zawsze bez jednoznacznej odpowiedzi. Czy wobec tego te próby mają sens? Oczywiście że tak, gdyż prowadzą do powstania wielu użytecznych systemów, urządzeń, które często nie były celem samym w sobie. Sztuczna inteligencja zatacza coraz szersze kręgi wkradając się, często niepostrzeżenie, w nasze codzienne życie, do naszych domów. Inną sprawą jest, że wiele z tych rzeczy ma niewiele wspólnego ze sztuczną inteligencją, a są to jedynie mniej lub bardziej zaawansowane automaty, które określamy mianem inteligentny. Pojęcie inteligencji było znane już w Starożytności. Najprawdopodobniej termin inteligencja zdefiniował jako pierwszy rzymski filozof Cyceron żyjący kilkadziesiąt lat przed naszą erą. Jego interpretacja niewiele różni się od współczesnego postrzegania inteligencji. Mianowicie inteligencja w jego mniemaniu oznaczała zdolności umysłowe człowieka. Później definicja ta została rozszerzona i obecnie termin ten oznacza zespół zdolności umożliwiających jednostce korzystanie z nabytej wiedzy oraz skuteczne zachowanie się wobec nowych zadań i warunków, czyli na znajdowaniu właściwych reakcji na otaczające ją sytuacje. Inteligencję możemy traktować jako zdolność uczenia się, zdolność do rozwiązywania zadań, zaś poziom (stopień) inteligencji możemy ocenić po stopniu trudności tych zadań, a co za tym idzie po stopniu trudności materiału, jaki dana jednostka może przyswoić. Aby rozwiązać dane zadanie trzeba posiadać i umieć powiązać ze sobą kilka cech, takich jak: rozumienie problemu, umiejętność wnioskowania, myślenie (często jest to myślenie abstrakcyjne), kojarzenie i odkrywanie faktów, pamięć, czasem także podświadomość i intuicja. Zatem pojęcie inteligencji jest dużo bardziej złożone niż by się mogło na początku wydawać i można ją traktować jako zespół określonych procesów powiązanych ze sobą. (Wielka Internetowa Encyklopedia Multimedialna). 11

12 W badaniach nad sztuczną inteligencją wyróżniamy wiele nurtów. Maksymalny program, jaki stawia przed sobą ta dziedzina to stworzenie maszyn o inteligencji dorównującej, a nawet przewyższającej ludzką. Program minimalny to stworzenie algorytmów lub maszyn przejawiających tylko jakiś wąski aspekt inteligencji, np. grających w szachy lub rozpoznających obrazy czy automatycznie tworzących streszczenie jakiegoś tekstu. (Wielka Internetowa Encyklopedia Multimedialna). Sztuczna inteligencja jest dziedziną bardzo kontrowersyjną, jednak chętnie badaną przez wiele firm. Badacze tej dziedziny natrafili na szereg problemów. Najpoważniejszym jest to, że komputer jest jedynie maszyną, nie potrafi niczego sam wymyślić, ponieważ nie myśli w ludzkim znaczeniu tego słowa. Nie posiada intuicji, podświadomości, stanów emocjonalnych (to akurat uważam za jedną z poważniejszych zalet komputerów). Komputer jednak ma szereg bardzo poważnych zalet dających mu przewagę nad człowiekiem. Jego podstawową zaletą jest szybkość dokonywanych obliczeń. W tym względzie człowiek nigdy nie doścignie maszyny. Jednak obliczenia te nie są twórcze, a jedynie przetwarzane z kodu programu, który został wprowadzony przez człowieka. Komputer musi więc się jakoś komunikować z człowiekiem. Dzieje się to za pomocą programu. Człowiek wprowadza dane, komputer analizuje je, wykonuje operacje i odpowiada. Można powiedzieć, że działa to na zasadzie dialogu, a więc powstaje wrażenie jakby obie strony przekazywały swoje myśli. Widzimy więc, że komputer sprawia wrażenie jakby myślał, miał inteligencję. W obrębie sztucznej inteligencji tworzy się programy obrazujące myśli człowieka. Programy te są tak skonstruowane, że nawet ich twórca nie może przewidzieć, do czego będą one wykorzystywane w przyszłości. Do sprawdzenia, czy dany system (program) posiada inteligencję (oczywiście sztuczną) wykorzystuje się test Turinga, zwany inaczej testem nie rozróżnialności (indistinguishability test). Polega on na tym, że maszynę uważa się za inteligentną, jeśli bezstronny obserwator zadając pytania systemowi nie będzie w stanie stwierdzić, czy odpowiedzi pochodzą od człowieka czy od maszyny. 12

13 Realizacją tego testu może być np. gra w szachy. Systemy sztucznej inteligencji określa się jako systemy oparte na wiedzy (knowledge based system), bowiem w metodach SI następuje przejście od przetwarzania danych do przetwarzania wiedzy. 1.2 Sztuczna inteligencja w grach strategicznych (logicznych). Gry strategiczne są od wielu lat inspiracją człowieka. Inspiracja ta pochodzi zapewne od tego, że nie mają one tak zwanego rozwiązania, czyli nie istnieje w obecnych czasach możliwość generacji sekwencji ruchów dających pewne zwycięstwo. Na przeszkodzie w znalezieniu sekwencji wygrywającej stoi bardzo duża liczba możliwych rozgrywek. Sztuczna inteligencja wykorzystywana jest w grach logicznych do odrzucania ruchów słabych poprzez wartościowanie danego układu planszy, w wyniku czego znacznie zmniejsza się przestrzeń przeszukiwania. Wykorzystywane są w tym celu ogólnie znane mechanizmy przeszukiwania heurystycznego oraz funkcja oceniająca dany układ planszy (dany ruch), która jest już właściwa dla danego programu i to od jej jakości w głównej mierze zależy jakość programu. 13

14 ROZDZIAŁ II Metody przeszukiwania heurystycznego 2.1 Pojęcie heurystyki Heurystyka oznacza sztukę znajdowania rozwiązań problemów metodami niealgorytmicznymi. Do rozwiązania wielu problemów, zadań, nie można użyć metod algorytmicznych ze względu na ogromną złożoność obliczeniową tych zadań. Dlatego stosuje się metody heurystyczne, które nie dają pewności uzyskania najlepszego rozwiązania, jednak ich skuteczność i ogromne zmniejszenie złożoności obliczeniowej wpływają na to, że są one często stosowane w rozwiązywaniu problemów sztucznej inteligencji. 2.2 Sposoby reprezentacji zadań oraz przestrzeń przeszukiwania Rozwiązywanie zadań sprowadza się do tworzenia obiektów oraz przeszukiwania. Często sprowadza się to do przeszukiwania wszystkich możliwych stanów, jednak taki sposób można zastosowań jedynie do mało złożonych zadań. Przy rozwiązywaniu zadań bardziej złożonych stosuje się metodę generowania i testowania obiektów lub przeszukiwania tylko wybranych obiektów ze zbioru. Według powyższego przestrzenie przeszukiwania można podzielić następująco: - przeszukiwanie całych zbiorów stosowana dla mało złożonych zadań. - przeszukiwanie wybranych obiektów z całego zbioru stosowane dla złożonych zadań. Wadą jest duże zużycie pamięci. 14

15 - generowanie i przeszukiwanie obiektów stosowane dla złożonych zadań. Zaletą jest mniejsze zużycie pamięci. Przy opisie zadania istotne jest uwzględnienie: - sposobu przedstawiania obiektów z przestrzeni przeszukiwania kod. - metody obliczeniowe pozwalające generować kolejne obiekty. - metody wyboru operatorów spośród operatorów możliwych do zastosowania strategie sterowania. (Leonard Bolc, Jerzy Cytowski, Metody przeszukiwania heurystycznego tom 2, Państwowe Wydawnictwo Naukowe,Warszawa, 1989). 2.3 Metody przeszukiwania drzew Algorytmy przeszukiwania drzew mają różne zastosowanie i jedynie znając zastosowanie możemy wskazać, który algorytm będzie lepszy (chociaż często nawet znając zastosowanie w szczególnych przypadkach użycie innego algorytmu dałoby lepsze rezultaty). Poniższe algorytmy przeszukiwania są najbardziej popularnymi algorytmami przeszukiwania: - systematyczne przeszukiwanie jest to podstawowy algorytm przeszukiwania grafów. Celem algorytmu jest sprawdzenie wszystkich węzłów grafu. W czasie przeszukiwania zbiór sprawdzonych węzłów jest stale powiększany. Algorytm kończy się gdy żaden węzeł nie ma nie przeszukanych krawędzi. - przeszukiwanie wgłąb metoda ta sprowadza się do przeszukiwania przypominającego przeszukiwanie stosu z góry na dół do najgłębszego węzła, przy czym rozwijany jest tylko jeden potomek danego węzła. 15

16 Rys 1. Kolejność przeszukiwania węzłów w algorytmie przeszukiwania wgłąb. - Przeszukiwanie z nawracaniem (ang. backtracking) zmodyfikowane przeszukiwania wgłąb. Ekspansja badanego węzła jest zastąpiona jego rozszerzaniem (generowaniem pojedynczego potomka) i jeśli ten nowy węzeł nie spełnia kryterium końcowego to jest dalej rozszerzany. Gdy po kolejnych rozszerzeniach dany otrzymany węzeł spełnia kryterium lub nie ma już dalszych potomków to następuje nawracanie do najbliższego dla danego węzła przodka, dla którego możliwe jest wygenerowanie potomków. - Przeszukiwanie wszerz każdy węzeł na wyższym poziomie jest przeszukiwany wcześniej niż węzeł na poziomie niższym. Możliwe jest przeszukiwanie zarówno do określonego poziomu jak i całego drzewa gry. 16

17 Rys 2. Kolejność przeszukiwania węzłów w algorytmie przeszukiwania wszerz. Istnieje znacznie więcej algorytmów przeszukiwania, jednak celem tej pracy jest zaprezentowanie tylko tych najbardziej popularnych i zastosowanych w programie. 2.4 Porównanie algorytmów wgłąb i wrzesz Rodzaj zastosowanego algorytmu ma wpływa na szybkość znalezienia oczekiwanego węzła. Jednak szybkość znalezienia danego węzła jest zależna od konkretnego drzewa. Doskonale obrazują to poniższe przykłady. 17

18 Przykład 1. Porównanie algorytmów przeszukiwania wgłąb i wszerz na przykładzie danego drzewa. Mamy dane drzewo i szukamy pierwszego elementu spełniającego dany warunek: wartość węzła >=100. Dla poniższego drzewa szybciej znajdziemy szukany węzeł przy wybraniu algorytmu przeszukiwania wszerz. Rys 3. Szukanie węzła drzewa spełniającego warunek: węzeł >=100 przy wykorzystaniu algorytmu przeszukiwania wgłąb. 18

19 Rys 4. Szukanie węzła drzewa spełniającego warunek: węzeł >=100 przy wykorzystaniu algorytmu przeszukiwania wrzesz. 19

20 Przykład 2. Porównanie algorytmów przeszukiwania wgłąb i wszerz na przykładzie danego drzewa. W przykładzie tym zmieniamy tylko 2 elementy drzewa w porównaniu z drzewem z przykładu 1 (przy innym ułożeniu wartości węzła wystarczyłoby zmienić tylko wartość jednego węzła). Zmiana ta powoduje, że tym razem lepszym rozwiązaniem okaże się wybranie algorytmu wgłąb. Rys 5. Szukanie węzła drzewa spełniającego warunek: węzeł >=100 przy wykorzystaniu algorytmu przeszukiwania wgłąb. 20

21 Rys 6. Szukanie węzła drzewa spełniającego warunek: węzeł >=100 przy wykorzystaniu algorytmu przeszukiwania wrzesz. Powyższe 2 przykłady pokazują jak niewielka zmiana może wpłynąć w znaczący sposób na szybkość przeszukiwania drzewa. W ten sposób udowodnione zostało, że kluczowe znaczenie dla procesu przeszukiwania ma ułożenie węzłów. Dlatego podczas generowania ruchów w grze należy zwrócić uwagę na kolejność generowania ruchów. Oczywiście w programie kółko i krzyżyk skrócenie obliczeń jest spowodowane w inny sposób (właściwości algorytmu alfa-beta obcinanie, który został opisany w dalszej części pracy), jednak w powyższych dwóch przykładach chodziło o pokazanie jak ważna jest kolejności przeszukiwania. 21

22 2.5 Tworzenie algorytmów przeszukiwania w Java Metody rekurencyjne Rekurencja polega na wywoływanie przez funkcję samej siebie. Algorytmy rekurencyjne są bardzo często wykorzystywane podczas przeszukiwania drzewa gry jednak mają one pewną wadę jaką jest możliwość przepełnienia stosu czy też sterty pamięci. Wady tej nie posiadają metody iteracyjne. Rekurencja jest naturalna do zastosowań przeszukiwania wgłąb, jednak można ją również stosować do przeszukiwania wrzesz. Zaimplementowana klasa ma na celu pokazanie w jaki sposób można tworzyć drzewa binarne w Java, nie jest natomiast wykorzystana w programie głównym. Przykład 3. Przykład programu przeszukującego drzewo binarne rekurencyjną metodą wgłąb. Główna klasa programu służąca do przeszukania drzewa binarnego posiada następujące właściwości: -zwraca wartość największego węzła w drzewie. -zwraca wartość najmniejszego węzła w drzewie. -zwraca wartość największego węzła w drzewie, który spełnia dany warunek. -zwraca wartość najmniejszego węzła w drzewie, który spełnia dany warunek. -zwraca wartość danego węzła. Klasa posiada 4 pola danych: -wskaźnik do lewego potomka. -wskaźnik do prawego potomka. -klucz (nazwa węzła). -wartość (wartość). 22

23 Na jej podstawie można budować klasy wykorzystujące strukturę drzewa binarnego. Kod źródłowy 1. Klasa Tree, której obiekty tworzą strukturę drzewa z możliwością operacji na tym drzewie (przeszukiwanie). import java.io.*; public class Tree { /*do wyswietlania na konsoli*/ PrintWriter pw=new PrintWriter(System.out,true); /*wskaznik do lewego potomka*/ Tree lewy; /*wskaznik do prawego potomka*/ Tree prawy; /*nazwa wezla*/ String key; /*wartosc wezla*/ int value; /*konstruktor - inicjuje nazwe i wartosc wezla*/ public Tree(String k,int v) { key=k; value=v; /*zwraca wartosc danego wezla*/ public int getvalue(){ return value; /*zwraca nazwe wezla*/ public String getkey(){ return key; /*wyszukuje wartosc dla wezla o zadanej nazwie*/ public int getvalue(string klucz){ /*wartosc znaleziona, -1 oznacza ze jeszcze nie znaleziono szukanego wezla*/ int w=-1; //pw.println(getkey()); -wyswietla kolejne przeszukiwane klucze /*jesli znaleziono szukany wezel to zwroc wynik do rodzica*/ if(getkey().equals(klucz)){ return getvalue(); else{ /*sprawdzenie czy istnieje lewy potomek*/ if(lewy instanceof Tree){ /*pobranie wartosci szukanego wezla (lub -1) od lewego potomka*/ 23

24 w=lewy.getvalue(klucz); /*jesli znaleziono wynik zwrocenie go do rodzica - jesli rodzic okaze sie korzeniem rekurencja zakonczy sie zwracajac wynik dla funkcji wywolujacej szukanie */ if(w!=-1) return w; /*sprawdzenie czy istnieje prawy potomek*/ if(prawy instanceof Tree){ /*pobranie wartosci szukanego wezla (lub -1) od prawego potomka*/ w=prawy.getvalue(klucz); /*jesli znaleziono wynik zwrocenie go do rodzica - jesli rodzic okaze sie korzeniem rekurencja zakonczy sie zwracajac wynik dla funkcji wywolujacej szukanie */ if(w!=-1) return w; //else return -1; public int getminimumvalue(int min){ /*do przechowywania tymczasowych wynikow*/ int temp; //pw.println(""+getkey()); /*-wyswietla kolejne przeszukiwane wezly*/ /*jesli minimum do tej pory znalezione jest wieksze od wartosci danego wezla(potomka) to ustanowienie minimum=wartosc aktualnego wezla*/ if(min>getvalue()) min=getvalue(); if(lewy instanceof Tree){ /*jesli wartosc lewego potomka tego wezla jest mniejsza od do tej pory znalezionego minimum to ustaw minimum=wartosc_lewego_potomka*/ temp=lewy.getminimumvalue(min); if(temp<min) min=temp; if(prawy instanceof Tree){ /*jesli wartosc prawego potomka tego wezla jest mniejsza od do tej pory znalezionego minimum to ustaw minimum=wartosc_prawego_potomka*/ temp=prawy.getminimumvalue(min); if(temp<min) min=temp; /*NAWRACANIE - zwrocenie aktualnego minimum do przodka - jesli przodek jest korzeniem to zwrocenie znalezionego minimum */ return min; 24

25 public int getmaximumvalue(int max){ /*do przechowywania tymczasowych wynikow*/ int temp; //pw.println(""+getkey()); /*-wyswietla kolejne przeszukiwane wezly*/ /*jesli maximum do tej pory znalezione jest mniejsz od wartosci danego wezla(potomka) to ustanowienie maximum=wartosc aktualnego wezla*/ if(max<getvalue()) max=getvalue(); if(lewy instanceof Tree){ /*jesli wartosc lewego potomka tego wezla jest wieksza od do tej pory znalezionego maximum to ustaw maximum=wartosc_lewego_potomka*/ temp=lewy.getmaximumvalue(max); if(temp>max) max=temp; if(prawy instanceof Tree){ /*jesli wartosc prawego potomka tego wezla jest wieksza od do tej pory znalezionego maximum to ustaw maximum=wartosc_prawego_potomka*/ temp=prawy.getmaximumvalue(max); if(temp>max) max=temp; /*NAWRACANIE - zwrocenie aktualnego maximum do przodka - jesli przodek jest korzeniem to zwrocenie znalezionego maximum jako wyniku*/ return max; public int getminimumvalue(){ /*do przechowywania tymczasowych wynikow*/ int temp; int min=999999;//tu powinna byc najmniejsza liczba typu int //pw.println(""+getkey()); /*-wyswietla kolejne przeszukiwane wezly*/ /*jesli minimum do tej pory znalezione jest wieksze od wartosci danego wezla(potomka) to ustanowienie minimum=wartosc aktualnego wezla*/ if(min>getvalue()) min=getvalue(); if(lewy instanceof Tree){ /*jesli wartosc lewego potomka tego wezla jest mniejsza od do tej pory znalezionego minimum to ustaw minimum=wartosc_lewego_potomka*/ temp=lewy.getminimumvalue(); if(temp<min) min=temp; 25

26 if(prawy instanceof Tree){ /*jesli wartosc prawego potomka tego wezla jest mniejsza od do tej pory znalezionego minimum to ustaw minimum=wartosc_prawego_potomka*/ temp=prawy.getminimumvalue(); if(temp<min) min=temp; /*NAWRACANIE - zwrocenie aktualnego minimum do przodka - jesli przodek jest korzeniem to zwrocenie znalezionego minimum*/ return min; public int getmaximumvalue(){ /*do przechowywania tymczasowych wynikow*/ int temp; int max= ; //tu powinna byc najmniejsza wartosc typu int //pw.println(""+getkey()); /*-wyswietla kolejne przeszukiwane wezly*/ /*jesli maximum do tej pory znalezione jest mniejsz od wartosci danego wezla(potomka) to ustanowienie maximum=wartosc aktualnego wezla*/ if(max<getvalue()) max=getvalue(); if(lewy instanceof Tree){ /*jesli wartosc lewego potomka tego wezla jest wieksza od do tej pory znalezionego maximum to ustaw maximum=wartosc_lewego_potomka*/ temp=lewy.getmaximumvalue(); if(temp>max) max=temp; if(prawy instanceof Tree){ /*jesli wartosc prawego potomka tego wezla jest wieksza od do tej pory znalezionego maximum to ustaw maximum=wartosc_prawego_potomka*/ temp=prawy.getmaximumvalue(); if(temp>max) max=temp; /*NAWRACANIE - zwrocenie aktualnego maximum do przodka - jesli przodek jest korzeniem to zwrocenie znalezionego maximum jako wyniku */ return max; 26

27 Kod źródłowy2 Klasa tworząca oraz przeszukująca drzewo binarne przy wykorzystaniu klasy Tree. import java.io.*; public class Application1 { /*do wyswietlania na konsoli*/ PrintWriter pw=new PrintWriter(System.out,true); /*konstruktor*/ public Application1() { createandsearch(); /*start programu*/ public static void main(string[] args) { new Application1(); /*tworzy drzewo i wyszukuje wybrane elementy*/ public void createandsearch(){ Tree korzen=new Tree("a",100); korzen.lewy=new Tree("b",105); korzen.prawy=new Tree("c",111); korzen.lewy.lewy=new Tree("d",55); korzen.lewy.prawy=new Tree("e",90); korzen.prawy.lewy=new Tree("f",190); korzen.prawy.prawy=new Tree("g",223); korzen.lewy.lewy.lewy=new Tree("h",105); korzen.lewy.lewy.prawy=new Tree("i",99); korzen.lewy.prawy.lewy=new Tree("j",36); korzen.lewy.prawy.prawy=new Tree("k",41); korzen.prawy.lewy.lewy=new Tree("l",29); korzen.prawy.lewy.prawy=new Tree("m",55); korzen.prawy.prawy.lewy=new Tree("n",28); korzen.prawy.prawy.prawy=new Tree("o",36); //SZUKANIE WARTOSCI WEZLA O NAZWIE "o" 27

28 int wynik=korzen.getvalue("o"); /*wartosc -1 oznacza ze element szukany nie został znaleziony - obiekty przyjmuja wartosci dodatnie */ if(wynik==-1) pw.println("szukany obiekt nie istnieje"); else pw.println("wartosc szukanego obiektu o="+wynik); //KONIEC /*SZUKANIE najwiekszej wartosci wezla w drzewie - dodatkowo maxymalna wartosc musi spelniac warunek max>-1 */ pw.println("najwieksza wartosc wezla w drzewie ktora dodatkowo>-1, ="+korzen.getmaximumvalue(- 1)); /*SZUKANIE najmniejszej wartosci wezla w drzewie - dodatkowo minimalna wartosc musi spelniac warunek min<99999 */ pw.println("najmniejsza wartosc wezla w drzewie ktora dodatkowo <99999, ="+korzen.getminimumvalue(99999)); /*SZUKANIE najwiekszej wartosci wezla w drzewie */ pw.println("najwieksza wartosc wezla w drzewie="+korzen.getmaximumvalue()); /*SZUKANIE najmniejszej wartosci wezla w drzewie*/ pw.println("najmniejsza wartosc wezla w drzewie="+korzen.getminimumvalue()); 28

29 2.5.2 Metody iteracyjne Iteracja (działanie w pętli) to technika algorytmiczna polegająca na wykonaniu tej samej instrukcji dla n zmiennych (np. liczb, wartości logicznych etc.) Iteracja oszczędza czas programisty, który ten musiałby spędzić wpisując instrukcję n razy, zależnie od liczby zmiennych. Liczba powtórzeń w iteracji jest z góry określona lub zależy od spełnienia określonego warunku. W realizacji algorytmów iteracyjnych ważne jest prawidłowe określenie sposobu zakończenia działań. Można to zrobić za pomocą licznika, który odlicza kolejne kroki iteracji (liczbę powtórzeń). Iteracja jest naturalna do zastosowań przeszukiwania wgłąb, jednak można również za jej pomocą zaimplementować przeszukiwanie wrzesz. W programie kółko i krzyżyk do przeszukiwania drzewa gry zastosowana została iteracja dzięki wykorzystaniu pętli while(true){, z warunkiem wychodzenia z pętli w przypadku braku możliwości wykonania następnego ruchu, bądź spełnieniu warunku wartość_węzła<alfa, wartość_węzła>beta. Zasada jej działania opiera się na odwiedzeniu wszystkich węzłów na danym poziomie (z danej listy) oraz zapisywania do drugiej listy ich potomków. Następnie listy te są zamieniane i następuje kolejna iteracja. Kod źródłowy3. Klasa umożliwiająca iteracyjne przeszukiwanie drzewa binarnego metodą wrzesz. Klasa ta ma takie same działanie jak klasa z przykładu. import java.io.*; import java.util.*; public class Tree { /*do wyswietlania na konsoli*/ PrintWriter pw=new PrintWriter(System.out,true); Vector w1=new Vector(); 29

30 Vector w2=new Vector(); /*wskaznik do lewego potomka*/ Tree lewy; /*wskaznik do prawego potomka*/ Tree prawy; /*nazwa wezla*/ String key; /*wartosc wezla*/ int value; /*konstruktor - inicjuje nazwe i wartosc wezla*/ public Tree(String k,int v) { key=k; value=v; /*zwraca wartosc danego wezla*/ public int getvalue(){ return value; /*zwraca nazwe wezla*/ public String getkey(){ return key; private void copyvector(vector source,vector destination){ destination.clear(); Enumeration enum= source.elements(); while(enum.hasmoreelements()){ Object o=enum.nextelement(); destination.add(o); source.clear(); /*wyszukuje iteracyjnie wartosc dla wezla o zadanej nazwie*/ public int getvalue(string klucz){ if(getkey().equals(klucz)){ return getvalue(); w1.add(lewy); w1.add(prawy); while(true){ int n=w1.size(); for(int i=0;i<n;i++){ 30

31 Tree ob=(tree)w1.get(i); if(ob.getkey().equals(klucz)) return ob.getvalue(); if(ob.lewy instanceof Tree) w2.add(ob.lewy); if(ob.prawy instanceof Tree) w2.add(ob.prawy); //for if(w1.isempty()) return -1; copyvector(w2,w1); public int getminimumvalue(){ w1.clear(); w2.clear(); /*do przechowywania tymczasowych wynikow*/ int temp; int min=999999;//tu powinna byc najwieksza liczba typu int /*jesli minimum korzenia mniejsze od min to ustanowienie minimum=wartosc aktualnego wezla*/ if(min>getvalue()) min=getvalue(); /*inicjacja listy potomkami korzenia - od czegos trzeba zaczac*/ w1.add(lewy); w1.add(prawy); /*dopoki nie koniec elementow*/ while(true){ int n=w1.size(); for(int i=0;i<n;i++){ Tree ob=(tree)w1.get(i); /*jesli wartosc badanego wezla jest mniejsza od do tej pory znalezionego minimum to ustaw minimum=wartosc_wezla*/ if(ob.getvalue()<min) min=ob.getvalue(); /*jesli istnieja potomki danego wezla to dodanie ich do drugiej listy*/ if(ob.lewy instanceof Tree) w2.add(ob.lewy); if(ob.prawy instanceof Tree) w2.add(ob.prawy); //for if(w2.isempty()) break; copyvector(w2,w1); 31

32 /*jesli to nie znaleziono min wartosci wezla mniejszego od */ if(min==999999) return -1; return min; public int getmaximumvalue(){ w1.clear(); w2.clear(); /*do przechowywania tymczasowych wynikow*/ int temp; int max= ;//tu powinna byc najwieksza liczba typu int //pw.println(""+getkey()); /*-wyswietla kolejne przeszukiwane wezly*/ /*jesli maximum korzenia wieksze od min to ustanowienie maximum=wartosc aktualnego wezla*/ if(max<getvalue()) max=getvalue(); /*inicjacja listy potomkami korzenia - od czegos trzeba zaczac*/ w1.add(lewy); w1.add(prawy); /*dopoki nie koniec elementow*/ while(true){ int n=w1.size(); for(int i=0;i<n;i++){ Tree ob=(tree)w1.get(i); /*jesli wartosc badanego wezla jest wieksza od do tej pory znalezionego maximum to ustaw maximum=wartosc_wezla*/ if(ob.getvalue()>max) max=ob.getvalue(); /*Dodanie ewentualnych potomkow danego wezla do listy2*/ if(ob.lewy instanceof Tree) w2.add(ob.lewy); if(ob.prawy instanceof Tree) w2.add(ob.prawy); //for /*jesli brak wezlow to koniec szukania*/ if(w2.isempty()) break; /*zamiana list*/ copyvector(w2,w1); /*nie znaleziono max wartosci wezla wiekszej od */ if(max== ) return -1; return max; 32

33 Zaprezentowane powyżej sposoby przeszukiwania drzewa mają wspólną wadę i w zasadzie w takiej postaci nie są stosowane w algorytmach przeszukiwania drzewa gry. Wada ta przejawia się w tym, że całe drzewo jest przechowywane w pamięci. 33

34 ROZDZIAL III Charakterystyka programu kółko i krzyżyk 3.1 Zasady i odmiany gry Gra kółko i krzyżyk (Gomoku). Gra rozgrywana jest na planszy 19x19 pól. W grze mogą brać udział dwie osoby. Jedna ma krzyżyki, a druga kółka. Celem gry jest ułożenie na planszy pięciu kamieni (w niektórych programach do gry można ułożyć więcej - nazywa się to overline) swojego koloru w ciągłej linii, poziomo, pionowo, bądź na ukos. Pierwszy gracz, który tego dokona, zostaje zwycięzcą; jeśli nie uda się to nikomu (plansza zostanie zapełniona), następuje remis. Jeśli rozgrywany jest mecz na czas, przegrywa ta osoba, której skończy się on pierwszy. Pro Gomoku. Istnieje odmiana gry określana jako Pro Gomoku, w której występują następujące wymagania dotyczące początkowych ruchów na planszy: pierwszy ruch czarnych musi być na środku planszy. Pierwszy ruch białych może być gdziekolwiek. Drugi ruch czarnych musi być poza centralnym kwadratem 5x5, a pozostałe ruchy, zarówno czarnych jak i białych mogą być gdziekolwiek. Gomoku znane jest także jako kółko i krzyżyk do pięciu rozgrywane na kartce papieru w kratkę. Gomoku SWAP. Gomoku SWAP to najbardziej wyrównana opcja rozgrywki. Gracz 34

35 rozpoczynający wykonuje aż trzy ruchy - 2 czarnymi, 1 białymi, następnie drugi gracz wybiera kolor, którym chce grać. Kamienie można stawiać w dowolnym miejscu planszy. (Wielka Internetowa Encyklopedia Multimedialna). 3.2 Założenia gry przyjęte na potrzeby pracy Jak wynika z powyższego punktu istnieje wiele odmian Gomoku, z większymi bądź mniejszymi różnicami. Dlatego też dla celów tej pracy przyjęte zostały pewne założenia co do zasad gry. Celem gry jest ułożenie co najmniej pięciu znaków(kółka lub krzyżyka) w pionie, poziomie lub skosie. Gracz, który tego dokona zostaje zwycięzcą. Nie ma żadnych ograniczeń co do wykonywanych ruchów, poza tą że gracze wykonują posunięcia na przemian. 3.3 Opis interfejsu gry Program posiada interfejs, który poza możliwością samej gry, umożliwia liczne ustawienia, określające rodzaj graczy, zaczynającego, typ gracza(komputera), jak i możliwość zapisywania rozgrywek ich odtwarzania (z możliwością użycia czasu rzeczywistego), ustawienie zegarów limitujących czas gry dla każdego z graczy, jak i liczne ustawienia widoków gry. Program posiada także możliwość wyświetlania wartościowania ruchów po wykonaniu przeszukiwania drzewa gry dla danych ruchów lub po wstępnej analizie (wyborze ruchów kandydujących, które są brane pod uwagę przy przeszukiwaniu drzewa gry), jeśli wystąpi tzw. ruch wymuszony. 35

36 3.3.1 Rodzaj gry Menu AI zawiera możliwość definiowania rodzaju gry: -człowiek-człowiek. -człowiek-komputer. -komputer-człowiek. -komputer-komputer Jakość gracza-komputera Gra umożliwia zmianę konfiguracji gracza-komputera uzależnione od trzech czynników: a) poziom przeszukiwania drzewa gry - przeszukiwanie 1 poziomowe. - przeszukiwanie 5 poziomowe. - przeszukiwanie 6 poziomowe. Przeszukiwanie 5 i 6 poziomowe posiada ten sam mechanizm przeszukiwania, a różnica polega tylko na głębokości przeszukiwania. Przeszukiwanie 1 poziomowe polega na ocenie ruchu przez funkcję oceniająca. b) rodzaj funkcji oceniającej - silna funkcja oceniająca. - słabsza funkcja oceniająca. Podstawową różnicą między funkcjami jest lepsze wartościowanie w przypadku wystąpienia ruchów wymuszonych (dla słabszej funkcji w celu uniknięcia pomyłek należy wcześniej użyć sprawdzania ruchów wymuszonych). Wynika to z tego, że silna funkcja oceniająca przyznaje więcej punktów za znaki gracza w jednej linii, dzięki czemu unikany jest 36

37 również tzw. błąd krańca planszy, który objawia się często zaniżonym wynikiem dla pól znajdujących się blisko krawędzi planszy). Kolejna różnica przejawia się większym zróżnicowaniem punktacji ruchów dzięki czemu algorytm alfa-beta obcinanie dokonuje większej ilości cięć. c) siła ataku i obrony - bardzo silny atak. - silny atak. - atak mocniejszy od obrony. - Zrównoważony. - obrona mocniejsza od ataku. - silna obrona. - silny atak. - losowy zmienny. - losowy niezmienny. Gracz jest nastawiony na atak, na obronę lub jest zrównoważony. Dokonując wyboru ustawiamy typ gracza na całą grę. Gra umożliwia jednak stworzenie gracza, który będzie się zmieniał w sposób losowy w kolejnych ruchach, bądź gracza nie zmieniającego strategii, który będzie w sposób losowy ustalany na początku gry początku gry. Bez względu na typ gracza komputera, wbudowany jest niezależny system losowy, dzięki któremu komputer gra w różny sposób w różnych rozgrywkach. Dzięki temu gracz komputer zachowuje się w bardziej ludzki sposób. 37

38 3.3.3 Konfiguracja programu Poprzez konfigurację programu rozumiana jest tutaj możliwość ustawienia różnych rozmiarów(liczba wierszy i kolumn) planszy, wyglądu znaków (kółka i krzyżyk) jak i samej planszy (kolorystyki i rozmiarów: szerokości i wysokości planszy) Zapisywanie i odtwarzanie rozgrywek Program daje możliwość zapamiętania rozgrywek w formie: - kolejnych posunięć łącznie z nazwami graczy i rodzajów tych graczy (komputer lub człowiek). - zapamiętanie czasu wykonywanie poszczególnych ruchów. Dzięki zapisaniu rozgrywek możliwe jest ich odtworzenie w następujących formach: - podglądu sekwencji ruchów. - odtworzenia planszy gry. - odtworzenia w czasie rzeczywistym przebiegu gry. Mechanizm zapamiętywania daje możliwość analizy rozgrywek, a więc może posłużyć do nauki gry w kółko i krzyżyk, szczególnie dzięki obserwacji posunięć gracza wygrywającego. 3.4 Złożoność obliczeniowa i czas wykonywania Program umożliwia grę na różnych poziomach. Im więcej ruchów do przodu przewiduje tym więcej obliczeń musi wykonać w związku z czym wydłuża się czas potrzebny na wykonanie ruchu. 38

39 Poniższy wykres przedstawia dwie funkcje czasu wykonania ruchu w dwóch kolejnych grach z człowiekiem. Konfiguracja gry programu: - przewidywanie: 6 poziomów. - liczba pól w analizie drzewa gry: Czas (ms) czas1 czas Numer ruchu Rys 7. Wykresy funkcji czasu generowania rychów (dla 6 poziomów przeszukiwania i 11 pól branych pod uwagę w przeszukiwaniu). Czas wykonywania początkowych ruchów jest bardzo stabilny, natomiast w dalszej części widzimy już spore różnice czasu generowania ruchu. 39

40 Czas (ms) Liczba ruchów Numer ruchu Czas (ms) Liczba operacji Rys 8. Wykres funkcji czasu generowanie najlepszego ruchu i funkcji liczby obliczeń wykonanych do wygenerowania tego ruchu, w kolejnych ruchach. Dzięki zastosowaniu odmiennych wartości y można zauważyć że ilość obliczeń jest wprost proporcjonalna do czasu ich wykonywania. Dlatego bardzo ważne jest aby program był stabilny i wykonywał zawsze zbliżone ilości obliczeń, gdyż w przeciwnym razie może to powodować niedopuszczalny czas szukania najlepszego ruchu. Przy przewidywaniu wielu ruchów do przodu, wybranie do ostatecznego generowania ruchów o zaledwie kilka ruchów więcej może spowodować znaczny spadek szybkości wykonywania ruchów. 40

41 ROZDZIAŁ IV Tworzenie gry kółko i krzyżyk Poniższy rysunek przedstawia ukończony program kółko i krzyżyk będący celem tej pracy. Lewe okno zawiera wartościowanie ruchów. Na dole tego okna znajduje się czas szukania najlepszego ruchu oraz liczba węzłów przeszukanych na ostatnim poziomie drzewa. Czas generowania ostatniego ruchu wynosi 0, gdyż wystąpił ruch wymuszony, a ruchy takie zostają znalezione podczas wstępnego wartościowania. Liczba sprawdzonych węzłów wynosi 9, gdyż tyle ruchów wziętych zostałoby do analizy drzewa przeszukiwania. Napisz Ruch wymuszony określa w jaki sposób został znaleziony najlepszy ruch. Drugim możliwym komunikatem jest Alfa-beta obcinanie który oznacza, że do znalezienia najlepszego ruchu został wykorzystany algorytm stosowany do przeszukiwania drzewa - alfa-beta obcinanie. Rys 9. Wygląd programu kółko i krzyżyk w wersji na komputer PC. 41

42 4.1 Ogólnie o tworzenie gry. Tworzenie gry zostało podzielone na kilka etapów. a) zaplanowanie interfejsu gry (możliwych funkcji). Interfejs ten ulegał zmianom podczas tworzenia programu, jednak główne jego założenia pozostały takie same. b) przygotowanie interfejsu planszy i sposobu wyświetlania ( przyjęcie wartości na tablicy planszy dla gracza, przeciwnika i pustego pola). Na początku przyjęte zostały następujące wartości: -1 puste pole, 0 pole przeciwnika,1 pole gracza. W wyniku tworzenia gry okazało się, że zdecydowanie lepszym rozwiązaniem będzie przyjęcie takich wartości: 0 puste pole,-1 pole przeciwnika,1 pole gracza. Dzięki temu wartościowaniu łatwiej jest oceniać stan planszy i przyznawać premie. Dzieje się tak dlatego, że w drugim przypadku wartość pola jest tym większa im większa jest wartość danego pola dla gracza. Najlepsze pole dla gracza to jego znak za co ma 1 punkt, później pole puste 0, a najgorsze pole jest ze znakiem przeciwnika za co jest przyznawana wartość 1. Można w ten sposób uniknąć stosowanie konstrukcji: if(wartoscpola==znakgracza){ punkty+=1; else if(wartoscpola==znakprzeciwnika){ punkty -=1; Zamiast powyższego sprawdzania można zastosować: punkty+=znakgracza. Daje to wyraźne zmniejszenie ilości obliczeń. 42

43 Oczywiście w przypadku pierwszego sposobu można użyć powrotów np. gdy znak jest przeciwnika i zwrócenie wartości do tej pory uzyskanej (lub innej w zależności od założeń). Można również go ulepszyć przez zmianę sposobu sprawdzania pól w zależności od etapu gry. W pierwszym etapie gry będzie najwięcej pól pustych więc od ich sprawdzania należy rozpocząć. Jednak w dalszej części gry należy to zmienić, gdyż pól pustych zostaje coraz mniej. Jak zostało przedstawione powyżej czasem teoretycznie gorszy sposób może być bardziej wydajny, w zależności od kontekstu jego użycia. Gra powinna mieć elastyczny sposób zmiany jej rozmiaru. Należy od początku przewidzieć możliwość zmiany rozmiaru gry. Nie zrobienie tego spowoduje później duże trudności, szczególnie w zaawansowanej fazie tworzenia gry, gdy już zaimplementujemy algorytmy sztucznej inteligencji i generatory ruchów. Należy utworzyć mechanizm, który pozwoli automatycznie dokonywać zmian wszelkich wartości w tworzonych obiektach w zależności od rozmiarów planszy. Rodzaje gry ( rodzaje graczy ). Gra powinna umożliwiać wszystkie typy gry. a) człowiek - człowiek b) człowiek - komputer c) komputer - człowiek d) komputer - komputer b) napisanie mechanizmu umożliwiającego grę z komputerem (np. poprzez losowe generowanie ruchów przez komputer). c) napisanie funkcji oceniającej pozwalającej na grę komputera 43

44 z analizowaniem jednego ruchu. e) napisanie generacji możliwych kombinacji posunięć na kilka ruchów do przodu f) zastosowanie algorytmu alfa-beta obcinanie do punktu e i funkcji oceniającej pozwalającej na grę komputera z przewidywaniem kilku ruchów do przodu. g) Metody testowania gry - z człowiekiem - z drugim graczem-komputerem w trybie gry komputer-komputer przy różnych ustawieniach gry. - z innym programem, gdzie człowiek pełni funkcję pośrednika. - ustawianie kilku ruchów początkowych w kodzie źródłowym gry i sprawdzanie reakcji komputera na daną sytuację. Daje to duże możliwości w modelowaniu zachowań komputera, przez zmianę zmiennych(stałych) wartościujących lub przez zmianę algorytmu oceniającego. 4.2 Schemat działania gry Schemat tworzenie gry logicznej wykorzystującej sztuczną inteligencję przebiega według określonych schematów. Do schematów tych, opisanych w poniższych punktach należy: - sprawdzenie czy jest ruch wygrywającego - sprawdzenie czy przeciwnik ma ruch wygrywający - wybranie ruchów kandydujących - generacja ruchów gry i przeszukiwanie heurystyczne - zastosowanie funkcji oceniającej dany ruch 44

45 - wybranie najlepszego ruchu - sprawdzenie warunków kończących Powyższe punktu zostały rozwinięte poniżej Sprawdzanie czy gra zakończona Po każdym ruchu należy dokonać sprawdzenia czy któryś z graczy nie ustawił piątki, a tym samym czy jest zwycięzcą gry. W przypadku gdy gracz ułożył piątke gra jest zakończona i zostaje wyświetlony komunikat informujący o zwycięzcy gry a także zaznaczenie znaków, które doprowadziły do zwycięstwa Generowanie ruchu wymuszonego Ruch wymuszony następuje w dwóch sytuacjach: - wykonanie ruchu spowoduje zwycięstwo po tych ruchu lub jest pewne zwycięstwo w ruchu następnym - jeśli nie wykonamy danego ruchu przeciwnik wygra w następnym, bądź w 2 posunięciach Przed przeszukiwaniem drzewa gry należy przeszukać planszę w celu znalezienie przedstawionych powyżej sytuacji. Jeśli wystąpi dana sytuacja należy wykonać ruch w celu osiągnięcia zwycięstwa lub uniknięciu porażki. W czasie gry takich ruchów jest dość dużo. Dlatego stosowanie takiej metody jest konieczne z 2 powodów: - unika ewentualnych błędów (na skutek niedoskonałości metody przeszukiwanie drzewa gry i funkcji oceniającej) - skraca czas wykonania ruchu 45

46 4.2.3 Wybranie ruchów kandydujących Bardzo ważną rzeczą jest wybór ruchów kandydujących do przeszukiwanie drzewa gry. Wybranie wszystkich możliwych posunięć nie jest dobrym rozwiązaniem gdyż wpłynie to na wydłużenie czasu przeszukiwanie drzewa gry do czasów niedopuszczalnych przy odpowiednio głębokim przeszukiwaniu oraz dla dużej planszy. Dlatego należy stosować dobór ruchów do analizy. W programie będącym tematem tej pracy zastosowano dwu-stopniowy mechanizm doboru ruchów: - wybranie możliwych do wykonania ruchów w obrębie których w odległości co najwyżej dwóch pól znajduje się jakiś znak (kółko lub krzyżyk). Zastosowana została do tego tablica do której po wykonaniu każdego ruchu dodawani są sąsiedzi w odległości co najwyżej 2 pól, jeśli oczywiście już w tej tablicy się nie znajdują. Pole, które zostało zajęte przez ruch jest natomiast usuwane z listy ruchów do wstępnie przyjętych do analizy. - Ocenienie wszystkich pól z listy pól przyjętych w powyższym punkcie i ocenienie ich za pomocą funkcji heurystycznej (w tym programie funkcja oceniająca zastosowana do doboru pól kandydujących jest zarazem funkcją oceniającą zastosowaną przy przeszukiwaniu drzewa gry). Działanie tej funkcji heurystycznej zostanie opisane poniżej Przeszukiwania drzewa gry Przeszukiwanie drzewa gry stosuje się do znalezienia optymalnego ruchu. W programie zastosowany został algorytm alfa-beta obcinanie, który jest ulepszoną wersją algorytmu minimax. Alfa-beta obcinanie nie sprawdza węzłów 46

47 (stosując tak zwane obcięcia), które nie mają wpływu na końcowy wynik minimaxowania. Oczywiście nie zawsze uzyskany zostaje najlepszy ruch (szczególnie, że nawet dwaj bardzo dobrzy gracze często nie wykonali by tego samego ruchu w danej sytuacji, więc trudno jest wskazać, który ruch w danej sytuacji jest rzeczywiście najlepszy i czy w ogóle jest taka możliwość). Przeszukiwanie drzewa polega na generacji ruchów i ich wartościowaniu przez funkcje oceniającą. Następnie zastosowany jest algorytm alfa-beta obcinanie do uzyskania wyników na najwyższym poziomie drzewa gry i w ten sposób wybrany zostaje najlepszy ruch. Kolejność sprawdzania ruchu ma bardzo duże znaczenie na szybkość przeszukiwania, nie ma natomiast wpływu na sam wynik (chyba, że stosuje się mechanizm ograniczenia czasowego, który przerywa przeszukiwanie w momencie przekroczenia limitu czasowego) Funkcja oceniająca wartościowanie danych posunięć Działanie funkcji oceniającej polega na przydzieleniu wartości liczbowej badanemu ruchowi. Jej znaczenie ma decydujący wpływ na siłę programu. W zasadzie pisanie gier logicznych bazujących na sztucznej inteligencji różni się właśnie funkcją oceniającą (także generacją ruchów właściwą dla danej gry). W prezentowanym programie zastosowane została dwie funkcje oceniające zarówno do wyboru pól do przeszukiwania, jak i do oceny ruchów przy przeszukiwaniu Zmienność algorytmu przeszukiwania oraz funkcji oceniającej Ważną cechą programu grającego jest jego zmienność. Gdyby tego nie było program zawsze grałby tak samo dla danych ustawień planszy co jest 47

48 efektem niepożądanym. Dlatego stosuje się techniki pozwalające uzyskać różne posunięcia gracza komputera dla danych układów planszy (oczywiście ruchy muszą być dobre). Metody zastosowane w programie do zmienności gry są: - zmiana wartościowanie w funkcji oceniającej. - zmiana wartości mnożnika na poszczególnych poziomach drzewa gry. Zmiany wartości mogą następować na różne sposoby: - losowy. - cyklicznie zmiany wprowadzone np. za pomocą parametrów. Ciekawą rzeczą jest, że przy ustawieniach przy których program bardzo dobrze radził sobie z użytym do testów Carbon Gomoku na poziomie 6 (zwycięstwo), grał przeciętnie z Carbon na poziomie Najbardziej znane algorytmy przeszukiwania drzewa gry Zbiory podczas przeszukiwań są najczęściej reprezentowane w postaci listy, stosu lub kolejki. Jeżeli lista jest stosem, to strategia przeszukiwania nazywana jest wgłąb. Nazwa podkreśla kolejność przeszukiwanych węzłów. Pojedyncza droga badana jest tak długo, aż jej ostatni element nie zostanie określony jako węzeł celu lub końcowy. Przeszukiwanie prowadzone jest zawsze od ostatnio sprawdzanego węzła, który ma niewykorzystane krawędzie. Strategia wgłąb może być nieskuteczna, gdy zostanie zastosowana dla dużych grafów, a szczególnie dla grafów o nieskończonej głębokości. W tym przypadku wybieranie grafów o coraz większej głębokości może być nieskuteczne, nawet w przypadku gdy węzeł celu miał skończoną głębokość. Z tego powodu omawiana strategia jest stosowana ze stosowaniem kontroli głębokości. Gdy głębokość spełnia własność końcową, w strategii w wgłąb następuje powrót. 48

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 5 Podstawy programowania 2 Temat: Drzewa binarne Przygotował: mgr inż. Tomasz Michno 1 Wstęp teoretyczny Drzewa są jedną z częściej wykorzystywanych struktur danych. Reprezentują

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Heurystyki. Strategie poszukiwań

Heurystyki. Strategie poszukiwań Sztuczna inteligencja Heurystyki. Strategie poszukiwań Jacek Bartman Zakład Elektrotechniki i Informatyki Instytut Techniki Uniwersytet Rzeszowski DLACZEGO METODY PRZESZUKIWANIA? Sztuczna Inteligencja

Bardziej szczegółowo

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Paweł Szołtysek 12 czerwca 2008 Streszczenie Planowanie produkcji jest jednym z problemów optymalizacji dyskretnej,

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno Instrukcja laboratoryjna 6 Podstawy programowania 2 Temat: Funkcje i procedury rekurencyjne Przygotował: mgr inż. Tomasz Michno Wstęp teoretyczny Rekurencja (inaczej nazywana rekursją, ang. recursion)

Bardziej szczegółowo

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski Algorytmy i struktury danych Wykład 5: Drzewa Dr inż. Paweł Kasprowski pawel@kasprowski.pl Drzewa Struktury przechowywania danych podobne do list ale z innymi zasadami wskazywania następników Szczególny

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

Bardziej szczegółowo

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

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

Programowanie genetyczne, gra SNAKE

Programowanie genetyczne, gra SNAKE STUDENCKA PRACOWNIA ALGORYTMÓW EWOLUCYJNYCH Tomasz Kupczyk, Tomasz Urbański Programowanie genetyczne, gra SNAKE II UWr Wrocław 2009 Spis treści 1. Wstęp 3 1.1. Ogólny opis.....................................

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Zadanie do wykonania 1) Utwórz na pulpicie katalog w formacie Imię nazwisko, w którym umieść wszystkie pliki związane z

Bardziej szczegółowo

Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC.

Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC. 1 Moduł OPC Moduł OPC pozwala na komunikację z serwerami OPC pracującymi w oparciu o model DA (Data Access). Dzięki niemu można odczytać stan obiektów OPC (zmiennych zdefiniowanych w programie PLC), a

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

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

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język

Bardziej szczegółowo

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4 Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.

Bardziej szczegółowo

Definicje. Algorytm to:

Definicje. Algorytm to: Algorytmy Definicje Algorytm to: skończony ciąg operacji na obiektach, ze ściśle ustalonym porządkiem wykonania, dający możliwość realizacji zadania określonej klasy pewien ciąg czynności, który prowadzi

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

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

Scenariusz lekcji opartej na programie Program nauczania informatyki w gimnazjum DKW-4014-87/99 Scenariusz lekcji opartej na programie Program nauczania informatyki w gimnazjum DKW-4014-87/99 Techniki algorytmiczne realizowane przy pomocy grafiki żółwia w programie ELI 2,0. Przedmiot: Informatyka

Bardziej szczegółowo

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby Scenariusz zajęć Moduł VI Projekt Gra logiczna zgadywanie liczby Moduł VI Projekt Gra logiczna zgadywanie liczby Cele ogólne: przypomnienie i utrwalenie poznanych wcześniej poleceń i konstrukcji języka

Bardziej szczegółowo

Dodatkowo planowane jest przeprowadzenie oceny algorytmów w praktycznym wykorzystaniu przez kilku niezależnych użytkowników ukończonej aplikacji.

Dodatkowo planowane jest przeprowadzenie oceny algorytmów w praktycznym wykorzystaniu przez kilku niezależnych użytkowników ukończonej aplikacji. Spis Treści 1. Wprowadzenie... 2 1.1 Wstęp... 2 1.2 Cel pracy... 2 1.3 Zakres pracy... 2 1.4 Użyte technologie... 2 1.4.1 Unity 3D... 3 2. Sztuczna inteligencja w grach komputerowych... 4 2.1 Zadanie sztucznej

Bardziej szczegółowo

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

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z

Bardziej szczegółowo

1 Moduł Inteligentnego Głośnika 3

1 Moduł Inteligentnego Głośnika 3 Spis treści 1 Moduł Inteligentnego Głośnika 3 1.1 Konfigurowanie Modułu Inteligentnego Głośnika........... 3 1.1.1 Lista elementów Modułu Inteligentnego Głośnika....... 3 1.1.2 Konfigurowanie elementu

Bardziej szczegółowo

Aplikacje mobilne. Pliki zasobów, grafiki, menu, podpinanie zdarzeń. dr Tomasz Jach Instytut Informatyki, Uniwersytet Śląski

Aplikacje mobilne. Pliki zasobów, grafiki, menu, podpinanie zdarzeń. dr Tomasz Jach Instytut Informatyki, Uniwersytet Śląski Aplikacje mobilne Pliki zasobów, grafiki, menu, podpinanie zdarzeń dr Tomasz Jach Instytut Informatyki, Uniwersytet Śląski Pliki zasobów Jak już robiliśmy wcześniej sporo rzeczy w Androidzie umieszczamy

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

ATOLL. Wykonali: Aleksandra Kuchta, Łukasz Wójcik, Sztuczna Inteligencja, Semestr trzeci, Kierunek Informatyka, Wydział Informatyki i Zarządzania,

ATOLL. Wykonali: Aleksandra Kuchta, Łukasz Wójcik, Sztuczna Inteligencja, Semestr trzeci, Kierunek Informatyka, Wydział Informatyki i Zarządzania, Sztuczna Inteligencja, Semestr trzeci, Kierunek Informatyka, Wydział Informatyki i Zarządzania, Politechnika Poznańska ATOLL Wykonali: Aleksandra Kuchta, WFT, PP, nr 76690, rok IV Łukasz Wójcik, WIiZ,

Bardziej szczegółowo

Polcode Code Contest PHP-10.09

Polcode Code Contest PHP-10.09 Polcode Code Contest PHP-10.09 Przedmiotem konkursu jest napisanie w języku PHP programu, którego wykonanie spowoduje rozwiązanie zadanego problemu i wyświetlenie rezultatu. Zadanie konkursowe Celem zadania

Bardziej szczegółowo

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 Wykład 8 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 sformułowanie problemu przegląd drzewa poszukiwań przykłady problemów wybrane narzędzia programistyczne J. Cichoń, P. Kobylański

Bardziej szczegółowo

Metody przeszukiwania

Metody przeszukiwania Metody przeszukiwania Co to jest przeszukiwanie Przeszukiwanie polega na odnajdywaniu rozwiązania w dyskretnej przestrzeni rozwiązao. Zwykle przeszukiwanie polega na znalezieniu określonego rozwiązania

Bardziej szczegółowo

ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe

ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny, Politechnika Śląska www.imio.polsl.pl METODY HEURYSTYCZNE ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe opracował:

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania

REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania Autor: Anna Nowak Promotor: dr inż. Jan Kowalski Kategorie: gra logiczna Słowa kluczowe: Sudoku, generowanie plansz, algorytmy,

Bardziej szczegółowo

Programowanie genetyczne - gra SNAKE

Programowanie genetyczne - gra SNAKE PRACOWNIA Z ALGORYTMÓW EWOLUCYJNYCH Tomasz Kupczyk, Tomasz Urbański Programowanie genetyczne - gra SNAKE II UWr Wrocław 2009 Spis treści 1. Wstęp 3 1.1. Ogólny opis.....................................

Bardziej szczegółowo

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja I

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja I Zespół TI Instytut Informatyki Uniwersytet Wrocławski ti@ii.uni.wroc.pl http://www.wsip.com.pl/serwisy/ti/ Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja I Rozkład zgodny

Bardziej szczegółowo

Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/

Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/ STL, czyli o co tyle hałasu W świecie programowania C++, hasło STL pojawia się nieustannie i zawsze jest o nim głośno... często początkujące osoby, które nie znają STL-a pytają się co to jest i czemu go

Bardziej szczegółowo

Programowanie 3 - Funkcje, pliki i klasy

Programowanie 3 - Funkcje, pliki i klasy Instytut Informatyki Uniwersytetu Śląskiego Laborki funkcja; parametry funkcji; typ zwracany; typ void; funkcje bez parametrów; napis.length() - jako przykład funkcji. Zadania funkcja dodająca dwie liczby;

Bardziej szczegółowo

Matematyka dyskretna - 7.Drzewa

Matematyka dyskretna - 7.Drzewa Matematyka dyskretna - 7.Drzewa W tym rozdziale zajmiemy się drzewami: specjalnym przypadkiem grafów. Są one szczególnie przydatne do przechowywania informacji, umożliwiającego szybki dostęp do nich. Definicja

Bardziej szczegółowo

Dokumentacja projektu Makao karciana gra sieciowa

Dokumentacja projektu Makao karciana gra sieciowa Dokumentacja projektu Makao karciana gra sieciowa 1 Spis treści Specyfikacja wymagań...3 Diagram przypadków użycia...4 Scenariusze...5 Diagramy sekwencji...6 Diagram modelu domeny...8 Projekt graficznego

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów

Bardziej szczegółowo

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja II

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja II Zespół TI Instytut Informatyki Uniwersytet Wrocławski ti@ii.uni.wroc.pl http://www.wsip.com.pl/serwisy/ti/ Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja II Rozkład wymagający

Bardziej szczegółowo

Narzędzia AI. Jakub Wróblewski jakubw@pjwstk.edu.pl Pokój 312. http://zajecia.jakubw.pl SZTUCZNA INTELIGENCJA (ARTIFICIAL INTELLIGENCE)

Narzędzia AI. Jakub Wróblewski jakubw@pjwstk.edu.pl Pokój 312. http://zajecia.jakubw.pl SZTUCZNA INTELIGENCJA (ARTIFICIAL INTELLIGENCE) Narzędzia AI Jakub Wróblewski jakubw@pjwstk.edu.pl Pokój 312 http://zajecia.jakubw.pl SZTUCZNA INTELIGENCJA (ARTIFICIAL INTELLIGENCE) Nauka o maszynach realizujących zadania, które wymagają inteligencji

Bardziej szczegółowo

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI Arytmetyka komputera Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka Opracował: Kamil Kowalski klasa III TI Spis treści 1. Jednostki informacyjne 2. Systemy liczbowe 2.1. System

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i struktury danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 5: Algorytmy

Bardziej szczegółowo

Programowanie w VB Proste algorytmy sortowania

Programowanie w VB Proste algorytmy sortowania Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi Systemy baz danych w zarządzaniu przedsiębiorstwem W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi Proces zarządzania danymi Zarządzanie danymi obejmuje czynności: gromadzenie

Bardziej szczegółowo

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

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH Temat : Drzewa zrównoważone, sortowanie drzewiaste Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/

Bardziej szczegółowo

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania: ANALIZA ALGORYTMÓW Analiza algorytmów polega między innymi na odpowiedzi na pytania: 1) Czy problem może być rozwiązany na komputerze w dostępnym czasie i pamięci? 2) Który ze znanych algorytmów należy

Bardziej szczegółowo

Podręcznik użytkownika programu. Ceremonia 3.1

Podręcznik użytkownika programu. Ceremonia 3.1 Podręcznik użytkownika programu Ceremonia 3.1 1 Spis treści O programie...3 Główne okno programu...4 Edytor pieśni...7 Okno ustawień programu...8 Edycja kategorii pieśni...9 Edytor schematów slajdów...10

Bardziej szczegółowo

1 Wielokrotne powtarzanie tych samych operacji

1 Wielokrotne powtarzanie tych samych operacji 1 Wielokrotne powtarzanie tych samych operacji Zadanie 1. roszę porównać następujące programy(efekt działania każdego z nich jest takisam). rzykład 1 przedstawia najbardziej typowy zapis, powodujący wykonanie

Bardziej szczegółowo

Programowanie komputerów

Programowanie komputerów Programowanie komputerów Wykład 1-2. Podstawowe pojęcia Plan wykładu Omówienie programu wykładów, laboratoriów oraz egzaminu Etapy rozwiązywania problemów dr Helena Dudycz Katedra Technologii Informacyjnych

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Pracownia internetowa w każdej szkole (edycja Jesień 2007) Instrukcja numer D1/05_03/Z Pracownia internetowa w każdej szkole (edycja Jesień 2007) Opiekun pracowni internetowej cz. 1 Ręczne zakładanie kont użytkowników (D1) Jak ręcznie założyć konto w systemie

Bardziej szczegółowo

Wykład 6. Drzewa poszukiwań binarnych (BST)

Wykład 6. Drzewa poszukiwań binarnych (BST) Wykład 6 Drzewa poszukiwań binarnych (BST) 1 O czym będziemy mówić Definicja Operacje na drzewach BST: Search Minimum, Maximum Predecessor, Successor Insert, Delete Struktura losowo budowanych drzew BST

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Program OBRAZY-SŁOWA-DŹWIĘKI - wspomaganie rozwoju, terapii, komunikowania się. Spis treści

Program OBRAZY-SŁOWA-DŹWIĘKI - wspomaganie rozwoju, terapii, komunikowania się. Spis treści Program OBRAZY-SŁOWA-DŹWIĘKI - wspomaganie rozwoju, terapii, komunikowania się Spis treści 1. Wprowadzenie 1 2. Wymagania sprzętowe i instalacja programu 1 3. Obsługa programu 2 4. Zakładka PACJENT 3 5.

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

UNIFON podręcznik użytkownika

UNIFON podręcznik użytkownika UNIFON podręcznik użytkownika Spis treści: Instrukcja obsługi programu Unifon...2 Instalacja aplikacji Unifon...3 Korzystanie z aplikacji Unifon...6 Test zakończony sukcesem...9 Test zakończony niepowodzeniem...14

Bardziej szczegółowo

Algorytmy genetyczne

Algorytmy genetyczne Algorytmy genetyczne Motto: Zamiast pracowicie poszukiwać najlepszego rozwiązania problemu informatycznego lepiej pozwolić, żeby komputer sam sobie to rozwiązanie wyhodował! Algorytmy genetyczne służą

Bardziej szczegółowo

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS PROBLEMY TECHNICZNE Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS Jeżeli stwierdziłeś występowanie błędów lub problemów podczas pracy z programem DYSONANS możesz skorzystać

Bardziej szczegółowo

10. Wstęp do Teorii Gier

10. Wstęp do Teorii Gier 10. Wstęp do Teorii Gier Definicja Gry Matematycznej Gra matematyczna spełnia następujące warunki: a) Jest co najmniej dwóch racjonalnych graczy. b) Zbiór możliwych dezycji każdego gracza zawiera co najmniej

Bardziej szczegółowo

5.9 Modyfikacja gry Kółko i krzyżyk

5.9 Modyfikacja gry Kółko i krzyżyk 274 5.9 Modyfikacja gry Kółko i krzyżyk Zajmiemy się obecnie grą, której plansza jest widoczna na rys. 5.17 (aplikacja Do15.bpr). Rysunek 5.17: Plansza do gry śuma do 15 Jej celem jest zaznaczenie cyfr,

Bardziej szczegółowo

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej

Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej Wybrane wymagania dla informatyki w gimnazjum i liceum z podstawy programowej Spis treści Autor: Marcin Orchel Algorytmika...2 Algorytmika w gimnazjum...2 Algorytmika w liceum...2 Język programowania w

Bardziej szczegółowo

QUERY język zapytań do tworzenia raportów w AS/400

QUERY język zapytań do tworzenia raportów w AS/400 QUERY język zapytań do tworzenia raportów w AS/400 Dariusz Bober Katedra Informatyki Politechniki Lubelskiej Streszczenie: W artykule przedstawiony został język QUERY, standardowe narzędzie pracy administratora

Bardziej szczegółowo

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

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl Komputerowe Systemy Przemysłowe: Modelowanie - UML Arkadiusz Banasik arkadiusz.banasik@polsl.pl Plan prezentacji Wprowadzenie UML Diagram przypadków użycia Diagram klas Podsumowanie Wprowadzenie Języki

Bardziej szczegółowo

11.6 Klasa do obsługi liczb wymiernych

11.6 Klasa do obsługi liczb wymiernych 246 11.6 Klasa do obsługi liczb wymiernych Klasa do obsługi liczb wymiernych, którą teraz zaprojektujemy w celu zilustrowania korzyści wynikających z programowania obiektowego, służy do zgrabnego wykonywania

Bardziej szczegółowo

5.4. Tworzymy formularze

5.4. Tworzymy formularze 5.4. Tworzymy formularze Zastosowanie formularzy Formularz to obiekt bazy danych, który daje możliwość tworzenia i modyfikacji danych w tabeli lub kwerendzie. Jego wielką zaletą jest umiejętność zautomatyzowania

Bardziej szczegółowo

METODY SZTUCZNEJ INTELIGENCJI 2 Opis projektu

METODY SZTUCZNEJ INTELIGENCJI 2 Opis projektu Kamil Figura Krzysztof Kaliński Bartek Kutera METODY SZTUCZNEJ INTELIGENCJI 2 Opis projektu Porównanie metod uczenia z rodziny TD z algorytmem Layered Learning na przykładzie gry w warcaby i gry w anty-warcaby

Bardziej szczegółowo

SCENARIUSZ LEKCJI. TEMAT LEKCJI: O czym mówią współczynniki funkcji liniowej? - wykorzystanie arkusza kalkulacyjnego na lekcjach matematyki

SCENARIUSZ LEKCJI. TEMAT LEKCJI: O czym mówią współczynniki funkcji liniowej? - wykorzystanie arkusza kalkulacyjnego na lekcjach matematyki SCENARIUSZ LEKCJI OPRACOWANY w RAMACH PROJEKTU: INFORMATYKA MÓJ SPOSÓB NA POZNANIE i OPISANIE ŚWIATA. PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH Autorzy scenariusza:

Bardziej szczegółowo

WPROWADZENIE DO JĘZYKA JAVA

WPROWADZENIE DO JĘZYKA JAVA WPROWADZENIE DO JĘZYKA JAVA programowanie obiektowe KRÓTKA HISTORIA JĘZYKA JAVA KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny języka java. Pierwsza nazwa Oak (dąb). KRÓTKA HISTORIA JĘZYKA JAVA 1991 - narodziny

Bardziej szczegółowo

Temat 1: Pojęcie gry, gry macierzowe: dominacje i punkty siodłowe

Temat 1: Pojęcie gry, gry macierzowe: dominacje i punkty siodłowe Temat 1: Pojęcie gry, gry macierzowe: dominacje i punkty siodłowe Teorię gier można określić jako teorię podejmowania decyzji w szczególnych warunkach. Zajmuje się ona logiczną analizą sytuacji konfliktu

Bardziej szczegółowo

programowanie w oparciu o platformę netbeans w praktyce

programowanie w oparciu o platformę netbeans w praktyce programowanie w oparciu o platformę netbeans w praktyce Adam Kędziora. Netbeans innovators grants. Mechanizm lookup jako panorama firm. Węzły w netbeans. Mechanizm lookup jako torba z narzędziami. Dwa

Bardziej szczegółowo

Algorytm. Krótka historia algorytmów

Algorytm. Krótka historia algorytmów Algorytm znaczenie cybernetyczne Jest to dokładny przepis wykonania w określonym porządku skończonej liczby operacji, pozwalający na rozwiązanie zbliżonych do siebie klas problemów. znaczenie matematyczne

Bardziej szczegółowo

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java: otwórz okienko Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU klasy wewnętrzne, lokalne i anonimowe biblioteka AWT zestaw Swing JFrame JPanel komponenty obsługa zdarzeń

Bardziej szczegółowo

Podstawowe elementy GUI cz. 2 i 3 - zadania

Podstawowe elementy GUI cz. 2 i 3 - zadania Podstawowe elementy GUI cz. 2 i 3 - zadania Jak już robiliśmy wcześniej sporo rzeczy w Androidzie umieszczamy w plikach xml (np. strings.xml). Jest to dobra praktyka, w plikach zasobów możemy umieszczać

Bardziej szczegółowo

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH Transport, studia I stopnia rok akademicki 2012/2013 Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska Adam Wosatko Ewa Pabisek Pojęcie

Bardziej szczegółowo

Magiczny ogródek INSTRUKCJA GRA DLA 2 OSÓB WIEK DZIECKA 4+

Magiczny ogródek INSTRUKCJA GRA DLA 2 OSÓB WIEK DZIECKA 4+ Magiczny ogródek INSTRUKCJA GRA DLA 2 OSÓB WIEK DZIECKA 4+ Elementy gry: Plansza z ramką z dziewięcioma polami z Mi 1 sztuka Plansza z ramką z dziewięcioma polami z Ryśkiem 1 sztuka Karty z kwiatkami 72

Bardziej szczegółowo

Tworzenie prezentacji w MS PowerPoint

Tworzenie prezentacji w MS PowerPoint Tworzenie prezentacji w MS PowerPoint Program PowerPoint dostarczany jest w pakiecie Office i daje nam możliwość stworzenia prezentacji oraz uatrakcyjnienia materiału, który chcemy przedstawić. Prezentacje

Bardziej szczegółowo

Diagramy związków encji. Laboratorium. Akademia Morska w Gdyni

Diagramy związków encji. Laboratorium. Akademia Morska w Gdyni Akademia Morska w Gdyni Gdynia 2004 1. Podstawowe definicje Baza danych to uporządkowany zbiór danych umożliwiający łatwe przeszukiwanie i aktualizację. System zarządzania bazą danych (DBMS) to oprogramowanie

Bardziej szczegółowo

Klasy i obiekty cz II

Klasy i obiekty cz II Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Klasy i obiekty cz II Hermetyzacja, mutatory, akcesory, ArrayList Rozwijamy aplikację Chcemy, aby obiekty klasy

Bardziej szczegółowo

Rozdział ten zawiera informacje na temat zarządzania Modułem Modbus TCP oraz jego konfiguracji.

Rozdział ten zawiera informacje na temat zarządzania Modułem Modbus TCP oraz jego konfiguracji. 1 Moduł Modbus TCP Moduł Modbus TCP daje użytkownikowi Systemu Vision możliwość zapisu oraz odczytu rejestrów urządzeń, które obsługują protokół Modbus TCP. Zapewnia on odwzorowanie rejestrów urządzeń

Bardziej szczegółowo

Sposoby sprawdzania osiągnięć edukacyjnych uczniów

Sposoby sprawdzania osiągnięć edukacyjnych uczniów 1 Sposoby sprawdzania osiągnięć edukacyjnych uczniów Dla uczniów zainteresowanych przygotowywane są ćwiczenia trudniejsze, aby mogli wykazać się swoimi umiejętnościami i wiedzą. Uczniom mającym trudności

Bardziej szczegółowo

Algorytmy przeszukiwania

Algorytmy przeszukiwania Algorytmy przeszukiwania Przeszukiwanie liniowe Algorytm stosowany do poszukiwania elementu w zbiorze, o którym nic nie wiemy. Aby mieć pewność, że nie pominęliśmy żadnego elementu zbioru przeszukujemy

Bardziej szczegółowo

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Studia podyplomowe dla nauczycieli INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Przedmiot JĘZYKI PROGRAMOWANIA DEFINICJE I PODSTAWOWE POJĘCIA Autor mgr Sławomir Ciernicki 1/7 Aby

Bardziej szczegółowo

Podręcznik użytkownika Obieg dokumentów

Podręcznik użytkownika Obieg dokumentów Podręcznik użytkownika Obieg dokumentów Opracowany na potrzeby wdrożenia dla Akademii Wychowania Fizycznego im. Eugeniusza Piaseckiego w Poznaniu W ramach realizacji projektu: Uczelnia jutra wdrożenie

Bardziej szczegółowo

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT

KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT Temat: Zaimplementować system kryptografii wizualnej http://www.cacr.math.uwaterloo.ca/~dstinson/visual.html Autor: Tomasz Mitręga NSMW Grupa 1 Sekcja 2 1. Temat projektu

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 4, część 1 1 Język JAVA podstawy Plan wykładu: 1. Podstawy modelowania obiektowego 2. Konstruktory 3. Dziedziczenie, związki pomiędzy klasami, UML 4. Polimorfizm 5. Klasy abstrakcyjne

Bardziej szczegółowo

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wyjątki Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut. Wydaje się, że żaden użytkownik oprogramowania nie lubi, kiedy stosowany program nagle zawiesza się,

Bardziej szczegółowo

Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik

Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik Dlaczego obiekty Załóżmy, że mamy napisać program o następującej specyfikacji: 1. Program wyświetla

Bardziej szczegółowo