Реализация ограничения ИЛИ в Google OR-tools?

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

Например:

Source S1 has a supply of 40.
Source S2 has a supply of 40.
Source S3 has a supply of 20.
Destination D1 has a a demand of 40.

Я хочу быть в состоянии сделать так, чтобы спрос на D1 выполнялся ДВА поставщиками, каждый из которых поставляет 20.

В форме ограничения я думаю, что это будет:

S1D1 = 0 OR 20
S2D1 = 0 OR 20
S3D1 = 0 or 20

S1D1 + S2D1 + S3D1 = 40

Но я понятия не имею, как реализовать ограничение OR в Google OR-tools. Я думаю, что мне нужно взглянуть на смешанный целочисленный решатель, но я не могу найти примеры или документацию, которая бы решала мою проблему.

1 ответ

Решение

Эрвин, ты прав.

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

Ограничения:

Переменная - это целое число от 0 до 1 (то есть 1 или 0).

20 S1D1 + 20 S2D1 + 20 S3D1 = 40

это был упрощенный пример, в моей задаче у меня больше направлений. Чтобы убедиться, что источник не предоставляет больше, чем он имел, использовалось следующее ограничение (например, используйте 2 пункта назначения, пункт назначения 2 имеет запрос 40, предоставленный одним источником):

20 S1D1 + 40 S1D2 <= 40 (повторите это для всех источников)

Спасибо за вашу помощь.

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