ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
satSolver3.h File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "satVec.h"
#include "satClause.h"
#include "misc/util/utilDouble.h"
Include dependency graph for satSolver3.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  sat_solver3_t
 

Typedefs

typedef struct sat_solver3_t sat_solver3
 

Functions

sat_solver3sat_solver3_new (void)
 
sat_solver3zsat_solver3_new_seed (double seed)
 
void sat_solver3_delete (sat_solver3 *s)
 
int sat_solver3_addclause (sat_solver3 *s, lit *begin, lit *end)
 
int sat_solver3_clause_new (sat_solver3 *s, lit *begin, lit *end, int learnt)
 
int sat_solver3_simplify (sat_solver3 *s)
 
int sat_solver3_solve (sat_solver3 *s, lit *begin, lit *end, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, ABC_INT64_T nConfLimitGlobal, ABC_INT64_T nInsLimitGlobal)
 
int sat_solver3_solve_internal (sat_solver3 *s)
 
int sat_solver3_solve_lexsat (sat_solver3 *s, int *pLits, int nLits)
 
int sat_solver3_minimize_assumptions (sat_solver3 *s, int *pLits, int nLits, int nConfLimit)
 
int sat_solver3_minimize_assumptions2 (sat_solver3 *s, int *pLits, int nLits, int nConfLimit)
 
int sat_solver3_push (sat_solver3 *s, int p)
 
void sat_solver3_pop (sat_solver3 *s)
 
void sat_solver3_set_resource_limits (sat_solver3 *s, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, ABC_INT64_T nConfLimitGlobal, ABC_INT64_T nInsLimitGlobal)
 
void sat_solver3_restart (sat_solver3 *s)
 
void zsat_solver3_restart_seed (sat_solver3 *s, double seed)
 
void sat_solver3_rollback (sat_solver3 *s)
 
int sat_solver3_nvars (sat_solver3 *s)
 
int sat_solver3_nclauses (sat_solver3 *s)
 
int sat_solver3_nconflicts (sat_solver3 *s)
 
double sat_solver3_memory (sat_solver3 *s)
 
int sat_solver3_count_assigned (sat_solver3 *s)
 
void sat_solver3_setnvars (sat_solver3 *s, int n)
 
int sat_solver3_get_var_value (sat_solver3 *s, int v)
 
void sat_solver3_set_var_activity (sat_solver3 *s, int *pVars, int nVars)
 
void sat_solver3WriteDimacs (sat_solver3 *p, char *pFileName, lit *assumptionsBegin, lit *assumptionsEnd, int incrementVars)
 
void sat_solver3PrintStats (FILE *pFile, sat_solver3 *p)
 
int * sat_solver3GetModel (sat_solver3 *p, int *pVars, int nVars)
 
void sat_solver3DoubleClauses (sat_solver3 *p, int iVar)
 
void sat_solver3TraceStart (sat_solver3 *pSat, char *pName)
 
void sat_solver3TraceStop (sat_solver3 *pSat)
 
void sat_solver3TraceWrite (sat_solver3 *pSat, int *pBeg, int *pEnd, int fRoot)
 
void sat_solver3_store_alloc (sat_solver3 *s)
 
void sat_solver3_store_write (sat_solver3 *s, char *pFileName)
 
void sat_solver3_store_free (sat_solver3 *s)
 
void sat_solver3_store_mark_roots (sat_solver3 *s)
 
void sat_solver3_store_mark_clauses_a (sat_solver3 *s)
 
void * sat_solver3_store_release (sat_solver3 *s)
 

Typedef Documentation

◆ sat_solver3

typedef struct sat_solver3_t sat_solver3

Definition at line 41 of file satSolver3.h.

Function Documentation

◆ sat_solver3_addclause()

int sat_solver3_addclause ( sat_solver3 * s,
lit * begin,
lit * end )
extern

Definition at line 1698 of file satSolver3.c.

1699{
1700 int fVerbose = 0;
1701 lit *i,*j;
1702 int maxvar;
1703 lit last;
1704 assert( begin < end );
1705 if ( fVerbose )
1706 {
1707 for ( i = begin; i < end; i++ )
1708 printf( "%s%d ", (*i)&1 ? "!":"", (*i)>>1 );
1709 printf( "\n" );
1710 }
1711
1712 veci_resize( &s->temp_clause, 0 );
1713 for ( i = begin; i < end; i++ )
1714 veci_push( &s->temp_clause, *i );
1715 begin = veci_begin( &s->temp_clause );
1716 end = begin + veci_size( &s->temp_clause );
1717
1718 // insertion sort
1719 maxvar = lit_var(*begin);
1720 for (i = begin + 1; i < end; i++){
1721 lit l = *i;
1722 maxvar = lit_var(l) > maxvar ? lit_var(l) : maxvar;
1723 for (j = i; j > begin && *(j-1) > l; j--)
1724 *j = *(j-1);
1725 *j = l;
1726 }
1727 sat_solver3_setnvars(s,maxvar+1);
1728
1729 // delete duplicates
1730 last = lit_Undef;
1731 for (i = j = begin; i < end; i++){
1732 //printf("lit: "L_LIT", value = %d\n", L_lit(*i), (lit_sign(*i) ? -s->assignss[lit_var(*i)] : s->assignss[lit_var(*i)]));
1733 if (*i == lit_neg(last) || var_value(s, lit_var(*i)) == lit_sign(*i))
1734 return true; // tautology
1735 else if (*i != last && var_value(s, lit_var(*i)) == varX)
1736 last = *j++ = *i;
1737 }
1738// j = i;
1739
1740 if (j == begin) // empty clause
1741 return false;
1742
1743 if (j - begin == 1) // unit clause
1744 return sat_solver3_enqueue(s,*begin,0);
1745
1746 // create new clause
1747 sat_solver3_clause_new(s,begin,j,0);
1748 return true;
1749}
void sat_solver3_setnvars(sat_solver3 *s, int n)
int sat_solver3_clause_new(sat_solver3 *s, lit *begin, lit *end, int learnt)
Definition satSolver3.c:514
int lit
Definition satVec.h:130
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sat_solver3_clause_new()

int sat_solver3_clause_new ( sat_solver3 * s,
lit * begin,
lit * end,
int learnt )
extern

Definition at line 514 of file satSolver3.c.

