Problem generowania i rozwiązywania plansz sudoku o określonym poziomie trudności
description
Transcript of Problem generowania i rozwiązywania plansz sudoku o określonym poziomie trudności
Problem generowania i rozwiązywania plansz sudoku o określonym poziomie trudności
Mateusz Mikłuszka 171001Mikołaj Szkutnik 156545
Kamil Markuszewski 171016
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ć po
przeką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
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
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
Wstępne porównanie wyników
Wstępne porównanie wyników
Wstępne porównanie wyników
Wstępne porównanie wyników
Gra Sudoku: Interfejs użytkownika