#python #solver #scipy-optimize #bin-packing
#питон #решатель #scipy-оптимизация #упаковка в бункер
Вопрос:
Постановка проблемы: Например, у нас есть » n » различных типов пакетов, которые могут быть использованы несколько раз в зависимости от требований. Каждая упаковка имеет свой собственный вес и стоимость. С другой стороны, у нас есть » m » количество предметов, которые должны быть упакованы в заданные пакеты оптимальным образом. Оптимальный способ означает, что общая стоимость используемых пакетов должна быть минимальной. Эти пакеты далее помещаются в контейнер, являющийся воображаемым контейнером.
Ограничения:
- Товар может быть помещен только в одну упаковку.
- В бункере может поместиться только одна упаковка.
- Сумма весов всех предметов в упаковке не должна превышать вес упаковки.
Я пытался решить эту проблему с мусорным пакетом, которая уже была решена в 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. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.