515{
516 int fUseBinaryClauses = 1;
517 int size;
518 clause* c;
519 int h;
520
521 assert(end - begin > 1);
522 assert(learnt >= 0 && learnt < 2);
523 size = end - begin;
524
525 // do not allocate memory for the two-literal problem clause
526 if ( fUseBinaryClauses && size == 2 && !learnt )
527 {
528 veci_push(sat_solver3_read_wlist(s,lit_neg(begin[0])),(clause_from_lit(begin[1])));
529 veci_push(sat_solver3_read_wlist(s,lit_neg(begin[1])),(clause_from_lit(begin[0])));
530 s->stats.clauses++;
532 return 0;
533 }
534
535 // create new clause
536// h = Vec_SetAppend( &s->Mem, NULL, size + learnt + 1 + 1 ) << 1;
537 h = Sat_MemAppend( &s->Mem, begin, size, learnt, 0 );
538 assert( !(h & 1) );
539 if ( s->hLearnts == -1 && learnt )
540 s->hLearnts = h;
541 if (learnt)
542 {
543 c = clause_read( s, h );
544 c->lbd = sat_clause_compute_lbd( s, c );
545 assert( clause_id(c) == veci_size(&s->act_clas) );
546// veci_push(&s->learned, h);
547// act_clause_bump(s,clause_read(s, h));
548 if ( s->ClaActType == 0 )
549 veci_push(&s->act_clas, (1<<10));
550 else
551 veci_push(&s->act_clas, s->cla_inc);
552 s->stats.learnts++;
554 }
555 else
556 {
557 s->stats.clauses++;
559 }
560
561 assert(begin[0] >= 0);
562 assert(begin[0] < s->size*2);
563 assert(begin[1] >= 0);
564 assert(begin[1] < s->size*2);
565
566 assert(lit_neg(begin[0]) < s->size*2);
567 assert(lit_neg(begin[1]) < s->size*2);
568
569 //veci_push(sat_solver3_read_wlist(s,lit_neg(begin[0])),c);
570 //veci_push(sat_solver3_read_wlist(s,lit_neg(begin[1])),c);
571 veci_push(sat_solver3_read_wlist(s,lit_neg(begin[0])),(size > 2 ? h : clause_from_lit(begin[1])));
572 veci_push(sat_solver3_read_wlist(s,lit_neg(begin[1])),(size > 2 ? h : clause_from_lit(begin[0])));
573
574 return h;
575}
unsigned long long size
Definition giaNewBdd.h:39
unsigned lbd
Definition clause.h:22
Sat_Mem_t Mem
Definition satSolver3.h:107
unsigned cla_inc
Definition satSolver3.h:126
stats_t stats
Definition satSolver3.h:161
ABC_INT64_T learnts_literals
Definition satVec.h:157
unsigned clauses
Definition satVec.h:155
ABC_INT64_T clauses_literals
Definition satVec.h:157
unsigned learnts
Definition satVec.h:155
Here is the caller graph for this function:

◆ sat_solver3_count_assigned()

int sat_solver3_count_assigned ( sat_solver3 * s)
extern

Definition at line 716 of file satSolver3.c.

717{
718 // count top-level assignments
719 int i, Count = 0;
720 assert(sat_solver3_dl(s) == 0);
721 for ( i = 0; i < s->size; i++ )
722 if (var_value(s, i) != varX)
723 Count++;
724 return Count;
725}

◆ sat_solver3_delete()

void sat_solver3_delete ( sat_solver3 * s)
extern

Definition at line 1308 of file satSolver3.c.

1309{
1310// Vec_SetFree_( &s->Mem );
1311 Sat_MemFree_( &s->Mem );
1312
1313 // delete vectors
1314 veci_delete(&s->order);
1315 veci_delete(&s->trail_lim);
1316 veci_delete(&s->tagged);
1317// veci_delete(&s->learned);
1318 veci_delete(&s->act_clas);
1319 veci_delete(&s->stack);
1320// veci_delete(&s->model);
1321 veci_delete(&s->act_vars);
1322 veci_delete(&s->unit_lits);
1323 veci_delete(&s->pivot_vars);
1324 veci_delete(&s->temp_clause);
1325 veci_delete(&s->conf_final);
1326
1327 // delete arrays
1328 if (s->reasons != 0){
1329 int i;
1330 for (i = 0; i < s->cap*2; i++)
1331 veci_delete(&s->wlists[i]);
1332 ABC_FREE(s->wlists );
1333// ABC_FREE(s->vi );
1334 ABC_FREE(s->levels );
1335 ABC_FREE(s->assigns );
1336 ABC_FREE(s->polarity );
1337 ABC_FREE(s->tags );
1338 ABC_FREE(s->loads );
1339 ABC_FREE(s->activity );
1340 ABC_FREE(s->activity2);
1341 ABC_FREE(s->pFreqs );
1342 ABC_FREE(s->factors );
1343 ABC_FREE(s->orderpos );
1344 ABC_FREE(s->reasons );
1345 ABC_FREE(s->trail );
1346 ABC_FREE(s->model );
1347 }
1348
1349 ABC_FREE(s);
1350}
#define ABC_FREE(obj)
Definition abc_global.h:267
word * activity2
Definition satSolver3.h:125
double * factors
Definition satSolver3.h:173
char * polarity
Definition satSolver3.h:136
word * activity
Definition satSolver3.h:124
Here is the caller graph for this function:

◆ sat_solver3_get_var_value()

int sat_solver3_get_var_value ( sat_solver3 * s,
int v )
extern

Definition at line 116 of file satSolver3.c.

117{
118 if ( var_value(s, v) == var0 )
119 return l_False;
120 if ( var_value(s, v) == var1 )
121 return l_True;
122 if ( var_value(s, v) == varX )
123 return l_Undef;
124 assert( 0 );
125 return 0;
126}
#define l_True
Definition bmcBmcS.c:35
#define l_Undef
Definition bmcBmcS.c:34
#define l_False
Definition bmcBmcS.c:36

◆ sat_solver3_memory()

double sat_solver3_memory ( sat_solver3 * s)
extern

Definition at line 1442 of file satSolver3.c.

