sudoku do ponto de vista do jogador: … · 1.2 o ponto de vista do jogador quando se depara com o...

26
FUNDAÇÃO GETÚLIO VARGAS ESCOLA DE MATEMÁTICA APLICADA CURSO DE GRADUAÇÃO EM MATEMÁTICA APLICADA JULIANA HUTHER ALBERNAZ CRESPO SUDOKU DO PONTO DE VISTA DO JOGADOR: ESTRATÉGIAS PARA SOLUÇÃO AUTOMÁTICA E SEMI AUTOMÁTICA Rio de Janeiro 2015

Upload: nguyencong

Post on 20-Jan-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

FUNDAÇÃO GETÚLIO VARGASESCOLA DE MATEMÁTICA APLICADA

CURSO DE GRADUAÇÃO EM MATEMÁTICA APLICADA

JULIANA HUTHER ALBERNAZ CRESPO

SUDOKU DO PONTO DE VISTADO JOGADOR: ESTRATÉGIAS

PARA SOLUÇÃO AUTOMÁTICA ESEMI AUTOMÁTICA

Rio de Janeiro2015

Page 2: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

FUNDAÇÃO GETÚLIO VARGASESCOLA DE MATEMÁTICA APLICADA

CURSO DE GRADUAÇÃO EM MATEMÁTICA APLICADA

JULIANA HUTHER ALBERNAZ CRESPO

SUDOKU DO PONTO DE VISTADO JOGADOR: ESTRATÉGIAS

PARA SOLUÇÃO AUTOMÁTICA ESEMI AUTOMÁTICA

“Declaro ser o único autor da presente mo-nografia, requisito parcial para a obtençãodo grau de Bacharel em Matemática Apli-cada e ressalto que não recorri a qualquerforma de colaboração ou auxílio de ter-ceiros para realizá-lo a não ser nos casose para os fins autorizados pelo professororientador”.

Orientador: Asla Sá

Co-orientador: Paulo Cezar Carvalho

Rio de Janeiro2015

Page 3: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

JULIANA HUTHER ALBERNAZ CRESPO

Sudoku do ponto de vista do jogador: estratégias parasolução automática e semi automática

“Projeto de Monografia apresentado à Escola deMatemática Aplicada – FGV/EMAp como requi-sito parcial para obtenção do grau de Bacharel emMatemática Aplicada”.

Aprovado em: Rio de Janeiro, de de .

———————————————————————-Profa. Dra. Asla Sá (Professora Orientadora)

———————————————————————-Prof. Dr. Paulo Cezar Carvalho (Professor Tutor)

Rio de Janeiro2015

Page 4: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

SUMÁRIO

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 O Jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 O ponto de vista do jogador . . . . . . . . . . . . . . . . . . . . . . 21.3 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 PESQUISA EXPLORATÓRIA DA LITERATURA . . . . . . . . . . 5

3 DESENVOLVIMENTO E RESULTADOS ESPERADOS . . . . . . 63.1 Sudoku como grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.1.1 O problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.1.2 Modelagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.1.3 Resolução em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.1.4 Visualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.2 Sudoku como polinômio . . . . . . . . . . . . . . . . . . . . . . . . . 113.2.1 O problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2.2 Modelagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2.3 Resolução em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2.4 Visualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3 Sudoku como problema de otimização . . . . . . . . . . . . . . . . 133.3.1 O problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3.2 Modelagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3.3 Resolução em AMPL . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.3.4 Visualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5 REFERÊNCIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5

Page 5: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

1

1 INTRODUÇÃO

O tema proposto para o TCC se desenvolve em torno do conhecido quebra-

cabeça Sudoku. O trabalho foi direcionado em desenvolvimento de estrategias para

a solução desse jogo, como consequência foram estudados diferentes domínios da

matemática, como por exemplo, álgebra, otimização e teoria de grafos.

1.1 O Jogo

O jogo do Sudoku tem como objetivo preencher cada uma das posições vazias

