问题
我使用PySCIPOpt在SCIP中实现了一个分支和价格算法。我想向pyscipopt.scip.Variable对象添加额外的属性(这是PySCIPOpt用来处理模型变量的类),以便存储有关变量的附加信息。
然而,用传统的Python--向对象添加属性的方法--这样做给了我一个AttributeError。
我怀疑--没有真正了解发生了什么--虽然这在“经典”python类中是可能的,但是Variable对象是由PySCIPOpt的底层Cython代码创建的,因此,在某种程度上不支持动态添加属性。
对于我的分支和价格代码的列生成部分,每当Pricer创建一个新变量时,我需要以某种方式存储我的变量所代表的解决方案组件的类型(例如,对于切割库存实现,这将是该变量对应的切割模式)。我相信,通过添加属性来存储有关变量的附加信息--如果有效的话--将是实现这一目标的最优雅的方法。
这是一辆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的属性。
问题
发布于 2019-03-25 17:09:33
据我所知,这是不可能的动态方式。但是,对于某些类(Model、Constraint、.),有一些空白对象占位符可以接受任何Python:
cdef class Constraint:
cdef SCIP_CONS* scip_cons
cdef public object data我认为它们应该存在于所有类中。见此处:https://github.com/SCIP-Interfaces/PySCIPOpt/issues/268
https://stackoverflow.com/questions/55342311
复制相似问题