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

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Przeszukiwanie przestrzeni rozwiązań, szukanie na ślepo, wszerz, w głąb. Spis treści: 1. Wprowadzenie 3. str. 1.1 Krótki Wstęp

Bardziej szczegółowo

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

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce. POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie

Bardziej szczegółowo

Wstęp do Sztucznej Inteligencji

Wstęp do Sztucznej Inteligencji Wstęp do Sztucznej Inteligencji Rozwiązywanie problemów-i Joanna Kołodziej Politechnika Krakowska Wydział Fizyki, Matematyki i Informatyki Rozwiązywanie problemów Podstawowe fazy: Sformułowanie celu -

Bardziej szczegółowo

Rozwiązywanie problemów metodą przeszukiwania

Rozwiązywanie problemów metodą przeszukiwania Rozwiązywanie problemów metodą przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Reprezentacja problemu w przestrzeni stanów Jedną z ważniejszych metod sztucznej

Bardziej szczegółowo

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych ELEMENTY SZTUCZNEJ INTELIGENCJI Laboratorium nr 9 PRZESZUKIWANIE GRAFÓW Z

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

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 20.11.2002 Algorytmy i Struktury Danych PIŁA ZŁOŻONE STRUKTURY DANYCH C za s tw or ze nia s tr uk tur y (m s ) TWORZENIE ZŁOŻONYCH STRUKTUR DANYCH: 00 0

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

3. MINIMAX. Rysunek 1: Drzewo obrazujące przebieg gry.

3. MINIMAX. Rysunek 1: Drzewo obrazujące przebieg gry. 3. MINIMAX. Bardzo wygodną strukturą danych pozwalającą reprezentować stan i przebieg gry (szczególnie gier dwuosobowych) jest drzewo. Węzły drzewa reprezentują stan gry po wykonaniu ruchu przez jednego

Bardziej szczegółowo

W powyższym kodzie utworzono wyliczenie dni tygodnia.

W powyższym kodzie utworzono wyliczenie dni tygodnia. Typ wyliczeniowy (zwane również enumeration lub enum) jest to typ danych składający się z zestawu nazwanych wartości. Do zmiennej, która została zadeklarowana jako typ wyliczeniowy może być przypisane

Bardziej szczegółowo

Algorytmy sztucznej inteligencji

Algorytmy sztucznej inteligencji www.math.uni.lodz.pl/ radmat Przeszukiwanie z ograniczeniami Zagadnienie przeszukiwania z ograniczeniami stanowi grupę problemów przeszukiwania w przestrzeni stanów, które składa się ze: 1 skończonego

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

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

Algorytmy z powrotami. Algorytm minimax

