如何深度复制 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