2015-12-20 5 views
1

Мне нужна глубокая копия LpProblem, но LpVariables проблемных копий по ссылке, когда я использую метод LpProblem.deepcopy(). В этой ситуации, если я изменяю верхнюю границу одной из переменных задачи копирования, это изменение влияет на исходные переменные задачи.Как сделать глубокую копию LpVariables

Рассмотрим следующую ситуацию:

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

в этом случае, верхняя граница переменной в currentProblem также изменяется 10.

Как я могу глубоко копируете LpProblem, что глубокие копии всех его элементов? (включая LpVariables)

ответ

0

Кажется, что для этого нет решения. Поэтому я написал две функции для сохранения и восстановления значений 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 
Смежные вопросы