From 72b220e84a3c023e02df62be5cd2d123a02e9de0 Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Mon, 11 Feb 2019 13:28:13 -0800 Subject: [PATCH] import improvements to lookahead Signed-off-by: Nikolaj Bjorner --- src/sat/sat_lookahead.cpp | 21 +++++++++++++-------- src/sat/sat_model_converter.cpp | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/sat/sat_lookahead.cpp b/src/sat/sat_lookahead.cpp index 3536b21db..557624db5 100644 --- a/src/sat/sat_lookahead.cpp +++ b/src/sat/sat_lookahead.cpp @@ -321,9 +321,9 @@ namespace sat { double sum = 0; unsigned skip_candidates = 0; bool autarky = get_config().m_lookahead_global_autarky; - for (bool_var x : m_freevars) { - SASSERT(is_undef(x)); - if (!m_select_lookahead_vars.empty()) { + if (!m_select_lookahead_vars.empty()) { + for (bool_var x : m_freevars) { + SASSERT(is_undef(x)); if (m_select_lookahead_vars.contains(x)) { if (!autarky || newbies || in_reduced_clause(x)) { m_candidates.push_back(candidate(x, m_rating[x])); @@ -334,10 +334,15 @@ namespace sat { } } } - else if (newbies || active_prefix(x)) { - m_candidates.push_back(candidate(x, m_rating[x])); - sum += m_rating[x]; - } + } + if (m_candidates.empty() && (m_select_lookahead_vars.empty() || newbies)) { + for (bool_var x : m_freevars) { + SASSERT(is_undef(x)); + if (newbies || active_prefix(x)) { + m_candidates.push_back(candidate(x, m_rating[x])); + sum += m_rating[x]; + } + } } TRACE("sat", display_candidates(tout << "sum: " << sum << "\n");); if (skip_candidates > 0) { @@ -2285,7 +2290,7 @@ namespace sat { for (unsigned i = 0; i < m_trail.size() && !m_s.inconsistent(); ++i) { literal lit = m_trail[i]; if (m_s.value(lit) == l_undef && !m_s.was_eliminated(lit.var())) { - m_s.assign(lit, justification()); + m_s.assign_scoped(lit); ++num_units; } } diff --git a/src/sat/sat_model_converter.cpp b/src/sat/sat_model_converter.cpp index 17885f4e5..577588305 100644 --- a/src/sat/sat_model_converter.cpp +++ b/src/sat/sat_model_converter.cpp @@ -264,7 +264,7 @@ namespace sat { } void model_converter::insert(entry & e, literal_vector const& c) { - SASSERT(c.contains(literal(e.var(), false)) || c.contains(literal(e.var(), true))); + SASSERT(e.var() == null_bool_var || c.contains(literal(e.var(), false)) || c.contains(literal(e.var(), true))); SASSERT(m_entries.begin() <= &e); SASSERT(&e < m_entries.end()); for (literal l : c) e.m_clauses.push_back(l);