古罗比中的分段线性函数,理解示例

时间:2018-10-07 19:02:35

标签: python optimization gurobi piecewise

我正在尝试在python的gurobi优化问题中实现分段线性目标。当尝试使用来自gurobi网站(http://examples.gurobi.com/production-scheduling/

的示例熟悉这种方法时

我被困住了,几天后自己还是无法真正解决问题。现在,我希望这里的人可以向我展示我的解释错误的地方。

上述示例优化了生产能力有限(尤其是员工工作时间有限)的几种商品的利润。但是,后一个约束并不难,但是,对于某些奖金支付,可以扩展可能的工作时间(这是分段线性函数)。在一般的问题表述中,问题看起来像这样:

profit = revenue−cost = ∑r(i)x(i)−cost(t)

,其中r表示商品“ i”的特定收入,x表示商品的份额,而成本项则为加班提供了潜在的额外成本。 但是,在实际代码中,至少根据我的理解,目标未达到成本条件:

  # Set objective
  m.setObjective( quicksum(revenue[i]*x[i] for i in range(n)), GRB.MAXIMIZE)

我怀疑这是分段线性目标引入/解释的原因,但不幸的是,我只是不知道如何实现。

# Set piecewise linear objective
nPts = 101
ti = []
costi = []
lb = 0
ub = maxhours;

for i in range(nPts):
    ti.append(lb + (ub - lb) * i / (nPts - 1))
    costi.append(-cost(ti[i], limithours, penalty))

m.setPWLObj(t, ti, costi)
m.optimize()

PWLObj是否总是从主要目标中减去?有没有办法例如将PWLObj乘以主要目标函数? 我希望我不仅错过了一些琐碎的事情(对于编程和优化我还是很新的)。 非常感谢您的时间和支持!

1 个答案:

答案 0 :(得分:0)

同时,关于piecewise-linear objectives的Gurobi在线文档已经很好地解释了这个主题。

相关的Python文档可以在here中找到。