dwavesystems / dwavebinarycsp

Map constraint satisfaction problems with binary variables to binary quadratic models.
https://docs.ocean.dwavesys.com/projects/binarycsp/en/latest
Apache License 2.0
20 stars 27 forks source link

Disable or warn if variables are given in dict for added constraints #41

Open JoelPasvolsky opened 6 years ago

JoelPasvolsky commented 6 years ago

I understand that it's nice to have flexibility, and it's a user mistake, but this is a hole I likely will not be the only one to fall into:

import dwavebinarycsp csp = dwavebinarycsp.ConstraintSatisfactionProblem(dwavebinarycsp.BINARY) csp.add_constraint([(0, 0, 0), (0, 1, 0), (1, 0, 0), (1, 1, 1)], {'a', 'b', 'c'}) csp.constraints Out[89]: [Constraint.from_configurations(frozenset([(1, 0, 0), (0, 1, 0), (0, 0, 0), (1, 1, 1)]), ('a', 'c', 'b'), Vartype.BINARY, name='Constraint')]

It's very easy to inadvertently use {} instead of [] or () and how often will someone really want random assignment of variables on a constraint?

arcondello commented 6 years ago

What we want is any ordered iterable. So a generator or OrderedDict would both work. We could also just limit it to list/tuple.

Let me think about it