1

我已宣布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. 应该如何初始化这些变量?

4

2 回答 2

2

你可以试试,这里facility[i].setInitialValue(0.)描述的。

请注意,PuLP 会将此调用委托给您正在调用的求解器的 API 中的相应方法。因此,只有当求解器支持它时它才会起作用。Gurobi 和 CPLEX 支持它,我不确定其他求解器。

于 2015-10-28T16:01:05.920 回答
1

现在有一些关于如何在纸浆中执行此操作以及可用的求解器的文档。

https://coin-or.github.io/pulp/guides/how_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)可以修复不完整的解决方案。

于 2020-04-22T17:05:23.640 回答