24static inline void solver_rebuild_order(
solver_t *s)
31 vec_uint_push_back(vars, var);
46static inline void solver_clean_stats(
solver_t *s)
55static inline void print_opts(
solver_t *s)
57 printf(
"+-[ BLACK MAGIC - PARAMETERS ]-+\n");
59 printf(
"|--> Restarts heuristic |\n");
62 printf(
"| * f_rst = %6.2f |\n", s->
opts.
f_rst);
63 printf(
"| * b_rst = %6.2f |\n", s->
opts.
b_rst);
65 printf(
"|--> Clause DB reduction: |\n");
71 printf(
"|--> Binary resolution: |\n");
74 printf(
"+------------------------------+\n\n");
77static inline void print_stats(
solver_t *s)
100 s->
learnts = vec_uint_alloc(0);
108 s->
levels = vec_uint_alloc(0);
109 s->
reasons = vec_uint_alloc(0);
110 s->
assigns = vec_char_alloc(0);
113 s->
trail = vec_uint_alloc(0);
123 s->
seen = vec_char_alloc(0);
124 s->
tagged = vec_uint_alloc(0);
125 s->
stack = vec_uint_alloc(0);
128 s->
stamps = vec_uint_alloc(0);
146 vec_uint_free(s->
trail);
151 vec_char_free(s->
seen);
153 vec_uint_free(s->
stack);
157 vec_char_free(s->
marks);
207 assert(solver_dlevel(s) == 0);
216 if (clause_is_satisfied(s,
clause)) {
219 clause_unwatch(s, cref);
221 vec_uint_assign(s->
originals, j++, cref);
224 solver_rebuild_order(s);
243 vec_uint_push_back(s->
levels, 0);
245 vec_char_push_back(s->
polarity, sign);
247 vec_uint_push_back(s->
stamps, 0);
248 vec_char_push_back(s->
seen, 0);
251 vec_char_push_back(s->
marks, 0);
262 qsort((
void *)
lits, (
size_t)
size,
sizeof(
unsigned), stk_uint_compare);
270 for (i = 0; i < (unsigned)
size; i++) {
282 }
if (vec_uint_size(s->
temp_lits) == 1) {
287 for ( i = 0; i < vec_uint_size(s->
temp_lits); i++ ) {
289 printf(
"%s%d ",
lit&1 ?
"!":
"",
lit>>1 );
294 clause_watch(s, cref);
319 solver_clean_stats(s);
323 printf(
"Satoko in inconsistent state\n");
333 if (solver_check_limits(s) == 0 || solver_stop(s))
356 for ( i = 0; i < nlits; i++ )
359 for ( i = 0; i < nlits; i++ )
374 int i, nlitsL, nlitsR, nresL, nresR, status;
384 nlitsR = nlits - nlitsL;
386 for ( i = 0; i < nlitsL; i++ )
392 for ( i = 0; i < nlitsL; i++ )
399 for ( i = 0; i < nlitsL; i++ )
403 for ( i = 0; i < nlitsL; i++ )
404 vec_uint_push_back(s->
temp_lits, plits[i]);
405 for ( i = 0; i < nresL; i++ )
406 plits[i] = plits[nlitsL+i];
407 for ( i = 0; i < nlitsL; i++ )
408 plits[nresL+i] = vec_uint_at(s->
temp_lits, i);
410 for ( i = 0; i < nresL; i++ )
416 for ( i = 0; i < nresL; i++ )
422 for ( i = 0; i < nresL; i++ )
424 return nresL + nresR;
447 assert(solver_dlevel(s) == 0);
480 vec_uint_clear(s->
levels);
484 vec_uint_clear(s->
trail);
489 vec_char_clear(s->
seen);
490 vec_uint_clear(s->
tagged);
491 vec_uint_clear(s->
stack);
493 vec_uint_clear(s->
stamps);
513 struct clause **cl_to_remove;
517 assert(solver_dlevel(s) == 0);
525 cl_to_remove[i] = clause_fetch(s, cref);
527 cl_to_remove[n_originals + i] = clause_fetch(s, cref);
528 for (i = 0; i < n_originals + n_learnts; i++) {
529 clause_unwatch(s, cdb_cref(s->
all_clauses, (
unsigned *)cl_to_remove[i]));
530 cl_to_remove[i]->
f_mark = 1;
537 vec_wl_at(s->
watches, i)->size = 0;
538 vec_wl_at(s->
watches, i)->n_bin = 0;
549 solver_rebuild_order(s);
565 if (!solver_has_marks(s))
567 for (i = 0; i < n_vars; i++) {
568 var_set_mark(s, pvars[i]);
569 vec_sdbl_assign(s->
activity, pvars[i], 0);
570 if (!heap_in_heap(s->
var_order, pvars[i]))
578 assert(solver_has_marks(s));
579 for (i = 0; i < n_vars; i++)
580 var_clean_mark(s, pvars[i]);
588 unsigned n_orig = vec_uint_size(s->
originals) + vec_uint_size(s->
trail);
589 unsigned n_lrnts = vec_uint_size(s->
learnts);
592 assert(wrt_lrnt == 0 || wrt_lrnt == 1);
593 assert(zero_var == 0 || zero_var == 1);
595 file = fopen(fname,
"w");
600 printf(
"Error: Cannot open output file.\n");
603 fprintf(
file,
"p cnf %d %d\n", n_vars, wrt_lrnt ? n_orig + n_lrnts : n_orig);
604 for (i = 0; i < vec_char_size(s->
assigns); i++) {
613 for (i = 0; i < vec_uint_size(s->
originals); i++)
614 clause_dump(
file, clause_fetch(s, array[i]), !zero_var);
617 array = vec_uint_data(s->
learnts);
618 for (i = 0; i < n_lrnts; i++)
619 clause_dump(
file, clause_fetch(s, array[i]), !zero_var);
627 return vec_char_size(s->
assigns);
637 return vec_uint_size(s->
learnts);
669 return nRuntimeLimit;
674 return vec_char_at(s->
polarity, var);
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
#define satoko_calloc(type, n_elements)
#define satoko_alloc(type, n_elements)
struct solver_t_ solver_t
struct satoko_opts satoko_opts_t
struct satoko_stats satoko_stats_t
struct solver_t_ satoko_t
void solver_cancel_until(solver_t *s, unsigned level)
unsigned solver_propagate(solver_t *s)
char solver_search(solver_t *s)
unsigned solver_clause_create(solver_t *s, vec_uint_t *lits, unsigned f_learnt)
int satoko_learntnum(satoko_t *s)
void satoko_unbookmark(satoko_t *s)
void satoko_set_stop_func(satoko_t *s, int(*fnct)(int))
int satoko_simplify(solver_t *s)
abctime satoko_set_runtime_limit(satoko_t *s, abctime Limit)
void satoko_rollback(satoko_t *s)
int satoko_solve(solver_t *s)
satoko_opts_t * satoko_options(satoko_t *s)
satoko_stats_t * satoko_stats(satoko_t *s)
void satoko_set_runid(satoko_t *s, int id)
void satoko_reset(satoko_t *s)
int satoko_add_clause(solver_t *s, int *lits, int size)
void satoko_unmark_cone(satoko_t *s, int *pvars, int n_vars)
int satoko_final_conflict(solver_t *s, int **out)
void satoko_destroy(solver_t *s)
void satoko_default_opts(satoko_opts_t *opts)
int satoko_minimize_assumptions(satoko_t *s, int *plits, int nlits, int nconflim)
int satoko_solve_assumptions(solver_t *s, int *plits, int nlits)
int satoko_solve_assumptions_limit(satoko_t *s, int *plits, int nlits, int nconflim)
void satoko_assump_push(solver_t *s, int lit)
solver_t * satoko_create()
int satoko_add_variable(solver_t *s, char sign)
void satoko_set_stop(satoko_t *s, int *pstop)
void satoko_bookmark(satoko_t *s)
void satoko_mark_cone(satoko_t *s, int *pvars, int n_vars)
void satoko_setnvars(solver_t *s, int nvars)
int satoko_clausenum(satoko_t *s)
void satoko_write_dimacs(satoko_t *s, char *fname, int wrt_lrnt, int zero_var)
void satoko_assump_pop(solver_t *s)
int satoko_conflictnum(satoko_t *s)
char satoko_var_polarity(satoko_t *s, unsigned var)
int satoko_read_cex_varvalue(satoko_t *s, int ivar)
void satoko_configure(satoko_t *s, satoko_opts_t *user_opts)
int satoko_varnum(satoko_t *s)
union clause::@075032140136325172206014200035176200302203305006 data[0]
unsigned clause_min_lbd_bin_resol
unsigned clause_max_sz_bin_resol
unsigned lbd_freeze_clause
unsigned inc_special_reduce
unsigned n_conf_fst_reduce
vec_uint_t * final_conflict
unsigned n_assigns_simplify
clause_act_t clause_act_inc
struct satoko_stats stats
#define CLAUSE_ACT_INIT_INC
#define vec_act_free(vec)
#define vec_act_clear(vec)
#define vec_act_shrink(vec, size)
#define vec_act_alloc(size)
#define vec_act_push_back(vec, value)
#define vec_act_size(vec)
#define vec_uint_foreach(vec, entry, i)
typedefABC_NAMESPACE_HEADER_START struct vec_uint_t_ vec_uint_t
#define vec_uint_foreach_start(vec, entry, i, start)