2

をディープコピーする必要がありますLpProblemが、メソッドLpVariablesを使用すると問題が参照によってコピーされますLpProblem.deepcopy()。この状況で、コピー問題の変数の 1 つの上限を変更すると、この変更は元の問題変数に影響します。

次の状況を考慮してください。

    branch1 = currentProblem.deepcopy()
    v = ... # some variable of branch1
    v.upBound = 10

この場合、変数の上限currentProblemも 10 に変更されます。

LpProblemすべての要素をディープ コピーする方法を教えてください。(含むLpVariables)

4

1 に答える 1

0

これに対する解決策はないようです。そこで、 の値を保存および復元する 2 つの関数を作成しました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
于 2016-02-25T15:04:56.977 に答える