ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
restart.c File Reference
#include "restart.h"
#include "backtrack.h"
#include "bump.h"
#include "decide.h"
#include "internal.h"
#include "kimits.h"
#include "logging.h"
#include "print.h"
#include "reluctant.h"
#include "report.h"
#include <inttypes.h>
Include dependency graph for restart.c:

Go to the source code of this file.

Functions

ABC_NAMESPACE_IMPL_START bool kissat_restarting (kissat *solver)
 
void kissat_update_focused_restart_limit (kissat *solver)
 
void kissat_restart (kissat *solver)
 

Function Documentation

◆ kissat_restart()

void kissat_restart ( kissat * solver)

Definition at line 114 of file restart.c.

114 {
115 START (restart);
116 INC (restarts);
117 ADD (restarts_levels, solver->level);
118 if (solver->stable)
119 INC (stable_restarts);
120 else
121 INC (focused_restarts);
122 unsigned level = reuse_trail (solver);
124 "restarting after %" PRIu64 " conflicts"
125 " (limit %" PRIu64 ")",
126 CONFLICTS, solver->limits.restart.conflicts);
127 LOG ("restarting to level %u", level);
129 if (!solver->stable)
131 REPORT (1, 'R');
132 STOP (restart);
133}
void kissat_backtrack_in_consistent_state(kissat *solver, unsigned new_level)
Definition backtrack.c:152
#define ADD(NAME, DELTA)
#define INC(NAME)
#define LOG(...)
#define solver
Definition kitten.c:211
#define kissat_extremely_verbose(...)
Definition print.h:53
#define STOP(P)
Definition profile.hpp:158
#define START(P)
Definition profile.hpp:150
#define REPORT(...)
Definition report.h:10
void kissat_update_focused_restart_limit(kissat *solver)
Definition restart.c:41
#define CONFLICTS
Definition statistics.h:335
Here is the call graph for this function:
Here is the caller graph for this function:

◆ kissat_restarting()

ABC_NAMESPACE_IMPL_START bool kissat_restarting ( kissat * solver)

Definition at line 16 of file restart.c.

16 {
17 KISSAT_assert (solver->unassigned);
18 if (!GET_OPTION (restart))
19 return false;
20 if (!solver->level)
21 return false;
23 return false;
24 if (solver->stable)
25 return kissat_reluctant_triggered (&solver->reluctant);
26 const double fast = AVERAGE (fast_glue);
27 const double slow = AVERAGE (slow_glue);
28 const double margin = (100.0 + GET_OPTION (restartmargin)) / 100.0;
29 const double limit = margin * slow;
31 "restart glue limit %g = "
32 "%.02f * %g (slow glue) %c %g (fast glue)",
33 limit, margin, slow,
34 (limit > fast ? '>'
35 : limit == fast ? '='
36 : '<'),
37 fast);
38 return (limit <= fast);
39}
#define AVERAGE(NAME)
Definition averages.h:31
#define KISSAT_assert(ignore)
Definition global.h:13
#define GET_OPTION(N)
Definition options.h:295
struct limits::@317277023072347355124305102271146250361353123031 restart
uint64_t conflicts
Definition kimits.h:27
Here is the caller graph for this function:

◆ kissat_update_focused_restart_limit()

void kissat_update_focused_restart_limit ( kissat * solver)

Definition at line 41 of file restart.c.

41 {
42 KISSAT_assert (!solver->stable);
43 limits *limits = &solver->limits;
44 uint64_t restarts = solver->statistics_.restarts;
45 uint64_t delta = GET_OPTION (restartint);
46 if (restarts)
47 delta += kissat_logn (restarts) - 1;
50 "focused restart limit at %" PRIu64
51 " after %" PRIu64 " conflicts ",
52 limits->restart.conflicts, delta);
53}
ABC_NAMESPACE_IMPL_START double kissat_logn(uint64_t count)
Definition kimits.c:15
Here is the call graph for this function:
Here is the caller graph for this function: