Как определить ограничение в Ortools, чтобы установить предел различных значений - PullRequest
1 голос
/ 28 февраля 2020

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

1 Ответ

4 голосов
/ 28 февраля 2020

Для каждого значения создайте логическую переменную selected_value, которая имеет значение true, если для нее назначено хотя бы одно значение.

Для этого вам понадобятся 2 набора ограничений:

слева направо: selected_value означает, что выбрано значение

model.AddBoolOr([var_i_equals_value, ...]).OnlyEnforcedIf(selected_value)

и справа налево, выбранное значение подразумевает, что selected_value истинно

for var_i_equals_value in ...:
    model.AddImplication(var_i_equals_value, selected_value)

И тогда вам просто нужно ограничить сумму выбранных значений

model.Add(sum(selected_value_array) <= 10)

Теперь вам нужно спросить, действительно ли вам нужно целочисленные переменные или просто матрица булевых переменных. Я предлагаю последнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...