1443{
1444 int i;
1445 double Mem = sizeof(sat_solver3);
1446 for (i = 0; i < s->cap*2; i++)
1447 Mem += s->wlists[i].cap * sizeof(int);
1448 Mem += s->cap * sizeof(veci); // ABC_FREE(s->wlists );
1449 Mem += s->cap * sizeof(int); // ABC_FREE(s->levels );
1450 Mem += s->cap * sizeof(char); // ABC_FREE(s->assigns );
1451 Mem += s->cap * sizeof(char); // ABC_FREE(s->polarity );
1452 Mem += s->cap * sizeof(char); // ABC_FREE(s->tags );
1453 Mem += s->cap * sizeof(char); // ABC_FREE(s->loads );
1454 Mem += s->cap * sizeof(word); // ABC_FREE(s->activity );
1455 if ( s->activity2 )
1456 Mem += s->cap * sizeof(word); // ABC_FREE(s->activity );
1457 if ( s->factors )
1458 Mem += s->cap * sizeof(double); // ABC_FREE(s->factors );
1459 Mem += s->cap * sizeof(int); // ABC_FREE(s->orderpos );
1460 Mem += s->cap * sizeof(int); // ABC_FREE(s->reasons );
1461 Mem += s->cap * sizeof(lit); // ABC_FREE(s->trail );
1462 Mem += s->cap * sizeof(int); // ABC_FREE(s->model );
1463
1464 Mem += s->order.cap * sizeof(int);
1465 Mem += s->trail_lim.cap * sizeof(int);
1466 Mem += s->tagged.cap * sizeof(int);
1467// Mem += s->learned.cap * sizeof(int);
1468 Mem += s->stack.cap * sizeof(int);
1469 Mem += s->act_vars.cap * sizeof(int);
1470 Mem += s->unit_lits.cap * sizeof(int);
1471 Mem += s->act_clas.cap * sizeof(int);
1472 Mem += s->temp_clause.cap * sizeof(int);
1473 Mem += s->conf_final.cap * sizeof(int);
1474 Mem += Sat_MemMemoryAll( &s->Mem );
1475 return Mem;
1476}
unsigned __int64 word
DECLARATIONS ///.
Definition kitPerm.c:36
struct sat_solver3_t sat_solver3
Definition satSolver3.h:41
struct veci_t veci
Definition satVec.h:36
int cap
Definition satVec.h:32

◆ sat_solver3_minimize_assumptions()

int sat_solver3_minimize_assumptions ( sat_solver3 * s,
int * pLits,
int nLits,
int nConfLimit )
extern

Definition at line 2135 of file satSolver3.c.

2136{
2137 int i, k, nLitsL, nLitsR, nResL, nResR;
2138 if ( nLits == 1 )
2139 {
2140 // since the problem is UNSAT, we will try to solve it without assuming the last literal
2141 // if the result is UNSAT, the last literal can be dropped; otherwise, it is needed
2142 int status = l_False;
2143 int Temp = s->nConfLimit;
2144 s->nConfLimit = nConfLimit;
2145 status = sat_solver3_solve_internal( s );
2146 s->nConfLimit = Temp;
2147 return (int)(status != l_False); // return 1 if the problem is not UNSAT
2148 }
2149 assert( nLits >= 2 );
2150 nLitsL = nLits / 2;
2151 nLitsR = nLits - nLitsL;
2152 // assume the left lits
2153 for ( i = 0; i < nLitsL; i++ )
2154 if ( !sat_solver3_push(s, pLits[i]) )
2155 {
2156 for ( k = i; k >= 0; k-- )
2157 sat_solver3_pop(s);
2158 return sat_solver3_minimize_assumptions( s, pLits, i+1, nConfLimit );
2159 }
2160 // solve for the right lits
2161 nResL = sat_solver3_minimize_assumptions( s, pLits + nLitsL, nLitsR, nConfLimit );
2162 for ( i = 0; i < nLitsL; i++ )
2163 sat_solver3_pop(s);
2164 // swap literals
2165// assert( nResL <= nLitsL );
2166// for ( i = 0; i < nResL; i++ )
2167// ABC_SWAP( int, pLits[i], pLits[nLitsL+i] );
2168 veci_resize( &s->temp_clause, 0 );
2169 for ( i = 0; i < nLitsL; i++ )
2170 veci_push( &s->temp_clause, pLits[i] );
2171 for ( i = 0; i < nResL; i++ )
2172 pLits[i] = pLits[nLitsL+i];
2173 for ( i = 0; i < nLitsL; i++ )
2174 pLits[nResL+i] = veci_begin(&s->temp_clause)[i];
2175 // assume the right lits
2176 for ( i = 0; i < nResL; i++ )
2177 if ( !sat_solver3_push(s, pLits[i]) )
2178 {
2179 for ( k = i; k >= 0; k-- )
2180 sat_solver3_pop(s);
2181 return sat_solver3_minimize_assumptions( s, pLits, i+1, nConfLimit );
2182 }
2183 // solve for the left lits
2184 nResR = sat_solver3_minimize_assumptions( s, pLits + nResL, nLitsL, nConfLimit );
2185 for ( i = 0; i < nResL; i++ )
2186 sat_solver3_pop(s);
2187 return nResL + nResR;
2188}
int sat_solver3_minimize_assumptions(sat_solver3 *s, int *pLits, int nLits, int nConfLimit)
void sat_solver3_pop(sat_solver3 *s)
int sat_solver3_push(sat_solver3 *s, int p)
int sat_solver3_solve_internal(sat_solver3 *s)
ABC_INT64_T nConfLimit
Definition satSolver3.h:168
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sat_solver3_minimize_assumptions2()

int sat_solver3_minimize_assumptions2 ( sat_solver3 * s,
int * pLits,
int nLits,
int nConfLimit )
extern

Definition at line 2194 of file satSolver3.c.

2195{
2196 int i, k, nLitsL, nLitsR, nResL, nResR;
2197 if ( nLits == 1 )
2198 {
2199 // since the problem is UNSAT, we will try to solve it without assuming the last literal
2200 // if the result is UNSAT, the last literal can be dropped; otherwise, it is needed
2201 int RetValue = 1, LitNot = Abc_LitNot(pLits[0]);
2202 int status = l_False;
2203 int Temp = s->nConfLimit;
2204 s->nConfLimit = nConfLimit;
2205
2206 RetValue = sat_solver3_push( s, LitNot ); assert( RetValue );
2207 status = sat_solver3_solve_internal( s );
2208 sat_solver3_pop( s );
2209
2210 // if the problem is UNSAT, add clause
2211 if ( status == l_False )
2212 {
2213 RetValue = sat_solver3_addclause( s, &LitNot, &LitNot+1 );
2214 assert( RetValue );
2215 }
2216
2217 s->nConfLimit = Temp;
2218 return (int)(status != l_False); // return 1 if the problem is not UNSAT
2219 }
2220 assert( nLits >= 2 );
2221 nLitsL = nLits / 2;
2222 nLitsR = nLits - nLitsL;
2223 // assume the left lits
2224 for ( i = 0; i < nLitsL; i++ )
2225 if ( !sat_solver3_push(s, pLits[i]) )
2226 {
2227 for ( k = i; k >= 0; k-- )
2228 sat_solver3_pop(s);
2229
2230 // add clauses for these literal
2231 for ( k = i+1; k > nLitsL; k++ )
2232 {
2233 int LitNot = Abc_LitNot(pLits[i]);
2234 int RetValue = sat_solver3_addclause( s, &LitNot, &LitNot+1 );
2235 assert( RetValue );
2236 }
2237
2238 return sat_solver3_minimize_assumptions2( s, pLits, i+1, nConfLimit );
2239 }
2240 // solve for the right lits
2241 nResL = sat_solver3_minimize_assumptions2( s, pLits + nLitsL, nLitsR, nConfLimit );
2242 for ( i = 0; i < nLitsL; i++ )
2243 sat_solver3_pop(s);
2244 // swap literals
2245// assert( nResL <= nLitsL );
2246 veci_resize( &s->temp_clause, 0 );
2247 for ( i = 0; i < nLitsL; i++ )
2248 veci_push( &s->temp_clause, pLits[i] );
2249 for ( i = 0; i < nResL; i++ )
2250 pLits[i] = pLits[nLitsL+i];
2251 for ( i = 0; i < nLitsL; i++ )
2252 pLits[nResL+i] = veci_begin(&s->temp_clause)[i];
2253 // assume the right lits
2254 for ( i = 0; i < nResL; i++ )
2255 if ( !sat_solver3_push(s, pLits[i]) )
2256 {
2257 for ( k = i; k >= 0; k-- )
2258 sat_solver3_pop(s);
2259
2260 // add clauses for these literal
2261 for ( k = i+1; k > nResL; k++ )
2262 {
2263 int LitNot = Abc_LitNot(pLits[i]);
2264 int RetValue = sat_solver3_addclause( s, &LitNot, &LitNot+1 );
2265 assert( RetValue );
2266 }
2267
2268 return sat_solver3_minimize_assumptions2( s, pLits, i+1, nConfLimit );
2269 }
2270 // solve for the left lits
2271 nResR = sat_solver3_minimize_assumptions2( s, pLits + nResL, nLitsL, nConfLimit );
2272 for ( i = 0; i < nResL; i++ )
2273 sat_solver3_pop(s);
2274 return nResL + nResR;
2275}
int sat_solver3_minimize_assumptions2(sat_solver3 *s, int *pLits, int nLits, int nConfLimit)
int sat_solver3_addclause(sat_solver3 *s, lit *begin, lit *end)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sat_solver3_nclauses()

