Binpacking / Рюкзак Оптимизация дизайна задач - PullRequest
0 голосов
/ 17 января 2019

У меня есть сценарий, в котором мне нужна помощь, чтобы сформулировать вопрос, чтобы я мог правильно реализовать метод оптимизации. Я надеюсь, что кто-то может немного помочь мне, на первый взгляд это кажется таким простым, но мне трудно понять, как правильно кодировать переменные, ограничения и т. Д.

Сценарий таков:

  • Несколько предметов должны быть помещены в мусорные ведра / рюкзаки
  • Каждый предмет имеет два фактора, которые необходимо учитывать при упаковке
  • У меня есть несколько типов бункера / рюкзака, которые можно использовать для упаковки
  • Количество бункеров / рюкзаков бесконечно
  • Каждый контейнер / рюкзак имеет ограничения на каждое из значений элементов, так что значения элементов суммируются накопительным образом, но не могут превышать ни одно из ограничений на контейнер / рюкзак
  • Каждая корзина / рюкзак имеет различную стоимость (цену) для ее использования
  • Существует верхний предел для количества предметов, которые могут поместиться в мусорное ведро / рюкзак, независимо от того, какие предметы находятся в нем

Пример: * * один тысяча двадцать-одна

Вектор элементов с двумя значениями в каждом:

Предметы = [[7,6], [14,2], [27,23], [5,15]]

Вектор корзин / рюкзаков с первым значением, являющимся верхним пределом, который он может принимать для первых значений элемента. Второе значение такое же, но применяется ко второму значению каждого предмета в корзине / рюкзаке. Третье значение - это максимальное количество предметов, которое может вместить корзина / рюкзак. Последнее значение - это цена / стоимость бункера / рюкзака.

BinOptions = [[64000,1450,350,22000], [8000,450,64,8000]]

Цель состоит в том, чтобы упаковать все предметы наиболее эффективным способом, чтобы обеспечить наименьшую стоимость (используя цену бункеров / рюкзаков).

Я искал два пути решения проблемы:

  • OR-Tools с подходом MILP
  • OR-Инструменты с решателем ранцев

Я не обязательно застрял в OR-Tools, это просто то, с чем я играл и, похоже, хорошо работает на разных языках из отчетов, которые я видел. Было бы неплохо иметь возможность смоделировать это, а затем выбрать язык позже.

Одна вещь, которая, вероятно, не очевидна, - это то, что количество доступных вариантов бина изменяется. Иногда у меня будет два или три на выбор, а иногда еще много, возможно, до ста. Количество входящих предметов для упаковки также будет меняться в зависимости от дня.

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

Приветствия

Лягушка

1 Ответ

0 голосов
/ 17 января 2019

решатель ранцев не решит вашу проблему, так как это чисто решатель с одним ранцем.

Вы можете использовать решатель MILP или CP-SAT.

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