A Takuzu es un rompecabezas numérico basado en la lógica cuyo objetivo es rellenar un (normalmente $10 \times 10$ ) con unos y ceros tales que se cumplan las siguientes condiciones:
-
Cada fila y cada columna tienen el mismo número de unos y ceros.
-
Cada fila y cada columna tienen un máximo de $2$ números adyacentes iguales.
-
Todas las filas son diferentes y todas las columnas son diferentes (pero una fila puede ser igual que una columna).
Estoy interesado en un programación entera (PI) para resolver dicho rompecabezas. Denotemos $A$ como el $2n \times 2n$ que representa la cuadrícula de dicho puzzle (supongamos una cuadrícula cuadrada) y que $\mathcal{N} = \{1,\ldots,2n\}$ . La formulación IP viene dada entonces por
\begin{align} \min 1 \\ \text{s.t.} \quad \sum_{j \in \mathcal{N}}a_{ij} & = n \quad \forall \ i \in \mathcal{N} \tag{1.1} \\ \sum_{i \in \mathcal{N}}a_{ij} & = n \quad \forall \ j \in \mathcal{N} \tag{1.2} \\ \sum_{j \in \mathcal{N}} |a_{ij}-a_{kj}| & \geq 1 \quad \forall \ i \in \mathcal{N}, \forall \ k \in \mathcal{N}, i \neq k \tag{3.1} \\ \sum_{i \in \mathcal{N}} |a_{ij}-a_{ik}| & \geq 1 \quad \forall \ j \in \mathcal{N}, \forall \ k \in \mathcal{N}, j \neq k \tag{3.2} \\ a_{ij} & \in \mathbb{B} \quad \forall \ i \in \mathcal{N}, \forall \ j \in \mathcal{N} \end{align}
Tengo dos preguntas principales:
1 : ¿Es válida la formulación? ¿Algún consejo sobre notación o solvencia?
2 : ¿Cómo hago cumplir la 2ª condición en mi programa?
0 votos
Un buen solver MIP puede resolver esto en cero iteraciones (durante el preprocesamiento). Véase enlace .