de uma matriz de tamanho 9x9 com números de 1 a 9. Contudo, cada um desses

números só pode aparecer apenas uma vez em cada linha, coluna e submatriz 3x3

contida na matriz principal. Além disso, cada posição só pode conter um número.

Essas regras de unicidade estão resumidas no nome do próprio jogo, que consiste em

uma abreviação japonesa para a frase “suuji wa dokudhin ni kagiru”, que significa

que “os dígitos devem permanecer únicos”.

Entende-se por posições vazias o fato de algumas posições já conterem nú-

meros que consiste em pistas iniciais. Essas pistas ajudam na dedução dos números

que deverão ser preenchidos.

Em geral, o jogo é classificado em quatro níveis de dificuldade: fácil, médio,

difícil e desafiador. Um jogo difícil não é obrigatoriamente aquele que tem menos

pista, a dificuldade de um jogo esta mais relacionada ao posicionamento das pistas

do que a quantidade delas.

Page 6: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

2

1.2 O ponto de vista do jogador

Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-

samentos, o de quem irá construir o jogo, ou seja, criar novos desafios, posicionar

alguns números de forma a criar dificuldades diferentes e de forma que a solução

seja possível. E o de quem vai resolver o jogo, ou seja, descobrir o lugar de cada

números e encontrar a solução do mesmo. Esse ultimo será o ponto de vista adotado

neste artigo.

Resolvendo o Sudoku no papel, existem algumas técnicas que são adotadas

para a sua resolução, que serão listadas abaixo.

Assim que se escolhe qual Sudoku irá resolver, primeiramente deve-se per-

correr cada número de 1 a 9, passando por todas as linhas, colunas e submatrizes

riscando os lugares onde o número não poderá ser preenchido. Por exemplo, olhando

para o número 6 na figura 1.1, as linhas na horizontal representam as linhas que já

tem o número 6, então não poderá ter outro, o mesmo acontece com as linhas verti-

cais, as cruzes representam os elementos que não podem conter o o número 6, pois

ele já se encontra na submatriz. Com isso podemos ver se alguma, linha, coluna ou

submatriz ficou apenas com uma possibilidade para colocar o elemento.

Esse procedimento deverá ser repetido até a hora que passar por todos os

números de 1 a 9 e não conseguir preencher mais nenhuma casinha.

Também deve-se olhar se tem alguma linha, coluna ou submatriz na qual só

esteja faltando um elemento.

Outra técnica utilizada é marcar na ponta do quadradinho todos os possíveis

candidatos, como mostra a figura 1.2.

Page 7: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

3

Figura 1.1: técnica de resolução 1 Sudoku

Figura 1.2: técnica de resolução 2 Sudoku

A partir dai podemos preencher os quadradinhos que só tem um candidato. E

apagar esses candidatos nas linhas colunas e submatrizes correspondentes. Feito isso,

teremos que observar se aparecem exatamente duas possibilidades com os números

iguais na mesma linha, coluna ou submatriz (exemplo: numa linha qualquer, o

primeiro e o quarto quadrado tenham como possibilidades apenas os números 3 e 7),

isso permite que esses dois números seja, removidos das possibilidades de candidatos

para os outros quadradinhos da linha. Veja o exemplo na figura 1.3.

O mesmo pode acontecer para 3 posições, quando existem 3 números iguais

nas 3 posições.

Page 8: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

4

Figura 1.3: técnica de resolução 3 Sudoku

1.3 Metodologia

Estudaremos livros que abordem o tema, nos aprofundaremos nele, a partir

dai utilizaremos ferramentas computacionais tais como o AMPL e o Python para

implementar as diferentes abordagens propostas de forma automática, ou seja, for-

necemos para o programa os dados iniciais do Sudoku e o mesmo irá retornar o

resultado explicito na tela, já com todas as informações, ou então de forma semi

automática, na qual o programa irá fornecendo resultados aos poucos, mostrando

