@@ -88,19 +88,25 @@ Int evalGoal(const vec<Pair<weight_t, Minisat::vec<Lit>* > >& soft_cls, vec<bool
8888 Minisat::vec<Lit>&soft_unsat)
8989{
9090 Int sum = 0 ;
91- bool sat = false ;
9291 soft_unsat.clear ();
9392 for (int i = 0 ; i < soft_cls.size (); i++) {
94- Lit p = soft_cls[i].snd ->last (); if (soft_cls[i].snd ->size () == 1 ) p = ~p;
93+ bool sat;
94+ Lit p = soft_cls[i].snd ->last ();
9595 assert (var (p) < model.size ());
96- if ((( sign (p) && !model[var (p)]) || (!sign (p) && model[var (p)]))
97- && !(sat = satisfied_soft_cls (soft_cls[i].snd , model))) {
96+
97+ if (soft_cls[i].snd ->size () == 1 ) {
98+ sat = (sign (p) && !model[var (p)]) || (!sign (p) && model[var (p)]);
99+ p = ~p;
100+ } else {
101+ sat = satisfied_soft_cls (soft_cls[i].snd , model);
102+ model[var (p)] = (sat ? sign (p) : !sign (p));
103+ }
104+ if (! sat) {
98105 if (opt_output_top > 0 ) soft_unsat.push (~p);
99106 sum += soft_cls[i].fst ;
100107 } else if (opt_output_top > 0 ) {
101108 soft_unsat.push (p);
102109 }
103- if (sat) { sat = false ; model[var (p)] = !model[var (p)]; }
104110 }
105111 return sum;
106112}
@@ -546,9 +552,6 @@ void MsSolver::maxsat_solve(solve_Command cmd)
546552 }
547553 return ;
548554 } else if (status == l_True) {
549- for (int i = 0 ; i < soft_cls.size (); i++)
550- if (soft_cls[i].snd ->size () > 1 )
551- best_model[var (soft_cls[i].snd ->last ())] = !sign (soft_cls[i].snd ->last ());
552555 Minisat::vec<Lit> soft_unsat;
553556 best_goalvalue = fixed_goalval + evalGoal (soft_cls, best_model, soft_unsat);
554557 char * tmp = toString (best_goalvalue);
@@ -755,6 +758,8 @@ void MsSolver::maxsat_solve(solve_Command cmd)
755758 lbool status;
756759 do { // a loop to process GBMO splitting points
757760 while (1 ) {
761+ if (opt_unsat_cpu == 0 && opt_minimization == 1 && opt_to_bin_search)
762+ goto SwitchSearchMethod;
758763 if (opt_minimization != 1 && opt_to_bin_search && opt_alternating_bin_search)
759764 opt_minimization = 2 - opt_minimization;
760765#ifdef USE_SCIP
@@ -787,7 +792,9 @@ void MsSolver::maxsat_solve(solve_Command cmd)
787792 }
788793 }
789794 signal (SIGINT, SIGINT_interrupt);
795+ #ifdef SIGALRM
790796 signal (SIGALRM, SIGINT_interrupt);
797+ #endif
791798 signal (SIGTERM, SIGTERM_handler);
792799#ifdef SIGXCPU
793800 signal (SIGXCPU,SIGINT_interrupt);
@@ -884,9 +891,6 @@ void MsSolver::maxsat_solve(solve_Command cmd)
884891 for (Var x = 0 ; x < pb_n_vars; x++)
885892 assert (sat_solver.modelValue (x) != l_Undef),
886893 model.push (sat_solver.modelValue (x) == l_True);
887- for (int i = 0 ; i < top_for_strat; i++)
888- if (soft_cls[i].snd ->size () > 1 )
889- model[var (soft_cls[i].snd ->last ())] = !sign (soft_cls[i].snd ->last ());
890894 sat_solver.optimizeModel (soft_cls, model, top_for_strat, top_for_hard - 1 );
891895 Int goalvalue = evalGoal (soft_cls, model, soft_unsat) + fixed_goalval;
892896 extern bool opt_satisfiable_out;
@@ -1213,13 +1217,13 @@ void MsSolver::maxsat_solve(solve_Command cmd)
12131217 if (weighted_instance && satisfied && sat_solver.conflicts > 10000 )
12141218 harden_soft_cls (assump_ps, assump_Cs, sorted_assump_Cs, delayed_assump, delayed_assump_sum);
12151219 if (opt_minimization >= 1 && opt_verbosity >= 2 ) {
1216- char *t; reportf (" Lower bound: %s, assump. size: %d, stratif. level: %d (cls: %d, wght: %s)\n " , t=toString (LB_goalvalue * goal_gcd),
1217- assump_ps.size (), sorted_assump_Cs.size (), top_for_strat, toString (sorted_assump_Cs.size () > 0 ? sorted_assump_Cs.last () : 0 )); xfree (t); }
1220+ char *t; reportf (" Lower bound: %s, assump. size: %d, stratif. level: %d (cls: %d, wght: %s), conflicts: %lu \n " , t=toString (LB_goalvalue * goal_gcd),
1221+ assump_ps.size (), sorted_assump_Cs.size (), top_for_strat, toString (sorted_assump_Cs.size () > 0 ? sorted_assump_Cs.last () : 0 ), sat_solver. conflicts ); xfree (t); }
12181222 if (opt_minimization == 2 && opt_verbosity == 1 && use_base_assump) {
12191223 char *t; reportf (" Lower bound: %s\n " , t=toString (LB_goalvalue * goal_gcd)); xfree (t); }
12201224SwitchSearchMethod:
12211225 if (opt_minimization == 1 && opt_to_bin_search && LB_goalvalue + 5 < UB_goalvalue &&
1222- cpuTime () >= opt_unsat_cpu + start_solving_cpu && sat_solver.conflicts > opt_unsat_conflicts) {
1226+ cpuTime () >= opt_unsat_cpu + start_solving_cpu && sat_solver.conflicts >= opt_unsat_conflicts) {
12231227 int cnt = 0 ;
12241228 for (int j = 0 , i = 0 ; i < psCs.size (); i++) {
12251229 const Int &w = soft_cls[psCs[i].snd ].fst ;
0 commit comments