在优化模型中添加惩罚约束
Adding a penalty constraint into an optimization model
我对 Pyomo 和一般的优化还很陌生,但最近遇到了一个问题,所以我希望有人能把我推向正确的方向。
我开发了一个供应链优化模型,该模型具有各种容量的生产站点,这些站点向不同的客户提供不同的产品。
我最近升级了该模型,以计算生产的项目少于其最低“合同”金额的站点的罚款成本。例如,如果一个站点的最低生产阈值为 50,它可以生产 40,但随后需要支付罚款 ((50-40)*1 美元)。我通过在 objective 函数中添加一个二元变量,乘以每单位短缺成本,再乘以短缺变量来做到这一点。问题是我收到一条错误消息,说这是一个二次函数
这是错误>>RuntimeError:选定的求解器无法处理具有二次项的 objective 函数。 Objective 有争议:objective.
我已经做了很多研究,但还没有找到一种方法来避免通过将惩罚添加到混合中(通过将一个变量与另一个变量相乘)来防止将其转换为二次函数。所以我的问题是,是否有人可以向我指出一些技巧或方法。
我可以使用不同的求解器,只是我假设通过将其转换为二次方程式这将需要更多的计算能力(减慢 运行 时间)。
非常感谢!
这是非常可行的,而且并不少见。你应该能够制定这个并保持一切线性。
最明确的通用方法是为 overtime/under production/etc 添加一个额外的变量。然后将其包含在 objective 函数中,乘以使其不如“常规”生产有利的惩罚。
这是一个类似的例子:
我对 Pyomo 和一般的优化还很陌生,但最近遇到了一个问题,所以我希望有人能把我推向正确的方向。 我开发了一个供应链优化模型,该模型具有各种容量的生产站点,这些站点向不同的客户提供不同的产品。 我最近升级了该模型,以计算生产的项目少于其最低“合同”金额的站点的罚款成本。例如,如果一个站点的最低生产阈值为 50,它可以生产 40,但随后需要支付罚款 ((50-40)*1 美元)。我通过在 objective 函数中添加一个二元变量,乘以每单位短缺成本,再乘以短缺变量来做到这一点。问题是我收到一条错误消息,说这是一个二次函数
这是错误>>RuntimeError:选定的求解器无法处理具有二次项的 objective 函数。 Objective 有争议:objective.
我已经做了很多研究,但还没有找到一种方法来避免通过将惩罚添加到混合中(通过将一个变量与另一个变量相乘)来防止将其转换为二次函数。所以我的问题是,是否有人可以向我指出一些技巧或方法。 我可以使用不同的求解器,只是我假设通过将其转换为二次方程式这将需要更多的计算能力(减慢 运行 时间)。 非常感谢!
这是非常可行的,而且并不少见。你应该能够制定这个并保持一切线性。
最明确的通用方法是为 overtime/under production/etc 添加一个额外的变量。然后将其包含在 objective 函数中,乘以使其不如“常规”生产有利的惩罚。
这是一个类似的例子: