summaryrefslogtreecommitdiffstats
path: root/src/sat/satoko
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2017-03-18 20:16:16 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2017-03-18 20:16:16 -0700
commit3329086947832ae10ec376f5b69118c357b508d4 (patch)
treed4e04060eae894b5adfca5a8c06215aa42d80426 /src/sat/satoko
parenteff11d95d20a3fcce5469ae104a0f5a424d2c1d6 (diff)
downloadabc-3329086947832ae10ec376f5b69118c357b508d4.tar.gz
abc-3329086947832ae10ec376f5b69118c357b508d4.tar.bz2
abc-3329086947832ae10ec376f5b69118c357b508d4.zip
Several bug fixed / small changes in Satoko.
Diffstat (limited to 'src/sat/satoko')
-rw-r--r--src/sat/satoko/solver.c2
-rw-r--r--src/sat/satoko/solver.h2
-rw-r--r--src/sat/satoko/solver_api.c6
3 files changed, 6 insertions, 4 deletions
diff --git a/src/sat/satoko/solver.c b/src/sat/satoko/solver.c
index 18d00ba2..368ece2f 100644
--- a/src/sat/satoko/solver.c
+++ b/src/sat/satoko/solver.c
@@ -518,9 +518,9 @@ void solver_cancel_until(solver_t *s, unsigned level)
for (i = (int) vec_uint_size(s->trail) - 1; i >= (int) vec_uint_at(s->trail_lim, level); i--) {
unsigned var = lit2var(vec_uint_at(s->trail, (unsigned) i));
+ vec_char_assign(s->polarity, var, vec_char_at(s->assigns, var));
vec_char_assign(s->assigns, var, VAR_UNASSING);
vec_uint_assign(s->reasons, var, UNDEF);
- vec_char_assign(s->polarity, var, lit_polarity(vec_uint_at(s->trail, (unsigned) i)));
if (!heap_in_heap(s->var_order, var))
heap_insert(s->var_order, var);
}
diff --git a/src/sat/satoko/solver.h b/src/sat/satoko/solver.h
index 44bbaebd..94035d6e 100644
--- a/src/sat/satoko/solver.h
+++ b/src/sat/satoko/solver.h
@@ -207,6 +207,8 @@ static inline int solver_enqueue(solver_t *s, unsigned lit, unsigned reason)
unsigned var = lit2var(lit);
vec_char_assign(s->assigns, var, lit_polarity(lit));
+ if ( solver_dlevel(s) == 0 )
+ vec_char_assign(s->polarity, var, lit_polarity(lit));
vec_uint_assign(s->levels, var, solver_dlevel(s));
vec_uint_assign(s->reasons, var, reason);
vec_uint_push_back(s->trail, lit);
diff --git a/src/sat/satoko/solver_api.c b/src/sat/satoko/solver_api.c
index 6b736731..f0aff0cc 100644
--- a/src/sat/satoko/solver_api.c
+++ b/src/sat/satoko/solver_api.c
@@ -480,9 +480,9 @@ void satoko_write_dimacs(satoko_t *s, char *fname, int wrt_lrnt, int zero_var)
return;
}
fprintf(file, "p cnf %d %d\n", n_vars, wrt_lrnt ? n_orig + n_lrnts : n_orig);
- array = vec_uint_data(s->trail);
- for (i = 0; i < vec_uint_size(s->trail); i++)
- fprintf(file, "%d\n", array[i] & 1 ? -(array[i] + !zero_var) : array[i] + !zero_var);
+ for (i = 0; i < vec_char_size(s->assigns); i++)
+ if ( var_value(s, i) != VAR_UNASSING )
+ fprintf(file, "%d\n", var_value(s, i) == LIT_FALSE ? -(int)(i + !zero_var) : i + !zero_var);
array = vec_uint_data(s->originals);
for (i = 0; i < vec_uint_size(s->originals); i++)