如何在PuLP中初始化LpVariable?

问题描述 投票:1回答:2

我已申报名单 facilityLpVariable:

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

python-3.x linear-programming pulp
2个回答
2
投票

你可以试试 facility[i].setInitialValue(0.)如上所述 此处.

请注意,PuLP会将此调用委托给您所调用的解算器API中的相应方法。因此,只有在解算器支持的情况下,它才会工作。Gurobi和CPLEX支持,我不清楚其他解算器是否支持。


1
投票

现在有一些文档介绍了如何在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),可以修复不完整的解。

© www.soinside.com 2019 - 2024. All rights reserved.