int sat_solver3_nclauses ( sat_solver3 * s)
extern

Definition at line 2285 of file satSolver3.c.

2286{
2287 return s->stats.clauses;
2288}

◆ sat_solver3_nconflicts()

int sat_solver3_nconflicts ( sat_solver3 * s)
extern

Definition at line 2291 of file satSolver3.c.

2292{
2293 return (int)s->stats.conflicts;
2294}
ABC_INT64_T conflicts
Definition satVec.h:156

◆ sat_solver3_new()

sat_solver3 * sat_solver3_new ( void )
extern

Definition at line 1109 of file satSolver3.c.

1110{
1111 sat_solver3* s = (sat_solver3*)ABC_CALLOC( char, sizeof(sat_solver3));
1112
1113// Vec_SetAlloc_(&s->Mem, 15);
1114 Sat_MemAlloc_(&s->Mem, 17);
1115 s->hLearnts = -1;
1116 s->hBinary = Sat_MemAppend( &s->Mem, NULL, 2, 0, 0 );
1117 s->binary = clause_read( s, s->hBinary );
1118
1119 s->nLearntStart = LEARNT_MAX_START_DEFAULT; // starting learned clause limit
1120 s->nLearntDelta = LEARNT_MAX_INCRE_DEFAULT; // delta of learned clause limit
1121 s->nLearntRatio = LEARNT_MAX_RATIO_DEFAULT; // ratio of learned clause limit
1122 s->nLearntMax = s->nLearntStart;
1123
1124 // initialize vectors
1125 veci_new(&s->order);
1126 veci_new(&s->trail_lim);
1127 veci_new(&s->tagged);
1128// veci_new(&s->learned);
1129 veci_new(&s->act_clas);
1130 veci_new(&s->stack);
1131// veci_new(&s->model);
1132 veci_new(&s->unit_lits);
1133 veci_new(&s->temp_clause);
1134 veci_new(&s->conf_final);
1135
1136 // initialize arrays
1137 s->wlists = 0;
1138 s->activity = 0;
1139 s->orderpos = 0;
1140 s->reasons = 0;
1141 s->trail = 0;
1142
1143 // initialize other vars
1144 s->size = 0;
1145 s->cap = 0;
1146 s->qhead = 0;
1147 s->qtail = 0;
1148
1149 solver_init_activities(s);
1150 veci_new(&s->act_vars);
1151
1152 s->root_level = 0;
1153// s->simpdb_assigns = 0;
1154// s->simpdb_props = 0;
1155 s->random_seed = 91648253;
1156 s->progress_estimate = 0;
1157// s->binary = (clause*)ABC_ALLOC( char, sizeof(clause) + sizeof(lit)*2);
1158// s->binary->size_learnt = (2 << 1);
1159 s->verbosity = 0;
1160
1161 s->stats.starts = 0;
1162 s->stats.decisions = 0;
1163 s->stats.propagations = 0;
1164 s->stats.inspects = 0;
1165 s->stats.conflicts = 0;
1166 s->stats.clauses = 0;
1167 s->stats.clauses_literals = 0;
1168 s->stats.learnts = 0;
1169 s->stats.learnts_literals = 0;
1170 s->stats.tot_literals = 0;
1171 return s;
1172}
#define ABC_CALLOC(type, num)
Definition abc_global.h:265
#define LEARNT_MAX_RATIO_DEFAULT
Definition satClause.h:39
#define LEARNT_MAX_START_DEFAULT
INCLUDES ///.
Definition satClause.h:37
#define LEARNT_MAX_INCRE_DEFAULT
Definition satClause.h:38
double progress_estimate
Definition satSolver3.h:157
double random_seed
Definition satSolver3.h:156
clause * binary
Definition satSolver3.h:110
ABC_INT64_T decisions
Definition satVec.h:156
ABC_INT64_T tot_literals
Definition satVec.h:157
unsigned starts
Definition satVec.h:155
ABC_INT64_T inspects
Definition satVec.h:156
ABC_INT64_T propagations
Definition satVec.h:156
Here is the caller graph for this function:

◆ sat_solver3_nvars()

int sat_solver3_nvars ( sat_solver3 * s)
extern

Definition at line 2279 of file satSolver3.c.

2280{
2281 return s->size;
2282}

◆ sat_solver3_pop()

void sat_solver3_pop ( sat_solver3 * s)
extern

Definition at line 1990 of file satSolver3.c.

1991{
1992 assert( sat_solver3_dl(s) > 0 );
1993 sat_solver3_canceluntil(s, --s->root_level);
1994}
Here is the caller graph for this function:

◆ sat_solver3_push()

int sat_solver3_push ( sat_solver3 * s,
int p )
extern

Definition at line 1947 of file satSolver3.c.

