mirror of https://github.com/YosysHQ/abc.git
Fixed the problem with 'write_cnf' after recent changes to the SAT solver.
This commit is contained in:
parent
1e159a826e
commit
1b18583840
|
|
@ -36,111 +36,6 @@ static void Sat_SolverClauseWriteDimacs( FILE * pFile, clause * pC, int fIncreme
|
|||
/// FUNCTION DEFINITIONS ///
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Write the clauses in the solver into a file in DIMACS format.]
|
||||
|
||||
Description []
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
void Sat_SolverWriteDimacs( sat_solver * p, char * pFileName, lit* assumptionsBegin, lit* assumptionsEnd, int incrementVars )
|
||||
{
|
||||
Sat_Mem_t * pMem = &p->Mem;
|
||||
FILE * pFile;
|
||||
clause * c;
|
||||
int i, k;
|
||||
|
||||
// start the file
|
||||
pFile = fopen( pFileName, "wb" );
|
||||
if ( pFile == NULL )
|
||||
{
|
||||
printf( "Sat_SolverWriteDimacs(): Cannot open the ouput file.\n" );
|
||||
return;
|
||||
}
|
||||
// fprintf( pFile, "c CNF generated by ABC on %s\n", Extra_TimeStamp() );
|
||||
fprintf( pFile, "p cnf %d %d\n", p->size, Sat_MemEntryNum(&p->Mem, 0) );
|
||||
|
||||
// write the original clauses
|
||||
Sat_MemForEachClause( pMem, c, i, k )
|
||||
Sat_SolverClauseWriteDimacs( pFile, c, incrementVars );
|
||||
|
||||
// write the learned clauses
|
||||
Sat_MemForEachLearned( pMem, c, i, k )
|
||||
Sat_SolverClauseWriteDimacs( pFile, c, incrementVars );
|
||||
|
||||
// write zero-level assertions
|
||||
for ( i = 0; i < p->size; i++ )
|
||||
if ( p->levels[i] == 0 && p->assigns[i] != l_Undef )
|
||||
fprintf( pFile, "%s%d%s\n",
|
||||
(p->assigns[i] == l_False)? "-": "",
|
||||
i + (int)(incrementVars>0),
|
||||
(incrementVars) ? " 0" : "");
|
||||
|
||||
// write the assumptions
|
||||
if (assumptionsBegin) {
|
||||
for (; assumptionsBegin != assumptionsEnd; assumptionsBegin++) {
|
||||
fprintf( pFile, "%s%d%s\n",
|
||||
lit_sign(*assumptionsBegin)? "-": "",
|
||||
lit_var(*assumptionsBegin) + (int)(incrementVars>0),
|
||||
(incrementVars) ? " 0" : "");
|
||||
}
|
||||
}
|
||||
|
||||
fprintf( pFile, "\n" );
|
||||
fclose( pFile );
|
||||
}
|
||||
void Sat_Solver2WriteDimacs( sat_solver2 * p, char * pFileName, lit* assumptionsBegin, lit* assumptionsEnd, int incrementVars )
|
||||
{
|
||||
Sat_Mem_t * pMem = &p->Mem;
|
||||
FILE * pFile;
|
||||
clause * c;
|
||||
int i, k;
|
||||
|
||||
// start the file
|
||||
pFile = fopen( pFileName, "wb" );
|
||||
if ( pFile == NULL )
|
||||
{
|
||||
printf( "Sat_SolverWriteDimacs(): Cannot open the ouput file.\n" );
|
||||
return;
|
||||
}
|
||||
// fprintf( pFile, "c CNF generated by ABC on %s\n", Extra_TimeStamp() );
|
||||
fprintf( pFile, "p cnf %d %d\n", p->size, Sat_MemEntryNum(&p->Mem, 0) );
|
||||
|
||||
// write the original clauses
|
||||
Sat_MemForEachClause2( pMem, c, i, k )
|
||||
Sat_SolverClauseWriteDimacs( pFile, c, incrementVars );
|
||||
|
||||
// write the learned clauses
|
||||
Sat_MemForEachLearned( pMem, c, i, k )
|
||||
Sat_SolverClauseWriteDimacs( pFile, c, incrementVars );
|
||||
|
||||
// write zero-level assertions
|
||||
for ( i = 0; i < p->size; i++ )
|
||||
if ( p->levels[i] == 0 && p->assigns[i] != l_Undef )
|
||||
fprintf( pFile, "%s%d%s\n",
|
||||
(p->assigns[i] == l_False)? "-": "",
|
||||
i + (int)(incrementVars>0),
|
||||
(incrementVars) ? " 0" : "");
|
||||
|
||||
// write the assumptions
|
||||
if (assumptionsBegin) {
|
||||
for (; assumptionsBegin != assumptionsEnd; assumptionsBegin++) {
|
||||
fprintf( pFile, "%s%d%s\n",
|
||||
lit_sign(*assumptionsBegin)? "-": "",
|
||||
lit_var(*assumptionsBegin) + (int)(incrementVars>0),
|
||||
(incrementVars) ? " 0" : "");
|
||||
}
|
||||
}
|
||||
|
||||
fprintf( pFile, "\n" );
|
||||
fclose( pFile );
|
||||
}
|
||||
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Writes the given clause in a file in DIMACS format.]
|
||||
|
|
@ -162,6 +57,123 @@ void Sat_SolverClauseWriteDimacs( FILE * pFile, clause * pC, int fIncrement )
|
|||
fprintf( pFile, "\n" );
|
||||
}
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Write the clauses in the solver into a file in DIMACS format.]
|
||||
|
||||
Description []
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
void Sat_SolverWriteDimacs( sat_solver * p, char * pFileName, lit* assumpBegin, lit* assumpEnd, int incrementVars )
|
||||
{
|
||||
Sat_Mem_t * pMem = &p->Mem;
|
||||
FILE * pFile;
|
||||
clause * c;
|
||||
int i, k, nUnits;
|
||||
|
||||
// count the number of unit clauses
|
||||
nUnits = 0;
|
||||
for ( i = 0; i < p->size; i++ )
|
||||
if ( p->levels[i] == 0 && p->assigns[i] != l_Undef )
|
||||
nUnits++;
|
||||
|
||||
// start the file
|
||||
pFile = fopen( pFileName, "wb" );
|
||||
if ( pFile == NULL )
|
||||
{
|
||||
printf( "Sat_SolverWriteDimacs(): Cannot open the ouput file.\n" );
|
||||
return;
|
||||
}
|
||||
// fprintf( pFile, "c CNF generated by ABC on %s\n", Extra_TimeStamp() );
|
||||
fprintf( pFile, "p cnf %d %d\n", p->size, Sat_MemEntryNum(&p->Mem, 0)+Sat_MemEntryNum(&p->Mem, 1)+nUnits+(assumpEnd-assumpBegin) );
|
||||
|
||||
// write the original clauses
|
||||
Sat_MemForEachClause( pMem, c, i, k )
|
||||
Sat_SolverClauseWriteDimacs( pFile, c, incrementVars );
|
||||
|
||||
// write the learned clauses
|
||||
Sat_MemForEachLearned( pMem, c, i, k )
|
||||
Sat_SolverClauseWriteDimacs( pFile, c, incrementVars );
|
||||
|
||||
// write zero-level assertions
|
||||
for ( i = 0; i < p->size; i++ )
|
||||
if ( p->levels[i] == 0 && p->assigns[i] != l_Undef )
|
||||
fprintf( pFile, "%s%d%s\n",
|
||||
(p->assigns[i] == l_False)? "-": "",
|
||||
i + (int)(incrementVars>0),
|
||||
(incrementVars) ? " 0" : "");
|
||||
|
||||
// write the assump
|
||||
if (assumpBegin) {
|
||||
for (; assumpBegin != assumpEnd; assumpBegin++) {
|
||||
fprintf( pFile, "%s%d%s\n",
|
||||
lit_sign(*assumpBegin)? "-": "",
|
||||
lit_var(*assumpBegin) + (int)(incrementVars>0),
|
||||
(incrementVars) ? " 0" : "");
|
||||
}
|
||||
}
|
||||
|
||||
fprintf( pFile, "\n" );
|
||||
fclose( pFile );
|
||||
}
|
||||
void Sat_Solver2WriteDimacs( sat_solver2 * p, char * pFileName, lit* assumpBegin, lit* assumpEnd, int incrementVars )
|
||||
{
|
||||
Sat_Mem_t * pMem = &p->Mem;
|
||||
FILE * pFile;
|
||||
clause * c;
|
||||
int i, k, nUnits;
|
||||
|
||||
// count the number of unit clauses
|
||||
nUnits = 0;
|
||||
for ( i = 0; i < p->size; i++ )
|
||||
if ( p->levels[i] == 0 && p->assigns[i] != l_Undef )
|
||||
nUnits++;
|
||||
|
||||
// start the file
|
||||
pFile = fopen( pFileName, "wb" );
|
||||
if ( pFile == NULL )
|
||||
{
|
||||
printf( "Sat_SolverWriteDimacs(): Cannot open the ouput file.\n" );
|
||||
return;
|
||||
}
|
||||
// fprintf( pFile, "c CNF generated by ABC on %s\n", Extra_TimeStamp() );
|
||||
fprintf( pFile, "p cnf %d %d\n", p->size, Sat_MemEntryNum(&p->Mem, 0)+Sat_MemEntryNum(&p->Mem, 1)+nUnits+(assumpEnd-assumpBegin) );
|
||||
|
||||
// write the original clauses
|
||||
Sat_MemForEachClause2( pMem, c, i, k )
|
||||
Sat_SolverClauseWriteDimacs( pFile, c, incrementVars );
|
||||
|
||||
// write the learned clauses
|
||||
Sat_MemForEachLearned( pMem, c, i, k )
|
||||
Sat_SolverClauseWriteDimacs( pFile, c, incrementVars );
|
||||
|
||||
// write zero-level assertions
|
||||
for ( i = 0; i < p->size; i++ )
|
||||
if ( p->levels[i] == 0 && p->assigns[i] != l_Undef )
|
||||
fprintf( pFile, "%s%d%s\n",
|
||||
(p->assigns[i] == l_False)? "-": "",
|
||||
i + (int)(incrementVars>0),
|
||||
(incrementVars) ? " 0" : "");
|
||||
|
||||
// write the assump
|
||||
if (assumpBegin) {
|
||||
for (; assumpBegin != assumpEnd; assumpBegin++) {
|
||||
fprintf( pFile, "%s%d%s\n",
|
||||
lit_sign(*assumpBegin)? "-": "",
|
||||
lit_var(*assumpBegin) + (int)(incrementVars>0),
|
||||
(incrementVars) ? " 0" : "");
|
||||
}
|
||||
}
|
||||
|
||||
fprintf( pFile, "\n" );
|
||||
fclose( pFile );
|
||||
}
|
||||
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Writes the given clause in a file in DIMACS format.]
|
||||
|
|
|
|||
Loading…
Reference in New Issue