|
Okay, so heres the scoop. For our computer science seminar class we have to do a project. Two years ago we did pattern matching in strings, last year we did wireless sensor networks and soft computing, and now we are doing SAT problems.
Last years project was a neural net to try to predict the march madness tournament, which I conveniently named March MadNet. I was quite fond of this name, and considered it my best work on the project.
This year, I am writing a SAT solver ( boolean equations ) for Sudoku. I have the project completed, but feel at a loss because of its mediocre name. I'm sitting at SATDoku, but I'm extremly displeased with my progress.
So for all of you creative folk, anyone want to help?
   
|
I sat here for five minutes thinking of ANY name.
I couldn't.
I apologize
|
The Sudoku Luncher!
I tried
|
On April 28 2008 12:44 Equinox_kr wrote:I sat here for five minutes thinking of ANY name. I couldn't. I apologize 
I appreciate the work. I too have failed, so I can't really be upset with your progress.
|
if the hardest point of writing programs for you is naming them I am so jealous 
SudoSATSolver
....get it? + Show Spoiler +
|
|
On April 28 2008 12:46 SpiritoftheTuna wrote: Filliam H. Muffman
Game over, thanks everyone for your efforts, but we clearly have a winner.
|
On April 28 2008 12:46 fusionsdf wrote:if the hardest point of writing programs for you is naming them I am so jealous  SudoSATSolver ....get it? + Show Spoiler +
I like where this is going, but I assure you my program works. So its kind of misleading.
Btw, its not the hardest part, its just part of the fun I try to maintain with my schooling. I spent about 20 hours in the last 2 days tweaking and refining a program I know others could right in a couple hours. I assure you that you have nothing to be jealous of
|
How about BiSu-DoKu?
|
On April 28 2008 12:50 p4fn2w wrote:How about BiSu-DoKu? 
Catchy, but my prof is Canadian and the only other student is East Indian, I doubt they would catch the hidden message.
Actually, that is pretty good - (Bi) ( 2 - boolean ) and then SuDoku, i don't know if htat was an accident or a joke but I think that is extremely clever
|
On April 28 2008 12:46 fusionsdf wrote:if the hardest point of writing programs for you is naming them I am so jealous  SudoSATSolver ....get it? + Show Spoiler +
lol you have no idea how much time and effort he actually put into this project of his.
|
|
|
The simpler the better:
Sudoku Solver
|
what the hell is a sudoku anyhow berated?
|
SudoTrue?
...Or Trudoku
|
On April 28 2008 13:09 DukE_ss wrote: what the hell is a sudoku anyhow berated?
An evil, evil addiction. Stay away while you can
|
On April 28 2008 13:12 berated- wrote:Show nested quote +On April 28 2008 13:09 DukE_ss wrote: what the hell is a sudoku anyhow berated? An evil, evil addiction. Stay away while you can
lol don't you have enough of those without playing a game?
|
Call it it. Or the Sudokutor. Or Sudoku-in-a-second. Or Sudoku for Dummies.
Im running out of ideas =\
|
On April 28 2008 13:16 p4fn2w wrote: Call it it. Or the Sudokutor. Or Sudoku-in-a-second. Or Sudoku for Dummies.
Im running out of ideas =\
I lol'd at Sudoktor - It does solve them in under a second but I don't think its quite that powerful to fit the name Sudokutor Especially because its so terribly inefficient when I try to run it on a 16x16 puzzle it runs out of memory and crashes - even when I use java -Xmx
|
I don't know if it will help, but I use Davis Putnam algorithm to solve it. If someone can come up with a better name using WalkSAT, I might consider recoding it.
|
All I can think of right now is the GosuDoku. Owell, I tried. Good luck
|
|
On April 28 2008 13:31 p4fn2w wrote:All I can think of right now is the GosuDoku. Owell, I tried. Good luck 
Thanks for the help, I appreciate it
|
|
Sudoscience
Suthsayer
Sudo Solve (Linux joke)
SudoEphedrine (Or Sudofed - a decongestant for your puzzles.)
Personally, I like the Sudoktor idea.
|
Solvedoku?
Best I could come up with.
|
Silliam H. Mudoku
Sulicity Hudokuman
|
On April 28 2008 13:56 SpiritoftheTuna wrote: Silliam H. Mudoku
Sulicity Hudokuman
lol, although I admire both your efforts and names, I don't think they really fit. It doesn't detour me from suggesting you might want to take up a career in naming objects, you sir are a mad genius.
|
aren't sudoku SAT solvers extremely inefficient? unless you formulate the problem way differently from what I have in mind
|
Kau
Canada3500 Posts
|
the code is length and hurts my eyes josh.
|
Does it all have to be puns? why not just somethign random like Greystone
|
|
On April 28 2008 13:12 berated- wrote:Show nested quote +On April 28 2008 13:09 DukE_ss wrote: what the hell is a sudoku anyhow berated? An evil, evil addiction. Stay away while you can Too late for me 
As for the name, i cant think of one rite now. if i get any ideas ill post here
|
On April 28 2008 14:18 azndsh wrote: aren't sudoku SAT solvers extremely inefficient? unless you formulate the problem way differently from what I have in mind
That's really kind of irrelevant to the project. I'm taking a boolean satisfiability class and we have to do a final project related to boolean equations. Considering I'm not a total badass, I knew I wasn't going to come up with the next great thing such as WalkSAT or Davis Putnam or GSAT, any of the SAT solving techniques that were monumental upon release. So I was left with two options, I could either find some current research and write an 8 page paper on it, or I could code up an algorithm.
Reading conference papers didn't strike me as overly fun, so I went with a coding project. I could then do something like just pass a boolean equation to an algorithm and try to solve it, which would have got the job done but is a little bland. So I sought out something that would at least be enjoyable.
As for the original question, my first response would have to be no. Using DP, a true sudoku puzzle ( one with only one answer and requiring no search techniques ) would actually require only unit propagation while solving the algorithm. Of course, you would have to define what it is inefficient compared to. Its obviously better than a try all possibilities solution. Are there other algorithms out there that might do better? I have no idea. I wasnt studying Sudoku, I was studying boolean equations, so I apologize that I can't give you a better answer.
I guess you would have to make that judgment call:
My technique ( learned from the work of others who have already done this - I'm just an undergrad, I can't be doing monumental work in my field ):
There are 729 variables - one for every possible number in every possible cell. These are represented by a 3 digit string - the row, the column, and the number.
So 111 refers to a one being in the upper left most box, and will be a 1 if there is a 1 there, 0 otherwise. A - in front represents that the boolean is negated. so -111 refers to Not a 1 in the upper left hand box
Then you have to generate the equation, it will be in CNF form -
So the first thing to check is that there is a 1-9 in every cell. so, 111 v 112 v 113 v 114 v 115 v 116 v 117 v 118 v 119 but then you need to make sure there aren't more than one so -111 v -112, -111 v -113 . . . etc
Repeat for rows, columns, and boxes.
And solve.
Edit: Okay, well yes I would say that having a SAT solver for a 9x9 sudoku puzzle is a little over the top. I knew that it was for a 9x9, but I guess I didn't realy realize how much over the top it was. Of course, it doesn't help that I'm using a lot of java classes - trying to really modularize my code to make it easier to understand and write.
Using strictly ints and try all possibilities it takes java about 64 ms to solve a sudoku puzzle. Using my sat solver it takes about 400ms to solve - however, the largest time with my solver is keeping track of which variables I flipped and which ones I didn't, because I have to store and reset the variables while backtracking.
It might be kind of interesting to mod my program and then try to see some results. I've seen some sat solvers that use strictly ints ( as i described the 111 stuff above, all that is ints while i use 4 different wrapper classes to keep the method writing short). I think that if I were go get my program working in that state, and then we compared the run times you would see a lot closer of a contest.
Where I think the SAT solver would really shine would be on the larger puzzles for a generalized sudoku puzzle of size nxn. I would guess that even at 16x16 the sat solver ( if done properly with int values instead of classes ) would already start to out due the try all possibilities approach.
Once again though, I had fun with the project and truly believe it will still get me an A, so I'm not too worried about the efficiency. Hope this explain things a little better, and thanks for the thought provoking question.
|
just take SudokuSolver or something
|
On April 29 2008 01:58 .MistiK wrote: just take SudokuSolver or something
I would feel so unclassy
|
|
loverbuttons
if you say you hate it, than you're insulting my little sister who named our kitten loverbuttons too.
|
Austin10831 Posts
|
On April 28 2008 23:57 berated- wrote:Show nested quote +On April 28 2008 14:18 azndsh wrote: aren't sudoku SAT solvers extremely inefficient? unless you formulate the problem way differently from what I have in mind That's really kind of irrelevant to the project. I'm taking a boolean satisfiability class and we have to do a final project related to boolean equations. Considering I'm not a total badass, I knew I wasn't going to come up with the next great thing such as WalkSAT or Davis Putnam or GSAT, any of the SAT solving techniques that were monumental upon release. So I was left with two options, I could either find some current research and write an 8 page paper on it, or I could code up an algorithm. Reading conference papers didn't strike me as overly fun, so I went with a coding project. I could then do something like just pass a boolean equation to an algorithm and try to solve it, which would have got the job done but is a little bland. So I sought out something that would at least be enjoyable. As for the original question, my first response would have to be no. Using DP, a true sudoku puzzle ( one with only one answer and requiring no search techniques ) would actually require only unit propagation while solving the algorithm. Of course, you would have to define what it is inefficient compared to. Its obviously better than a try all possibilities solution. Are there other algorithms out there that might do better? I have no idea. I wasnt studying Sudoku, I was studying boolean equations, so I apologize that I can't give you a better answer. I guess you would have to make that judgment call: My technique ( learned from the work of others who have already done this - I'm just an undergrad, I can't be doing monumental work in my field  ): There are 729 variables - one for every possible number in every possible cell. These are represented by a 3 digit string - the row, the column, and the number. So 111 refers to a one being in the upper left most box, and will be a 1 if there is a 1 there, 0 otherwise. A - in front represents that the boolean is negated. so -111 refers to Not a 1 in the upper left hand box Then you have to generate the equation, it will be in CNF form - So the first thing to check is that there is a 1-9 in every cell. so, 111 v 112 v 113 v 114 v 115 v 116 v 117 v 118 v 119 but then you need to make sure there aren't more than one so -111 v -112, -111 v -113 . . . etc Repeat for rows, columns, and boxes. And solve. Edit: Okay, well yes I would say that having a SAT solver for a 9x9 sudoku puzzle is a little over the top. I knew that it was for a 9x9, but I guess I didn't realy realize how much over the top it was. Of course, it doesn't help that I'm using a lot of java classes - trying to really modularize my code to make it easier to understand and write. Using strictly ints and try all possibilities it takes java about 64 ms to solve a sudoku puzzle. Using my sat solver it takes about 400ms to solve - however, the largest time with my solver is keeping track of which variables I flipped and which ones I didn't, because I have to store and reset the variables while backtracking. It might be kind of interesting to mod my program and then try to see some results. I've seen some sat solvers that use strictly ints ( as i described the 111 stuff above, all that is ints while i use 4 different wrapper classes to keep the method writing short). I think that if I were go get my program working in that state, and then we compared the run times you would see a lot closer of a contest. Where I think the SAT solver would really shine would be on the larger puzzles for a generalized sudoku puzzle of size nxn. I would guess that even at 16x16 the sat solver ( if done properly with int values instead of classes ) would already start to out due the try all possibilities approach. Once again though, I had fun with the project and truly believe it will still get me an A, so I'm not too worried about the efficiency. Hope this explain things a little better, and thanks for the thought provoking question.
yeah... with 729 variables and thousands of restrictions, it seems like it would take a very long amount of time for non-trivial puzzles. I only ask because we were each asked to make a SAT solver and puzzle generator in one of my CS classes. We even had a competition to see who had the best solver in the end. One really simple and effective heuristic is to assume that all your variables are false at the beginning, which in this case is true 8/9 of the time.
I ended up doing a 4x4 version of sudoku puzzles, but that was relatively straightforward and ran very quickly.
|
On April 29 2008 07:22 azndsh wrote:Show nested quote +On April 28 2008 23:57 berated- wrote:On April 28 2008 14:18 azndsh wrote: aren't sudoku SAT solvers extremely inefficient? unless you formulate the problem way differently from what I have in mind That's really kind of irrelevant to the project. I'm taking a boolean satisfiability class and we have to do a final project related to boolean equations. Considering I'm not a total badass, I knew I wasn't going to come up with the next great thing such as WalkSAT or Davis Putnam or GSAT, any of the SAT solving techniques that were monumental upon release. So I was left with two options, I could either find some current research and write an 8 page paper on it, or I could code up an algorithm. Reading conference papers didn't strike me as overly fun, so I went with a coding project. I could then do something like just pass a boolean equation to an algorithm and try to solve it, which would have got the job done but is a little bland. So I sought out something that would at least be enjoyable. As for the original question, my first response would have to be no. Using DP, a true sudoku puzzle ( one with only one answer and requiring no search techniques ) would actually require only unit propagation while solving the algorithm. Of course, you would have to define what it is inefficient compared to. Its obviously better than a try all possibilities solution. Are there other algorithms out there that might do better? I have no idea. I wasnt studying Sudoku, I was studying boolean equations, so I apologize that I can't give you a better answer. I guess you would have to make that judgment call: My technique ( learned from the work of others who have already done this - I'm just an undergrad, I can't be doing monumental work in my field  ): There are 729 variables - one for every possible number in every possible cell. These are represented by a 3 digit string - the row, the column, and the number. So 111 refers to a one being in the upper left most box, and will be a 1 if there is a 1 there, 0 otherwise. A - in front represents that the boolean is negated. so -111 refers to Not a 1 in the upper left hand box Then you have to generate the equation, it will be in CNF form - So the first thing to check is that there is a 1-9 in every cell. so, 111 v 112 v 113 v 114 v 115 v 116 v 117 v 118 v 119 but then you need to make sure there aren't more than one so -111 v -112, -111 v -113 . . . etc Repeat for rows, columns, and boxes. And solve. Edit: Okay, well yes I would say that having a SAT solver for a 9x9 sudoku puzzle is a little over the top. I knew that it was for a 9x9, but I guess I didn't realy realize how much over the top it was. Of course, it doesn't help that I'm using a lot of java classes - trying to really modularize my code to make it easier to understand and write. Using strictly ints and try all possibilities it takes java about 64 ms to solve a sudoku puzzle. Using my sat solver it takes about 400ms to solve - however, the largest time with my solver is keeping track of which variables I flipped and which ones I didn't, because I have to store and reset the variables while backtracking. It might be kind of interesting to mod my program and then try to see some results. I've seen some sat solvers that use strictly ints ( as i described the 111 stuff above, all that is ints while i use 4 different wrapper classes to keep the method writing short). I think that if I were go get my program working in that state, and then we compared the run times you would see a lot closer of a contest. Where I think the SAT solver would really shine would be on the larger puzzles for a generalized sudoku puzzle of size nxn. I would guess that even at 16x16 the sat solver ( if done properly with int values instead of classes ) would already start to out due the try all possibilities approach. Once again though, I had fun with the project and truly believe it will still get me an A, so I'm not too worried about the efficiency. Hope this explain things a little better, and thanks for the thought provoking question. yeah... with 729 variables and thousands of restrictions, it seems like it would take a very long amount of time for non-trivial puzzles. I only ask because we were each asked to make a SAT solver and puzzle generator in one of my CS classes. We even had a competition to see who had the best solver in the end. One really simple and effective heuristic is to assume that all your variables are false at the beginning, which in this case is true 8/9 of the time. I ended up doing a 4x4 version of sudoku puzzles, but that was relatively straightforward and ran very quickly.
While it does take a long time relatively, under half a second to solve a sudoku puzzle is still pretty fast imo. As far as the competition part, that sounds awesome. They have a national sat competition every year that my prof has been to. Of course the people who enter those are the people that created most of the algorithms that we studied this year.
I talked to my professor about holding one at our school when he got to teach his boolean SAT course again, but considering our honors seminar class has 2 people in it, I doubt it would be much fun. Plus I'm graduating so I wouldn't even get to stay around to enjoy it.
|
|
|
|
|