2015-12-20 2 views
1

J'ai besoin de deepcopy un LpProblem, mais LpVariables des copies de problèmes par référence lorsque j'utilise la méthode LpProblem.deepcopy(). Dans cette situation, si je change la limite supérieure de l'une des variables du problème de copie, ce changement affecte les variables de problème d'origine.Comment deepcopy LpVariables

Envisager situation suivante:

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

dans ce cas, la limite supérieure d'une variable dans currentProblem change également à 10.

Comment puis-je copier une profondeur LpProblem que des copies profondes tous ses éléments? (y compris LpVariables)

Répondre

0

Il semble qu'il n'y ait pas de solution pour cela. J'ai donc écrit deux fonctions pour enregistrer et restaurer les valeurs de LpVariables. Cela m'aide pour cette situation.

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