Использование Add_implications в решателе CP-SAT (Google OR Tools)Python

Программы на Python
Anonymous
 Использование Add_implications в решателе CP-SAT (Google OR Tools)

Сообщение Anonymous »

Я работаю над тем, чтобы научиться использовать решающую программу CP в ortools. Я создал тестовую задачу, которая пытается найти возможные варианты размещения собак, которые не уживаются в клетках, чтобы несовместимые пары не находились рядом друг с другом. Задача, которую я собрал, имеет только два возможных решения, но решатель не выбирает ни одно из них. Я неправильно использую add_implication, поскольку это часть кода, в которой я проверяю плохие комбинации? В настоящее время я не использую никаких других ограничений, кроме того, что все собаки должны находиться в клетке и только одна собака в клетке.
Вот мой простой тестовый код. Он должен дать одно из возможных возможных решений (Бун в A или D, Кенси рядом с ним), но обычно этого не происходит. Я пробовал другие операции, кроме add_implication, но ни одна из них не показала допустимых значений.
from ortools.sat.python import cp_model

# Data
animals = ["Lulu", "Abby", "Boone", "Kensey"]
cages = ["cage_A", "cage_B", "cage_C", "cage_D"]

# Incompatible pairs (cannot be next to each other)
incompatible_pairs = [("Boone", "Lulu"), ("Boone", "Abby")]

# Cage adjacencies (represented as pairs)
adjacent_cages = [("cage_A", "cage_B"), ("cage_B", "cage_C"), ("cage_C", "cage_D")]

# Model
model = cp_model.CpModel()

# Variables
x = {}
for animal in animals:
for cage in cages:
x[(animal, cage)] = model.new_bool_var(f"x_{animal}_{cage}")

# Constraints

# Each animal goes into exactly one cage
for animal in animals:
model.add(sum(x[(animal, cage)] for cage in cages) == 1)

# Each cage holds at most one animal
for cage in cages:
model.add(sum(x[(animal, cage)] for animal in animals)

Подробнее здесь: https://stackoverflow.com/questions/797 ... e-or-tools

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