21#ifndef ABC__OPT__ESLIM__SATINTERFACE_h
22#define ABC__OPT__ESLIM__SATINTERFACE_h
40 void assume(
const std::vector<int>& assumptions);
41 int solve(
double timeout);
59 std::chrono::time_point<std::chrono::steady_clock> start = std::chrono::steady_clock::now();
67 void init(
int max_var);
83 auto current_time = std::chrono::steady_clock::now();
84 std::chrono::duration<double> elapsed_seconds = current_time - start;
85 return elapsed_seconds.count() > max_runtime;
93 for (
int i = 0; i < nLits; i++ ) {
97 solver.add(Abc_LitIsCompl(pLits[i]) ? -Abc_Lit2Var(pLits[i]) : Abc_Lit2Var(pLits[i]));
103 for (
auto& l: assumptions) {
109 std::chrono::time_point<std::chrono::steady_clock> start = std::chrono::steady_clock::now();
110 int status = solver.solve();
111 last_runtime = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start).count();
116 std::chrono::time_point<std::chrono::steady_clock> start = std::chrono::steady_clock::now();
118 solver.connect_terminator(&terminator);
119 int status = solver.solve();
120 last_runtime = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start).count();
122 std::cerr<<
"Solver is in invalid state"<<std::endl;
125 solver.disconnect_terminator();
130 Vec_Int_t* assignment = Vec_IntAlloc( solver.vars() );
131 for (
int v = 1; v <= solver.vars(); v++) {
132 Vec_IntSetEntryFull( assignment, Abc_AbsInt(val(v)), val(v) > 0 );
137 inline int CadicalSolver::val(
int variable) {
156 this->max_var = max_var;
161 for (
int i = 0; i < nLits; i++ ) {
165 kissat_add (solver, Abc_LitIsCompl(pLits[i]) ? -Abc_Lit2Var(pLits[i]) : Abc_Lit2Var(pLits[i]));
175 inline int KissatSolver::val(
int variable) {
186 Vec_Int_t* assignment = Vec_IntAlloc( max_var );
187 for (
int v = 1; v <= max_var; v++) {
188 Vec_IntSetEntryFull( assignment, Abc_AbsInt(val(v)), val(v) > 0 );
#define ABC_NAMESPACE_CXX_HEADER_START
#define ABC_NAMESPACE_CXX_HEADER_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
TimeoutTerminator(double max_runtime)
void addClause(int *pLits, int nLits)
void assume(const std::vector< int > &assumptions)
double getRunTime() const
Vec_Int_t * getModelVec()
void addClause(int *pLits, int nLits)
Vec_Int_t * getModelVec()
int kissat_value(kissat *solver, int elit)
int kissat_solve(kissat *solver)
kissat * kissat_init(void)
void kissat_add(kissat *solver, int elit)
void kissat_release(kissat *solver)
void kissat_reserve(kissat *solver, int max_var)