Algorytmy z powrotami. Algorytm minimax Algorytmy z powrotami. Algorytm minimax Algorytmy i struktury danych. Wykład 7. Rok akademicki: 2010/2011 Algorytm z powrotami rozwiązanie problemu budowane jest w kolejnych krokach, po stwierdzeniu (w

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - wprowadzenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Klasa zbiór pól i metod Obiekt

Bardziej szczegółowo

SZTUCZNA INTELIGENCJA

SZTUCZNA INTELIGENCJA SZTUCZNA INTELIGENCJA WYKŁAD 12. PRZESZUKIWANIE Częstochowa 2014 Dr hab. inż. Grzegorz Dudek Wydział Elektryczny Politechnika Częstochowska ROZWIĄZYWANIE PROBLEMÓW JAKO PRZESZUKIWANIE Istotną rolę podczas

Bardziej szczegółowo

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka

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

Maciej Piotr Jankowski

Maciej Piotr Jankowski Reduced Adder Graph Implementacja algorytmu RAG Maciej Piotr Jankowski 2005.12.22 Maciej Piotr Jankowski 1 Plan prezentacji 1. Wstęp 2. Implementacja 3. Usprawnienia optymalizacyjne 3.1. Tablica ekspansji

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

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

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

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Grażyna Koba MIGRA 2019 Spis treści (propozycja na 2*32 = 64 godziny lekcyjne) Moduł A. Wokół komputera i sieci komputerowych

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

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

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod

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

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

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

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

Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI 1 Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI 1. Obliczenia w arkuszu kalkulacyjnym Rozwiązywanie problemów z wykorzystaniem aplikacji komputerowych obliczenia w arkuszu kalkulacyjnym wykonuje

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Wyznaczanie strategii w grach

Wyznaczanie strategii w grach Wyznaczanie strategii w grach Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Definicja gry Teoria gier i konstruowane na jej podstawie programy stanowią jeden z głównych

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

Programowanie i techniki algorytmiczne

Programowanie i techniki algorytmiczne Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej

Bardziej szczegółowo

Programowanie obiektowe

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

Bardziej szczegółowo

Algorytmy sortujące i wyszukujące

Algorytmy sortujące i wyszukujące Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.

Bardziej szczegółowo

Algorytm genetyczny (genetic algorithm)-

Algorytm genetyczny (genetic algorithm)- Optymalizacja W praktyce inżynierskiej często zachodzi potrzeba znalezienia parametrów, dla których system/urządzenie będzie działać w sposób optymalny. Klasyczne podejście do optymalizacji: sformułowanie

Bardziej szczegółowo

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je. Problem porządkowania zwanego również sortowaniem jest jednym z najważniejszych i najpopularniejszych zagadnień informatycznych. Dane: Liczba naturalna n i ciąg n liczb x 1, x 2,, x n. Wynik: Uporządkowanie

Bardziej szczegółowo

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to wprowadzili J. Hartmanis i R. Stearns. Najczęściej przez zasób rozumie się czas oraz pamięć dlatego

Bardziej szczegółowo

Strategia "dziel i zwyciężaj"

Strategia dziel i zwyciężaj Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania

Bardziej szczegółowo

Wyszukiwanie binarne

Wyszukiwanie binarne Wyszukiwanie binarne Wyszukiwanie binarne to technika pozwalająca na przeszukanie jakiegoś posortowanego zbioru danych w czasie logarytmicznie zależnym od jego wielkości (co to dokładnie znaczy dowiecie

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Sortowanie - wybrane algorytmy

Sortowanie - wybrane algorytmy Sortowanie - wybrane algorytmy Aleksandra Wilkowska Wydział Matematyki - Katedra Matematyki Stosowanej Politechika Wrocławska 2 maja 2018 1 / 39 Plan prezentacji Złożoność obliczeniowa Sortowanie bąbelkowe

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

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

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne Algorytmy i struktury danych Drzewa: BST, kopce Letnie Warsztaty Matematyczno-Informatyczne Drzewa: BST, kopce Definicja drzewa Drzewo (ang. tree) to nieskierowany, acykliczny, spójny graf. Drzewo może

Bardziej szczegółowo

Zadanie 1: Piętnastka

Zadanie 1: Piętnastka Informatyka, studia dzienne, inż. I st. semestr VI Sztuczna Inteligencja i Systemy Ekspertowe 2010/2011 Prowadzący: mgr Michał Pryczek piątek, 12:00 Data oddania: Ocena: Grzegorz Graczyk 150875 Marek Rogalski

Bardziej szczegółowo

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

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych 2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:

Bardziej szczegółowo

Instrukcje dla zawodników

Instrukcje dla zawodników Instrukcje dla zawodników Nie otwieraj arkusza z zadaniami dopóki nie zostaniesz o to poproszony. Instrukcje poniżej zostaną ci odczytane i wyjaśnione. 1. Arkusz składa się z 3 zadań. 2. Każde zadanie

Bardziej szczegółowo

Tworzenie gier na urządzenia mobilne

Tworzenie gier na urządzenia mobilne Katedra Inżynierii Wiedzy Teoria podejmowania decyzji w grze Gry w postaci ekstensywnej Inaczej gry w postaci drzewiastej, gry w postaci rozwiniętej; formalny opis wszystkich możliwych przebiegów gry z

Bardziej szczegółowo

Algorytmy dla gier dwuosobowych

Algorytmy dla gier dwuosobowych Algorytmy dla gier dwuosobowych Wojciech Dudek Seminarium Nowości Komputerowe 5 czerwca 2008 Plan prezentacji Pojęcia wstępne (gry dwuosobowe, stan gry, drzewo gry) Algorytm MiniMax Funkcje oceniające

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

INFORMATYKA POZIOM ROZSZERZONY

INFORMATYKA POZIOM ROZSZERZONY EGZAMIN MATURALNY W ROKU SZKOLNYM 2016/2017 FORMUŁA OD 2015 ( NOWA MATURA ) INFORMATYKA POZIOM ROZSZERZONY ZASADY OCENIANIA ROZWIĄZAŃ ZADAŃ ARKUSZ MIN-R1, R2 MAJ 2017 Uwaga: Akceptowane są wszystkie odpowiedzi

Bardziej szczegółowo

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb.

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb. 1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb. Algorytmy przeszukiwania w głąb i wszerz są najczęściej stosowanymi algorytmami przeszukiwania. Wykorzystuje się je do zbadania istnienia połączenie

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

ECDL Podstawy programowania Sylabus - wersja 1.0

ECDL Podstawy programowania Sylabus - wersja 1.0 ECDL Podstawy programowania Sylabus - wersja 1.0 Przeznaczenie Sylabusa Dokument ten zawiera szczegółowy Sylabus dla modułu Podstawy programowania. Sylabus opisuje, poprzez efekty uczenia się, zakres wiedzy

Bardziej szczegółowo

Układy VLSI Bramki 1.0

Układy VLSI Bramki 1.0 Spis treści: 1. Wstęp... 2 2. Opis edytora schematów... 2 2.1 Dodawanie bramek do schematu:... 3 2.2 Łączenie bramek... 3 2.3 Usuwanie bramek... 3 2.4 Usuwanie pojedynczych połączeń... 4 2.5 Dodawanie

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

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85 Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych Klasa Średnia 8a 3,54 8b 5,25 8c 4,21 8d 4,85 Do wstawienia wykresu w edytorze tekstu nie potrzebujemy mieć wykonanej tabeli jest ona tylko

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

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

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

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa. Plan Procedura decyzyjna Reguły α i β - algorytm Plan Procedura decyzyjna Reguły α i β - algorytm Logika obliczeniowa Instytut Informatyki 1 Procedura decyzyjna Logiczna konsekwencja Teoria aksjomatyzowalna

Bardziej szczegółowo

Innowacja pedagogiczna na zajęciach komputerowych w klasach 4e, 4f, 4g. Nazwa innowacji Programowy Zawrót Głowy

Innowacja pedagogiczna na zajęciach komputerowych w klasach 4e, 4f, 4g. Nazwa innowacji Programowy Zawrót Głowy Szkoła Podstawowa nr 13 im. Arkadego Fiedlera w Gorzowie Wlkp. rok szkolny 2016-2017 Innowacja pedagogiczna na zajęciach komputerowych w klasach 4e, 4f, 4g Nazwa innowacji Programowy Zawrót Głowy Autor

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo

Partition Search i gry z niezupełną informacją

Partition Search i gry z niezupełną informacją MIMUW 21 stycznia 2010 1 Co to jest gra? Proste algorytmy 2 Pomysł Algorytm Przykład użycia 3 Monte Carlo Inne spojrzenie Definicja Co to jest gra? Proste algorytmy Grą o wartościach w przedziale [0, 1]

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

Struktury Danych i Złożoność Obliczeniowa

Struktury Danych i Złożoność Obliczeniowa Struktury Danych i Złożoność Obliczeniowa Zajęcia 3 Struktury drzewiaste drzewo binarne szczególny przypadek drzewa, które jest szczególnym przypadkiem grafu skierowanego, stopień każdego wierzchołka jest

Bardziej szczegółowo

Algorytmika i pseudoprogramowanie

Algorytmika i pseudoprogramowanie Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Programowanie Strukturalne i Obiektowe Klasa: druga Dział Dopuszczający Dostateczny Dobry

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

Spacery losowe generowanie realizacji procesu losowego

Spacery losowe generowanie realizacji procesu losowego Spacery losowe generowanie realizacji procesu losowego Michał Krzemiński Streszczenie Omówimy metodę generowania trajektorii spacerów losowych (błądzenia losowego), tj. szczególnych procesów Markowa z

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

Wymagania na poszczególne oceny szkolne dla klasy VI. (na podstawie Grażyny Koba, Teraz bajty. Informatyka dla szkoły podstawowej.

Wymagania na poszczególne oceny szkolne dla klasy VI. (na podstawie Grażyny Koba, Teraz bajty. Informatyka dla szkoły podstawowej. 1 Wymagania na poszczególne oceny szkolne dla klasy VI (na podstawie Grażyny Koba, Teraz bajty. Informatyka dla szkoły podstawowej. Klasa VI ) 2 1. Obliczenia w arkuszu kalkulacyjnym słucha poleceń nauczyciela

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 03 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas abstrakcyjnych i interfejsów. Wprowadzenie

Bardziej szczegółowo

Sortowanie zewnętrzne

Sortowanie zewnętrzne Algorytmy i struktury danych Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski Sortowanie zewnętrzne 1 Wstęp Bardzo często

Bardziej szczegółowo

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny Algorytm to przepis; zestawienie kolejnych kroków prowadzących do wykonania określonego zadania; to uporządkowany sposób postępowania przy rozwiązywaniu zadania, problemu, z uwzględnieniem opisu danych

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

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

Turing i jego maszyny

Turing i jego maszyny Turing Magdalena Lewandowska Politechnika Śląska, wydział MS, semestr VI 20 kwietnia 2016 1 Kim był Alan Turing? Biografia 2 3 Mrówka Langtona Bomba Turinga 4 Biografia Kim był Alan Turing? Biografia Alan

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

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

Bardziej szczegółowo

Temat 20. Techniki algorytmiczne

Temat 20. Techniki algorytmiczne Realizacja podstawy programowej 5. 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych problemów; 2) formułuje ścisły opis prostej sytuacji problemowej, analizuje

Bardziej szczegółowo

Zadanie 1. Suma silni (11 pkt)

Zadanie 1. Suma silni (11 pkt) 2 Egzamin maturalny z informatyki Zadanie 1. Suma silni (11 pkt) Pojęcie silni dla liczb naturalnych większych od zera definiuje się następująco: 1 dla n = 1 n! = ( n 1! ) n dla n> 1 Rozpatrzmy funkcję

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

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Rekurencja Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów. Zgodnie ze znaczeniem informatycznym algorytm rekurencyjny to taki który korzysta z samego

Bardziej szczegółowo

Propozycje tematów zadań

Propozycje tematów zadań Propozycje tematów zadań 1. WARCABY Opracować program do gry w warcaby dla dwu graczy. Program ma umożliwiać przesuwanie kursora na zmianę po polach białych lub czarnych, wskazywanie początku końca ruchu.

Bardziej szczegółowo

Planowanie drogi robota, algorytm A*

Planowanie drogi robota, algorytm A* Planowanie drogi robota, algorytm A* Karol Sydor 13 maja 2008 Założenia Uproszczenie przestrzeni Założenia Problem planowania trasy jest bardzo złożony i trudny. W celu uproszczenia problemu przyjmujemy

Bardziej szczegółowo

Abstrakcyjne struktury danych - stos, lista, drzewo

Abstrakcyjne struktury danych - stos, lista, drzewo Sprawozdanie Podstawy Informatyki Laboratoria Abstrakcyjne struktury danych - stos, lista, drzewo Maciej Tarkowski maciek@akom.pl grupa VII 1/8 1. Stos Stos (ang. Stack) jest podstawową liniową strukturą

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH LGORTM I STRUKTUR DNH Temat 6: Drzewa ST, VL Wykładowca: dr inż. bigniew TRPT e-mail: bigniew.tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/ Współautorami wykładu

Bardziej szczegółowo

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna Podstawy Programowania 2 Drzewa bst - część druga Arkadiusz Chrobot Zakład Informatyki 12 maja 2016 1 / 8 Plan Wstęp Wyszukiwanie w BST Minimalny i maksymalny klucz Wskazany klucz Zmiany w funkcji main()

Bardziej szczegółowo

Technologia informacyjna Algorytm Janusz Uriasz

Technologia informacyjna Algorytm Janusz Uriasz Technologia informacyjna Algorytm Janusz Uriasz Algorytm Algorytm - (łac. algorithmus); ścisły przepis realizacji działań w określonym porządku, system operacji, reguła komponowania operacji, sposób postępowania.

Bardziej szczegółowo

PTI S1 Tabele. Tabele. Tabele

PTI S1 Tabele. Tabele. Tabele Tabele Tabele 43 1.3. Tabele Jako że bazy danych składają się z tabel, musimy nauczyć się jak je zaprojektować, a następnie stworzyć i zarządzać nimi w programie Microsoft Access 2013. Zajmiemy się również

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 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

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

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa).

Za pierwszy niebanalny algorytm uważa się algorytm Euklidesa wyszukiwanie NWD dwóch liczb (400 a 300 rok przed narodzeniem Chrystusa). Algorytmy definicja, cechy, złożoność. Algorytmy napotykamy wszędzie, gdziekolwiek się zwrócimy. Rządzą one wieloma codziennymi czynnościami, jak np. wymiana przedziurawionej dętki, montowanie szafy z

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