Реализация ограничения ИЛИ в Google OR-tools? - PullRequest
0 голосов
/ 19 октября 2018

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

Например:

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 голосов
/ 25 октября 2018

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

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

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

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

20 S1D1 + 20 S2D1 + 20 S3D1 = 40

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

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

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

...