1948{
1949 assert(lit_var(p) < s->size);
1950 veci_push(&s->trail_lim,s->qtail);
1951 s->root_level++;
1952 if (!sat_solver3_enqueue(s,p,0))
1953 {
1954 int h = s->reasons[lit_var(p)];
1955 if (h)
1956 {
1957 if (clause_is_lit(h))
1958 {
1959 (clause_begin(s->binary))[1] = lit_neg(p);
1960 (clause_begin(s->binary))[0] = clause_read_lit(h);
1961 h = s->hBinary;
1962 }
1963 sat_solver3_analyze_final(s, h, 1);
1964 veci_push(&s->conf_final, lit_neg(p));
1965 }
1966 else
1967 {
1968 veci_resize(&s->conf_final,0);
1969 veci_push(&s->conf_final, lit_neg(p));
1970 // the two lines below are a bug fix by Siert Wieringa
1971 if (var_level(s, lit_var(p)) > 0)
1972 veci_push(&s->conf_final, p);
1973 }
1974 //sat_solver3_canceluntil(s, 0);
1975 return false;
1976 }
1977 else
1978 {
1979 int fConfl = sat_solver3_propagate(s);
1980 if (fConfl){
1981 sat_solver3_analyze_final(s, fConfl, 0);
1982 //assert(s->conf_final.size > 0);
1983 //sat_solver3_canceluntil(s, 0);
1984 return false; }
1985 }
1986 return true;
1987}
Cube * p
Definition exorList.c:222
int sat_solver3_propagate(sat_solver3 *s)
Definition satSolver3.c:991
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sat_solver3_restart()

void sat_solver3_restart ( sat_solver3 * s)
extern

Definition at line 1352 of file satSolver3.c.

1353{
1354 int i;
1355 Sat_MemRestart( &s->Mem );
1356 s->hLearnts = -1;
1357 s->hBinary = Sat_MemAppend( &s->Mem, NULL, 2, 0, 0 );
1358 s->binary = clause_read( s, s->hBinary );
1359
1360 veci_resize(&s->trail_lim, 0);
1361 veci_resize(&s->order, 0);
1362 for ( i = 0; i < s->size*2; i++ )
1363 s->wlists[i].size = 0;
1364
1365 s->nDBreduces = 0;
1366
1367 // initialize other vars
1368 s->size = 0;
1369// s->cap = 0;
1370 s->qhead = 0;
1371 s->qtail = 0;
1372
1373
1374 // variable activities
1375 solver_init_activities(s);
1376 veci_resize(&s->act_clas, 0);
1377
1378
1379 s->root_level = 0;
1380// s->simpdb_assigns = 0;
1381// s->simpdb_props = 0;
1382 s->random_seed = 91648253;
1383 s->progress_estimate = 0;
1384 s->verbosity = 0;
1385
1386 s->stats.starts = 0;
1387 s->stats.decisions = 0;
1388 s->stats.propagations = 0;
1389 s->stats.inspects = 0;
1390 s->stats.conflicts = 0;
1391 s->stats.clauses = 0;
1392 s->stats.clauses_literals = 0;
1393 s->stats.learnts = 0;
1394 s->stats.learnts_literals = 0;
1395 s->stats.tot_literals = 0;
1396}
int size
Definition satVec.h:33

◆ sat_solver3_rollback()

void sat_solver3_rollback ( sat_solver3 * s)
extern

Definition at line 1606 of file satSolver3.c.

1607{
1608 Sat_Mem_t * pMem = &s->Mem;
1609 int i, k, j;
1610 static int Count = 0;
1611 Count++;
1612 assert( s->iVarPivot >= 0 && s->iVarPivot <= s->size );
1613 assert( s->iTrailPivot >= 0 && s->iTrailPivot <= s->qtail );
1614 // reset implication queue
1615 sat_solver3_canceluntil_rollback( s, s->iTrailPivot );
1616 // update order
1617 if ( s->iVarPivot < s->size )
1618 {
1619 if ( s->activity2 )
1620 {
1621 s->var_inc = s->var_inc2;
1622 memcpy( s->activity, s->activity2, sizeof(word) * s->iVarPivot );
1623 }
1624 veci_resize(&s->order, 0);
1625 for ( i = 0; i < s->iVarPivot; i++ )
1626 {
1627 if ( var_value(s, i) != varX )
1628 continue;
1629 s->orderpos[i] = veci_size(&s->order);
1630 veci_push(&s->order,i);
1631 order_update(s, i);
1632 }
1633 }
1634 // compact watches
1635 for ( i = 0; i < s->iVarPivot*2; i++ )
1636 {
1637 cla* pArray = veci_begin(&s->wlists[i]);
1638 for ( j = k = 0; k < veci_size(&s->wlists[i]); k++ )
1639 {
1640 if ( clause_is_lit(pArray[k]) )
1641 {
1642 if ( clause_read_lit(pArray[k]) < s->iVarPivot*2 )
1643 pArray[j++] = pArray[k];
1644 }
1645 else if ( Sat_MemClauseUsed(pMem, pArray[k]) )
1646 pArray[j++] = pArray[k];
1647 }
1648 veci_resize(&s->wlists[i],j);
1649 }
1650 // reset watcher lists
1651 for ( i = 2*s->iVarPivot; i < 2*s->size; i++ )
1652 s->wlists[i].size = 0;
1653
1654 // reset clause counts
1655 s->stats.clauses = pMem->BookMarkE[0];
1656 s->stats.learnts = pMem->BookMarkE[1];
1657 // rollback clauses
1658 Sat_MemRollBack( pMem );
1659
1660 // resize learned arrays
1661 veci_resize(&s->act_clas, s->stats.learnts);
1662
1663 // initialize other vars
1664 s->size = s->iVarPivot;
1665 if ( s->size == 0 )
1666 {
1667 // s->size = 0;
1668 // s->cap = 0;
1669 s->qhead = 0;
1670 s->qtail = 0;
1671
1672 solver_init_activities(s);
1673
1674 s->root_level = 0;
1675 s->random_seed = 91648253;
1676 s->progress_estimate = 0;
1677 s->verbosity = 0;
1678
1679 s->stats.starts = 0;
1680 s->stats.decisions = 0;
1681 s->stats.propagations = 0;
1682 s->stats.inspects = 0;
1683 s->stats.conflicts = 0;
1684 s->stats.clauses = 0;
1685 s->stats.clauses_literals = 0;
1686 s->stats.learnts = 0;
1687 s->stats.learnts_literals = 0;
1688 s->stats.tot_literals = 0;
1689
1690 // initialize rollback
1691 s->iVarPivot = 0; // the pivot for variables
1692 s->iTrailPivot = 0; // the pivot for trail
1693 s->hProofPivot = 1; // the pivot for proof records
1694 }
1695}
struct Sat_Mem_t_ Sat_Mem_t
Definition satClause.h:70
int cla
Definition satVec.h:131
int BookMarkE[2]
Definition satClause.h:75
char * memcpy()
Here is the call graph for this function:

