src/restart.cpp
// As observed by Chanseok Oh and implemented in MapleSAT solvers too,
// various mostly satisfiable instances benefit from long quiet phases
// without restart.  We implement this idea by prohibiting the Glucose style
// restart scheme in a geometric fashion, which is very similar to how
// originally restarts were scheduled in MiniSAT and earlier solver.  More
// precisely we start with say 1e3 = 1000 conflicts of Glucose restarts.
// Then in a "stabilizing" phase we disable restarts until 1e4 = 10000
// conflicts have passed. After that we switch back to regular Glucose style
// restarts until again 10 more conflicts than the previous limit.
As observed by Chanseok Oh and implemented in MapleSAT solvers too,
various mostly satisfiable instances benefit from long quiet phases
without restart.  We implement this idea by prohibiting the Glucose style
restart scheme in a geometric fashion, which is very similar to how
originally restarts were scheduled in MiniSAT and earlier solver.  More
precisely we start with say 1e3 = 1000 conflicts of Glucose restarts.
Then in a "stabilizing" phase we disable restarts until 1e4 = 10000
conflicts have passed. After that we switch back to regular Glucose style
restarts until again 10 more conflicts than the previous limit.
As observed by Chanseok Oh and implemented in MapleSAT solvers too various mostly satisfiable instances benefit from long quiet phases without restart . We implement this idea by prohibiting the Glucose style restart scheme in a geometric fashion which is very similar to how originally restarts were scheduled in MiniSAT and earlier solver . More precisely we start with say 1e3 = 1000 conflicts of Glucose restarts . Then in a " stabilizing " phase we disable restarts until 1e4 = 10000 conflicts have passed . After that we switch back to regular Glucose style restarts until again 10 more conflicts than the previous limit .
bool Internal::stabilizing () {
  if (!opts.stabilize) return false;
  stats.stabchecks++;
  if (stats.conflicts >= lim.stabilize) {
    stabilization = !stabilization;
    if (stabilization) stats.stabphases++;
    VRB ("stabilizing", stats.stabphases,
      "reached stabilizing limit %ld after %ld conflicts",
      lim.stabilize, stats.conflicts);
    lim.stabilize *= opts.stabfactor;
    if (lim.stabilize <= stats.conflicts) lim.stabilize = stats.conflicts + 1;
    VRB ("stabilizing", stats.stabphases,
      "new stabilizing limit %ld conflicts", lim.stabilize);
    report (stabilization ? '[' : ']');
  }
  if (stabilization) stats.stabsuccess++;
  return stabilization;
}
bool Internal :: stabilizing ( ) { if ( ! opts . stabilize ) return false ; stats . stabchecks ++ ; if ( stats . conflicts >= lim . stabilize ) { stabilization = ! stabilization ; if ( stabilization ) stats . stabphases ++ ; VRB ( " " , stats . stabphases , " " , lim . stabilize , stats . conflicts ) ; lim . stabilize *= opts . stabfactor ; if ( lim . stabilize <= stats . conflicts ) lim . stabilize = stats . conflicts + 1 ; VRB ( " " , stats . stabphases , " " , lim . stabilize ) ; report ( stabilization ? ' ' : ' ' ) ; } if ( stabilization ) stats . stabsuccess ++ ; return stabilization ; }
As observed by Chanseok Oh and implemented in MapleSAT solvers too,
various mostly satisfiable instances benefit from long quiet phases
without restart.
As observed by Chanseok Oh and implemented in MapleSAT solvers too various mostly satisfiable instances benefit from long quiet phases without restart .