dwavesystems / dimod

A shared API for QUBO/Ising samplers.
https://docs.ocean.dwavesys.com/en/stable/docs_dimod/
Apache License 2.0
121 stars 80 forks source link

Display constraint weight and penalty in CQM #1260

Open JoelPasvolsky opened 1 year ago

JoelPasvolsky commented 1 year ago

Application I want to be able to see whether I set a hard or soft constraint on my CQM and what value of weight & penalty fo rsoft constraints.

Proposed Solution Display as part of the dimod.CQM.constraint

Alternatives Considered If that causes backward compatibility, maybe a new field. .

Additional Context

cqm1 = dimod.ConstrainedQuadraticModel()
a = dimod.Integer('a')
cqm1.add_constraint(a <= 3, weight=55, penalty="linear", label="Soft constraint")
cqm1.constraints["Soft constraint"]

Output Le(QuadraticModel({'a': 1.0}, {}, 0.0, {'a': 'INTEGER'}, dtype='float64'), 3) gives no hint of the type of constraint.

alexzucca90 commented 1 year ago

If you want to check whether the constraint is hard or soft you can use

try:
    print(cqm1._soft["Soft constraint"])
except KeyError:
    print("not a soft constraint")

and that will show the weight and penalty

JoelPasvolsky commented 1 year ago

We should make that a non-internal method though, right?