diff --git a/src/opt/weighted_maxsat.cpp b/src/opt/weighted_maxsat.cpp index 2d2d67320..b7b906ca6 100644 --- a/src/opt/weighted_maxsat.cpp +++ b/src/opt/weighted_maxsat.cpp @@ -347,6 +347,11 @@ namespace opt { unsigned bv_size = 0; m_bvsls.get_model(m_model); VERIFY(bv.is_numeral(res.optimum, m_lower, bv_size)); + for (unsigned i = 0; i < m_soft.size(); ++i) { + expr_ref tmp(m); + m_model->eval(m_soft[i].get(), tmp, true); + m_assignment[i] = m.is_true(tmp); + } break; } case l_false: diff --git a/src/tactic/sls/bvsls_opt_engine.cpp b/src/tactic/sls/bvsls_opt_engine.cpp index 37587428c..ff17ced2b 100644 --- a/src/tactic/sls/bvsls_opt_engine.cpp +++ b/src/tactic/sls/bvsls_opt_engine.cpp @@ -100,6 +100,8 @@ expr_ref bvsls_opt_engine::maximize(expr_ref const & objective) m_mpz_manager.set(score, top_score()); m_mpz_manager.set(max_score, m_powers(obj_bv_sz)); m_mpz_manager.dec(max_score); + IF_IVERBOSE(10, verbose_stream() << "Initial score: " << m_mpz_manager.to_string(score) << std::endl;); + save_model(score); while (check_restart((unsigned)m_stats.m_stopwatch.get_current_seconds()) && @@ -126,7 +128,8 @@ expr_ref bvsls_opt_engine::maximize(expr_ref const & objective) m_mpz_manager.set(score, top_score()); } else { - TRACE("sls_opt", tout << "New best: " << m_mpz_manager.to_string(score) << std::endl;); + TRACE("sls_opt", tout << "New optimum: " << m_mpz_manager.to_string(score) << std::endl;); + IF_IVERBOSE(10, verbose_stream() << "New optimum: " << m_mpz_manager.to_string(score) << std::endl;); func_decl * fd = consts[new_const]; incremental_score(fd, new_value); m_obj_evaluator.update(fd, new_value);