21 #ifndef OR_TOOLS_SAT_SAT_INPROCESSING_H_
22 #define OR_TOOLS_SAT_SAT_INPROCESSING_H_
44 absl::Span<const Literal> clause);
89 : assignment_(
model->GetOrCreate<
Trail>()->Assignment()),
97 blocked_clause_simplifier_(
99 bounded_variable_elimination_(
145 double total_dtime_ = 0.0;
154 int64 last_num_redundant_literals_ = 0;
155 int64 last_num_fixed_variables_ = 0;
172 : assignment_(
model->GetOrCreate<
Trail>()->Assignment()),
198 return first_stamps_[
a.Index()] < first_stamps_[
b.Index()] &&
199 last_stamps_[
b.Index()] < last_stamps_[
a.Index()];
212 bool stamps_are_already_computed_ =
false;
216 int64 num_subsumed_clauses_ = 0;
217 int64 num_removed_literals_ = 0;
218 int64 num_fixed_ = 0;
226 std::vector<LiteralIndex> children_;
230 std::vector<LiteralIndex> dfs_stack_;
251 : assignment_(
model->GetOrCreate<
Trail>()->Assignment()),
260 void InitializeForNewRound();
261 void ProcessLiteral(
Literal current_literal);
262 bool ClauseIsBlocked(
Literal current_literal,
263 absl::Span<const Literal> clause);
272 int32 num_blocked_clauses_ = 0;
273 int64 num_inspected_literals_ = 0;
281 std::deque<Literal> queue_;
285 DEFINE_INT_TYPE(ClauseIndex,
int32);
293 : parameters_(*
model->GetOrCreate<SatParameters>()),
294 assignment_(
model->GetOrCreate<
Trail>()->Assignment()),
304 int NumClausesContaining(
Literal l);
305 void UpdatePriorityQueue(BooleanVariable
var);
306 bool CrossProduct(BooleanVariable
var);
307 void DeleteClause(
SatClause* sat_clause);
309 void AddClause(absl::Span<const Literal> clause);
318 template <
bool score_only,
bool with_binary_only>
319 bool ResolveAllClauseContaining(
Literal lit);
321 const SatParameters& parameters_;
329 int propagation_index_;
332 int64 num_inspected_literals_ = 0;
333 int64 num_simplifications_ = 0;
334 int64 num_blocked_clauses_ = 0;
335 int64 num_eliminated_variables_ = 0;
336 int64 num_literals_diff_ = 0;
337 int64 num_clauses_diff_ = 0;
340 int64 score_threshold_;
344 std::vector<Literal> resolvant_;
348 struct VariableWithPriority {
353 int Index()
const {
return var.value(); }
354 bool operator<(
const VariableWithPriority& o)
const {
355 return priority < o.priority;
358 IntegerPriorityQueue<VariableWithPriority> queue_;
362 std::vector<BooleanVariable> need_to_be_updated_;
367 DEFINE_INT_TYPE(ClauseIndex,
int32);
376 #endif // OR_TOOLS_SAT_SAT_INPROCESSING_H_