У меня есть сценарий, в котором мне нужна помощь, чтобы сформулировать вопрос, чтобы я мог правильно реализовать метод оптимизации. Я надеюсь, что кто-то может немного помочь мне, на первый взгляд это кажется таким простым, но мне трудно понять, как правильно кодировать переменные, ограничения и т. Д.
Сценарий таков:
- Несколько предметов должны быть помещены в мусорные ведра / рюкзаки
- Каждый предмет имеет два фактора, которые необходимо учитывать при упаковке
- У меня есть несколько типов бункера / рюкзака, которые можно использовать для упаковки
- Количество бункеров / рюкзаков бесконечно
- Каждый контейнер / рюкзак имеет ограничения на каждое из значений элементов, так что значения элементов суммируются накопительным образом, но не могут превышать ни одно из ограничений на контейнер / рюкзак
- Каждая корзина / рюкзак имеет различную стоимость (цену) для ее использования
- Существует верхний предел для количества предметов, которые могут поместиться в мусорное ведро / рюкзак, независимо от того, какие предметы находятся в нем
Пример: * * один тысяча двадцать-одна
Вектор элементов с двумя значениями в каждом:
Предметы = [[7,6], [14,2], [27,23], [5,15]]
Вектор корзин / рюкзаков с первым значением, являющимся верхним пределом, который он может принимать для первых значений элемента. Второе значение такое же, но применяется ко второму значению каждого предмета в корзине / рюкзаке. Третье значение - это максимальное количество предметов, которое может вместить корзина / рюкзак. Последнее значение - это цена / стоимость бункера / рюкзака.
BinOptions = [[64000,1450,350,22000], [8000,450,64,8000]]
Цель состоит в том, чтобы упаковать все предметы наиболее эффективным способом, чтобы обеспечить наименьшую стоимость (используя цену бункеров / рюкзаков).
Я искал два пути решения проблемы:
- OR-Tools с подходом MILP
- OR-Инструменты с решателем ранцев
Я не обязательно застрял в OR-Tools, это просто то, с чем я играл и, похоже, хорошо работает на разных языках из отчетов, которые я видел. Было бы неплохо иметь возможность смоделировать это, а затем выбрать язык позже.
Одна вещь, которая, вероятно, не очевидна, - это то, что количество доступных вариантов бина изменяется. Иногда у меня будет два или три на выбор, а иногда еще много, возможно, до ста. Количество входящих предметов для упаковки также будет меняться в зависимости от дня.
Если кто-нибудь может дать какое-то руководство по решению этой проблемы, я был бы очень признателен.
Приветствия
Лягушка