Google OR-Tools v9.11
a fast and portable software suite for combinatorial optimization
|
#include <probing.h>
Public Member Functions | |
std::string | ToString () const |
Public Attributes | |
double | deterministic_limit = 1.0 |
bool | extract_binary_clauses = false |
bool | use_tree_look = true |
bool | use_queue = true |
bool | subsume_with_binary_clause = true |
bool | log_info = false |
We assume this is also true if –v 1 is activated. | |
Options for the FailedLiteralProbing() code below.
A good reference for the algorithms involved here is the paper "Revisiting Hyper Binary Resolution" Marijn J. H. Heule, Matti Jarvisalo, Armin Biere, http://www.cs.utexas.edu/~marijn/cpaior2013.pdf
|
inline |
double operations_research::sat::ProbingOptions::deterministic_limit = 1.0 |
The probing will consume all this deterministic time or stop if nothing else can be deduced and everything has been probed until fix-point. The fix point depend on the extract_binay_clauses option:
If true, we will do more work and stop when all failed literal have been found and all hyper binary resolution have been performed.
To be fast, we only use the binary clauses in the binary implication graph for the equivalence detection. So the power of the equivalence detection changes if the extract_binay_clauses option is true or not.
bool operations_research::sat::ProbingOptions::extract_binary_clauses = false |
This is also called hyper binary resolution. Basically, we make sure that the binary implication graph is augmented with all the implication of the form a => b that can be derived by fixing 'a' at level zero and doing a propagation using all constraints. Note that we only add clauses that cannot be derived by the current implication graph.
With these extra clause the power of the equivalence literal detection using only the binary implication graph with increase. Note that it is possible to do exactly the same thing without adding these binary clause first. This is what is done by yet another probing algorithm (currently in simplification.cc).
bool operations_research::sat::ProbingOptions::log_info = false |
bool operations_research::sat::ProbingOptions::subsume_with_binary_clause = true |
If we detect as we probe that a new binary clause subsumes one of the non-binary clause, we will replace the long clause by the binary one. This is orthogonal to the extract_binary_clauses parameters which will add all binary clauses but not necessarily check for subsumption.
bool operations_research::sat::ProbingOptions::use_queue = true |
bool operations_research::sat::ProbingOptions::use_tree_look = true |
Use a version of the "Tree look" algorithm as explained in the paper above. This is usually faster and more efficient. Note that when extracting binary clauses it might currently produce more "redundant" one in the sense that a transitive reduction of the binary implication graph after all hyper binary resolution have been performed may need to do more work.