【发布时间】:2018-08-14 03:09:15
【问题描述】:
我正在尝试使用 gurobi 求解器解决 python 中的优化问题。
问题背景:我可以在给定价格 P 的市场上在一系列时间步长内买卖商品。首先,我只能购买/出售一件商品,而我的仓库一次最多可存储 2 件商品。我决定为每个时间步添加一个变量 x,它可以是 -1(买入)、0(什么都不做)或 1(卖出)。因此,限制是每个时间步中所有 x[i] 的总和必须 >=-2 且
我设法运行以下代码:
P =[1,3,5,4,5,2,2,4,6]
x = m.addVars(6,lb=-1, ub=1, vtype=GRB.INTEGER, name="x")
m.addConstr((quicksum(x[i] for i in range(len(P))) <=0), name=("con.format(i)"))
m.addConstr((quicksum(x[i] for i in range(len(P))) >=-2), name=("Const1"))
m.setObjective(quicksum(x[i]*P[i] for i in range(len(P))) , GRB.MAXIMIZE)
但是,优化{0: -1.0, 1: -1.0, 2: 1.0, 3: 1.0, 4: 1.0, 5: -1.0, 6: -1.0, 7: 0.0, 8: 1.0} 的结果表明,只有整体解决方案满足要求,但在这两者之间,算法的销量比之前购买的要好(例如 periode 5)。
因此,我需要以一种为每个时间步 [i] 引入约束的方式调整我的代码,以确保所有 privious 步 [1 到 i] 的总和也满足约束。
我发现了一些类似的问题(例如这里:Gurobi Python: how to write nested sum in a constraint),但没有人可以帮助我解决如何计算每个步骤中的临时总和的具体问题。不过,我希望你能!
提前致谢并致以最诚挚的问候!
【问题讨论】: