This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/packages/CLPBN/horus/LiftedVe.h

172 lines
3.6 KiB
C
Raw Normal View History

2013-02-07 17:50:02 +00:00
#ifndef YAP_PACKAGES_CLPBN_HORUS_LIFTEDVE_H_
#define YAP_PACKAGES_CLPBN_HORUS_LIFTEDVE_H_
2012-05-23 14:56:01 +01:00
2013-02-07 13:37:15 +00:00
#include <vector>
#include <string>
2012-11-14 21:55:51 +00:00
#include "LiftedSolver.h"
2012-05-23 14:56:01 +01:00
#include "ParfactorList.h"
namespace Horus {
2013-02-07 23:53:13 +00:00
class LiftedOperator {
2012-05-23 14:56:01 +01:00
public:
virtual ~LiftedOperator (void) { }
2012-12-20 23:19:10 +00:00
2012-05-23 14:56:01 +01:00
virtual double getLogCost (void) = 0;
virtual void apply (void) = 0;
2013-02-07 13:37:15 +00:00
virtual std::string toString (void) = 0;
2012-05-23 14:56:01 +01:00
2013-02-07 13:37:15 +00:00
static std::vector<LiftedOperator*> getValidOps (
2012-05-23 14:56:01 +01:00
ParfactorList&, const Grounds&);
static void printValidOps (ParfactorList&, const Grounds&);
2013-02-07 13:37:15 +00:00
static std::vector<ParfactorList::iterator> getParfactorsWithGroup (
2012-05-24 23:38:44 +01:00
ParfactorList&, PrvGroup group);
2012-12-27 22:25:45 +00:00
private:
DISALLOW_ASSIGN (LiftedOperator);
2012-05-23 14:56:01 +01:00
};
class ProductOperator : public LiftedOperator {
2012-05-23 14:56:01 +01:00
public:
ProductOperator (
2013-02-13 15:25:55 +00:00
ParfactorList::iterator g1,
ParfactorList::iterator g2,
ParfactorList& pfList)
: g1_(g1), g2_(g2), pfList_(pfList) { }
2012-05-23 14:56:01 +01:00
double getLogCost (void);
void apply (void);
2013-02-07 13:37:15 +00:00
static std::vector<ProductOperator*> getValidOps (ParfactorList&);
2012-05-23 14:56:01 +01:00
2013-02-07 13:37:15 +00:00
std::string toString (void);
2012-05-23 14:56:01 +01:00
private:
static bool validOp (Parfactor*, Parfactor*);
2012-11-10 00:18:20 +00:00
ParfactorList::iterator g1_;
ParfactorList::iterator g2_;
ParfactorList& pfList_;
2012-12-27 22:25:45 +00:00
DISALLOW_COPY_AND_ASSIGN (ProductOperator);
2012-05-23 14:56:01 +01:00
};
class SumOutOperator : public LiftedOperator {
2012-05-23 14:56:01 +01:00
public:
2012-12-20 23:19:10 +00:00
SumOutOperator (PrvGroup group, ParfactorList& pfList)
2012-05-23 14:56:01 +01:00
: group_(group), pfList_(pfList) { }
double getLogCost (void);
void apply (void);
2013-02-07 13:37:15 +00:00
static std::vector<SumOutOperator*> getValidOps (
2012-05-23 14:56:01 +01:00
ParfactorList&, const Grounds&);
2013-02-07 13:37:15 +00:00
std::string toString (void);
2012-05-23 14:56:01 +01:00
private:
2012-05-24 23:38:44 +01:00
static bool validOp (PrvGroup, ParfactorList&, const Grounds&);
2012-05-23 14:56:01 +01:00
2012-05-24 23:38:44 +01:00
static bool isToEliminate (Parfactor*, PrvGroup, const Grounds&);
2012-05-23 14:56:01 +01:00
2012-05-24 23:38:44 +01:00
PrvGroup group_;
2012-05-23 14:56:01 +01:00
ParfactorList& pfList_;
2012-12-27 22:25:45 +00:00
DISALLOW_COPY_AND_ASSIGN (SumOutOperator);
2012-05-23 14:56:01 +01:00
};
class CountingOperator : public LiftedOperator {
2012-05-23 14:56:01 +01:00
public:
CountingOperator (
ParfactorList::iterator pfIter,
LogVar X,
ParfactorList& pfList)
: pfIter_(pfIter), X_(X), pfList_(pfList) { }
double getLogCost (void);
void apply (void);
2013-02-07 13:37:15 +00:00
static std::vector<CountingOperator*> getValidOps (ParfactorList&);
2012-05-23 14:56:01 +01:00
2013-02-07 13:37:15 +00:00
std::string toString (void);
2012-05-23 14:56:01 +01:00
private:
static bool validOp (Parfactor*, LogVar);
ParfactorList::iterator pfIter_;
LogVar X_;
ParfactorList& pfList_;
2012-12-27 22:25:45 +00:00
DISALLOW_COPY_AND_ASSIGN (CountingOperator);
2012-05-23 14:56:01 +01:00
};
class GroundOperator : public LiftedOperator {
2012-05-23 14:56:01 +01:00
public:
GroundOperator (
2012-05-24 23:38:44 +01:00
PrvGroup group,
2012-05-23 14:56:01 +01:00
unsigned lvIndex,
ParfactorList& pfList)
: group_(group), lvIndex_(lvIndex), pfList_(pfList) { }
double getLogCost (void);
void apply (void);
2013-02-07 13:37:15 +00:00
static std::vector<GroundOperator*> getValidOps (ParfactorList&);
2012-05-23 14:56:01 +01:00
2013-02-07 13:37:15 +00:00
std::string toString (void);
2012-05-23 14:56:01 +01:00
private:
2013-02-07 13:37:15 +00:00
std::vector<std::pair<PrvGroup, unsigned>> getAffectedFormulas (void);
2012-05-23 14:56:01 +01:00
2012-11-10 00:18:20 +00:00
PrvGroup group_;
unsigned lvIndex_;
ParfactorList& pfList_;
2012-12-27 22:25:45 +00:00
DISALLOW_COPY_AND_ASSIGN (GroundOperator);
2012-05-23 14:56:01 +01:00
};
class LiftedVe : public LiftedSolver {
2012-05-23 14:56:01 +01:00
public:
2012-11-14 21:55:51 +00:00
LiftedVe (const ParfactorList& pfList)
: LiftedSolver(pfList) { }
2012-05-23 14:56:01 +01:00
2012-05-31 23:06:53 +01:00
Params solveQuery (const Grounds&);
2012-05-23 14:56:01 +01:00
void printSolverFlags (void) const;
private:
void runSolver (const Grounds&);
LiftedOperator* getBestOperation (const Grounds&);
2012-11-10 00:18:20 +00:00
ParfactorList pfList_;
double largestCost_;
2012-12-27 22:25:45 +00:00
DISALLOW_COPY_AND_ASSIGN (LiftedVe);
2012-05-23 14:56:01 +01:00
};
} // namespace Horus
2013-02-07 23:53:13 +00:00
2013-02-08 00:20:01 +00:00
#endif // YAP_PACKAGES_CLPBN_HORUS_LIFTEDVE_H_
2012-05-23 14:56:01 +01:00