首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向PySCIPOpt类添加属性

如何向PySCIPOpt类添加属性
EN

Stack Overflow用户
提问于 2019-03-25 16:25:39
回答 1查看 209关注 0票数 1

问题

我使用PySCIPOpt在SCIP中实现了一个分支和价格算法。我想向pyscipopt.scip.Variable对象添加额外的属性(这是PySCIPOpt用来处理模型变量的类),以便存储有关变量的附加信息。

然而,用传统的Python--向对象添加属性的方法--这样做给了我一个AttributeError

我怀疑--没有真正了解发生了什么--虽然这在“经典”python类中是可能的,但是Variable对象是由PySCIPOpt的底层Cython代码创建的,因此,在某种程度上不支持动态添加属性。

对于我的分支和价格代码的列生成部分,每当Pricer创建一个新变量时,我需要以某种方式存储我的变量所代表的解决方案组件的类型(例如,对于切割库存实现,这将是该变量对应的切割模式)。我相信,通过添加属性来存储有关变量的附加信息--如果有效的话--将是实现这一目标的最优雅的方法。

这是一辆MWE:

代码语言:javascript
复制
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

回传

代码语言:javascript
复制
AttributeError: 'pyscipopt.scip.Variable' object has no attribute 'foo'

而不是添加一个名为foo的属性。

问题

  • 有什么方法可以动态地向变量添加属性吗?
  • 是否有一种不同/更好的方法来存储变量的信息,以便可以在我的整个SCIP例程中访问它(例如,价格和分支规则也应该可以访问它)?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-25 17:09:33

据我所知,这是不可能的动态方式。但是,对于某些类(ModelConstraint、.),有一些空白对象占位符可以接受任何Python:

代码语言:javascript
复制
cdef class Constraint:
    cdef SCIP_CONS* scip_cons
    cdef public object data

我认为它们应该存在于所有类中。见此处:https://github.com/SCIP-Interfaces/PySCIPOpt/issues/268

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55342311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档