Почему ограничение не может генерировать все возможные комбинации?

Я пытаюсь сгенерировать все возможные комбинации при некоторых ограничениях, используя ограничение python. Вот код main():

list1 = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0]

list2 = [-1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

list3 = [-1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0.0]

problem = constraint.Problem()

problem.addVariable('p1', list1)
problem.addVariable('p2', list2)
problem.addVariable('p3', list3)

problem.addConstraint(our_constraint, ['p1', 'p2', 'p3'])
solutions = problem.getSolutions()

Три списка ограничены определенным диапазоном. Функция our_constraint определяется следующим образом:

def our_constraint(p1, p2, p3):
  if (p1 + p3 + p2) == 0:
    return True

Однако вывод, который я получаю, не включает все возможные комбинации. Некоторые данные показаны ниже:

{'p3': -1.0, 'p1': 2.0, 'p2': -1.0}
{'p3': -1.0, 'p1': 1.8, 'p2': -0.8}
{'p3': -1.0, 'p1': 1.7, 'p2': -0.7}
{'p3': -1.0, 'p1': 1.6, 'p2': -0.6}
{'p3': -1.0, 'p1': 1.5, 'p2': -0.5}
{'p3': -1.0, 'p1': 1.3, 'p2': -0.3}
{'p3': -1.0, 'p1': 1.2, 'p2': -0.2}
{'p3': -1.0, 'p1': 1.1, 'p2': -0.1}

Он не включает такие комбинации, как

{'p3': -1.0, 'p1': 1.4, 'p2': -0.4}

{'p3': -1.0, 'p1': 1.9, 'p2': -0.9}

Я попытался изменить порядок p1, p2 и p3 в our_constraint. И я обнаружил, что он будет генерировать другие комбинации. Это почему? И как это исправить?

0 ответов

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