blob: 6ac27e2cf060c358c5ec5491dc4f9e776a8d127c [file] [log] [blame]
/**CFile****************************************************************
FileName [msatActivity.c]
PackageName [A C version of SAT solver MINISAT, originally developed
in C++ by Niklas Een and Niklas Sorensson, Chalmers University of
Technology, Sweden: http://www.cs.chalmers.se/~een/Satzoo.]
Synopsis [Procedures controlling activity of variables and clauses.]
Author [Alan Mishchenko <alanmi@eecs.berkeley.edu>]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - January 1, 2004.]
Revision [$Id: msatActivity.c,v 1.0 2004/01/01 1:00:00 alanmi Exp $]
***********************************************************************/
#include "msatInt.h"
ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Msat_SolverVarBumpActivity( Msat_Solver_t * p, Msat_Lit_t Lit )
{
Msat_Var_t Var;
if ( p->dVarDecay < 0 ) // (negative decay means static variable order -- don't bump)
return;
Var = MSAT_LIT2VAR(Lit);
p->pdActivity[Var] += p->dVarInc;
// p->pdActivity[Var] += p->dVarInc * p->pFactors[Var];
if ( p->pdActivity[Var] > 1e100 )
Msat_SolverVarRescaleActivity( p );
Msat_OrderUpdate( p->pOrder, Var );
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Msat_SolverVarDecayActivity( Msat_Solver_t * p )
{
if ( p->dVarDecay >= 0 )
p->dVarInc *= p->dVarDecay;
}
/**Function*************************************************************
Synopsis [Divide all variable activities by 1e100.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Msat_SolverVarRescaleActivity( Msat_Solver_t * p )
{
int i;
for ( i = 0; i < p->nVars; i++ )
p->pdActivity[i] *= 1e-100;
p->dVarInc *= 1e-100;
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Msat_SolverClaBumpActivity( Msat_Solver_t * p, Msat_Clause_t * pC )
{
float Activ;
Activ = Msat_ClauseReadActivity(pC);
if ( Activ + p->dClaInc > 1e20 )
{
Msat_SolverClaRescaleActivity( p );
Activ = Msat_ClauseReadActivity( pC );
}
Msat_ClauseWriteActivity( pC, Activ + (float)p->dClaInc );
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Msat_SolverClaDecayActivity( Msat_Solver_t * p )
{
p->dClaInc *= p->dClaDecay;
}
/**Function*************************************************************
Synopsis [Divide all constraint activities by 1e20.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void Msat_SolverClaRescaleActivity( Msat_Solver_t * p )
{
Msat_Clause_t ** pLearned;
int nLearned, i;
float Activ;
nLearned = Msat_ClauseVecReadSize( p->vLearned );
pLearned = Msat_ClauseVecReadArray( p->vLearned );
for ( i = 0; i < nLearned; i++ )
{
Activ = Msat_ClauseReadActivity( pLearned[i] );
Msat_ClauseWriteActivity( pLearned[i], Activ * (float)1e-20 );
}
p->dClaInc *= 1e-20;
}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
ABC_NAMESPACE_IMPL_END