2012-02- 23 Jacob Rydh Robert Hedin Sudoku Solver Projektspecifikation Handledare: Mikael Goldmann
Introduktion Vi ska studera och utforma olika algoritmer för att lösa Sudoku puzzel. Vi kommer testa olika algoritmer som finns tillgängliga och jämföra dem mot en brute-force lösning. Därefter kommer vi att utforma en egen algoritm för att lösa puzzlen. Problemformulering Ett sudoku spel går ut på att placera in siffror på ett rutmönstrat bräde (World Sudoku Federation, 2012). Varje bräda är uppdelad i mindre brädor som i sin tur består av 3 x 3 rutor. I början av spelet finns det ett antal siffror utplacerade på den stora brädan. Det gäller sen att själv fylla i rutorna med siffror från 1-9 på ett sådant sätt att inga dubbletter återfinns i vare sig samma rad eller samma mindre 3 x 3 bräda (Se bild 1). Det gäller så såväl vågrätta som lodräta rader samt inom varje liten 3 x 3 bräde. De initialt utplacerade siffrorna ska vara utsatta på ett sådant sätt att spelet endast har en korrekt lösning. Bild 1 Det huvudsakliga målet är att utforma en algoritm som på ett effektivt sätt löser puzzlet. Vi kommer jämföra hur snabb lösningen är i förhållande till en brute-force algoritm. Detta kommer att utföras på puzzel med varierande svårighetsgrad. Vår egenskapade algoritm kommer att bli analyserad för att se vilka styrkor och svagheter den har i förhållande till andra kända algoritmer.
Tillvägagångssätt Vi kommer till en början sätta oss in i kända algoritmer för att lösa puzzlet. Vi kommer delvis utforska vilka program som finns för att lösa puzzlet idag samt tala med folk som spelar sudoku på en högre nivå. Vi kommer därför ta kontakt med sudoku klubbar för att se vilka strategier mänskliga spelare använder för att snabbt lösa ett Sudoku puzzel. Det finns ett antal kända algoritmer för att lösa ett sudoku puzzel. Vi har tittat på en algroritm som löser problemet genom backtracking, där problemet tex kan konstrueras upp som en graf för att sedan lösas med hjälp av graffärgning. Komplexiteten för graffärgning är förvisso NPfullständigt men eftersom spelplanen är så pass liten går denna metod att använda. En annan algoritm som vi har tittat på är en som liknar mer hur en människa fungerar och hur vi löser ett sudoku puzzel. Genom att skriva ned de olika siffrorna en ruta kan innefatta kan man på ett smidigt sätt få en bättre bild över spelet och med uteslutningsmetoden kan man successivt stryka bort siffror tills bara den rätta finns kvar (A Pencil- and- Paper Algorithm for Solving Sudoku Puzzles 2009). Vi har även planer på att tittat på lösningar som använder sig av artificiell intelligens för att lösa problemet (Artificial Intelligence through Search: Solving Sudoku Puzzles 2008). Därefter kommer vi ta ut de bästa tillgängliga algoritmerna och strategierna, och analysera deras för- och nackdelar. Vår förhoppning är att vi sedan kommer att kunna skriva en egen algoritm som är effektivare än de nuvarande. Referenser World Sudoku Federation (2012). [Elektronisk]. Tillgänglig på: http://worldsudokufederation.org/. Hämtad februari 23, 2012. Prof. J.F. Crook, 2009. Notices of the AMS. volume 56 number 4. A Pencil- and- Paper Algorithm for Solving Sudoku Puzzles. Tillgänglig på: http://www.ams.org/notices/200904/rtx090400460p.pdf. Hämtad februari 23, 2012. Tim Kovacs. 2008. University of Bristol. What is Computer Science? #10. Artificial Intelligence through Search: Solving Sudoku Puzzles.Tillgänglig på: http://www.cs.bris.ac.uk/publications/papers/2000948.pdf
Tidsplan 12 februari - Vi börjar leta efter relevanta källor som kommer användas till bakgrundsinformation om problemet. Vi tar kontakt med klubbar och letar efter kända algoritmer som löser puzzlet. 20 februari - Vi har nu tillräckligt med källor för att börja att på riktigt analysera problemet och de algoritmerna vi hittat. Vi har även varit i kontakt med någon bättre spelare. Vi har byggt upp en databas med puzzel av olika svårighetsgrader som vi kan använda för att testa algoritmerna. 1 mars - Nu har vi tillräckligt med kött på benen för att börja skriva rapporten. Vi sammanställer det vi har kommit fram till och skriver ihop en struktur för den slutgiltiga rapporten. Vi börjar även med vår egen algoritm som kommer bygga på de analyser vi nu gjort. 8 mars - Halvvägsrapporten är klar. Vi arbetar vidare med vår algoritm. Utför test där vi på vår algoritm för att se hur väl den står sig.
1 april - Rapporten är färdigskriven och den ända som återstår är att gå igenom rapporten för att se till att den är utformad på ett sammanhängande och välförståeligt sätt. Vi lägger ganska mycket tid åt detta då vi vet av att den inte är vår starkaste sida.