我已申报名单 facility
的 LpVariable
:
for fac in range (len(candidates)):
facility.append(LpVariable("Facility_{0}".format(fac),lowBound=0, upBound=1, cat= pulp.LpInteger ))
当我做 print(value(facility[i]))
,它给我的输出是 None
这是好的,因为所有的LpVariables默认都是None值。但在我的代码中,我想初始化为0,但当我解决问题时,最优解可以有0到1之间的任何值。
for i in range (len(facility)):
facility[i] = 0
如果我这样做:它会设置 facility[i] = 0
(整数值并且没有更多的LpVariable)。
如果我做 value(facility[i]) = 0.
我应该如何初始化这些变量?
你可以试试 facility[i].setInitialValue(0.)
如上所述 此处.
请注意,PuLP会将此调用委托给您所调用的解算器API中的相应方法。因此,只有在解算器支持的情况下,它才会工作。Gurobi和CPLEX支持,我不清楚其他解算器是否支持。
现在有一些文档介绍了如何在pulp中做这件事,以及哪些解算器是可用的。
https:/coin-or.github.iopulpguideshow_to_mip_start.html。
作为一个总结,你需要做的是 setInitialValue
然后在您需要的值上设置 mip_start
参数的解算器调用。
import pulp
# facility is a dictionary with LpVariable()
# model is an LpProblem()
facility[i].setInitialValue(0)
solver = pulp.PULP_CBC_CMD(msg=1, mip_start=1)
model.solve(solver)
有些求解器(如CBC)需要一个完整的解(至少在当前版本中是随纸浆附送的)。其他的(CPLEX和GUROBI),可以修复不完整的解。