280 likes | 507 Views
Mateusz Mikłuszka 171001 Mikołaj Szkutnik 156545 Kamil Markuszewski 171016. Problem generowania i rozwiązywania plansz sudoku o określonym poziomie trudności. Sudoku. Łamigłówka logiczna Jap. 数独 sūdoku Sū ji wa doku shin ni kagiru Cyfry muszą być pojedyncze. Zasady: plansza.
E N D
Mateusz Mikłuszka 171001 Mikołaj Szkutnik 156545 Kamil Markuszewski 171016 Problem generowania i rozwiązywania plansz sudoku o określonym poziomie trudności
Sudoku Łamigłówka logiczna Jap. 数独 sūdoku Sūji wa dokushin ni kagiru Cyfry muszą być pojedyncze
Zasady: plansza Tablica dwuwymiarowa 9x9 Podzielona na 9 tablic dwuwymiarowych 3x3
Zasady: niepowtarzalność Każdy kwadrat 3x3 musi być wypełniony cyframi 1-9 Cyfry w obrębie kwadratu 3x3 nie mogą się powtarzać
Zasady: niepowtarzalność Cyfry w kolumnie 1x9 nie mogą się powtarzać (cyfra 2) Cyfry w rzędzie 9x1 nie mogą się powtarzać (cyfra 3) Rzędy i kolumny muszą być wypełnione cyframi 1-9
Ciekawostka: rodzaje sudoku Sudoku samurai - składa się z pięciu kwadratów połączonych ze sobą w kształcie litery X Sudoku diagonalne - cyfry nie mogą się powtarzać poprzekątnych kwadratu Sudoku trójwymiarowe - w kształcie kostki sześciennej o wymiarach 9x9x9 Killer Sudoku – początkowa plansza nie ma żadnych wpisanych cyfr, ale zamiast tego ma zaznaczone obszary obejmujące od 2 do 7 pól, dla których podana jest suma zawartych w nich cyfr Sudoku magnetyczne - niedozwolone jest stykanie się takich samych cyfr w rogach kwadratów Sudoku na większej planszy - z większą liczbą symboli
Rozwiązywanie: Sposób 1 - eliminacja Zaczynamy od cyfry która występuje najczęściej Eliminacja rzędów/kolum do których cyfry nie możemy wstawić
Rozwiązywanie: Sposób 2 dopełnianie Dopełnianie Szukamy najbardziej zapełnionego rzędu / kolumny / kwadratu Wypełniamy brakującymi cyframi
Rozwiązywanie: Sposób 3 -oznaczanie Sposób polegający na zaznaczaniu możliwości
Generowanie plansz Rozwiązywanie jest o wiele prostsze niż generowanie plansz Liczba możliwych plansz 6 670 903 752 021 072 936 960 Plansza musi posiadać minimum 17 cyfr początkowych Poniżej 17 cyfr istnieje wiele rozwiązań
Analiza trudności generowania plansz • Nie istnieje jeden sposób analizy trudności plansz – własne metryki • Analiza czasu działania wybranych algorytmów (Rule based)
Metryki • Liczba łącznie wypełnionych pól • Puste pola w kolumnie/wierszu/kwadracie • Funkcja więzów i Ukryci kandydaci • Liczba wystąpień danej cyfry
Sprawdzanie poprawności sudoku • Istnieje rozwiązanie • Dokładnie 1 rozwiązanie • Przeszukanie zbiorku rozwiązań – Brute Force
Algorytmy rozwiązujące sudoku • Deterministyczne • Niedeterministyczne • Metaheurystyka – odpada • Backtracking – Brute Force • Rule Based – Funkcja więzów
Algorytmy generujące sudoku • Wylosowanie planszy • Permutacje kolumn i wierszy • Usuwanie pól • Usuwanie konkretnych pól
Generowanie: Wylosowanie planszy • Daje głównie złe wyniki • Jest niezbędny • Korzystają z niego pozostałe algorytmy • Bardzo wrażliwy na liczbę pól
Generowanie: Permutacje • permutowanie kolumn 3x9 w obrębie kwadratu 9x9 • permutowanie wierszy 9x3 w obrębie kwadratu 9x9 • permutowanie kolumn 1x9 w obrębie kolumn 3x9 • permutowanie wierszy 9x1 w obrębie wierszy 9x3 (Rys 5.2.4.)
Generowanie: Permutacje • Można użyć do generowania bazy plansz • Można zamieniać też cyfry ze sobą
Generowanie: Usuwanie • Zaczynamy od rozwiązanego sudoku • Usuwamy losowo pola • Co iterację sprawdzamy poprawność • Kończymy w zależności od sumy pól
Generowanie: Usuwanie konkretnych pól • Zaczynamy od rozwiązanego sudoku • Usuwamy pola tak by zwiększyć trudność • Na podstawie metryk trudności • Co iterację sprawdzamy poprawność • Kończymy w zależności od sumy pól
Gra Sudoku: Interfejs użytkownika • Stworzyliśmy grę wykorzystującą nasze algorytmy • Język C# • Środowisko Unity 3d