◆ sat_solver3_set_resource_limits()

void sat_solver3_set_resource_limits ( sat_solver3 * s,
ABC_INT64_T nConfLimit,
ABC_INT64_T nInsLimit,
ABC_INT64_T nConfLimitGlobal,
ABC_INT64_T nInsLimitGlobal )
extern

Definition at line 1996 of file satSolver3.c.

1997{
1998 // set the external limits
1999 s->nRestarts = 0;
2000 s->nConfLimit = 0;
2001 s->nInsLimit = 0;
2002 if ( nConfLimit )
2003 s->nConfLimit = s->stats.conflicts + nConfLimit;
2004 if ( nInsLimit )
2005// s->nInsLimit = s->stats.inspects + nInsLimit;
2006 s->nInsLimit = s->stats.propagations + nInsLimit;
2007 if ( nConfLimitGlobal && (s->nConfLimit == 0 || s->nConfLimit > nConfLimitGlobal) )
2008 s->nConfLimit = nConfLimitGlobal;
2009 if ( nInsLimitGlobal && (s->nInsLimit == 0 || s->nInsLimit > nInsLimitGlobal) )
2010 s->nInsLimit = nInsLimitGlobal;
2011}
ABC_INT64_T nInsLimit
Definition satSolver3.h:169
Here is the caller graph for this function:

◆ sat_solver3_set_var_activity()

void sat_solver3_set_var_activity ( sat_solver3 * s,
int * pVars,
int nVars )
extern

Definition at line 216 of file satSolver3.c.

217{
218 int i;
219 assert( s->VarActType == 1 );
220 for (i = 0; i < s->size; i++)
221 s->activity[i] = 0;
222 s->var_inc = Abc_Dbl2Word(1);
223 for ( i = 0; i < nVars; i++ )
224 {
225 int iVar = pVars ? pVars[i] : i;
226 s->activity[iVar] = Abc_Dbl2Word(nVars-i);
227 order_update( s, iVar );
228 }
229}

◆ sat_solver3_setnvars()

void sat_solver3_setnvars ( sat_solver3 * s,
int n )
extern

Definition at line 1239 of file satSolver3.c.

1240{
1241 int var;
1242
1243 if (s->cap < n){
1244 int old_cap = s->cap;
1245 while (s->cap < n) s->cap = s->cap*2+1;
1246 if ( s->cap < 50000 )
1247 s->cap = 50000;
1248
1249 s->wlists = ABC_REALLOC(veci, s->wlists, s->cap*2);
1250// s->vi = ABC_REALLOC(varinfo,s->vi, s->cap);
1251 s->levels = ABC_REALLOC(int, s->levels, s->cap);
1252 s->assigns = ABC_REALLOC(char, s->assigns, s->cap);
1253 s->polarity = ABC_REALLOC(char, s->polarity, s->cap);
1254 s->tags = ABC_REALLOC(char, s->tags, s->cap);
1255 s->loads = ABC_REALLOC(char, s->loads, s->cap);
1256 s->activity = ABC_REALLOC(word, s->activity, s->cap);
1257 s->activity2 = ABC_REALLOC(word, s->activity2,s->cap);
1258 s->pFreqs = ABC_REALLOC(char, s->pFreqs, s->cap);
1259
1260 if ( s->factors )
1261 s->factors = ABC_REALLOC(double, s->factors, s->cap);
1262 s->orderpos = ABC_REALLOC(int, s->orderpos, s->cap);
1263 s->reasons = ABC_REALLOC(int, s->reasons, s->cap);
1264 s->trail = ABC_REALLOC(lit, s->trail, s->cap);
1265 s->model = ABC_REALLOC(int, s->model, s->cap);
1266 memset( s->wlists + 2*old_cap, 0, 2*(s->cap-old_cap)*sizeof(veci) );
1267 }
1268
1269 for (var = s->size; var < n; var++){
1270 assert(!s->wlists[2*var].size);
1271 assert(!s->wlists[2*var+1].size);
1272 if ( s->wlists[2*var].ptr == NULL )
1273 veci_new(&s->wlists[2*var]);
1274 if ( s->wlists[2*var+1].ptr == NULL )
1275 veci_new(&s->wlists[2*var+1]);
1276
1277 if ( s->VarActType == 0 )
1278 s->activity[var] = (1<<10);
1279 else if ( s->VarActType == 1 )
1280 s->activity[var] = 0;
1281 else if ( s->VarActType == 2 )
1282 s->activity[var] = 0;
1283 else assert(0);
1284
1285 s->pFreqs[var] = 0;
1286 if ( s->factors )
1287 s->factors [var] = 0;
1288// *((int*)s->vi + var) = 0; s->vi[var].val = varX;
1289 s->levels [var] = 0;
1290 s->assigns [var] = varX;
1291 s->polarity[var] = 0;
1292 s->tags [var] = 0;
1293 s->loads [var] = 0;
1294 s->orderpos[var] = veci_size(&s->order);
1295 s->reasons [var] = 0;
1296 s->model [var] = 0;
1297
1298 /* does not hold because variables enqueued at top level will not be reinserted in the heap
1299 assert(veci_size(&s->order) == var);
1300 */
1301 veci_push(&s->order,var);
1302 order_update(s, var);
1303 }
1304
1305 s->size = n > s->size ? n : s->size;
1306}
#define ABC_REALLOC(type, obj, num)
Definition abc_global.h:268
unsigned short var
Definition giaNewBdd.h:35
int * ptr
Definition satVec.h:34
char * memset()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sat_solver3_simplify()

int sat_solver3_simplify ( sat_solver3 * s)
extern

Definition at line 1478 of file satSolver3.c.

1479{
1480 assert(sat_solver3_dl(s) == 0);
1481 if (sat_solver3_propagate(s) != 0)
1482 return false;
1483 return true;
1484}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sat_solver3_solve()

int sat_solver3_solve ( sat_solver3 * s,
lit * begin,
lit * end,
ABC_INT64_T nConfLimit,
ABC_INT64_T nInsLimit,
ABC_INT64_T nConfLimitGlobal,
ABC_INT64_T nInsLimitGlobal )
extern

Definition at line 2013 of file satSolver3.c.

