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

Я пытаюсь решить общую проблему, используя ограничение Python . Вот код, который я пробовал.

      from constraint import *

problem = Problem()
problem.addVariable('A', ['A','B','C','D'])
problem.addVariable('B', ['F','G','H','I'])
problem.addVariable('C', ['K','L','M','N'])
problem.addVariable('D', ['O','P','Q','R'])
problem.addVariable('p', range(3,100))
problem.addVariable('q', range(3,100))
problem.addVariable('x', range(3,100))
problem.addVariable('y', range(6,100))
problem.addVariable('z', range(6,100))

affected_vars = "ABCDpqxyz"
constraints_list = ["x*x+p*p==q*q","z>y","p>x","q>p"] # length of constraints_list may vary
# This constraint_list is given by the user.

def find_constraint_match(*args):
    for idx, var in enumerate(affected_vars, start=0):
        locals()[var] = args[idx]
    return eval(curr_constraint)

for i in range(len(constraints_list)):
    curr_constraint = constraints_list[i]
    problem.addConstraint(FunctionConstraint(find_constraint_match),affected_vars)

solution = problem.getSolution()
print(solution)

Выход:

      {'A': 'D', 'B': 'I', 'C': 'N', 'D': 'R', 'y': 99, 'z': 99, 'p': 98, 'q': 99, 'x': 99}

В проблеме, которую я пытаюсь решить, длина constraints_list может быть разной. Здесь только последнее ограничение, т.е. q>pприменяется на выходе, но это нежелательно. Может ли кто-нибудь помочь мне эффективно решить эту проблему?

0 ответов

Другие вопросы по тегам