ปัญหา
ฉันใช้ PySCIPOpt เพื่อใช้อัลกอริทึมสาขาและราคาใน SCIP ฉันต้องการเพิ่มแอตทริบิวต์เพิ่มเติมให้กับวัตถุ pyscipopt.scip.Variable
(นี่คือคลาสที่ PySCIPOpt ใช้เพื่อจัดการตัวแปรโมเดล) เพื่อจัดเก็บข้อมูลเพิ่มเติมเกี่ยวกับตัวแปร
อย่างไรก็ตาม การทำเช่นนี้ด้วยวิธี Python แบบคลาสสิกในการเพิ่มแอตทริบิวต์ให้กับวัตถุ ทำให้ฉันได้ AttributeError
ความสงสัยของฉัน - โดยไม่เข้าใจจริงๆว่าเกิดอะไรขึ้น - แม้ว่าสิ่งนี้จะเป็นไปได้ด้วยคลาสหลาม "คลาสสิก" แต่วัตถุ Variable
นั้นถูกสร้างขึ้นโดยโค้ด Cython พื้นฐานของ PySCIPOpt ดังนั้นจึงไม่รองรับการเพิ่มแอตทริบิวต์แบบไดนามิก
สำหรับส่วนการสร้างคอลัมน์ของรหัสสาขาและรหัสราคาของฉัน ฉันต้องจัดเก็บเมื่อใดก็ตามที่ตัวแปรใหม่ถูกสร้างขึ้นโดย 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
คำถาม
- มีวิธีใดในการเพิ่มคุณลักษณะให้กับตัวแปรแบบไดนามิกหรือไม่?
- มีวิธีอื่นหรือที่ดีกว่าในการจัดเก็บข้อมูลเกี่ยวกับตัวแปรเพื่อให้สามารถเข้าถึงได้ตลอดรูทีน SCIP ทั้งหมดของฉันหรือไม่ (เช่น Pricers และ Branchrules ควรสามารถเข้าถึงได้ด้วย)