o passo a passo e a cada jogada fornecer somente um dos resultados, não o resul-

tado final. Por fim iremos usar o Processing para uma visualização mais dinâmica

e lúdica.

Page 9: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

5

2 PESQUISA EXPLORATÓRIA DA LITERATURA

A presente proposta tem como principal referencia o livro “Taking Sudoku

Seriously: The Math Behind the World’s Most Popular Pencil Puzzle”[1], que aborda

estratégias e aponta para teorias úteis no estudo do problema, explorando as cone-

xões entre Sudoku, teoria dos grafos e polinômios. Alguns tópicos do livro serão

aprofundados baseando-se em textos adicionais [2][3] e implementações serão feitas

para ilustrar o funcionamento dos algoritmos. Em particular, o problema de colo-

ração de grafos surgiu como opção de abordagem para resolver uma dada instância

de Sudoku. Adicionalmente estudaremos uma modelagem do jogo Sudoku como um

problema de programação inteira.

Page 10: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

6

3 DESENVOLVIMENTO E RESULTADOS ESPE-RADOS

No corpo do trabalho iremos focar em 3 formas de resolução, sendo elas como

grafo, como polinômio e como um problema de otimização.

3.1 Sudoku como grafo

A ideia básica consiste em transformar o tabuleiro do Sudoku em um pro-

blema de coloração de grafos e, desta forma, tentar colorir o grafo gerado utilizando

apenas nove corres.

3.1.1 O problema

O problema de coloração de grafo, se baseia em definir cores (valores, no caso

do Sudoku) aos vértices de um grafo, de forma que vértices adjacentes, ou seja, que

tem uma aresta em comum, não possam ter a mesma cor.

3.1.2 Modelagem

Como vimos anteriormente, o Sudoku possui 3 diferentes tipos de “vizinhos”,

sendo eles os vértices que estão na sua mesma linha, coluna ou submatriz. Sendo

assim, a melhor forma de solucionar o problema seria dividir esse grande puzzle em

3 grafos interligados, contendo cada um destes grafos os vizinhos referentes ao seu

Page 11: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

7

estilo. Como mostrado na figura 3.1.

Figura 3.1: Vizinhos

Onde, o amarelo é o vértice analisado, as arestas que o ligam aos vértices

vermelhos pertencem ao primeiro grafo, as que ligam aos vértices verdes pertencem

ao segundo grafo e as que ligam aos vértices azuis pertencem ao terceiro grafo.

Podemos observar que alguns vértices tem duas cores, o que representa que o mesmo

se encontra nos dois grafo referentes as cores.

Com as arestas e os vértices criados, resta descobrir aonde colorir cada cor.

Para isso são analisados as possíveis cores de cada vértice, que são todas as que não

estão sendo utilizadas por nem um de seus vizinhos. Porém, apenas uma delas será

a cor referente a esse vértice e os métodos de descobrir qual é são os seguintes:

• primeiro: Analisar se algum dos vértices só tem uma possível cor, nesse caso,

não há duvida, essa será a cor referente a ele.

• Segundo: Para casa um dos três grafos, olhar separadamente, se existe um

determinado vértice com uma possível cor, na qual nenhum de seus vizinho a

tem, ou seja, essa cor só pode ser utilizada nesse vértice.

Page 12: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

8

• Terceiro: E se existirem dois vértices que só podem ser pintados por exata-

mente as mesmas duas cores? Exato, nenhum outro vértice pode ter essas

cores.

Os testes realizados mostram que o algoritmo utilizado não resolve todos

os jogos. Por enquanto o código esta limitado a resolver um grupo específico de

sudoku’s. Até o momento acredita-se que com a abordagem de coloração de grafos

não é possivel resolver todos os tipos de jogos independente da complexidade, como

é feito com outros metodos (Ex.: programação linear).

Com isso, um forte interesse em relação a abordagem de escala de dificul-

