如何深度复制 LpVariables
How to deepcopy LpVariables
我需要深度复制 LpProblem
,但是当我使用 LpProblem.deepcopy()
方法时,LpVariables
的问题通过引用复制。在这种情况下,如果我更改复制问题变量之一的上限,此更改会影响原始问题变量。
考虑以下情况:
branch1 = currentProblem.deepcopy()
v = ... # some variable of branch1
v.upBound = 10
在这种情况下,currentProblem
中变量的上限也更改为 10。
如何深度复制 LpProblem
以深度复制其所有元素? (包括LpVariables
)
这个好像没有解决办法。所以我写了两个函数来保存和恢复 LpVariables
的值。它对我有帮助。
def saveVarsAsDict(lpProblem):
varsNameValue = {}
for v in lpProblem._variables:
if v.varValue != 0:
varsNameValue[v.name] = v.varValue
return varsNameValue
def restoreVarsValues(lpProblem, varsNameValue):
for v in lpProblem._variables:
if v.name in varsNameValue:
v.varValue = varsNameValue[v.name]
else:
v.varValue = 0
我需要深度复制 LpProblem
,但是当我使用 LpProblem.deepcopy()
方法时,LpVariables
的问题通过引用复制。在这种情况下,如果我更改复制问题变量之一的上限,此更改会影响原始问题变量。
考虑以下情况:
branch1 = currentProblem.deepcopy()
v = ... # some variable of branch1
v.upBound = 10
在这种情况下,currentProblem
中变量的上限也更改为 10。
如何深度复制 LpProblem
以深度复制其所有元素? (包括LpVariables
)
这个好像没有解决办法。所以我写了两个函数来保存和恢复 LpVariables
的值。它对我有帮助。
def saveVarsAsDict(lpProblem):
varsNameValue = {}
for v in lpProblem._variables:
if v.varValue != 0:
varsNameValue[v.name] = v.varValue
return varsNameValue
def restoreVarsValues(lpProblem, varsNameValue):
for v in lpProblem._variables:
if v.name in varsNameValue:
v.varValue = varsNameValue[v.name]
else:
v.varValue = 0