solving sudoku: work in progress jeanine meyer purchase college/suny math/cs senior seminar

32
Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Upload: dale-rogers

Post on 16-Dec-2015

216 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Solving sudoku: work in progress

Jeanine Meyer

Purchase College/SUNY

Math/CS Senior Seminar

Page 2: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Outline

• sudoku game

• general comments on A.I.

• Flash application to help player– does not produce new games

• Flash application to solve: in progress

Note: a computer talk rather than a mathematics talk

Will repeat this!

Page 3: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

sudoku game

• originated in Japan• appears in many newspapers

– The Journal News• built on 'magic squares'• category of problem:

– produce result satisfying set of constraints– more general problem is: produce a best result

(maximize or minimize an objective function) given set of constraints

• For example, integer programming• Mostly in class NP-complete• many heuristic techniques available

Page 4: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar
Page 5: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Artificial Intelligence

• … applying computers to real-world, perhaps fairly open problems, including games

• Chess International Master David Levy's challenge inspired much work in AI and all computing– 1968 bet no computer could beat him in 10 years. He

won (played and beat various computer programs. There was at least one draw.)

– 1989 Deep Thought beat Levy– 1997 Deep Blue beat the world champion (Gary

Kasparov) after losing in 1996• Some controversy

Page 6: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

AI

• The best computer algorithm may not be the human approach.– Will describe chess history

• Heuristic is term for methods that applies some special technique and may advance the process

• Brute force is term for less subtle process: any method that just generates possibilities

• My approach to sudoku – mixture– may not be the best– still working on it

Page 7: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Backtracking

• General AI technique• Prune, as best as possible, the tree of possible

choices/moves• Make a choice• Develop/extend this choice• If it leads to a problem

– backtrack: restore position before making choice– remove this choice from 'tree'

• Repeat

Page 8: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Does backtracking work?

• Assuming bad choices are removed to stop being used again, yes!– finite number of possible moves (though this

number could be very large)• unpopulated board in sudoku has 9 to the 81. How

big is that???? However, size of game should restrict this to moves that do not violate rules…. How big is that?

Page 9: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Machine learning

• Build program to play many games

• Play any way….and see what works

• Sometimes used with neural nets: graph based way to encode moves/changes of state

Page 10: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Chess history

• Chess is a game against an opponent, not a puzzle to solve!

• First programs attempted to characterize positions using descriptions given by chess players– Did not do well

• Second generation: just use brute force to look ahead and ‘count material’– Did better!– Some chess experts did try to adapt their game for this sort of

play• [Final] Deep Blue chess program based on [then] special

hardware using parallel processors– uses 'book' of openings (as do most expert chess players)– middle game is mainly 'look ahead and count material'– end game uses chess knowledge (more added for 1997 match)

Page 11: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

How do I play sudoku • Examine board and see if there are any immediate fits

– only one number is possible in a position (only-possible spot)– (more subtle) only one position is available for a particular

number in a row, column or 3x3 (only-position)– (much more subtle) A pair of numbers that are jointly possible in

a pair of positions in a row, column or 3x3 must occupy those positions so nothing else is possible

– (much much more subtle) Same thing for 3 numbers…– (related) If number can just occur in single column or row of 3x3,

it can’t occur in that column or row in another 3x3– ????

• Put in any such numbers and repeat. Paper gets messy!• Some descriptions of beautiful sudoku claim that

guessing should not be required.

Page 12: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

You?

• Other methods

Page 13: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

My program

• Developed as helper/solver

NOT

• Generate games– This is a topic in its own right!– Need to generate a partial board that only has

one completion AND– [beautiful sudoku] can be solved using

defined methods.

Page 14: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

About implementation

• Staged

• Flash pushbuttons easy way to test out individual features

• Modularization important

• Needed to create situations that would test each heuristic (more on this later)

Page 15: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Program

• Much use of arrays– arrays of arrays– array of arrays of arrays

• Some conversions between numbers 1 to 9 and strings "1", "2", …

• stack for save and restore (push and pop)

• ‘okay so far’ coding

Page 16: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

General procedure

• Generate and then maintain the set values. cset is two-dimensional array of strings, each string just 1 character long

• Generate the possibles: cposs is two-dimensional array of strings, each string may be 1 to 9 (rare) characters long.

• Do each heuristic• Repeat • Note: indices of arrays start with zero, but I