dade dos Sudoku’s foi dispertado, porém aprofundar no tema fugiria do objetivo do

trabalho, podendo vir a ser, o mesmo, um futuro tema de projeto.

3.1.3 Resolução em Python

O Algoritmo abaixo mostra a implementação do modelo matemático, no qual

foi desenvolvido em Python. Os três grafos mencionados anteriormente estão repre-

sentados como Ga, Gb e Gc e tambem foram programados em python para achar as

arestas de cada um dele. Os vertices (V), foram digitados na mão e passados para

o programa. Para o funcionamento do mesmo são utilizadas algumas funções com-

plementares que calculam os possivies números a serem completados em um vertice

(função "faltando"), quando so falta um número é usada a função "faltando"para

o encontrar e uma outra função, que retira de todos os vizinhos de um vertice o

número encontrado.

Page 13: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

9

Listing 3.1: Algoritmo Sudoku1 de f color_sudoku (Ga,Gb,Gc ,V) :2 G = [ ]3 G. append (Ga)4 G. append (Gb)5 G. append (Gc)6 len_g = len (Ga)+len (Gb)+len (Gc)7 d i s t i n c t_co l o r s = {}8 f o r g in G:9 f o r node in g . nodes_iter ( ) :

10 d i s t i n c t_co l o r s [ node ] = s e t ( [ 0 ] )11 f o r y in V:12 i f V[ y ] != 0 :13 d i s t i n c t_co l o r s [ y]= s e t ( [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] )14 f o r n in V:15 d i s t i n c t_co l o r s = v i z i nho s (V, n ,Ga,Gb,Gc , d i s t i n c t_co l o r s )16 q = len_g17 whi le q >0:18 f o r i in d i s t i n c t_co l o r s :19 i f l en ( d i s t i n c t_co l o r s [ i ] ) == 9 :20 V[ i ] = fa l t ando ( d i s t i n c t_co l o r s [ i ] )21 d i s t i n c t_co l o r s [ i ] = s e t ( [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,

9 ] )22 d i s t i n c t_co l o r s=v i z i nho s (V, i ,Ga,Gb,Gc , d i s t i n c t_co l o r s )23 f o r g in G:24 f o r i in d i s t i n c t_co l o r s :25 x = po s s i v e i s ( d i s t i n c t_co l o r s [ i ] )26 f o r neighbour in g . ne ighbor s_i t e r ( i ) :27 x = x − p o s s i v e i s ( d i s t i n c t_co l o r s [ neighbour ] )28 i f l en (x ) == 1 :29 V[ i ] = x . pop ( )30 d i s t i n c t_co l o r s [ i ]= s e t ( [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,

9 ] )31 d i s t i n c t_co l o r s = v i z i nho s (V, i ,Ga,Gb,Gc ,

d i s t i n c t_co l o r s )32 f o r g in G:33 f o r i in d i s t i n c t_co l o r s :34 f o r neighbour1 in g . ne ighbors ( i ) :35 i f l en ( d i s t i n c t_co l o r s [ i ] ) == 8 and d i s t i n c t_co l o r s

[ i ] == d i s t i n c t_co l o r s [ neighbour1 ] :36 t = p o s s i v e i s ( d i s t i n c t_co l o r s [ neighbour1 ] )37 f o r neighbour2 in g . ne ighbors ( i ) :38 i f neighbour2 != neighbour1 :39 d i s t i n c t_co l o r s [ neighbour2 ] =

d i s t i n c t_co l o r s [ neighbour2 ] . union ( t)

40 q = q − 141 re turn d i s t i n c t_co l o r s , V

Page 14: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

10

3.1.4 Visualização

Após a conclusão do algoritmo, foi desenvolvida uma visualização, em Pro-

cessing, para que a coloração como grafo ficasse mais clara e evidente. O resultado

pode ser visto na Figura 3.2, onde observa-se a existencia de 9 cores diferentes no

lugar dos números.

Figura 3.2: Resolução Sudoku

Page 15: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

