@@ -54,7 +54,7 @@ namespace opt {
54
54
lbool operator ()() override {
55
55
TRACE (" opt" , tout << " weighted maxsat\n " ;);
56
56
scoped_ensure_theory wth (*this );
57
- obj_map<expr, rational> soft;
57
+ obj_map<expr, rational> soft;
58
58
reset ();
59
59
lbool is_sat = find_mutexes (soft);
60
60
if (is_sat != l_true) {
@@ -64,19 +64,18 @@ namespace opt {
64
64
expr_ref_vector asms (m);
65
65
vector<expr_ref_vector> cores;
66
66
67
- obj_map<expr, rational>::iterator it = soft.begin (), end = soft.end ();
68
- for (; it != end; ++it) {
69
- assert_weighted (wth (), it->m_key , it->m_value );
70
- if (!is_true (it->m_key )) {
71
- m_upper += it->m_value ;
67
+ for (auto const & kv : soft) {
68
+ assert_weighted (wth (), kv.m_key , kv.m_value );
69
+ if (!is_true (kv.m_key )) {
70
+ m_upper += kv.m_value ;
72
71
}
73
72
}
74
73
wth ().init_min_cost (m_upper - m_lower);
75
74
trace_bounds (" wmax" );
76
-
77
- TRACE (" opt" ,
78
- s ().display (tout)<< " \n " ;
79
- tout << " lower: " << m_lower << " upper: " << m_upper << " \n " ;);
75
+
76
+ TRACE (" opt" ,
77
+ s ().display (tout) << " \n " ;
78
+ tout << " lower: " << m_lower << " upper: " << m_upper << " \n " ;);
80
79
while (m.inc () && m_lower < m_upper) {
81
80
is_sat = s ().check_sat (0 , nullptr );
82
81
if (!m.inc ()) {
@@ -104,8 +103,9 @@ namespace opt {
104
103
SASSERT (m_lower <= m_upper);
105
104
}
106
105
107
- update_assignment ();
108
-
106
+ if (m_model)
107
+ update_assignment ();
108
+
109
109
if (m.inc () && is_sat == l_undef && m_lower == m_upper) {
110
110
is_sat = l_true;
111
111
}
0 commit comments