/// Clone (virtual copy constructor)
virtual InfAlg* clone() const = 0;
+ /// Create (virtual constructor)
+ virtual InfAlg* create() const = 0;
+
/// Virtual desctructor
// (this is needed because this class contains virtual functions)
virtual ~InfAlg() {}
/// Clear messages and beliefs
virtual void init() = 0;
+ /// Clear messages and beliefs corresponding to the nodes in ns
+ virtual void init( const VarSet &ns ) = 0;
+
/// The actual approximate inference algorithm
virtual double run() = 0;
virtual void restoreFactors( const VarSet &ns ) = 0;
/// Clamp variable n to value i (i.e. multiply with a Kronecker delta \f$\delta_{x_n, i}\f$)
- virtual void clamp( const Var & n, size_t i ) = 0;
+ virtual void clamp( const Var & n, size_t i, bool backup = false ) = 0;
/// Set all factors interacting with var(i) to 1
- virtual void makeCavity( size_t i ) = 0;
+ virtual void makeCavity( size_t i, bool backup = false ) = 0;
/// Get reference to underlying FactorGraph
virtual FactorGraph &fg() = 0;
/// Copy constructor
DAIAlg( const DAIAlg & x ) : InfAlg(x), T(x) {}
+ /// Assignment operator
+ DAIAlg & operator=( const DAIAlg &x ) {
+ if( this != &x ) {
+ InfAlg::operator=(x);
+ T::operator=(x);
+ }
+ return *this;
+ }
+
/// Save factor I (using T::backupFactor)
void backupFactor( size_t I ) { T::backupFactor( I ); }
/// Save Factors involving ns (using T::backupFactors)
void restoreFactors( const VarSet &ns ) { T::restoreFactors( ns ); }
/// Clamp variable n to value i (i.e. multiply with a Kronecker delta \f$\delta_{x_n, i}\f$) (using T::clamp)
- void clamp( const Var & n, size_t i ) { T::clamp( n, i ); }
+ void clamp( const Var & n, size_t i, bool backup = false ) { T::clamp( n, i, backup ); }
/// Set all factors interacting with var(i) to 1 (using T::makeCavity)
- void makeCavity( size_t i ) { T::makeCavity( i ); }
+ void makeCavity( size_t i, bool backup = false ) { T::makeCavity( i, backup ); }
/// Get reference to underlying FactorGraph
FactorGraph &fg() { return (FactorGraph &)(*this); }