11

3.2 Sudoku como polinômio

A ideia básica consiste em transformar o tabuleiro do Sudoku em um pro-

blema de polinômios e, desta forma, tentar encontrar polinômos de primeira ordem.

3.2.1 O problema

O problema de polinômios se baseia na junção e fatoração dos mesmos, para

simplificar e otimizar as funções.

3.2.2 Modelagem

Um Sudoku como polinômio completo estaria na forma (xi − aj) com i vari-

ando de 1 a 81 e j variando de 1 a 9.

Como nem todas as casa iniciam completas, será definido um polinômio F

que representará casa uma das casa, onde o mesmo será zero quando a casa estiver

completa.

F (x) =9∏

j=1

(x− j)

Para que nenhum vertice tenha a mesma cor que o seu vizinho, será necessario

criar uma função G que restrinja isso.

Page 16: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

12

G(xi, xk) =F (xi)− F (xk)

xi − xk

Feito isso, encontradas todas as funções, será aplicada a base de Grobner,

que juntando e misturando as funções, encontrará a unica solução que fará com que

todos os polinonios sejam igual a zero.

3.2.3 Resolução em Python

Onde X é o Sudoku inicial, com algumas casas preenchidas com os seus

respectivos números e as outras com zeros. E A é uma lista com o conjunto de

arestas, cada vestice ligado aos seus respectivos vizinhos.

A implementação da base de Grobner é bem complexa de implementar, por

isso foi usado um pacote do Python, o sympy.

Listing 3.2: Algoritmo Sudoku1 F = [ ]2 f o r i in X:3 f i = ( i −1)∗( i −2)∗( i −3)∗( i −4)∗( i −5)∗( i −6)∗( i −7)∗( i −8)∗( i −9)4 F. append ( f i )5

6 G = [ ]7 a = 08 f o r i in x :9 i f i >0:

10 G. append (X[ a]− i )11 a = a+112 f o r i in A:13 g i = div ( (F [ i [0]−1]−F[ i [ 1 ] −1 ] ) , (X[ i [0]−1]−X[ i [ 1 ] −1 ] ) ) [ 0 ]14 G. append ( g i )15

16 t = groebner (G,X, method=’ buchberger ’ )

Page 17: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

13

3.2.4 Visualização

Nesta visualização podemos observar cada um dos 81 vertices e seus respec-

tivos polinômios, com os valores do vertice, encontrados pela base de Grobner.

Figura 3.3: Resolução Sudoku Polinômios

3.3 Sudoku como problema de otimização

A ideia básica consiste em transformar o tabuleiro do Sudoku em um pro-

blema de otimização e, desta forma, tentar encontrar o resultado otimo.

3.3.1 O problema

Embora o Sudoku não seja um problema de otimização, ele pode ser modelado

em programação linear inteira 0− 1 (binária), se a função objetivo for considerada

como um vetor de coeficientes nulos e as regras do Sudoku como restrições.

3.3.2 Modelagem

Vamos definir um Jogo de Sudoku como uma matriz quadrada N ∗N com N

submatrizes n ∗ n, tal que n =√N . Cada posição dessa matriz é representada por

Page 18: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

14

um conjunto de variáveis binárias xijk, que tem como objetivo decidir se a posição

(i, j) da matriz será preenchida ou não pelo valor k(k = 1, ..., N).

Sendo assim:

xijk =

