dimod
dimod copied to clipboard
Add methods to get more statistics from the CQM object
It would be nice to have methods to quickly get some statistics about the CQM model. These are my wish list:
cqm.num_variables
cqm.num_binaries
cqm.num_integers
cqm.num_discretes
cqm.num_linear_constraints
cqm.num_quadratic_constraints
cqm.num_le_ineqaultiy_constraints
cqm.num_ge_ineqaultiy_constraints
cqm.num_equality_constraints
I currently get some of these information using this script.
integer_count = 0
binary_count = 0
for vtype in cqm.variables.vartypes:
if vtype is vartypes.INTEGER:
integer_count += 1
elif vtype is vartypes.BINARY:
binary_count += 1
else:
raise ValueError
print("------ variables information:")
print("total num vars:", len(cqm.variables))
print("num_binary:", binary_count)
print("num_Integers:", integer_count)
assert (binary_count + integer_count == len(cqm.variables))
num_quad_cstr = 0
num_linear_cstr = 0
for c, v in cqm.constraints.items():
if len(v.lhs.quadratic) > 0:
num_quad_cstr += 1
else:
num_linear_cstr += 1
print("----- constraints info")
print("total num cstr:", len(cqm.constraints))
if num_linear_cstr > 0:
print("num_linear_cstr:", num_linear_cstr)
if num_quad_cstr > 0:
print("num_quad_cstr:", num_quad_cstr)
assert (num_quad_cstr + num_linear_cstr == len(cqm.constraints))
I am a tiny bit hesitant to implement some of these, pending a resolution to https://github.com/dwavesystems/dimod/issues/849.
Some useful snippets in the mean time
num_variables = len(cqm.variables)
num_binaries = sum(cqm.vartype(v) is dimod.BINARY for v in cqm.variables)
num_integers = sum(cqm.vartype(v) is dimod.INTEGER for v in cqm.variables)
num_discretes = len(cqm.discrete)
num_linear_constraints = sum(constraint.lhs.is_linear() for constraint in cqm.constriants.values())
num_quadratic_constraints = sum(not constraint.lhs.is_linear() for constraint in cqm.constriants.values())
num_le_inequality_constraints = sum(constraint.sense is dimod.sym.Sense.Le for constraint in constraints.values())
num_ge_inequality_constraints = sum(constraint.sense is dimod.sym.Sense.Ge for constraint in constraints.values())
num_equality_constraints = sum(constraint.sense is dimod.sym.Sense.Eq for constraint in constraints.values())