Решатель магических квадратов с использованием программирования с ограничениями ⇐ Python

Программы на Python
Anonymous
Решатель магических квадратов с использованием программирования с ограничениями

Сообщение Anonymous »

Я пытаюсь создать собственный решатель магических квадратов, используя программирование с ограничениями на Python. Для этого я использую python-constraint (http://labix.org/python-constraint).

Для этой задачи определение магического квадрата будет таким: «A магический квадрат — это расположение целых чисел (положительных или отрицательных) в матрице nxn, при котором сумма элементов любой строки, любого столбца или любой главной диагонали одинакова."
У меня есть вот такой заранее заполненный магический квадрат:

Код: Выделить всё

+----+----+----+----+
| 7  |    |    |  4 |
+----+----+----+----+
|    |    |    |    |
+----+----+----+----+
| 0  | -3 | -2 |  3 |
+----+----+----+----+
| -5 |  6 |    |    |
+----+----+----+----+
Вот код, который я использую:

Код: Выделить всё

from constraint import *

problem = Problem()
problem.addVariables(range(0, 16), range(-20, 20))

problem.addConstraint(lambda a: a==7, [0])
problem.addConstraint(lambda a: a==4, [3])
problem.addConstraint(lambda a: a==0, [8])
problem.addConstraint(lambda a: a==-3, [9])
problem.addConstraint(lambda a: a==-2, [10])
problem.addConstraint(lambda a: a==3, [11])
problem.addConstraint(lambda a: a==-5, [12])
problem.addConstraint(lambda a: a==6, [13])

problem.addConstraint(ExactSumConstraint(-2), [0,5,10,15])
problem.addConstraint(ExactSumConstraint(-2), [3,6,9,12])
for row in range(4):
problem.addConstraint(ExactSumConstraint(-2),
[row*4+i for i in range(4)])
for col in range(4):
problem.addConstraint(ExactSumConstraint(-2),
[col+4*i for i in range(4)])
solutions = problem.getSolution()
print solutions
Я не могу найти решения, хотя считаю, что мои ограничения верны. Сумма каждой строки, каждого столбца и обеих диагоналей должна быть равна -2 (в зависимости от строки, которая у нас есть на магическом квадрате).

У вас есть идеи? ? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/292 ... rogramming

Вернуться в «Python»