Masalah
Saya menggunakan PySCIPOpt untuk mengimplementasikan algoritma cabang dan harga di SCIP. Saya ingin menambahkan atribut tambahan ke objek pyscipopt.scip.Variable
(ini adalah kelas yang digunakan PySCIPOpt untuk menangani variabel model) untuk menyimpan informasi tambahan tentang variabel.
Namun, melakukan ini dengan cara Python klasik menambahkan atribut ke suatu objek, memberi saya AttributeError
.
Kecurigaan saya - tanpa benar-benar memahami apa yang terjadi - adalah bahwa meskipun hal ini dimungkinkan dengan kelas python "klasik", objek Variable
dibuat oleh kode Cython yang mendasari PySCIPOpt dan oleh karena itu, penambahan atribut secara dinamis tidak didukung.
Untuk bagian pembuatan kolom dari kode Cabang dan Harga saya, saya perlu menyimpan, setiap kali variabel baru dibuat oleh Pricer, jenis komponen solusi apa yang diwakili oleh variabel saya (misalnya untuk implementasi Pemotongan Stok, itu akan menjadi pola pemotongan variabelnya sesuai dengan). Saya percaya menyimpan informasi tambahan pada variabel dengan menambahkan atribut akan - jika berhasil - menjadi cara paling elegan untuk mencapai hal ini.
Inilah 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
yang kembali
AttributeError: 'pyscipopt.scip.Variable' object has no attribute 'foo'
alih-alih menambahkan atribut bernama foo
.
Pertanyaan
- Apakah ada cara untuk menambahkan atribut ke variabel secara dinamis?
- Apakah ada cara yang berbeda/lebih baik untuk menyimpan informasi pada variabel sehingga dapat diakses di seluruh rutinitas SCIP saya (misalnya, informasi tersebut juga harus dapat diakses oleh Pricers dan Branchrules)?