2014{
2015 lbool status;
2016 lit * i;
2017 if ( s->fSolved )
2018 return l_False;
2019
2020 if ( s->fVerbose )
2021 printf( "Running SAT solver with parameters %d and %d and %d.\n", s->nLearntStart, s->nLearntDelta, s->nLearntRatio );
2022
2023 sat_solver3_set_resource_limits( s, nConfLimit, nInsLimit, nConfLimitGlobal, nInsLimitGlobal );
2024
2025#ifdef SAT_USE_ANALYZE_FINAL
2026 // Perform assumptions:
2027 s->root_level = 0;
2028 for ( i = begin; i < end; i++ )
2029 if ( !sat_solver3_push(s, *i) )
2030 {
2031 sat_solver3_canceluntil(s,0);
2032 s->root_level = 0;
2033 return l_False;
2034 }
2035 assert(s->root_level == sat_solver3_dl(s));
2036#else
2037 //printf("solve: "); printlits(begin, end); printf("\n");
2038 for (i = begin; i < end; i++){
2039// switch (lit_sign(*i) ? -s->assignss[lit_var(*i)] : s->assignss[lit_var(*i)]){
2040 switch (var_value(s, *i)) {
2041 case var1: // l_True:
2042 break;
2043 case varX: // l_Undef
2044 sat_solver3_decision(s, *i);
2045 if (sat_solver3_propagate(s) == 0)
2046 break;
2047 // fallthrough
2048 case var0: // l_False
2049 sat_solver3_canceluntil(s, 0);
2050 return l_False;
2051 }
2052 }
2053 s->root_level = sat_solver3_dl(s);
2054#endif
2055
2056 status = sat_solver3_solve_internal(s);
2057
2058 sat_solver3_canceluntil(s,0);
2059 s->root_level = 0;
2060 return status;
2061}
void sat_solver3_set_resource_limits(sat_solver3 *s, ABC_INT64_T nConfLimit, ABC_INT64_T nInsLimit, ABC_INT64_T nConfLimitGlobal, ABC_INT64_T nInsLimitGlobal)
signed char lbool
Definition satVec.h:135
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sat_solver3_solve_internal()

int sat_solver3_solve_internal ( sat_solver3 * s)
extern

Definition at line 1896 of file satSolver3.c.

1897{
1898 lbool status = l_Undef;
1899 int restart_iter = 0;
1900 veci_resize(&s->unit_lits, 0);
1901 s->nCalls++;
1902
1903 if (s->verbosity >= 1){
1904 printf("==================================[MINISAT]===================================\n");
1905 printf("| Conflicts | ORIGINAL | LEARNT | Progress |\n");
1906 printf("| | Clauses Literals | Limit Clauses Literals Lit/Cl | |\n");
1907 printf("==============================================================================\n");
1908 }
1909
1910 while (status == l_Undef){
1911 ABC_INT64_T nof_conflicts;
1912 double Ratio = (s->stats.learnts == 0)? 0.0 :
1913 s->stats.learnts_literals / (double)s->stats.learnts;
1914 if ( s->nRuntimeLimit && Abc_Clock() > s->nRuntimeLimit )
1915 break;
1916 if (s->verbosity >= 1)
1917 {
1918 printf("| %9.0f | %7.0f %8.0f | %7.0f %7.0f %8.0f %7.1f | %6.3f %% |\n",
1919 (double)s->stats.conflicts,
1920 (double)s->stats.clauses,
1921 (double)s->stats.clauses_literals,
1922 (double)0,
1923 (double)s->stats.learnts,
1924 (double)s->stats.learnts_literals,
1925 Ratio,
1926 s->progress_estimate*100);
1927 fflush(stdout);
1928 }
1929 nof_conflicts = (ABC_INT64_T)( 100 * luby(2, restart_iter++) );
1930 status = sat_solver3_search(s, nof_conflicts);
1931 // quit the loop if reached an external limit
1932 if ( s->nConfLimit && s->stats.conflicts > s->nConfLimit )
1933 break;
1934 if ( s->nInsLimit && s->stats.propagations > s->nInsLimit )
1935 break;
1936 if ( s->nRuntimeLimit && Abc_Clock() > s->nRuntimeLimit )
1937 break;
1938 }
1939 if (s->verbosity >= 1)
1940 printf("==============================================================================\n");
1941
1942 sat_solver3_canceluntil(s,s->root_level);
1943 return status;
1944}
double luby(double y, int x)
Definition satSolver.c:1797
if(last==0)
Definition sparse_int.h:34
abctime nRuntimeLimit
Definition satSolver3.h:170
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sat_solver3_solve_lexsat()

int sat_solver3_solve_lexsat ( sat_solver3 * s,
int * pLits,
int nLits )
extern

Definition at line 2069 of file satSolver3.c.

2070{
2071 int i, iLitFail = -1;
2072 lbool status;
2073 assert( nLits > 0 );
2074 // help the SAT solver by setting desirable polarity
2075 sat_solver3_set_literal_polarity( s, pLits, nLits );
2076 // check if there exists a satisfying assignment
2077 status = sat_solver3_solve_internal( s );
2078 if ( status != l_True ) // no assignment
2079 return status;
2080 // there is at least one satisfying assignment
2081 assert( status == l_True );
2082 // find the first mismatching literal
2083 for ( i = 0; i < nLits; i++ )
2084 if ( pLits[i] != sat_solver3_var_literal(s, Abc_Lit2Var(pLits[i])) )
2085 break;
2086 if ( i == nLits ) // no mismatch - the current assignment is the minimum one!
2087 return l_True;
2088 // mismatch happens in literal i
2089 iLitFail = i;
2090 // create assumptions up to this literal (as in pLits) - including this literal!
2091 for ( i = 0; i <= iLitFail; i++ )
2092 if ( !sat_solver3_push(s, pLits[i]) ) // can become UNSAT while adding the last assumption
2093 break;
2094 if ( i < iLitFail + 1 ) // the solver became UNSAT while adding assumptions
2095 status = l_False;
2096 else // solve under the assumptions
2097 status = sat_solver3_solve_internal( s );
2098 if ( status == l_True )
2099 {
2100 // we proved that there is a sat assignment with literal (iLitFail) having polarity as in pLits
2101 // continue solving recursively
2102 if ( iLitFail + 1 < nLits )
2103 status = sat_solver3_solve_lexsat( s, pLits + iLitFail + 1, nLits - iLitFail - 1 );
2104 }
2105 else if ( status == l_False )
2106 {
2107 // we proved that there is no assignment with iLitFail having polarity as in pLits
2108 assert( Abc_LitIsCompl(pLits[iLitFail]) ); // literal is 0
2109 // (this assert may fail only if there is a sat assignment smaller than one originally given in pLits)
2110 // now we flip this literal (make it 1), change the last assumption
2111 // and contiue looking for the 000...0-assignment of other literals
2112 sat_solver3_pop( s );
2113 pLits[iLitFail] = Abc_LitNot(pLits[iLitFail]);
2114 if ( !sat_solver3_push(s, pLits[iLitFail]) )
2115 printf( "sat_solver3_solve_lexsat(): A satisfying assignment should exist.\n" ); // because we know that the problem is satisfiable
2116 // update other literals to be 000...0
2117 for ( i = iLitFail + 1; i < nLits; i++ )
2118 pLits[i] = Abc_LitNot( Abc_LitRegular(pLits[i]) );
2119 // continue solving recursively
2120 if ( iLitFail + 1 < nLits )
2121 status = sat_solver3_solve_lexsat( s, pLits + iLitFail + 1, nLits - iLitFail - 1 );
2122 else
2123 status = l_True;
2124 }
2125 // undo the assumptions
2126 for ( i = iLitFail; i >= 0; i-- )
2127 sat_solver3_pop( s );
2128 return status;
2129}
int sat_solver3_solve_lexsat(sat_solver3 *s, int *pLits, int nLits)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ sat_solver3_store_alloc()

