From 4522850cd699e84a9ed4cd59833f547a5bc0050a Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 14 Nov 2012 23:13:46 +0000 Subject: [PATCH] one step close to use one solver instatiation to solve several queries --- packages/CLPBN/horus/LiftedBp.cpp | 5 +++-- packages/CLPBN/horus/LiftedKc.cpp | 2 ++ packages/CLPBN/horus/LiftedKc.h | 9 ++++----- packages/CLPBN/horus/LiftedVe.cpp | 1 + packages/CLPBN/horus/LiftedVe.h | 2 +- packages/CLPBN/horus/ParfactorList.cpp | 24 ++++++++++++++++++++++-- packages/CLPBN/horus/ParfactorList.h | 2 ++ 7 files changed, 35 insertions(+), 10 deletions(-) diff --git a/packages/CLPBN/horus/LiftedBp.cpp b/packages/CLPBN/horus/LiftedBp.cpp index 3fada048d..66e82a8c4 100644 --- a/packages/CLPBN/horus/LiftedBp.cpp +++ b/packages/CLPBN/horus/LiftedBp.cpp @@ -4,8 +4,8 @@ #include "LiftedOperations.h" -LiftedBp::LiftedBp (const ParfactorList& pfList) - : LiftedSolver (pfList), pfList_(pfList) +LiftedBp::LiftedBp (const ParfactorList& parfactorList) + : LiftedSolver (parfactorList) { refineParfactors(); createFactorGraph(); @@ -82,6 +82,7 @@ LiftedBp::printSolverFlags (void) const void LiftedBp::refineParfactors (void) { + pfList_ = parfactorList; while (iterate() == false); if (Globals::verbosity > 2) { diff --git a/packages/CLPBN/horus/LiftedKc.cpp b/packages/CLPBN/horus/LiftedKc.cpp index 64e651379..6c0aba622 100644 --- a/packages/CLPBN/horus/LiftedKc.cpp +++ b/packages/CLPBN/horus/LiftedKc.cpp @@ -16,7 +16,9 @@ LiftedKc::~LiftedKc (void) Params LiftedKc::solveQuery (const Grounds& query) { + pfList_ = parfactorList; LiftedOperations::shatterAgainstQuery (pfList_, query); + LiftedOperations::runWeakBayesBall (pfList_, query); lwcnf_ = new LiftedWCNF (pfList_); circuit_ = new LiftedCircuit (lwcnf_); vector groups; diff --git a/packages/CLPBN/horus/LiftedKc.h b/packages/CLPBN/horus/LiftedKc.h index 52138c985..cba6499e1 100644 --- a/packages/CLPBN/horus/LiftedKc.h +++ b/packages/CLPBN/horus/LiftedKc.h @@ -12,7 +12,7 @@ class LiftedKc : public LiftedSolver { public: LiftedKc (const ParfactorList& pfList) - : LiftedSolver(pfList), pfList_(pfList) { } + : LiftedSolver(pfList) { } ~LiftedKc (void); @@ -21,10 +21,9 @@ class LiftedKc : public LiftedSolver void printSolverFlags (void) const; private: - LiftedWCNF* lwcnf_; - LiftedCircuit* circuit_; - - ParfactorList pfList_; + LiftedWCNF* lwcnf_; + LiftedCircuit* circuit_; + ParfactorList pfList_; }; #endif // HORUS_LIFTEDKC_H diff --git a/packages/CLPBN/horus/LiftedVe.cpp b/packages/CLPBN/horus/LiftedVe.cpp index eedce1f21..141006c46 100644 --- a/packages/CLPBN/horus/LiftedVe.cpp +++ b/packages/CLPBN/horus/LiftedVe.cpp @@ -631,6 +631,7 @@ Params LiftedVe::solveQuery (const Grounds& query) { assert (query.empty() == false); + pfList_ = parfactorList; runSolver (query); (*pfList_.begin())->normalize(); Params params = (*pfList_.begin())->params(); diff --git a/packages/CLPBN/horus/LiftedVe.h b/packages/CLPBN/horus/LiftedVe.h index cdaf39823..7d9974294 100644 --- a/packages/CLPBN/horus/LiftedVe.h +++ b/packages/CLPBN/horus/LiftedVe.h @@ -136,7 +136,7 @@ class LiftedVe : public LiftedSolver { public: LiftedVe (const ParfactorList& pfList) - : LiftedSolver(pfList), pfList_(pfList) { } + : LiftedSolver(pfList) { } Params solveQuery (const Grounds&); diff --git a/packages/CLPBN/horus/ParfactorList.cpp b/packages/CLPBN/horus/ParfactorList.cpp index 8a1ca30d2..b4496a683 100644 --- a/packages/CLPBN/horus/ParfactorList.cpp +++ b/packages/CLPBN/horus/ParfactorList.cpp @@ -9,8 +9,7 @@ ParfactorList::ParfactorList (const ParfactorList& pfList) while (it != pfList.end()) { addShattered (new Parfactor (**it)); ++ it; - } - + } } @@ -126,6 +125,27 @@ ParfactorList::print (void) const +ParfactorList& +ParfactorList::operator= (const ParfactorList& pfList) +{ + if (this != &pfList) { + ParfactorList::const_iterator it0 = pfList_.begin(); + while (it0 != pfList_.end()) { + delete *it0; + ++ it0; + } + pfList_.clear(); + ParfactorList::const_iterator it = pfList.begin(); + while (it != pfList.end()) { + addShattered (new Parfactor (**it)); + ++ it; + } + } + return *this; +} + + + bool ParfactorList::isShattered (const Parfactor* g) const { diff --git a/packages/CLPBN/horus/ParfactorList.h b/packages/CLPBN/horus/ParfactorList.h index 9e65539bb..48008b253 100644 --- a/packages/CLPBN/horus/ParfactorList.h +++ b/packages/CLPBN/horus/ParfactorList.h @@ -56,6 +56,8 @@ class ParfactorList bool isAllShattered (void) const; void print (void) const; + + ParfactorList& operator= (const ParfactorList& pfList); private: