-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Free Propagation #50
Comments
If |
Thats true, but this needs extra propagation. |
I was just looking at the example. Yes, you could equivalently write it as
This is typically the stuff we do when encoding. Remember the last paper Torsten send around? One could probably also compute some unsatisfiable cores to find sets of literals where at least one literal is true. |
I keep this one open because it would be a very simple to implement preprocessing technique that just requires a hash table + one pass over the edges. |
Given this simple sample program, clingo-dl (by default) can not determine unsat without a choice.
The connection that "At least one of
x>=y+10
andx>=y+15
" is not yet made visible to the solver I guess.At least in the case where the same literal is used (with reversed sign) for two edges going in the same direction, one constraint can be simplified. In the example above, this would mean that &
diff{x} >= y+10
is always true. This can lead to stronger propagation without changing the Algorithm, just by posting different constraints.I could not spot this behaviour in the wild (haven't check for my multishot instances) but assume a path where you can chose to take the short route or the long route. If the literal is shared (or equality is detected by clasp) this could improve performance for such examples. Of course it would be great to have a more general "at least one of ..." restriction detection in case of multiple branches or missing equality preprocessing.
The text was updated successfully, but these errors were encountered: