Python 向PYSCIPOPT添加约束?
我创建了一个模型,但在理解如何列出公式、检索LP文件、约束列表以及理解是否正确输入了约束表达式时遇到了困难?优化在纸浆中有效,但在PYSCIPOPT中无效。请参阅下文:Python 向PYSCIPOPT添加约束?,python,optimization,scip,Python,Optimization,Scip,我创建了一个模型,但在理解如何列出公式、检索LP文件、约束列表以及理解是否正确输入了约束表达式时遇到了困难?优化在纸浆中有效,但在PYSCIPOPT中无效。请参阅下文: model = Model('name') shift_starts = {} load = {} capacity = {} unmet_demand = {} for zone in zones: for timeslot in timeslots: load[zone,timeslot] =
model = Model('name')
shift_starts = {}
load = {}
capacity = {}
unmet_demand = {}
for zone in zones:
for timeslot in timeslots:
load[zone,timeslot] = model.addVar(vtype="C",name="load(%s,%s)" % (zone,timeslot), lb=0.0)
capacity[zone,timeslot] = model.addVar(vtype="C",name="capacity(%s,%s)" % (zone,timeslot), lb=0.0)
unmet_demand[zone,timeslot] = model.addVar(vtype="C",name="unmet_demand(%s,%s)" % (zone,timeslot), lb=0.0)
for length in shift_lengths:
shift_starts[zone,length,timeslot] = model.addVar(vtype="I",name="shift_starts(%s,%s,%s)" % (zone,length,timeslot), lb=0)
for zone in zones:
for timeslot in timeslots[:11]:
rhs = Expr()
for length in shift_lengths:
if length - timeslot > 1:
rhs += quicksum(shift_starts[zone, length, timeslot2] for timeslot2 in timeslots[timeslot-length+1:])
rhs += quicksum(shift_starts[zone, length, timeslot2] for timeslot2 in timeslots[:timeslot+1])
else:
rhs += quicksum(shift_starts[zone, length, timeslot2] for timeslot2 in timeslots[timeslot-length+1:timeslot+1])
model.addCons(capacity[zone,timeslot] <= rhs*productivity[zone][0], name="capacity(%s,%s)" % (zone,timeslot))
for zone in zones:
for timeslot in timeslots[12:]:
rhs = Expr()
for length in shift_lengths:
rhs += quicksum(shift_starts[zone, length, timeslot2] for timeslot2 in timeslots[timeslot-length+1:timeslot+1])
model.addCons(capacity[zone,timeslot] <= rhs*productivity[zone][0], name="capacity(%s,%s)" % (zone,timeslot))
for zone in zones:
for timeslot in timeslots:
model.addCons(unmet_demand[zone, timeslot] >= load[zone, timeslot] - capacity[zone, timeslot], name="unmet_demand(%s,%s)" % (zone,timeslot))
for zone in zones:
model.addCons(load[zone,0] >= unmet_demand[zone,(t-1)] + arrivals[zone][0], name="load(%s,%s)" % (zone,timeslot))
for timeslot in timeslots[1:]:
model.addCons(load[zone,timeslot] >= unmet_demand[zone,timeslot-1] + arrivals[zone][timeslot], name="load(%s,%s)" % (zone,timeslot))
rhs = Expr()
for length in shift_lengths:
model.addCons(quicksum(shift_starts[zone, length, timeslot] for zone in zones for timeslot in timeslots) <= max_shifts[length-1], name="shifts(%s)" % (length))
rhs += quicksum(shift_starts[zone, length, timeslot] for zone in zones for timeslot in timeslots) * length
model.setObjective(quicksum(shift_starts[zone,length,timeslot] for (zone, length, timeslot) in shift_starts), "minimize")
model.optimize()
我的约束设置是否正确?请注意,由于某些变量尚未定义,现在无法执行代码。语法似乎还可以,但很抱歉,我们不会为您检查模型的正确性。我建议您使用model.writeProblemmodel.cip将模型导出为*.cip格式。这种格式是可读的,可以让您在代码中发现问题 谢谢,我觉得这个包的文档不是很清楚。创建.cip文件使我能够轻松地查看约束,发现一个小问题并加以纠正。这个模型现在似乎是正确的。有没有办法从.lp或.mps文件加载模型?还是保存为这些格式?我没有在文档中看到它。是的,您可以使用类似于m=Model的东西来阅读问题,然后使用m.readProblemmymodel.lp。