Упаковка в мусорное ведро с использованием решателя максимумов с SCIPY-проблемы

#python #solver #scipy-optimize #bin-packing

#питон #решатель #scipy-оптимизация #упаковка в бункер

Вопрос:

Постановка проблемы: Например, у нас есть » n » различных типов пакетов, которые могут быть использованы несколько раз в зависимости от требований. Каждая упаковка имеет свой собственный вес и стоимость. С другой стороны, у нас есть » m » количество предметов, которые должны быть упакованы в заданные пакеты оптимальным образом. Оптимальный способ означает, что общая стоимость используемых пакетов должна быть минимальной. Эти пакеты далее помещаются в контейнер, являющийся воображаемым контейнером.

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

  1. Товар может быть помещен только в одну упаковку.
  2. В бункере может поместиться только одна упаковка.
  3. Сумма весов всех предметов в упаковке не должна превышать вес упаковки.

Я пытался решить эту проблему с мусорным пакетом, которая уже была решена в PYOMO и PYSCIPOPT . Проблемы, с которыми я столкнулся, заключаются в разработке ограничений и переменных принятия решений таким образом, который должен быть задан для решателя scipy HiGHS. для n=7(пакеты) и m=34(элементы) сложность разработки ограничений возрастает. Я придумал 273 ограничения и продолжаю расти. В PYOMO объявлять ограничения и целевую функцию проще, чем в SCIPY.

Может ли кто-нибудь сказать мне, что я поступаю правильно, или подсказать мне, как моделировать ограничения в scipy.

Комментарии:

1. Это слишком широко, но некоторые замечания: все API высокого уровня предоставляют почти те же данные, которые вам понадобятся для API scipy. Подразумевается: вы можете написать себе оболочку, которая обертывает все, что работает для вашего моделирования, в стандартную форму низкого уровня, подобную вводу, который он ожидает. В этом случае я не вижу проблемы, хотя, поскольку все 3 ограничения естественным образом выражены в алгебраической форме, что приводит к тривиальным выражениям на основе numpy/scipy.sparse.

2. Ах, кстати: Убедитесь, что решатель @ scipy поддерживает вашу проблему. Либо убедитесь, что он совместим с LP (полная унимодулярность), либо убедитесь, что максимумы scipy уже поддерживают целочисленное программирование. Я знаю, что в проекте upstream ведется большая активная работа, но я скептически отношусь к тому, что scipy пока поддерживает его. (хотя я не знаю)

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