Проблема
Я использую PySCIPOpt для реализации алгоритма ветвления и цены в SCIP. Я хотел бы добавить дополнительные атрибуты к pyscipopt.scip.Variable
объектам (это класс, который PySCIPOpt использует для обработки переменных модели), чтобы хранить дополнительную информацию о переменных.
Однако выполнение этого классическим способом Python для добавления атрибута к объекту дает мне AttributeError
.
Мое подозрение - не совсем понимая, что происходит, - состоит в том, что, хотя это возможно с «классическим» классом python, объекты Variable
создаются базовым кодом Cython PySCIPOpt, и поэтому динамическое добавление атрибутов почему-то не поддерживается.
Для части генерации столбцов моего кода ветки и цены мне нужно каким-то образом сохранять, всякий раз, когда новая переменная создается ценником, какой тип компонента решения представляет моя переменная (например, для реализации Cutting Stock, это будет шаблон резки переменная соответствует). Я считаю, что хранение дополнительной информации о переменных путем добавления атрибута - если бы он работал - было бы наиболее элегантным способом добиться этого.
Вот MWE:
from pyscipopt import Model
s = Model()
new_var = s.addVar(vtype="C", obj = 5)
new_var.foo = {'bar': 'baz'} # some arbitrary information about new_var I want to store
который возвращается
AttributeError: 'pyscipopt.scip.Variable' object has no attribute 'foo'
вместо добавления атрибута с именем foo
.
Вопрос
- Есть ли способ динамически добавлять атрибуты к переменным?
- Есть ли другой / лучший способ хранения информации о переменных, чтобы к ней можно было получить доступ на протяжении всей моей процедуры SCIP (например, она также должна быть доступна для Pricers и Branchrules)?