在Gurobi模型中添加分段折扣函数至目标函数的实现疑问
问题
首次使用Gurobi,尝试将分段函数加入目标函数,不确定是否需要手动配置。已通过Gurobi官方社区获取的代码实现了分段约束:
m = gp.Model("test") quantity = m.addVar(lb=5, ub=100, vtype=GRB.INTEGER, name="quantity") cost = m.addVar(lb=0.5, ub=2, vtype=GRB.CONTINUOUS, name="cost") m.addGenConstrPWL(quantity, cost, [1000, 4800, 4800.01, 15000, 1500.01, 30000], [5.2, 5.2, 5, 5, 4.6, 4.6])
现询问如何将该分段成本变量纳入目标函数,是否可直接作为变量添加,或添加目标函数时自动生效?
解答
- 可以直接把
cost变量纳入目标函数,因为m.addGenConstrPWL()已经在quantity和cost之间建立了分段线性关联,约束生效后,求解器优化目标时会自动遵循这个分段关系。 - 举个实际例子:如果你的目标是最小化总成本(即
quantity * cost),直接这样设置目标函数即可:
m.setObjective(quantity * cost, GRB.MINIMIZE)
如果目标是最小化单位成本cost本身,写法更简单:
m.setObjective(cost, GRB.MINIMIZE)
- 不需要额外手动配置,只要
addGenConstrPWL的参数设置正确,求解器会自动处理分段逻辑,在优化目标时同步应用约束里的分段规则。
内容的提问来源于stack exchange,提问作者Zhi Z
相关产品推荐
相关产品推荐