void sat_solver3_store_alloc ( sat_solver3 * s)
extern

◆ sat_solver3_store_free()

void sat_solver3_store_free ( sat_solver3 * s)
extern

◆ sat_solver3_store_mark_clauses_a()

void sat_solver3_store_mark_clauses_a ( sat_solver3 * s)
extern

◆ sat_solver3_store_mark_roots()

void sat_solver3_store_mark_roots ( sat_solver3 * s)
extern

◆ sat_solver3_store_release()

void * sat_solver3_store_release ( sat_solver3 * s)
extern

◆ sat_solver3_store_write()

void sat_solver3_store_write ( sat_solver3 * s,
char * pFileName )
extern

◆ sat_solver3DoubleClauses()

void sat_solver3DoubleClauses ( sat_solver3 * p,
int iVar )
extern

◆ sat_solver3GetModel()

int * sat_solver3GetModel ( sat_solver3 * p,
int * pVars,
int nVars )
extern

◆ sat_solver3PrintStats()

void sat_solver3PrintStats ( FILE * pFile,
sat_solver3 * p )
extern

◆ sat_solver3TraceStart()

void sat_solver3TraceStart ( sat_solver3 * pSat,
char * pName )
extern

◆ sat_solver3TraceStop()

void sat_solver3TraceStop ( sat_solver3 * pSat)
extern

◆ sat_solver3TraceWrite()

void sat_solver3TraceWrite ( sat_solver3 * pSat,
int * pBeg,
int * pEnd,
int fRoot )
extern

◆ sat_solver3WriteDimacs()

void sat_solver3WriteDimacs ( sat_solver3 * p,
char * pFileName,
lit * assumptionsBegin,
lit * assumptionsEnd,
int incrementVars )
extern

◆ zsat_solver3_new_seed()

sat_solver3 * zsat_solver3_new_seed ( double seed)
extern

Definition at line 1174 of file satSolver3.c.

1175{
1176 sat_solver3* s = (sat_solver3*)ABC_CALLOC( char, sizeof(sat_solver3));
1177
1178// Vec_SetAlloc_(&s->Mem, 15);
1179 Sat_MemAlloc_(&s->Mem, 15);
1180 s->hLearnts = -1;
1181 s->hBinary = Sat_MemAppend( &s->Mem, NULL, 2, 0, 0 );
1182 s->binary = clause_read( s, s->hBinary );
1183
1184 s->nLearntStart = LEARNT_MAX_START_DEFAULT; // starting learned clause limit
1185 s->nLearntDelta = LEARNT_MAX_INCRE_DEFAULT; // delta of learned clause limit
1186 s->nLearntRatio = LEARNT_MAX_RATIO_DEFAULT; // ratio of learned clause limit
1187 s->nLearntMax = s->nLearntStart;
1188
1189 // initialize vectors
1190 veci_new(&s->order);
1191 veci_new(&s->trail_lim);
1192 veci_new(&s->tagged);
1193// veci_new(&s->learned);
1194 veci_new(&s->act_clas);
1195 veci_new(&s->stack);
1196// veci_new(&s->model);
1197 veci_new(&s->unit_lits);
1198 veci_new(&s->temp_clause);
1199 veci_new(&s->conf_final);
1200
1201 // initialize arrays
1202 s->wlists = 0;
1203 s->activity = 0;
1204 s->orderpos = 0;
1205 s->reasons = 0;
1206 s->trail = 0;
1207
1208 // initialize other vars
1209 s->size = 0;
1210 s->cap = 0;
1211 s->qhead = 0;
1212 s->qtail = 0;
1213
1214 solver_init_activities(s);
1215 veci_new(&s->act_vars);
1216
1217 s->root_level = 0;
1218// s->simpdb_assigns = 0;
1219// s->simpdb_props = 0;
1220 s->random_seed = seed;
1221 s->progress_estimate = 0;
1222// s->binary = (clause*)ABC_ALLOC( char, sizeof(clause) + sizeof(lit)*2);
1223// s->binary->size_learnt = (2 << 1);
1224 s->verbosity = 0;
1225
1226 s->stats.starts = 0;
1227 s->stats.decisions = 0;
1228 s->stats.propagations = 0;
1229 s->stats.inspects = 0;
1230 s->stats.conflicts = 0;
1231 s->stats.clauses = 0;
1232 s->stats.clauses_literals = 0;
1233 s->stats.learnts = 0;
1234 s->stats.learnts_literals = 0;
1235 s->stats.tot_literals = 0;
1236 return s;
1237}

◆ zsat_solver3_restart_seed()

void zsat_solver3_restart_seed ( sat_solver3 * s,
double seed )
extern

Definition at line 1398 of file satSolver3.c.

1399{
1400 int i;
1401 Sat_MemRestart( &s->Mem );
1402 s->hLearnts = -1;
1403 s->hBinary = Sat_MemAppend( &s->Mem, NULL, 2, 0, 0 );
1404 s->binary = clause_read( s, s->hBinary );
1405
1406 veci_resize(&s->trail_lim, 0);
1407 veci_resize(&s->order, 0);
1408 for ( i = 0; i < s->size*2; i++ )
1409 s->wlists[i].size = 0;
1410
1411 s->nDBreduces = 0;
1412
1413 // initialize other vars
1414 s->size = 0;
1415// s->cap = 0;
1416 s->qhead = 0;
1417 s->qtail = 0;
1418
1419 solver_init_activities(s);
1420 veci_resize(&s->act_clas, 0);
1421
1422 s->root_level = 0;
1423// s->simpdb_assigns = 0;
1424// s->simpdb_props = 0;
1425 s->random_seed = seed;
1426 s->progress_estimate = 0;
1427 s->verbosity = 0;
1428
1429 s->stats.starts = 0;
1430 s->stats.decisions = 0;
1431 s->stats.propagations = 0;
1432 s->stats.inspects = 0;
1433 s->stats.conflicts = 0;
1434 s->stats.clauses = 0;
1435 s->stats.clauses_literals = 0;
1436 s->stats.learnts = 0;
1437 s->stats.learnts_literals = 0;
1438 s->stats.tot_literals = 0;
1439}