ignore that position and just use 1 to 9.

Page 17: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

set = ""; for (cx=1;cx<=9;cx++){

set=set+cset[r][cx]; } // holds set nums for (n=1;n<=9;n++) {

sn = String(n); if (set.indexOf(sn)==-1) // n not set {count = 0; for (i=1;i<=9;i++) { //count if possible if (cposs[r][i].indexOf(sn)>-1)

{fpos = i; count++; } } if (count==1) {

cset[r][fpos]=sn;namec = "("+r+","+fpos+")";_root[namec].cellvalue = sn;cposs[r][fpos] = ""; }

} //ends n not assigned} //ends looping through numbers n 1 to 9

Code for only-position check for any number n in row r.

Page 18: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Development technique

• I added a button (labeled test) that calls a function that takes what has been written in the workspace area (little letters) and then calls… a new function to be tried.

• I used this to test the new heuristics directly rather than work to create a sample game.

• See the source code in sudoku.fla

Page 19: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Features of first program: helper

• enter initial board

• print option

• check

• save and

• restore– Stack (LIFO): last in/first out

Page 20: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Solver: sudoku1

• (Done in Flash to build on first. Does use Flash input/output)

• Compute possibles

• Compute and set from only possibles

• Compute and set from only position

• Use buttons (can see small type)

http://newmedia.purchase.edu/~Jeanine/games/sudoku1.fla

Page 21: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Solver sudoku2

• (build on last)• try button keeps track of rounds• Each round

– computes possibles– compute and set from only possible– (re-) compute possibles– compute and set from only position– checks if done

http://newmedia.purchase.edu/~Jeanine/games/sudoku2.fla

Page 22: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

solver: sudoku3

• (build on others)• Add guessing

– keep track of badguesses– guess bad if leads to bad check AND leads to a

situation in which there are no more guesses

• Add automatic save on guessing and restore on bad guess

• Not fully tested…http://newmedia.purchase.edu/~Jeanine/games/

sudoku3.fla

Page 23: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Comments on sudoku3

• save and restoring the badguess information is/was a challenge– do the restore (including restoring badguesses array)

and THEN

if (guesses.length>0) { badguesses.push(guesses.pop()); }

• check for no guesses is/was a challenge..• need a method to handle player guesses

Page 24: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

“Group of 2” heuristic

• If a pair of numbers occurs as possibles in just two positions in a row, column or 3x3, then those numbers will occupy those two positions and so these 2 numbers must be removed from all other possibilities – A row (col) has a pair occupying two positions within a 3x3,

say 12 and 12, then• Remove 1 or 2 if it occurs in that row (col) outside the 3x3• Remove the 1 or 2 outside the row(col) in that 3x3

– Calculation done on possibles, so must be followed by other heuristics that produce new settings!

The addition of this heuristic seems to improve success considerably.

Page 25: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Saving to local disk

To support development (and playing), added the following

• Name and save a setting using Flash SharedObject– Like cookies– Player/user can disable or limit

Page 26: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Where?

Page 27: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

To use SharedObject

function savetodisk() {gamename = playersname.text;var so:SharedObject = SharedObject.getLocal(gamename);for (r=1; r<=nr; r++) {

for (c=1; c<=nc; c++) {namec = "("+r+","+c+")";cset[r][c] = _root[namec].cellvalue;

}}so.data.settings = cset;so.flush();

}

Page 28: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Count

• Added the feature to indicate the number of filled cells, in order to see if progress made.

Page 29: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Latest program

Go to newmedia.purchase.edu/~Jeanine and take links to Flash examples and scroll down

OR go directly to

http://newmedia.purchase.edu/~Jeanine/games/sudoku7a.html

Page 30: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

5 star challenge

Page 31: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Conclusion…

• Some difficulties may arise from desire to combine human/player system with automatic guessing (with backtracking)

• The latest set of heuristics solves many puzzles very quickly.

• The development task was motivation for several ‘working’ features

• Process (working in stages, using buttons to test individual functions) is good model.

Page 32: Solving sudoku: work in progress Jeanine Meyer Purchase College/SUNY Math/CS Senior Seminar

Senior project

• More work (better?) on solver

• More work (better?) on helper

• Generating valid partial Sudoku also possibility– Valid means: 1 and only 1 completion– Beautiful Sudoku means that you don’t have

to guess (may be other heuristics)