{1, se a posição (i, j) possui o valor k, ∀i, j, k = 1, ..., N

0, caso contrário

O objetivo do jogo é encontrar uma solução que satisfaça as restrições; não

existe uma função objetivo a ser minimizada ou maximizada. Portanto, esse pro-

blema é modelado da seguinte forma:

N∑j=1

xijk = 1 ∀i, k = 1, ..., N

N∑i=1

xijk = 1 ∀j, k = 1, ..., N

N∑k=1

xijk = 1 ∀i, j = 1, ..., N

np∑i=np−(n−1)

nq∑j=nq−(n−1)

xijk = 1 ∀p, q = 1, ..., N ;∀k = 1, ..., N

xijk = 1 ∀i, j = 1, ..., N ;∀k = Sij, Sij 6= 0

xijk = 0 ∀i, j = 1, ..., N ;∀k = Sij, Sij = 0

xijkε(0, 1) ∀i, j, k = 1, ..., N ;

Uma linha i(i = 1, ..., N) é formada por todos os termos ordenados (i, j, k)

em que j, k = 1, ..., N . Para cada linha i, cada número k aparece uma e somente

uma vez. Por exemplo, para i = 1 e N = 9, temos que:

Page 19: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

15

x111 + x121 + ...+ x191 = 1 k = 1

x112 + x122 + ...+ x192 = 1 k = 2

... ...

x119 + x129 + ...+ x199 = 1 k = 9

Uma coluna j(j = 1, ..., N) é formada por todos os termos ordenados (i, j, k)

em que i, k = 1, ..., N . Para cada coluna j, cada número k aparece uma e somente

uma vez. Por exemplo, para j = 1 e N = 9, temos que:

x111 + x211 + ...+ x911 = 1 k = 1

x112 + x212 + ...+ x912 = 1 k = 2

... ...

x119 + x219 + ...+ x919 = 1 k = 9

Uma submatriz n∗n contida na matriz principal N ∗N , ocupa a posição (p, q)

em que p, q = 1, ..., n. A Figura 3.4 mostra as posições na matriz de um Sudoku

clássico (N = 9 e, portanto, n = 3). Por exemplo, a submatriz (1,1) começa em

i = 1 até i = 3 e vai de j = 1 até j = 3; a submatriz (2,3) começa em i = 4 até

i = 6 e vai de j = 7 até j = 9.

Quando p = 1, queremos manipular as posições da matriz principal em que

i = 1, 2, 3, quando p = 2, estamos com i = 4, 5, 6 e quando p = 3, estamos com

i = 7, 8, 9. Ou seja, estamos sempre começando com os índices da linha avaliados

em 1, 4 e 7 e terminando com eles em 3, 6 e 9, respectivamente. Uma forma de

Page 20: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

16

Figura 3.4: Posições na Matriz do Sudoku

relacionarmos os valores de p com os de i é da seguinte forma: i = 3p− (3−1), ..., 3p

e de forma mais geral, temos que i = np− (n− 1), ..., np.

O mesmo raciocínio é feito para as colunas que abrangem cada submatriz.

Sendo assim, uma forma de relacionarmos os valores de q com j é da seguinte forma:

j = nq − (n− 1), ..., nq.

Para cada uma das N submatrizes n ∗ n, cada elemento k = 1, ..., N deve

aparecer uma e somente uma vez. Por exemplo, para p = 1, q = 1, N = 9, temos

que:

x111 + x121 + x131 + ...+ x311 + x321 + x331 = 1 k = 1

x112 + x122 + x132 + ...+ x312 + x322 + x332 = 1 k = 2

... ...

x119 + x129 + x139 + ...+ x319 + x329 + x339 = 1 k = 9

Page 21: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

17

Uma posição (i, j) é formada por todos os termos ordenados (i, j, k) em que

k = 1, ..., N . Para cada posição (i, j), deve ser preenchida com um e somente um

número k. Por exemplo, para i = 1, j = 1 e N = 9, temos que:

x111 + x112 + ...+ x119 = 1

Vamos definir uma matriz S tembém N ∗ N em que cada posição Sij é re-

presentada por uma variavel binária, que assume valor 1 se Sij 6= 0 e o valor 0 caso

contrário. Essa matriz S armazena as posições do Sudoku que estão inicialmente

preenchidas. No Sudoku clássico em que N = 9, possuimos 93 = 727 variáveis. Con-

tudo, casa pista dada reduz em 9 o número de variáveis, pois constitui uma restrição

que define um valor k para a possição (i, j). Por exemplo, se S13 = 5 conclui-se que

a posição (1,3) do Sudoku já está preenchida pelo k = 5, sendo assim, adicionamos

a restrição de que x135 = 1 e que x13k = 0,∀k = 1, ..., 9, k 6= 5.

3.3.3 Resolução em AMPL

O Algoritmo abaixo mostra a implementação do modelo matemático apresen-

tado em AMPL e o solver utilizado para a resolução foi o CPLEX. Para resolvermos

um Sudoku qualquer, preenchemos em "Dados do Modelo"o parâmetro S (uma

matriz N ∗N) com as posições iniciais já fornecidas (as pistas).

Listing 3.3: Algoritmo Sudoku1 #———————–SUDOKU————————-2

3 #—————-Tamanho do Modelo4

5 param n := 3 ; # 2 para um jogo 4x4 ou 3 para um jogo 9x96 param N := n ∗ n ;7

8 #Define uma matriz P

Page 22: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

18

9 param P{ 1 . .N, 1 . .N} , in t ege r , d e f au l t 0 , >= 0 , <= N;10

11 #—————Variáveis do Modelo12

13 s e t Rows := { 1 . .N} ;14 s e t Cols := { 1 . .N} ;15 s e t Vals := { 1 . .N} ;16

17 var x{Rows , Cols , Vals } binary ;18

19 #————–Restrições do Modelo20

21 #Cada número de 1,...,N aperece apenas uma vez em cada linha22 sub j e c t to Limit_Row{ i in Rows , k in Vals } :23 sum{ j in Cols } x [ i , j , k ] = 1 ;24

25 #Cada número de 1,...,N aperece apenas uma vez em cada coluna26 sub j e c t to Limit_Cols{ j in Cols , k in Vals } :27 sum{ i in Rows} x [ i , j , k ] = 1 ;28

29 #Cada posição (i,j) deve ter um e somente um número de 1,...,N30 sub j e c t to Sum_Vals{ i in Rows , j in Cols } :31 sum{k in Vals } x [ i , j , k ] = 1 ;32

33 #Cada número de 1,...,N aperece apenas uma vez em cada N submatriz n*n34 sub j e c t to Limit_Matrix{k in Vals , p in 1 . . n , q in 1 . . n } :35 sum{ j in (n∗q − (n−1) ) . . ( n∗q ) , i in (n∗p − (n−1) ) . . ( n∗p) } x [ i , j , k ]

= 1 ;36

37 #Lê uma matriz P com as posições da matriz que jaá estão preenchidas38 sub j e c t to Pos_ij { i in Rows , j in Cols : P [ i , j ] <> 0} :39 x [ i , j ,P [ i , j ] ] = 1 ;40

41 #————–Dados do Modelo42 data ;43

44 param P: 1 2 3 4 5 6 7 8 9 :=45 1 0 0 5 0 0 0 0 0 346 2 0 0 0 0 4 6 0 0 047 3 0 0 7 0 0 0 0 0 248

49 4 0 1 0 0 0 3 0 6 950 5 0 4 0 6 0 9 0 5 051 6 9 8 0 2 0 0 0 7 052

53 7 2 0 0 0 0 0 9 0 054 8 0 0 0 8 1 0 0 0 055 9 6 0 0 0 0 0 4 0 0 ;

Page 23: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

19

56

57 opt ion s o l v e r cp l ex ;

3.3.4 Visualização

Como a variável do modelo é tridimensional, a visualização da resposta em

AMPL de xijk não é muito intuitiva. Então, foi elaboraado alguns comandos que

transformam a resposta em uma tabela do formato do Sudoku, o que pode ser visto

no algoritmo abaixo.

Listing 3.4: Visualização em AMPL do Sudoku1 #————–Visualizao do Modelo2

3 f o r { i in Rows}{4 f o r { j in Cols }{5 f o r {k in Vals }{6 i f ( x [ i , j , k ] == 1) then p r i n t f "%3i " , k ;7 } ;8 i f ( ( j mod n) == 0) then p r i n t f " | " ;9 } ;

10 p r i n t f "\n" ;11 i f ( ( i mod n) == 0) then {12 f o r { j in 1 . . n}{13 f o r {k in 1 . . ( n−1)}{ p r i n t f "−−−" } ;14 i f ( j <> n) then15 p r i n t f "−−−−+−" ;16 e l s e17 p r i n t f "−−−−+\n" ;18 } ;19 } ;20 } ;

A partir dessa tabela obtida com a execução do AMPL e da matriz S passada

na restrição foi feito um código em Processing que exibe um resultado como o da

Figura 3.5. EM vermelho temos as pistas contidas em S e os demais números são

aqueles obtidos executando o modelo proposto.

Page 24: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

20

Figura 3.5: Resolução Sudoku

Page 25: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

21

4 CONCLUSÃO

Neste trabalho estudei o puzzle Sudoku, utilizando três abordagens diferen-

tes. na primeira delas, o Sudoku foi abordado como um problema em grafo, foi

desenvolvido a sua modelagem e uma resolução em Python. No segundo, o Su-

doku foi modelado como polinômio, foram criados os polinômios a partir da base

de Grobner que instanciavam o mesmo, e por fim foi utilizado um pacote Python

para encontrar a solução do polinômio. Por fim, o Sudoku foi abordado como um

problema de otimização inteira, foi desenvolvida a sua modelagem e a resolução da

mesma em Ampl.

Observamos algumas limitações quando utilizamos a abordagem do Sudoku

como problema em grafo, quando os jogos tem um nível de dificuldade maior, a

solução chega numa situação de ambiguidade intrínseca do problema, e o algoritmo

deterministico de coloração em grafos proposto não resolve tais ambiguidades. Op-

tamos por não apresentar heuristica que resolvesse essa ambiguidade o que fugiria do

escopo deste trabalho, optando assim por não aprofundar o estudo dessa abordagem.

No Sudoku como polinômio o maior desafio foi no desenvolvimento do algoritmo, o

que fez com que optassemos pela utilização do pacote do Python pronto. No Sudoku

como problema de otimização devido a LIMITação do ampl VERSAO de estudantes,

os puzzles de Sudoku de maior tamanho nao são resolvidos.

Como trabalhos futuros, surgiram algumas opções, como, um estudo apro-

fundado da base de Grobner, desenvolver um algoritmo que ,mostre a dificuldade

dos puzzles, ou ate mesmo partir para o ponto de vista de quem cria o jogo.

Page 26: SUDOKU DO PONTO DE VISTA DO JOGADOR: … · 1.2 O ponto de vista do jogador Quando se depara com o quebra-cabeça Sudoku, surgem dois tipos de pen-samentos, o de quem irá construir

22

5 REFERÊNCIA

[1] jason rosenhouse laurathemathbehindtheworldsmostpopularpencilpuzzle−oxforduniversitypressusa(2012)

[2] O jogo Sudoku, pré-coloração estendida em hipergrafos e algoritmos de

enumeração implícira

[3] Tecnicas de coloração de grafos aplicadas á resolução de quebra-cabeça do

tipo sudoku

[4] http://www.longwood.edu/assets/mathematics/Team2975P roblemB.pdf

[5] http://arxiv.org/pdf/1210.2584.pdf

[6] http://www.technologyreview.com/view/428729/mathematics-of-sudoku-

leads-to-richter-scale-of-puzzle-hardness/

[7] http://planetsudoku.com/how-to/sudoku-solving-techniques.html

[8] http://www.fi.muni.cz/ xpelanek/publications/sudoku-arxiv.pdf

[9] https://idus.us.es/xmlui/bitstream/handle/11441/23605/sudoku-casc-pdflatex-

ams.pdf?sequence=1

[10] http://www.scholarpedia.org/article/Groebnerbasis