首页 > 解决方案 > 在优化模型中添加惩罚约束

问题描述

总的来说,我对 Pyomo 和优化还是很陌生,但最近遇到了一个问题,所以我希望有人能把我推向正确的方向。我开发了一个供应链优化模型,该模型具有各种能力的生产站点,这些站点向不同的客户提供各种产品。我最近升级了模型,以考虑生产少于其最低“合同”数量的项目的站点的罚款成本。例如,如果一个站点的最低生产阈值为 50,它可以生产 40,但需要支付罚金 ((50-40)*$1)。我通过添加一个二进制变量来做到这一点,乘以每单位短缺的成本,再乘以目标函数中的短缺变量。问题是我得到一个错误,说这现在是一个二次函数

这是错误>>RuntimeError:选定的求解器无法处理具有二次项的目标函数。有争议的目标:客观。

我已经做了很多或研究,但还没有找到一种方法来避免通过将惩罚添加到混合中(通过将变量与另一个变量相乘)来避免将其转换为二次函数。所以我的问题是,是否有人可以指出一些技巧或方法。我可以使用不同的求解器,我只是假设通过将其转换为二次方这将需要更多的计算能力(减慢运行时间)。非常感谢!

标签: optimizationbinarypyomoglpk

解决方案


这是非常可行的并且并不少见。你应该能够制定这个并保持一切线性。

最清晰的通用方法是为加班/生产不足/等添加一个额外的变量。然后将其包含在目标函数中,乘以使其不如“常规”生产有利的惩罚。

这是一个类似的例子: https ://stackoverflow.com/a/67483886/10789207


推荐阅读