| //===--- satoko.h -----------------------------------------------------------=== |
| // |
| // satoko: Satisfiability solver |
| // |
| // This file is distributed under the BSD 2-Clause License. |
| // See LICENSE for details. |
| // |
| //===------------------------------------------------------------------------=== |
| #ifndef satoko__satoko_h |
| #define satoko__satoko_h |
| |
| #include "types.h" |
| #include "misc/util/abc_global.h" |
| ABC_NAMESPACE_HEADER_START |
| |
| /** Return valeus */ |
| enum { |
| SATOKO_ERR = 0, |
| SATOKO_OK = 1 |
| }; |
| |
| enum { |
| SATOKO_UNDEC = 0, /* Undecided */ |
| SATOKO_SAT = 1, |
| SATOKO_UNSAT = -1 |
| }; |
| |
| enum { |
| SATOKO_LIT_FALSE = 1, |
| SATOKO_LIT_TRUE = 0, |
| SATOKO_VAR_UNASSING = 3 |
| }; |
| |
| struct solver_t_; |
| typedef struct solver_t_ satoko_t; |
| |
| typedef struct satoko_opts satoko_opts_t; |
| struct satoko_opts { |
| /* Limits */ |
| long conf_limit; /* Limit on the n.of conflicts */ |
| long prop_limit; /* Limit on the n.of propagations */ |
| |
| /* Constants used for restart heuristic */ |
| double f_rst; /* Used to force a restart */ |
| double b_rst; /* Used to block a restart */ |
| unsigned fst_block_rst; /* Lower bound n.of conflicts for start blocking restarts */ |
| unsigned sz_lbd_bqueue; /* Size of the moving avarege queue for LBD (force restart) */ |
| unsigned sz_trail_bqueue; /* Size of the moving avarege queue for Trail size (block restart) */ |
| |
| /* Constants used for clause database reduction heuristic */ |
| unsigned n_conf_fst_reduce; /* N.of conflicts before first clause databese reduction */ |
| unsigned inc_reduce; /* Increment to reduce */ |
| unsigned inc_special_reduce; /* Special increment to reduce */ |
| unsigned lbd_freeze_clause; |
| float learnt_ratio; /* Percentage of learned clauses to remove */ |
| |
| /* VSIDS heuristic */ |
| double var_decay; |
| float clause_decay; |
| unsigned var_act_rescale; |
| act_t var_act_limit; |
| |
| |
| /* Binary resolution */ |
| unsigned clause_max_sz_bin_resol; |
| unsigned clause_min_lbd_bin_resol; |
| float garbage_max_ratio; |
| char verbose; |
| char no_simplify; |
| }; |
| |
| typedef struct satoko_stats satoko_stats_t; |
| struct satoko_stats { |
| unsigned n_starts; |
| unsigned n_reduce_db; |
| |
| long n_decisions; |
| long n_propagations; |
| long n_propagations_all; |
| long n_inspects; |
| long n_conflicts; |
| long n_conflicts_all; |
| |
| long n_original_lits; |
| long n_learnt_lits; |
| }; |
| |
| |
| //===------------------------------------------------------------------------=== |
| extern satoko_t *satoko_create(void); |
| extern void satoko_destroy(satoko_t *); |
| extern void satoko_reset(satoko_t *); |
| |
| extern void satoko_default_opts(satoko_opts_t *); |
| extern void satoko_configure(satoko_t *, satoko_opts_t *); |
| extern int satoko_parse_dimacs(char *, satoko_t **); |
| extern void satoko_setnvars(satoko_t *, int); |
| extern int satoko_add_variable(satoko_t *, char); |
| extern int satoko_add_clause(satoko_t *, int *, int); |
| extern void satoko_assump_push(satoko_t *s, int); |
| extern void satoko_assump_pop(satoko_t *s); |
| extern int satoko_simplify(satoko_t *); |
| extern int satoko_solve(satoko_t *); |
| extern int satoko_solve_assumptions(satoko_t *s, int * plits, int nlits); |
| extern int satoko_solve_assumptions_limit(satoko_t *s, int * plits, int nlits, int nconflim); |
| extern int satoko_minimize_assumptions(satoko_t *s, int * plits, int nlits, int nconflim); |
| extern void satoko_mark_cone(satoko_t *, int *, int); |
| extern void satoko_unmark_cone(satoko_t *, int *, int); |
| |
| extern void satoko_rollback(satoko_t *); |
| extern void satoko_bookmark(satoko_t *); |
| extern void satoko_unbookmark(satoko_t *); |
| /* If problem is unsatisfiable under assumptions, this function is used to |
| * obtain the final conflict clause expressed in the assumptions. |
| * - It receives as inputs the solver and a pointer to an array where clause |
| * is stored. The memory for the clause is managed by the solver. |
| * - The return value is either the size of the array or -1 in case the final |
| * conflict cluase was not generated. |
| */ |
| extern int satoko_final_conflict(satoko_t *, int **); |
| |
| /* Procedure to dump a DIMACS file. |
| * - It receives as input the solver, a file name string and two integers. |
| * - If the file name string is NULL the solver will dump in stdout. |
| * - The first argument can be either 0 or 1 and is an option to dump learnt |
| * clauses. (value 1 will dump them). |
| * - The seccond argument can be either 0 or 1 and is an option to use 0 as a |
| * variable ID or not. Keep in mind that if 0 is used as an ID the generated |
| * file will not be a DIMACS. (value 1 will use 0 as ID). |
| */ |
| extern void satoko_write_dimacs(satoko_t *, char *, int, int); |
| extern satoko_stats_t * satoko_stats(satoko_t *); |
| extern satoko_opts_t * satoko_options(satoko_t *); |
| |
| extern int satoko_varnum(satoko_t *); |
| extern int satoko_clausenum(satoko_t *); |
| extern int satoko_learntnum(satoko_t *); |
| extern int satoko_conflictnum(satoko_t *); |
| extern void satoko_set_stop(satoko_t *, int *); |
| extern void satoko_set_stop_func(satoko_t *s, int (*fnct)(int)); |
| extern void satoko_set_runid(satoko_t *, int); |
| extern int satoko_read_cex_varvalue(satoko_t *, int); |
| extern abctime satoko_set_runtime_limit(satoko_t *, abctime); |
| extern char satoko_var_polarity(satoko_t *, unsigned); |
| |
| |
| ABC_NAMESPACE_HEADER_END |
| #endif /* satoko__satoko_h */ |