rewrite drat checker for sat; make fz presolve deterministic; more optims on sat internals

This commit is contained in:
Laurent Perron
2018-05-03 15:00:06 +02:00
parent e452a83dc4
commit df333efbcd
26 changed files with 1653 additions and 232 deletions

View File

@@ -966,13 +966,17 @@ IntegerTrail::Dependencies(int trail_index) const {
void IntegerTrail::AppendLiteralsReason(int trail_index,
std::vector<Literal>* output) const {
const int reason_index = integer_trail_[trail_index].reason_index;
output->insert(
output->end(),
literals_reason_buffer_.begin() + literals_reason_starts_[reason_index],
reason_index + 1 < literals_reason_starts_.size()
? literals_reason_buffer_.begin() +
literals_reason_starts_[reason_index + 1]
: literals_reason_buffer_.end());
const int start = literals_reason_starts_[reason_index];
const int end = reason_index + 1 < literals_reason_starts_.size()
? literals_reason_starts_[reason_index + 1]
: literals_reason_buffer_.size();
for (int i = start; i < end; ++i) {
const Literal l = literals_reason_buffer_[i];
if (!added_variables_[l.Variable()]) {
added_variables_.Set(l.Variable());
output->push_back(l);
}
}
}
std::vector<Literal> IntegerTrail::ReasonFor(IntegerLiteral literal) const {
@@ -1015,6 +1019,11 @@ void IntegerTrail::MergeReasonIntoInternal(std::vector<Literal>* output) const {
tmp_var_to_trail_index_in_queue_.end(),
[](int v) { return v == 0; }));
added_variables_.ClearAndResize(BooleanVariable(trail_->NumVariables()));
for (const Literal l : *output) {
added_variables_.Set(l.Variable());
}
// During the algorithm execution, all the queue entries that do not match the
// content of tmp_var_to_trail_index_in_queue_[] will be ignored.
for (const int trail_index : tmp_queue_) {
@@ -1109,13 +1118,13 @@ void IntegerTrail::MergeReasonIntoInternal(std::vector<Literal>* output) const {
for (const IntegerVariable var : tmp_to_clear_) {
tmp_var_to_trail_index_in_queue_[var] = 0;
}
gtl::STLSortAndRemoveDuplicates(output);
}
absl::Span<Literal> IntegerTrail::Reason(const Trail& trail,
int trail_index) const {
const int index = boolean_trail_index_to_integer_one_[trail_index];
std::vector<Literal>* reason = trail.GetEmptyVectorToStoreReason(trail_index);
added_variables_.ClearAndResize(BooleanVariable(trail_->NumVariables()));
AppendLiteralsReason(index, reason);
DCHECK(tmp_queue_.empty());
for (const IntegerLiteral lit : Dependencies(index)) {