diff --git a/packages/CLPBN/horus/BayesBall.cpp b/packages/CLPBN/horus/BayesBall.cpp new file mode 100644 index 000000000..968b63ea5 --- /dev/null +++ b/packages/CLPBN/horus/BayesBall.cpp @@ -0,0 +1,86 @@ +#include +#include + +#include +#include +#include + +#include "BayesBall.h" +#include "Util.h" + + + + +FactorGraph* +BayesBall::getMinimalFactorGraph (const VarIds& queryIds) +{ + assert (fg_.isFromBayesNetwork()); + Scheduling scheduling; + for (unsigned i = 0; i < queryIds.size(); i++) { + assert (dag_.getNode (queryIds[i])); + DAGraphNode* n = dag_.getNode (queryIds[i]); + scheduling.push (ScheduleInfo (n, false, true)); + } + + while (!scheduling.empty()) { + ScheduleInfo& sch = scheduling.front(); + DAGraphNode* n = sch.node; + n->setAsVisited(); + if (n->hasEvidence() == false && sch.visitedFromChild) { + if (n->isMarkedOnTop() == false) { + n->markOnTop(); + scheduleParents (n, scheduling); + } + if (n->isMarkedOnBottom() == false) { + n->markOnBottom(); + scheduleChilds (n, scheduling); + } + } + if (sch.visitedFromParent) { + if (n->hasEvidence() && n->isMarkedOnTop() == false) { + n->markOnTop(); + scheduleParents (n, scheduling); + } + if (n->hasEvidence() == false && n->isMarkedOnBottom() == false) { + n->markOnBottom(); + scheduleChilds (n, scheduling); + } + } + scheduling.pop(); + } + + FactorGraph* fg = new FactorGraph(); + constructGraph (fg); + return fg; +} + + + +void +BayesBall::constructGraph (FactorGraph* fg) const +{ + const FacNodes& facNodes = fg_.facNodes(); + for (unsigned i = 0; i < facNodes.size(); i++) { + const DAGraphNode* n = dag_.getNode ( + facNodes[i]->factor().argument (0)); + if (n->isMarkedOnTop()) { + fg->addFactor (facNodes[i]->factor()); + } else if (n->hasEvidence() && n->isVisited()) { + VarIds varIds = { facNodes[i]->factor().argument (0) }; + Ranges ranges = { facNodes[i]->factor().range (0) }; + Params params (ranges[0], LogAware::noEvidence()); + params[n->getEvidence()] = LogAware::withEvidence(); + fg->addFactor (Factor (varIds, ranges, params)); + } + } + const VarNodes& varNodes = fg_.varNodes(); + for (unsigned i = 0; i < varNodes.size(); i++) { + if (varNodes[i]->hasEvidence()) { + VarNode* vn = fg->getVarNode (varNodes[i]->varId()); + if (vn) { + vn->setEvidence (varNodes[i]->getEvidence()); + } + } + } +} + diff --git a/packages/CLPBN/horus/BayesBall.h b/packages/CLPBN/horus/BayesBall.h new file mode 100644 index 000000000..42032410b --- /dev/null +++ b/packages/CLPBN/horus/BayesBall.h @@ -0,0 +1,85 @@ +#ifndef HORUS_BAYESBALL_H +#define HORUS_BAYESBALL_H + +#include +#include +#include +#include + +#include "FactorGraph.h" +#include "BayesNet.h" +#include "Horus.h" + +using namespace std; + + +struct ScheduleInfo +{ + ScheduleInfo (DAGraphNode* n, bool vfp, bool vfc) : + node(n), visitedFromParent(vfp), visitedFromChild(vfc) { } + + DAGraphNode* node; + bool visitedFromParent; + bool visitedFromChild; +}; + + +typedef queue> Scheduling; + + +class BayesBall +{ + public: + BayesBall (FactorGraph& fg) + : fg_(fg) , dag_(fg.getStructure()) + { + dag_.clear(); + } + + FactorGraph* getMinimalFactorGraph (const VarIds&); + + static FactorGraph* getMinimalFactorGraph (FactorGraph& fg, VarIds vids) + { + BayesBall bb (fg); + return bb.getMinimalFactorGraph (vids); + } + + private: + + void constructGraph (FactorGraph* fg) const; + + void scheduleParents (const DAGraphNode* n, Scheduling& sch) const; + + void scheduleChilds (const DAGraphNode* n, Scheduling& sch) const; + + FactorGraph& fg_; + + DAGraph& dag_; +}; + + + +inline void +BayesBall::scheduleParents (const DAGraphNode* n, Scheduling& sch) const +{ + const vector& ps = n->parents(); + for (vector::const_iterator it = ps.begin(); + it != ps.end(); it++) { + sch.push (ScheduleInfo (*it, false, true)); + } +} + + + +inline void +BayesBall::scheduleChilds (const DAGraphNode* n, Scheduling& sch) const +{ + const vector& cs = n->childs(); + for (vector::const_iterator it = cs.begin(); + it != cs.end(); it++) { + sch.push (ScheduleInfo (*it, true, false)); + } +} + +#endif // HORUS_BAYESBALL_H + diff --git a/packages/CLPBN/horus/BayesNet.cpp b/packages/CLPBN/horus/BayesNet.cpp new file mode 100644 index 000000000..37982f276 --- /dev/null +++ b/packages/CLPBN/horus/BayesNet.cpp @@ -0,0 +1,107 @@ +#include +#include + +#include +#include +#include + +#include "BayesNet.h" +#include "Util.h" + + +void +DAGraph::addNode (DAGraphNode* n) +{ + assert (Util::contains (varMap_, n->varId()) == false); + nodes_.push_back (n); + varMap_[n->varId()] = n; +} + + + +void +DAGraph::addEdge (VarId vid1, VarId vid2) +{ + unordered_map::iterator it1; + unordered_map::iterator it2; + it1 = varMap_.find (vid1); + it2 = varMap_.find (vid2); + assert (it1 != varMap_.end()); + assert (it2 != varMap_.end()); + it1->second->addChild (it2->second); + it2->second->addParent (it1->second); +} + + + +const DAGraphNode* +DAGraph::getNode (VarId vid) const +{ + unordered_map::const_iterator it; + it = varMap_.find (vid); + return it != varMap_.end() ? it->second : 0; +} + + + +DAGraphNode* +DAGraph::getNode (VarId vid) +{ + unordered_map::const_iterator it; + it = varMap_.find (vid); + return it != varMap_.end() ? it->second : 0; +} + + + +void +DAGraph::setIndexes (void) +{ + for (unsigned i = 0; i < nodes_.size(); i++) { + nodes_[i]->setIndex (i); + } +} + + + +void +DAGraph::clear (void) +{ + for (unsigned i = 0; i < nodes_.size(); i++) { + nodes_[i]->clear(); + } +} + + + +void +DAGraph::exportToGraphViz (const char* fileName) +{ + ofstream out (fileName); + if (!out.is_open()) { + cerr << "error: cannot open file to write at " ; + cerr << "DAGraph::exportToDotFile()" << endl; + abort(); + } + out << "digraph {" << endl; + out << "ranksep=1" << endl; + for (unsigned i = 0; i < nodes_.size(); i++) { + out << nodes_[i]->varId() ; + out << " [" ; + out << "label=\"" << nodes_[i]->label() << "\"" ; + if (nodes_[i]->hasEvidence()) { + out << ",style=filled, fillcolor=yellow" ; + } + out << "]" << endl; + } + for (unsigned i = 0; i < nodes_.size(); i++) { + const vector& childs = nodes_[i]->childs(); + for (unsigned j = 0; j < childs.size(); j++) { + out << nodes_[i]->varId() << " -> " << childs[j]->varId(); + out << " [style=bold]" << endl ; + } + } + out << "}" << endl; + out.close(); +} + diff --git a/packages/CLPBN/horus/BayesNet.h b/packages/CLPBN/horus/BayesNet.h new file mode 100644 index 000000000..d9b176b95 --- /dev/null +++ b/packages/CLPBN/horus/BayesNet.h @@ -0,0 +1,88 @@ +#ifndef HORUS_BAYESNET_H +#define HORUS_BAYESNET_H + +#include +#include +#include +#include + +#include "Var.h" +#include "Horus.h" + + +using namespace std; + + +class Var; + +class DAGraphNode : public Var +{ + public: + DAGraphNode (Var* v) : Var (v) , visited_(false), + markedOnTop_(false), markedOnBottom_(false) { } + + const vector& childs (void) const { return childs_; } + + vector& childs (void) { return childs_; } + + const vector& parents (void) const { return parents_; } + + vector& parents (void) { return parents_; } + + void addParent (DAGraphNode* p) { parents_.push_back (p); } + + void addChild (DAGraphNode* c) { childs_.push_back (c); } + + bool isVisited (void) const { return visited_; } + + void setAsVisited (void) { visited_ = true; } + + bool isMarkedOnTop (void) const { return markedOnTop_; } + + void markOnTop (void) { markedOnTop_ = true; } + + bool isMarkedOnBottom (void) const { return markedOnBottom_; } + + void markOnBottom (void) { markedOnBottom_ = true; } + + void clear (void) { visited_ = markedOnTop_ = markedOnBottom_ = false; } + + private: + bool visited_; + bool markedOnTop_; + bool markedOnBottom_; + + vector childs_; + vector parents_; +}; + + +class DAGraph +{ + public: + DAGraph (void) { } + + void addNode (DAGraphNode* n); + + void addEdge (VarId vid1, VarId vid2); + + const DAGraphNode* getNode (VarId vid) const; + + DAGraphNode* getNode (VarId vid); + + bool empty (void) const { return nodes_.empty(); } + + void setIndexes (void); + + void clear (void); + + void exportToGraphViz (const char*); + + private: + vector nodes_; + + unordered_map varMap_; +}; + +#endif // HORUS_BAYESNET_H + diff --git a/packages/CLPBN/horus/BpSolver.cpp b/packages/CLPBN/horus/BpSolver.cpp new file mode 100644 index 000000000..5296e50e3 --- /dev/null +++ b/packages/CLPBN/horus/BpSolver.cpp @@ -0,0 +1,526 @@ +#include +#include + +#include + +#include + +#include "BpSolver.h" +#include "FactorGraph.h" +#include "Factor.h" +#include "Indexer.h" +#include "Horus.h" + + +BpSolver::BpSolver (const FactorGraph& fg) : Solver (fg) +{ + fg_ = &fg; + runned_ = false; +} + + + +BpSolver::~BpSolver (void) +{ + for (unsigned i = 0; i < varsI_.size(); i++) { + delete varsI_[i]; + } + for (unsigned i = 0; i < facsI_.size(); i++) { + delete facsI_[i]; + } + for (unsigned i = 0; i < links_.size(); i++) { + delete links_[i]; + } +} + + + +Params +BpSolver::solveQuery (VarIds queryVids) +{ + assert (queryVids.empty() == false); + if (queryVids.size() == 1) { + return getPosterioriOf (queryVids[0]); + } else { + return getJointDistributionOf (queryVids); + } +} + + + +void +BpSolver::printSolverFlags (void) const +{ + stringstream ss; + ss << "belief propagation [" ; + ss << "schedule=" ; + typedef BpOptions::Schedule Sch; + switch (BpOptions::schedule) { + case Sch::SEQ_FIXED: ss << "seq_fixed"; break; + case Sch::SEQ_RANDOM: ss << "seq_random"; break; + case Sch::PARALLEL: ss << "parallel"; break; + case Sch::MAX_RESIDUAL: ss << "max_residual"; break; + } + ss << ",max_iter=" << Util::toString (BpOptions::maxIter); + ss << ",accuracy=" << Util::toString (BpOptions::accuracy); + ss << ",log_domain=" << Util::toString (Globals::logDomain); + ss << "]" ; + cout << ss.str() << endl; +} + + + +Params +BpSolver::getPosterioriOf (VarId vid) +{ + if (runned_ == false) { + runSolver(); + } + assert (fg_->getVarNode (vid)); + VarNode* var = fg_->getVarNode (vid); + Params probs; + if (var->hasEvidence()) { + probs.resize (var->range(), LogAware::noEvidence()); + probs[var->getEvidence()] = LogAware::withEvidence(); + } else { + probs.resize (var->range(), LogAware::multIdenty()); + const SpLinkSet& links = ninf(var)->getLinks(); + if (Globals::logDomain) { + for (unsigned i = 0; i < links.size(); i++) { + Util::add (probs, links[i]->getMessage()); + } + LogAware::normalize (probs); + Util::fromLog (probs); + } else { + for (unsigned i = 0; i < links.size(); i++) { + Util::multiply (probs, links[i]->getMessage()); + } + LogAware::normalize (probs); + } + } + return probs; +} + + + +Params +BpSolver::getJointDistributionOf (const VarIds& jointVarIds) +{ + if (runned_ == false) { + runSolver(); + } + int idx = -1; + VarNode* vn = fg_->getVarNode (jointVarIds[0]); + const FacNodes& facNodes = vn->neighbors(); + for (unsigned i = 0; i < facNodes.size(); i++) { + if (facNodes[i]->factor().contains (jointVarIds)) { + idx = i; + break; + } + } + if (idx == -1) { + return getJointByConditioning (jointVarIds); + } else { + Factor res (facNodes[idx]->factor()); + const SpLinkSet& links = ninf(facNodes[idx])->getLinks(); + for (unsigned i = 0; i < links.size(); i++) { + Factor msg ({links[i]->getVariable()->varId()}, + {links[i]->getVariable()->range()}, + getVar2FactorMsg (links[i])); + res.multiply (msg); + } + res.sumOutAllExcept (jointVarIds); + res.reorderArguments (jointVarIds); + res.normalize(); + Params jointDist = res.params(); + if (Globals::logDomain) { + Util::fromLog (jointDist); + } + return jointDist; + } +} + + + +void +BpSolver::runSolver (void) +{ + clock_t start; + if (Constants::COLLECT_STATS) { + start = clock(); + } + initializeSolver(); + nIters_ = 0; + while (!converged() && nIters_ < BpOptions::maxIter) { + nIters_ ++; + if (Globals::verbosity > 1) { + Util::printHeader (string ("Iteration ") + Util::toString (nIters_)); + } + switch (BpOptions::schedule) { + case BpOptions::Schedule::SEQ_RANDOM: + random_shuffle (links_.begin(), links_.end()); + // no break + case BpOptions::Schedule::SEQ_FIXED: + for (unsigned i = 0; i < links_.size(); i++) { + calculateAndUpdateMessage (links_[i]); + } + break; + case BpOptions::Schedule::PARALLEL: + for (unsigned i = 0; i < links_.size(); i++) { + calculateMessage (links_[i]); + } + for (unsigned i = 0; i < links_.size(); i++) { + updateMessage(links_[i]); + } + break; + case BpOptions::Schedule::MAX_RESIDUAL: + maxResidualSchedule(); + break; + } + } + if (Globals::verbosity > 0) { + if (nIters_ < BpOptions::maxIter) { + cout << "Sum-Product converged in " ; + cout << nIters_ << " iterations" << endl; + } else { + cout << "The maximum number of iterations was hit, terminating..." ; + cout << endl; + } + cout << endl; + } + unsigned size = fg_->varNodes().size(); + if (Constants::COLLECT_STATS) { + unsigned nIters = 0; + bool loopy = fg_->isTree() == false; + if (loopy) nIters = nIters_; + double time = (double (clock() - start)) / CLOCKS_PER_SEC; + Statistics::updateStatistics (size, loopy, nIters, time); + } + runned_ = true; +} + + + +void +BpSolver::createLinks (void) +{ + const FacNodes& facNodes = fg_->facNodes(); + for (unsigned i = 0; i < facNodes.size(); i++) { + const VarNodes& neighbors = facNodes[i]->neighbors(); + for (unsigned j = 0; j < neighbors.size(); j++) { + links_.push_back (new SpLink (facNodes[i], neighbors[j])); + } + } +} + + + +void +BpSolver::maxResidualSchedule (void) +{ + if (nIters_ == 1) { + for (unsigned i = 0; i < links_.size(); i++) { + calculateMessage (links_[i]); + SortedOrder::iterator it = sortedOrder_.insert (links_[i]); + linkMap_.insert (make_pair (links_[i], it)); + } + return; + } + + for (unsigned c = 0; c < links_.size(); c++) { + if (Globals::verbosity > 1) { + cout << "current residuals:" << endl; + for (SortedOrder::iterator it = sortedOrder_.begin(); + it != sortedOrder_.end(); it ++) { + cout << " " << setw (30) << left << (*it)->toString(); + cout << "residual = " << (*it)->getResidual() << endl; + } + } + + SortedOrder::iterator it = sortedOrder_.begin(); + SpLink* link = *it; + if (link->getResidual() < BpOptions::accuracy) { + return; + } + updateMessage (link); + link->clearResidual(); + sortedOrder_.erase (it); + linkMap_.find (link)->second = sortedOrder_.insert (link); + + // update the messages that depend on message source --> destin + const FacNodes& factorNeighbors = link->getVariable()->neighbors(); + for (unsigned i = 0; i < factorNeighbors.size(); i++) { + if (factorNeighbors[i] != link->getFactor()) { + const SpLinkSet& links = ninf(factorNeighbors[i])->getLinks(); + for (unsigned j = 0; j < links.size(); j++) { + if (links[j]->getVariable() != link->getVariable()) { + calculateMessage (links[j]); + SpLinkMap::iterator iter = linkMap_.find (links[j]); + sortedOrder_.erase (iter->second); + iter->second = sortedOrder_.insert (links[j]); + } + } + } + } + if (Globals::verbosity > 1) { + Util::printDashedLine(); + } + } +} + + + +void +BpSolver::calculateFactor2VariableMsg (SpLink* link) +{ + FacNode* src = link->getFactor(); + const VarNode* dst = link->getVariable(); + const SpLinkSet& links = ninf(src)->getLinks(); + // calculate the product of messages that were sent + // to factor `src', except from var `dst' + unsigned msgSize = 1; + for (unsigned i = 0; i < links.size(); i++) { + msgSize *= links[i]->getVariable()->range(); + } + unsigned repetitions = 1; + Params msgProduct (msgSize, LogAware::multIdenty()); + if (Globals::logDomain) { + for (int i = links.size() - 1; i >= 0; i--) { + if (links[i]->getVariable() != dst) { + if (Constants::SHOW_BP_CALCS) { + cout << " message from " << links[i]->getVariable()->label(); + cout << ": " ; + } + Util::add (msgProduct, getVar2FactorMsg (links[i]), repetitions); + repetitions *= links[i]->getVariable()->range(); + if (Constants::SHOW_BP_CALCS) { + cout << endl; + } + } else { + unsigned range = links[i]->getVariable()->range(); + Util::add (msgProduct, Params (range, 0.0), repetitions); + repetitions *= range; + } + } + } else { + for (int i = links.size() - 1; i >= 0; i--) { + if (links[i]->getVariable() != dst) { + if (Constants::SHOW_BP_CALCS) { + cout << " message from " << links[i]->getVariable()->label(); + cout << ": " ; + } + Util::multiply (msgProduct, getVar2FactorMsg (links[i]), repetitions); + repetitions *= links[i]->getVariable()->range(); + if (Constants::SHOW_BP_CALCS) { + cout << endl; + } + } else { + unsigned range = links[i]->getVariable()->range(); + Util::multiply (msgProduct, Params (range, 1.0), repetitions); + repetitions *= range; + } + } + } + Factor result (src->factor().arguments(), + src->factor().ranges(), msgProduct); + result.multiply (src->factor()); + if (Constants::SHOW_BP_CALCS) { + cout << " message product: " << msgProduct << endl; + cout << " original factor: " << src->factor().params() << endl; + cout << " factor product: " << result.params() << endl; + } + result.sumOutAllExcept (dst->varId()); + if (Constants::SHOW_BP_CALCS) { + cout << " marginalized: " << result.params() << endl; + } + link->getNextMessage() = result.params(); + LogAware::normalize (link->getNextMessage()); + if (Constants::SHOW_BP_CALCS) { + cout << " curr msg: " << link->getMessage() << endl; + cout << " next msg: " << link->getNextMessage() << endl; + } +} + + + +Params +BpSolver::getVar2FactorMsg (const SpLink* link) const +{ + const VarNode* src = link->getVariable(); + const FacNode* dst = link->getFactor(); + Params msg; + if (src->hasEvidence()) { + msg.resize (src->range(), LogAware::noEvidence()); + msg[src->getEvidence()] = LogAware::withEvidence(); + } else { + msg.resize (src->range(), LogAware::one()); + } + if (Constants::SHOW_BP_CALCS) { + cout << msg; + } + const SpLinkSet& links = ninf (src)->getLinks(); + if (Globals::logDomain) { + SpLinkSet::const_iterator it; + for (it = links.begin(); it != links.end(); ++ it) { + Util::add (msg, (*it)->getMessage()); + if (Constants::SHOW_BP_CALCS) { + cout << " x " << (*it)->getMessage(); + } + } + Util::subtract (msg, link->getMessage()); + } else { + for (unsigned i = 0; i < links.size(); i++) { + if (links[i]->getFactor() != dst) { + Util::multiply (msg, links[i]->getMessage()); + if (Constants::SHOW_BP_CALCS) { + cout << " x " << links[i]->getMessage(); + } + } + } + } + if (Constants::SHOW_BP_CALCS) { + cout << " = " << msg; + } + return msg; +} + + + +Params +BpSolver::getJointByConditioning (const VarIds& jointVarIds) const +{ + VarNodes jointVars; + for (unsigned i = 0; i < jointVarIds.size(); i++) { + assert (fg_->getVarNode (jointVarIds[i])); + jointVars.push_back (fg_->getVarNode (jointVarIds[i])); + } + + FactorGraph* fg = new FactorGraph (*fg_); + BpSolver solver (*fg); + solver.runSolver(); + Params prevBeliefs = solver.getPosterioriOf (jointVarIds[0]); + + VarIds observedVids = {jointVars[0]->varId()}; + + for (unsigned i = 1; i < jointVarIds.size(); i++) { + assert (jointVars[i]->hasEvidence() == false); + Params newBeliefs; + Vars observedVars; + for (unsigned j = 0; j < observedVids.size(); j++) { + observedVars.push_back (fg->getVarNode (observedVids[j])); + } + StatesIndexer idx (observedVars, false); + while (idx.valid()) { + for (unsigned j = 0; j < observedVars.size(); j++) { + observedVars[j]->setEvidence (idx[j]); + } + ++ idx; + BpSolver solver (*fg); + solver.runSolver(); + Params beliefs = solver.getPosterioriOf (jointVarIds[i]); + for (unsigned k = 0; k < beliefs.size(); k++) { + newBeliefs.push_back (beliefs[k]); + } + } + + int count = -1; + for (unsigned j = 0; j < newBeliefs.size(); j++) { + if (j % jointVars[i]->range() == 0) { + count ++; + } + newBeliefs[j] *= prevBeliefs[count]; + } + prevBeliefs = newBeliefs; + observedVids.push_back (jointVars[i]->varId()); + } + return prevBeliefs; +} + + + +void +BpSolver::initializeSolver (void) +{ + const VarNodes& varNodes = fg_->varNodes(); + varsI_.reserve (varNodes.size()); + for (unsigned i = 0; i < varNodes.size(); i++) { + varsI_.push_back (new SPNodeInfo()); + } + const FacNodes& facNodes = fg_->facNodes(); + facsI_.reserve (facNodes.size()); + for (unsigned i = 0; i < facNodes.size(); i++) { + facsI_.push_back (new SPNodeInfo()); + } + createLinks(); + for (unsigned i = 0; i < links_.size(); i++) { + FacNode* src = links_[i]->getFactor(); + VarNode* dst = links_[i]->getVariable(); + ninf (dst)->addSpLink (links_[i]); + ninf (src)->addSpLink (links_[i]); + } +} + + + +bool +BpSolver::converged (void) +{ + if (links_.size() == 0) { + return true; + } + if (nIters_ == 0) { + return false; + } + if (Globals::verbosity > 2) { + cout << endl; + } + if (nIters_ == 1) { + if (Globals::verbosity > 1) { + cout << "no residuals" << endl << endl; + } + return false; + } + bool converged = true; + if (BpOptions::schedule == BpOptions::Schedule::MAX_RESIDUAL) { + double maxResidual = (*(sortedOrder_.begin()))->getResidual(); + if (maxResidual > BpOptions::accuracy) { + converged = false; + } else { + converged = true; + } + } else { + for (unsigned i = 0; i < links_.size(); i++) { + double residual = links_[i]->getResidual(); + if (Globals::verbosity > 1) { + cout << links_[i]->toString() + " residual = " << residual << endl; + } + if (residual > BpOptions::accuracy) { + converged = false; + if (Globals::verbosity < 2) { + break; + } + } + } + if (Globals::verbosity > 1) { + cout << endl; + } + } + return converged; +} + + + +void +BpSolver::printLinkInformation (void) const +{ + for (unsigned i = 0; i < links_.size(); i++) { + SpLink* l = links_[i]; + cout << l->toString() << ":" << endl; + cout << " curr msg = " ; + cout << l->getMessage() << endl; + cout << " next msg = " ; + cout << l->getNextMessage() << endl; + cout << " residual = " << l->getResidual() << endl; + } +} + diff --git a/packages/CLPBN/horus/BpSolver.h b/packages/CLPBN/horus/BpSolver.h new file mode 100644 index 000000000..f52370da7 --- /dev/null +++ b/packages/CLPBN/horus/BpSolver.h @@ -0,0 +1,190 @@ +#ifndef HORUS_BPSOLVER_H +#define HORUS_BPSOLVER_H + +#include +#include +#include + +#include "Solver.h" +#include "Factor.h" +#include "FactorGraph.h" +#include "Util.h" + +using namespace std; + + +class SpLink +{ + public: + SpLink (FacNode* fn, VarNode* vn) + { + fac_ = fn; + var_ = vn; + v1_.resize (vn->range(), LogAware::tl (1.0 / vn->range())); + v2_.resize (vn->range(), LogAware::tl (1.0 / vn->range())); + currMsg_ = &v1_; + nextMsg_ = &v2_; + msgSended_ = false; + residual_ = 0.0; + } + + virtual ~SpLink (void) { }; + + FacNode* getFactor (void) const { return fac_; } + + VarNode* getVariable (void) const { return var_; } + + const Params& getMessage (void) const { return *currMsg_; } + + Params& getNextMessage (void) { return *nextMsg_; } + + bool messageWasSended (void) const { return msgSended_; } + + double getResidual (void) const { return residual_; } + + void clearResidual (void) { residual_ = 0.0; } + + void updateResidual (void) + { + residual_ = LogAware::getMaxNorm (v1_,v2_); + } + + virtual void updateMessage (void) + { + swap (currMsg_, nextMsg_); + msgSended_ = true; + } + + string toString (void) const + { + stringstream ss; + ss << fac_->getLabel(); + ss << " -- " ; + ss << var_->label(); + return ss.str(); + } + + protected: + FacNode* fac_; + VarNode* var_; + Params v1_; + Params v2_; + Params* currMsg_; + Params* nextMsg_; + bool msgSended_; + double residual_; +}; + +typedef vector SpLinkSet; + + +class SPNodeInfo +{ + public: + void addSpLink (SpLink* link) { links_.push_back (link); } + const SpLinkSet& getLinks (void) { return links_; } + private: + SpLinkSet links_; +}; + + +class BpSolver : public Solver +{ + public: + BpSolver (const FactorGraph&); + + virtual ~BpSolver (void); + + Params solveQuery (VarIds); + + virtual void printSolverFlags (void) const; + + virtual Params getPosterioriOf (VarId); + + virtual Params getJointDistributionOf (const VarIds&); + + protected: + void runSolver (void); + + virtual void createLinks (void); + + virtual void maxResidualSchedule (void); + + virtual void calculateFactor2VariableMsg (SpLink*); + + virtual Params getVar2FactorMsg (const SpLink*) const; + + virtual Params getJointByConditioning (const VarIds&) const; + + SPNodeInfo* ninf (const VarNode* var) const + { + return varsI_[var->getIndex()]; + } + + SPNodeInfo* ninf (const FacNode* fac) const + { + return facsI_[fac->getIndex()]; + } + + void calculateAndUpdateMessage (SpLink* link, bool calcResidual = true) + { + if (Globals::verbosity > 2) { + cout << "calculating & updating " << link->toString() << endl; + } + calculateFactor2VariableMsg (link); + if (calcResidual) { + link->updateResidual(); + } + link->updateMessage(); + } + + void calculateMessage (SpLink* link, bool calcResidual = true) + { + if (Globals::verbosity > 2) { + cout << "calculating " << link->toString() << endl; + } + calculateFactor2VariableMsg (link); + if (calcResidual) { + link->updateResidual(); + } + } + + void updateMessage (SpLink* link) + { + link->updateMessage(); + if (Globals::verbosity > 2) { + cout << "updating " << link->toString() << endl; + } + } + + struct CompareResidual + { + inline bool operator() (const SpLink* link1, const SpLink* link2) + { + return link1->getResidual() > link2->getResidual(); + } + }; + + SpLinkSet links_; + unsigned nIters_; + vector varsI_; + vector facsI_; + bool runned_; + const FactorGraph* fg_; + + typedef multiset SortedOrder; + SortedOrder sortedOrder_; + + typedef unordered_map SpLinkMap; + SpLinkMap linkMap_; + + private: + void initializeSolver (void); + + bool converged (void); + + virtual void printLinkInformation (void) const; +}; + +#endif // HORUS_BPSOLVER_H + diff --git a/packages/CLPBN/horus/CFactorGraph.cpp b/packages/CLPBN/horus/CFactorGraph.cpp new file mode 100644 index 000000000..e24bc0be0 --- /dev/null +++ b/packages/CLPBN/horus/CFactorGraph.cpp @@ -0,0 +1,320 @@ +#include "CFactorGraph.h" +#include "Factor.h" + + +bool CFactorGraph::checkForIdenticalFactors = true; + +CFactorGraph::CFactorGraph (const FactorGraph& fg) + : freeColor_(0), groundFg_(&fg) +{ + findIdenticalFactors(); + setInitialColors(); + createGroups(); +} + + + +CFactorGraph::~CFactorGraph (void) +{ + for (unsigned i = 0; i < varClusters_.size(); i++) { + delete varClusters_[i]; + } + for (unsigned i = 0; i < facClusters_.size(); i++) { + delete facClusters_[i]; + } +} + + + +void +CFactorGraph::findIdenticalFactors() +{ + if (checkForIdenticalFactors == false) { + return; + } + const FacNodes& facNodes = groundFg_->facNodes(); + for (unsigned i = 0; i < facNodes.size(); i++) { + facNodes[i]->factor().setDistId (Util::maxUnsigned()); + } + unsigned groupCount = 1; + for (unsigned i = 0; i < facNodes.size(); i++) { + Factor& f1 = facNodes[i]->factor(); + if (f1.distId() != Util::maxUnsigned()) { + continue; + } + f1.setDistId (groupCount); + for (unsigned j = i + 1; j < facNodes.size(); j++) { + Factor& f2 = facNodes[j]->factor(); + if (f2.distId() != Util::maxUnsigned()) { + continue; + } + if (f1.size() == f2.size() && + f1.ranges() == f2.ranges() && + f1.params() == f2.params()) { + f2.setDistId (groupCount); + } + } + groupCount ++; + } +} + + + +void +CFactorGraph::setInitialColors (void) +{ + varColors_.resize (groundFg_->nrVarNodes()); + facColors_.resize (groundFg_->nrFacNodes()); + + // create the initial variable colors + VarColorMap colorMap; + const VarNodes& varNodes = groundFg_->varNodes(); + for (unsigned i = 0; i < varNodes.size(); i++) { + unsigned dsize = varNodes[i]->range(); + VarColorMap::iterator it = colorMap.find (dsize); + if (it == colorMap.end()) { + it = colorMap.insert (make_pair ( + dsize, Colors (dsize+1,-1))).first; + } + unsigned idx; + if (varNodes[i]->hasEvidence()) { + idx = varNodes[i]->getEvidence(); + } else { + idx = dsize; + } + Colors& stateColors = it->second; + if (stateColors[idx] == -1) { + stateColors[idx] = getFreeColor(); + } + setColor (varNodes[i], stateColors[idx]); + } + const FacNodes& facNodes = groundFg_->facNodes(); + // create the initial factor colors + DistColorMap distColors; + for (unsigned i = 0; i < facNodes.size(); i++) { + unsigned distId = facNodes[i]->factor().distId(); + DistColorMap::iterator it = distColors.find (distId); + if (it == distColors.end()) { + it = distColors.insert (make_pair (distId, getFreeColor())).first; + } + setColor (facNodes[i], it->second); + } +} + + + +void +CFactorGraph::createGroups (void) +{ + VarSignMap varGroups; + FacSignMap facGroups; + unsigned nIters = 0; + bool groupsHaveChanged = true; + const VarNodes& varNodes = groundFg_->varNodes(); + const FacNodes& facNodes = groundFg_->facNodes(); + + while (groupsHaveChanged || nIters == 1) { + nIters ++; + + // set a new color to the variables with the same signature + unsigned prevVarGroupsSize = varGroups.size(); + varGroups.clear(); + for (unsigned i = 0; i < varNodes.size(); i++) { + const VarSignature& signature = getSignature (varNodes[i]); + VarSignMap::iterator it = varGroups.find (signature); + if (it == varGroups.end()) { + it = varGroups.insert (make_pair (signature, VarNodes())).first; + } + it->second.push_back (varNodes[i]); + } + for (VarSignMap::iterator it = varGroups.begin(); + it != varGroups.end(); it++) { + Color newColor = getFreeColor(); + VarNodes& groupMembers = it->second; + for (unsigned i = 0; i < groupMembers.size(); i++) { + setColor (groupMembers[i], newColor); + } + } + + unsigned prevFactorGroupsSize = facGroups.size(); + facGroups.clear(); + // set a new color to the factors with the same signature + for (unsigned i = 0; i < facNodes.size(); i++) { + const FacSignature& signature = getSignature (facNodes[i]); + FacSignMap::iterator it = facGroups.find (signature); + if (it == facGroups.end()) { + it = facGroups.insert (make_pair (signature, FacNodes())).first; + } + it->second.push_back (facNodes[i]); + } + for (FacSignMap::iterator it = facGroups.begin(); + it != facGroups.end(); it++) { + Color newColor = getFreeColor(); + FacNodes& groupMembers = it->second; + for (unsigned i = 0; i < groupMembers.size(); i++) { + setColor (groupMembers[i], newColor); + } + } + + groupsHaveChanged = prevVarGroupsSize != varGroups.size() + || prevFactorGroupsSize != facGroups.size(); + } + // printGroups (varGroups, facGroups); + createClusters (varGroups, facGroups); +} + + + +void +CFactorGraph::createClusters ( + const VarSignMap& varGroups, + const FacSignMap& facGroups) +{ + varClusters_.reserve (varGroups.size()); + for (VarSignMap::const_iterator it = varGroups.begin(); + it != varGroups.end(); it++) { + const VarNodes& groupVars = it->second; + VarCluster* vc = new VarCluster (groupVars); + for (unsigned i = 0; i < groupVars.size(); i++) { + vid2VarCluster_.insert (make_pair (groupVars[i]->varId(), vc)); + } + varClusters_.push_back (vc); + } + + facClusters_.reserve (facGroups.size()); + for (FacSignMap::const_iterator it = facGroups.begin(); + it != facGroups.end(); it++) { + FacNode* groupFactor = it->second[0]; + const VarNodes& neighs = groupFactor->neighbors(); + VarClusters varClusters; + varClusters.reserve (neighs.size()); + for (unsigned i = 0; i < neighs.size(); i++) { + VarId vid = neighs[i]->varId(); + varClusters.push_back (vid2VarCluster_.find (vid)->second); + } + facClusters_.push_back (new FacCluster (it->second, varClusters)); + } +} + + + +VarSignature +CFactorGraph::getSignature (const VarNode* varNode) +{ + const FacNodes& neighs = varNode->neighbors(); + VarSignature sign; + sign.reserve (neighs.size() + 1); + for (unsigned i = 0; i < neighs.size(); i++) { + sign.push_back (make_pair ( + getColor (neighs[i]), + neighs[i]->factor().indexOf (varNode->varId()))); + } + std::sort (sign.begin(), sign.end()); + sign.push_back (make_pair (getColor (varNode), 0)); + return sign; +} + + + +FacSignature +CFactorGraph::getSignature (const FacNode* facNode) +{ + const VarNodes& neighs = facNode->neighbors(); + FacSignature sign; + sign.reserve (neighs.size() + 1); + for (unsigned i = 0; i < neighs.size(); i++) { + sign.push_back (getColor (neighs[i])); + } + sign.push_back (getColor (facNode)); + return sign; +} + + + +FactorGraph* +CFactorGraph::getGroundFactorGraph (void) +{ + FactorGraph* fg = new FactorGraph(); + for (unsigned i = 0; i < varClusters_.size(); i++) { + VarNode* newVar = new VarNode (varClusters_[i]->first()); + varClusters_[i]->setRepresentative (newVar); + fg->addVarNode (newVar); + } + for (unsigned i = 0; i < facClusters_.size(); i++) { + Vars vars; + const VarClusters& clusters = facClusters_[i]->varClusters(); + for (unsigned j = 0; j < clusters.size(); j++) { + vars.push_back (clusters[j]->representative()); + } + const Factor& groundFac = facClusters_[i]->first()->factor(); + FacNode* fn = new FacNode (Factor ( + vars, groundFac.params(), groundFac.distId())); + facClusters_[i]->setRepresentative (fn); + fg->addFacNode (fn); + for (unsigned j = 0; j < vars.size(); j++) { + fg->addEdge (static_cast (vars[j]), fn); + } + } + return fg; +} + + + +unsigned +CFactorGraph::getEdgeCount ( + const FacCluster* fc, + const VarCluster* vc, + unsigned index) const +{ + unsigned count = 0; + VarId reprVid = vc->representative()->varId(); + VarNode* groundVar = groundFg_->getVarNode (reprVid); + const FacNodes& neighs = groundVar->neighbors(); + for (unsigned i = 0; i < neighs.size(); i++) { + FacNodes::const_iterator it; + it = std::find (fc->members().begin(), fc->members().end(), neighs[i]); + if (it != fc->members().end() && + (*it)->factor().indexOf (reprVid) == (int)index) { + count ++; + } + } + return count; +} + + + +void +CFactorGraph::printGroups ( + const VarSignMap& varGroups, + const FacSignMap& facGroups) const +{ + unsigned count = 1; + cout << "variable groups:" << endl; + for (VarSignMap::const_iterator it = varGroups.begin(); + it != varGroups.end(); it++) { + const VarNodes& groupMembers = it->second; + if (groupMembers.size() > 0) { + cout << count << ": " ; + for (unsigned i = 0; i < groupMembers.size(); i++) { + cout << groupMembers[i]->label() << " " ; + } + count ++; + cout << endl; + } + } + count = 1; + cout << endl << "factor groups:" << endl; + for (FacSignMap::const_iterator it = facGroups.begin(); + it != facGroups.end(); it++) { + const FacNodes& groupMembers = it->second; + if (groupMembers.size() > 0) { + cout << ++count << ": " ; + for (unsigned i = 0; i < groupMembers.size(); i++) { + cout << groupMembers[i]->getLabel() << " " ; + } + count ++; + cout << endl; + } + } +} + diff --git a/packages/CLPBN/horus/CFactorGraph.h b/packages/CLPBN/horus/CFactorGraph.h new file mode 100644 index 000000000..468787b89 --- /dev/null +++ b/packages/CLPBN/horus/CFactorGraph.h @@ -0,0 +1,176 @@ +#ifndef HORUS_CFACTORGRAPH_H +#define HORUS_CFACTORGRAPH_H + +#include + +#include "FactorGraph.h" +#include "Factor.h" +#include "Util.h" +#include "Horus.h" + +class VarCluster; +class FacCluster; +class VarSignatureHash; +class FacSignatureHash; + +typedef long Color; +typedef vector Colors; +typedef vector> VarSignature; +typedef vector FacSignature; + +typedef unordered_map DistColorMap; +typedef unordered_map VarColorMap; + +typedef unordered_map VarSignMap; +typedef unordered_map FacSignMap; + +typedef vector VarClusters; +typedef vector FacClusters; + +typedef unordered_map VarId2VarCluster; + + +struct VarSignatureHash +{ + size_t operator() (const VarSignature &sig) const + { + size_t val = hash()(sig.size()); + for (unsigned i = 0; i < sig.size(); i++) { + val ^= hash()(sig[i].first); + val ^= hash()(sig[i].second); + } + return val; + } +}; + + +struct FacSignatureHash +{ + size_t operator() (const FacSignature &sig) const + { + size_t val = hash()(sig.size()); + for (unsigned i = 0; i < sig.size(); i++) { + val ^= hash()(sig[i]); + } + return val; + } +}; + + + +class VarCluster +{ + public: + VarCluster (const VarNodes& vs) : members_(vs) { } + + const VarNode* first (void) const { return members_.front(); } + + const VarNodes& members (void) const { return members_; } + + VarNode* representative (void) const { return repr_; } + + void setRepresentative (VarNode* vn) { repr_ = vn; } + + private: + VarNodes members_; + VarNode* repr_; +}; + + +class FacCluster +{ + public: + FacCluster (const FacNodes& fcs, const VarClusters& vcs) + : members_(fcs), varClusters_(vcs) { } + + const FacNode* first (void) const { return members_.front(); } + + const FacNodes& members (void) const { return members_; } + + VarClusters& varClusters (void) { return varClusters_; } + + FacNode* representative (void) const { return repr_; } + + void setRepresentative (FacNode* fn) { repr_ = fn; } + + private: + FacNodes members_; + VarClusters varClusters_; + FacNode* repr_; +}; + + +class CFactorGraph +{ + public: + CFactorGraph (const FactorGraph&); + + ~CFactorGraph (void); + + const VarClusters& varClusters (void) { return varClusters_; } + + const FacClusters& facClusters (void) { return facClusters_; } + + VarNode* getEquivalent (VarId vid) + { + VarCluster* vc = vid2VarCluster_.find (vid)->second; + return vc->representative(); + } + + FactorGraph* getGroundFactorGraph (void); + + unsigned getEdgeCount (const FacCluster*, + const VarCluster*, unsigned index) const; + + static bool checkForIdenticalFactors; + + private: + Color getFreeColor (void) + { + ++ freeColor_; + return freeColor_ - 1; + } + + Color getColor (const VarNode* vn) const + { + return varColors_[vn->getIndex()]; + } + Color getColor (const FacNode* fn) const { + return facColors_[fn->getIndex()]; + } + + void setColor (const VarNode* vn, Color c) + { + varColors_[vn->getIndex()] = c; + } + + void setColor (const FacNode* fn, Color c) + { + facColors_[fn->getIndex()] = c; + } + + void findIdenticalFactors (void); + + void setInitialColors (void); + + void createGroups (void); + + void createClusters (const VarSignMap&, const FacSignMap&); + + VarSignature getSignature (const VarNode*); + + FacSignature getSignature (const FacNode*); + + void printGroups (const VarSignMap&, const FacSignMap&) const; + + Color freeColor_; + Colors varColors_; + Colors facColors_; + VarClusters varClusters_; + FacClusters facClusters_; + VarId2VarCluster vid2VarCluster_; + const FactorGraph* groundFg_; +}; + +#endif // HORUS_CFACTORGRAPH_H + diff --git a/packages/CLPBN/horus/CbpSolver.cpp b/packages/CLPBN/horus/CbpSolver.cpp new file mode 100644 index 000000000..6b38021ec --- /dev/null +++ b/packages/CLPBN/horus/CbpSolver.cpp @@ -0,0 +1,369 @@ +#include "CbpSolver.h" + + +CbpSolver::CbpSolver (const FactorGraph& fg) : BpSolver (fg) +{ + unsigned nrGroundVars, nrGroundFacs, nrNeighborless; + if (Constants::COLLECT_STATS) { + nrGroundVars = fg_->varNodes().size(); + nrGroundFacs = fg_->facNodes().size(); + const VarNodes& vars = fg_->varNodes(); + nrNeighborless = 0; + for (unsigned i = 0; i < vars.size(); i++) { + const FacNodes& factors = vars[i]->neighbors(); + if (factors.size() == 1 && factors[0]->neighbors().size() == 1) { + nrNeighborless ++; + } + } + } + cfg_ = new CFactorGraph (fg); + fg_ = cfg_->getGroundFactorGraph(); + if (Constants::COLLECT_STATS) { + unsigned nrClusterVars = fg_->varNodes().size(); + unsigned nrClusterFacs = fg_->facNodes().size(); + Statistics::updateCompressingStatistics (nrGroundVars, + nrGroundFacs, nrClusterVars, nrClusterFacs, nrNeighborless); + } +} + + + +CbpSolver::~CbpSolver (void) +{ + delete cfg_; + delete fg_; + for (unsigned i = 0; i < links_.size(); i++) { + delete links_[i]; + } + links_.clear(); +} + + + +void +CbpSolver::printSolverFlags (void) const +{ + stringstream ss; + ss << "counting bp [" ; + ss << "schedule=" ; + typedef BpOptions::Schedule Sch; + switch (BpOptions::schedule) { + case Sch::SEQ_FIXED: ss << "seq_fixed"; break; + case Sch::SEQ_RANDOM: ss << "seq_random"; break; + case Sch::PARALLEL: ss << "parallel"; break; + case Sch::MAX_RESIDUAL: ss << "max_residual"; break; + } + ss << ",max_iter=" << BpOptions::maxIter; + ss << ",accuracy=" << BpOptions::accuracy; + ss << ",log_domain=" << Util::toString (Globals::logDomain); + ss << ",chkif=" << + Util::toString (CFactorGraph::checkForIdenticalFactors); + ss << "]" ; + cout << ss.str() << endl; +} + + + +Params +CbpSolver::getPosterioriOf (VarId vid) +{ + if (runned_ == false) { + runSolver(); + } + assert (cfg_->getEquivalent (vid)); + VarNode* var = cfg_->getEquivalent (vid); + Params probs; + if (var->hasEvidence()) { + probs.resize (var->range(), LogAware::noEvidence()); + probs[var->getEvidence()] = LogAware::withEvidence(); + } else { + probs.resize (var->range(), LogAware::multIdenty()); + const SpLinkSet& links = ninf(var)->getLinks(); + if (Globals::logDomain) { + for (unsigned i = 0; i < links.size(); i++) { + CbpSolverLink* l = static_cast (links[i]); + Util::add (probs, l->poweredMessage()); + } + LogAware::normalize (probs); + Util::fromLog (probs); + } else { + for (unsigned i = 0; i < links.size(); i++) { + CbpSolverLink* l = static_cast (links[i]); + Util::multiply (probs, l->poweredMessage()); + } + LogAware::normalize (probs); + } + } + return probs; +} + + + +Params +CbpSolver::getJointDistributionOf (const VarIds& jointVids) +{ + VarIds eqVarIds; + for (unsigned i = 0; i < jointVids.size(); i++) { + VarNode* vn = cfg_->getEquivalent (jointVids[i]); + eqVarIds.push_back (vn->varId()); + } + return BpSolver::getJointDistributionOf (eqVarIds); +} + + + +void +CbpSolver::createLinks (void) +{ + if (Globals::verbosity > 0) { + cout << "compressed factor graph contains " ; + cout << fg_->nrVarNodes() << " variables and " ; + cout << fg_->nrFacNodes() << " factors " << endl; + cout << endl; + } + const FacClusters& fcs = cfg_->facClusters(); + for (unsigned i = 0; i < fcs.size(); i++) { + const VarClusters& vcs = fcs[i]->varClusters(); + for (unsigned j = 0; j < vcs.size(); j++) { + unsigned count = cfg_->getEdgeCount (fcs[i], vcs[j], j); + if (Globals::verbosity > 1) { + cout << "creating link " ; + cout << fcs[i]->representative()->getLabel(); + cout << " -- " ; + cout << vcs[j]->representative()->label(); + cout << " idx=" << j << ", count=" << count << endl; + } + links_.push_back (new CbpSolverLink ( + fcs[i]->representative(), vcs[j]->representative(), j, count)); + } + } + if (Globals::verbosity > 1) { + cout << endl; + } +} + + + +void +CbpSolver::maxResidualSchedule (void) +{ + if (nIters_ == 1) { + for (unsigned i = 0; i < links_.size(); i++) { + calculateMessage (links_[i]); + SortedOrder::iterator it = sortedOrder_.insert (links_[i]); + linkMap_.insert (make_pair (links_[i], it)); + if (Globals::verbosity >= 1) { + cout << "calculating " << links_[i]->toString() << endl; + } + } + return; + } + + for (unsigned c = 0; c < links_.size(); c++) { + if (Globals::verbosity > 1) { + cout << endl << "current residuals:" << endl; + for (SortedOrder::iterator it = sortedOrder_.begin(); + it != sortedOrder_.end(); it ++) { + cout << " " << setw (30) << left << (*it)->toString(); + cout << "residual = " << (*it)->getResidual() << endl; + } + } + + SortedOrder::iterator it = sortedOrder_.begin(); + SpLink* link = *it; + if (Globals::verbosity >= 1) { + cout << "updating " << (*sortedOrder_.begin())->toString() << endl; + } + if (link->getResidual() < BpOptions::accuracy) { + return; + } + link->updateMessage(); + link->clearResidual(); + sortedOrder_.erase (it); + linkMap_.find (link)->second = sortedOrder_.insert (link); + + // update the messages that depend on message source --> destin + const FacNodes& factorNeighbors = link->getVariable()->neighbors(); + for (unsigned i = 0; i < factorNeighbors.size(); i++) { + const SpLinkSet& links = ninf(factorNeighbors[i])->getLinks(); + for (unsigned j = 0; j < links.size(); j++) { + if (links[j]->getVariable() != link->getVariable()) { + if (Globals::verbosity > 1) { + cout << " calculating " << links[j]->toString() << endl; + } + calculateMessage (links[j]); + SpLinkMap::iterator iter = linkMap_.find (links[j]); + sortedOrder_.erase (iter->second); + iter->second = sortedOrder_.insert (links[j]); + } + } + } + // in counting bp, the message that a variable X sends to + // to a factor F depends on the message that F sent to the X + const SpLinkSet& links = ninf(link->getFactor())->getLinks(); + for (unsigned i = 0; i < links.size(); i++) { + if (links[i]->getVariable() != link->getVariable()) { + if (Globals::verbosity > 1) { + cout << " calculating " << links[i]->toString() << endl; + } + calculateMessage (links[i]); + SpLinkMap::iterator iter = linkMap_.find (links[i]); + sortedOrder_.erase (iter->second); + iter->second = sortedOrder_.insert (links[i]); + } + } + } +} + + + +void +CbpSolver::calculateFactor2VariableMsg (SpLink* _link) +{ + CbpSolverLink* link = static_cast (_link); + FacNode* src = link->getFactor(); + const VarNode* dst = link->getVariable(); + const SpLinkSet& links = ninf(src)->getLinks(); + // calculate the product of messages that were sent + // to factor `src', except from var `dst' + unsigned msgSize = 1; + for (unsigned i = 0; i < links.size(); i++) { + msgSize *= links[i]->getVariable()->range(); + } + unsigned repetitions = 1; + Params msgProduct (msgSize, LogAware::multIdenty()); + if (Globals::logDomain) { + for (int i = links.size() - 1; i >= 0; i--) { + const CbpSolverLink* cl = static_cast (links[i]); + if ( ! (cl->getVariable() == dst && cl->index() == link->index())) { + if (Constants::SHOW_BP_CALCS) { + cout << " message from " << links[i]->getVariable()->label(); + cout << ": " ; + } + Util::add (msgProduct, getVar2FactorMsg (links[i]), repetitions); + repetitions *= links[i]->getVariable()->range(); + if (Constants::SHOW_BP_CALCS) { + cout << endl; + } + } else { + unsigned range = links[i]->getVariable()->range(); + Util::add (msgProduct, Params (range, 0.0), repetitions); + repetitions *= range; + } + } + } else { + for (int i = links.size() - 1; i >= 0; i--) { + const CbpSolverLink* cl = static_cast (links[i]); + if ( ! (cl->getVariable() == dst && cl->index() == link->index())) { + if (Constants::SHOW_BP_CALCS) { + cout << " message from " << links[i]->getVariable()->label(); + cout << ": " ; + } + Util::multiply (msgProduct, getVar2FactorMsg (links[i]), repetitions); + repetitions *= links[i]->getVariable()->range(); + if (Constants::SHOW_BP_CALCS) { + cout << endl; + } + } else { + unsigned range = links[i]->getVariable()->range(); + Util::multiply (msgProduct, Params (range, 1.0), repetitions); + repetitions *= range; + } + } + } + Factor result (src->factor().arguments(), + src->factor().ranges(), msgProduct); + assert (msgProduct.size() == src->factor().size()); + if (Globals::logDomain) { + for (unsigned i = 0; i < result.size(); i++) { + result[i] += src->factor()[i]; + } + } else { + for (unsigned i = 0; i < result.size(); i++) { + result[i] *= src->factor()[i]; + } + } + if (Constants::SHOW_BP_CALCS) { + cout << " message product: " << msgProduct << endl; + cout << " original factor: " << src->factor().params() << endl; + cout << " factor product: " << result.params() << endl; + } + result.sumOutAllExceptIndex (link->index()); + if (Constants::SHOW_BP_CALCS) { + cout << " marginalized: " << result.params() << endl; + } + link->getNextMessage() = result.params(); + LogAware::normalize (link->getNextMessage()); + if (Constants::SHOW_BP_CALCS) { + cout << " curr msg: " << link->getMessage() << endl; + cout << " next msg: " << link->getNextMessage() << endl; + } +} + + + +Params +CbpSolver::getVar2FactorMsg (const SpLink* _link) const +{ + const CbpSolverLink* link = static_cast (_link); + const VarNode* src = link->getVariable(); + const FacNode* dst = link->getFactor(); + Params msg; + if (src->hasEvidence()) { + msg.resize (src->range(), LogAware::noEvidence()); + double value = link->getMessage()[src->getEvidence()]; + if (Constants::SHOW_BP_CALCS) { + msg[src->getEvidence()] = value; + cout << msg << "^" << link->nrEdges() << "-1" ; + } + msg[src->getEvidence()] = LogAware::pow (value, link->nrEdges() - 1); + } else { + msg = link->getMessage(); + if (Constants::SHOW_BP_CALCS) { + cout << msg << "^" << link->nrEdges() << "-1" ; + } + LogAware::pow (msg, link->nrEdges() - 1); + } + const SpLinkSet& links = ninf(src)->getLinks(); + if (Globals::logDomain) { + for (unsigned i = 0; i < links.size(); i++) { + CbpSolverLink* cl = static_cast (links[i]); + if ( ! (cl->getFactor() == dst && cl->index() == link->index())) { + CbpSolverLink* cl = static_cast (links[i]); + Util::add (msg, cl->poweredMessage()); + } + } + } else { + for (unsigned i = 0; i < links.size(); i++) { + CbpSolverLink* cl = static_cast (links[i]); + if ( ! (cl->getFactor() == dst && cl->index() == link->index())) { + Util::multiply (msg, cl->poweredMessage()); + if (Constants::SHOW_BP_CALCS) { + cout << " x " << cl->getNextMessage() << "^" << link->nrEdges(); + } + } + } + } + if (Constants::SHOW_BP_CALCS) { + cout << " = " << msg; + } + return msg; +} + + + +void +CbpSolver::printLinkInformation (void) const +{ + for (unsigned i = 0; i < links_.size(); i++) { + CbpSolverLink* cl = static_cast (links_[i]); + cout << cl->toString() << ":" << endl; + cout << " curr msg = " << cl->getMessage() << endl; + cout << " next msg = " << cl->getNextMessage() << endl; + cout << " index = " << cl->index() << endl; + cout << " nr edges = " << cl->nrEdges() << endl; + cout << " powered = " << cl->poweredMessage() << endl; + cout << " residual = " << cl->getResidual() << endl; + } +} + diff --git a/packages/CLPBN/horus/CbpSolver.h b/packages/CLPBN/horus/CbpSolver.h new file mode 100644 index 000000000..d10bd752b --- /dev/null +++ b/packages/CLPBN/horus/CbpSolver.h @@ -0,0 +1,67 @@ +#ifndef HORUS_CBP_H +#define HORUS_CBP_H + +#include "BpSolver.h" +#include "CFactorGraph.h" + +class Factor; + +class CbpSolverLink : public SpLink +{ + public: + CbpSolverLink (FacNode* fn, VarNode* vn, unsigned idx, unsigned count) + : SpLink (fn, vn), index_(idx), nrEdges_(count), + pwdMsg_(vn->range(), LogAware::one()) { } + + unsigned index (void) const { return index_; } + + unsigned nrEdges (void) const { return nrEdges_; } + + const Params& poweredMessage (void) const { return pwdMsg_; } + + void updateMessage (void) + { + pwdMsg_ = *nextMsg_; + swap (currMsg_, nextMsg_); + msgSended_ = true; + LogAware::pow (pwdMsg_, nrEdges_); + } + + private: + unsigned index_; + unsigned nrEdges_; + Params pwdMsg_; +}; + + + +class CbpSolver : public BpSolver +{ + public: + CbpSolver (const FactorGraph& fg); + + ~CbpSolver (void); + + void printSolverFlags (void) const; + + Params getPosterioriOf (VarId); + + Params getJointDistributionOf (const VarIds&); + + private: + + void createLinks (void); + + void maxResidualSchedule (void); + + void calculateFactor2VariableMsg (SpLink*); + + Params getVar2FactorMsg (const SpLink*) const; + + void printLinkInformation (void) const; + + CFactorGraph* cfg_; +}; + +#endif // HORUS_CBP_H + diff --git a/packages/CLPBN/horus/ConstraintTree.cpp b/packages/CLPBN/horus/ConstraintTree.cpp new file mode 100644 index 000000000..9bdd7f9fb --- /dev/null +++ b/packages/CLPBN/horus/ConstraintTree.cpp @@ -0,0 +1,1132 @@ +#include + +#include + +#include "ConstraintTree.h" +#include "Util.h" + + +void +CTNode::mergeSubtree (CTNode* n, bool updateLevels) +{ + if (updateLevels) { + updateChildLevels (n, level_ + 1); + } + CTChilds::iterator chIt = childs_.find (n); + if (chIt != childs_.end()) { + assert ((*chIt)->symbol() == n->symbol()); + const CTChilds& childsToAdd = n->childs(); + for (CTChilds::const_iterator it = childsToAdd.begin(); + it != childsToAdd.end(); ++ it) { + (*chIt)->mergeSubtree (*it, false); + } + delete n; + } else { + childs_.insert (n); + } +} + + + +void +CTNode::removeChild (CTNode* child) +{ + assert (childs_.contains (child)); + childs_.remove (child); +} + + + +void +CTNode::removeChilds (void) +{ + childs_.clear(); +} + + + +void +CTNode::removeAndDeleteChild (CTNode* child) +{ + removeChild (child); + CTNode::deleteSubtree (child); +} + + + +void +CTNode::removeAndDeleteAllChilds (void) +{ + for (CTChilds::const_iterator chIt = childs_.begin(); + chIt != childs_.end(); ++ chIt) { + deleteSubtree (*chIt); + } + childs_.clear(); +} + + + +SymbolSet +CTNode::childSymbols (void) const +{ + SymbolSet symbols; + for (CTChilds::const_iterator chIt = childs_.begin(); + chIt != childs_.end(); ++ chIt) { + symbols.insert ((*chIt)->symbol()); + } + return symbols; +} + + + +void +CTNode::updateChildLevels (CTNode* n, unsigned level) +{ + CTNodes stack; + stack.push_back (n); + n->setLevel (level); + while (stack.empty() == false) { + CTNode* node = stack.back(); + stack.pop_back(); + for (CTChilds::const_iterator chIt = node->childs().begin(); + chIt != node->childs().end(); ++ chIt) { + (*chIt)->setLevel (node->level() + 1); + } + stack.insert (stack.end(), node->childs().begin(), + node->childs().end()); + } +} + + + +CTNode* +CTNode::copySubtree (const CTNode* root1) +{ + if (root1->childs().empty()) { + return new CTNode (*root1); + } + CTNode* root2 = new CTNode (*root1); + typedef pair StackPair; + vector stack = { StackPair (root1, root2) }; + while (stack.empty() == false) { + const CTNode* n1 = stack.back().first; + CTNode* n2 = stack.back().second; + stack.pop_back(); + n2->childs().reserve (n1->nrChilds()); + stack.reserve (n1->nrChilds()); + for (CTChilds::const_iterator chIt = n1->childs().begin(); + chIt != n1->childs().end(); ++ chIt) { + CTNode* chCopy = new CTNode (**chIt); + n2->childs().insert_sorted (chCopy); + if ((*chIt)->nrChilds() != 0) { + stack.push_back (StackPair (*chIt, chCopy)); + } + } + } + return root2; +} + + + +void +CTNode::deleteSubtree (CTNode* n) +{ + assert (n); + const CTChilds& childs = n->childs(); + for (CTChilds::const_iterator chIt = childs.begin(); + chIt != childs.end(); ++ chIt) { + deleteSubtree (*chIt); + } + delete n; +} + + + +ostream& operator<< (ostream &out, const CTNode& n) +{ + out << "(" << n.level() << ") " ; + out << n.symbol(); + return out; +} + + + +ConstraintTree::ConstraintTree (unsigned nrLvs) +{ + for (unsigned i = 0; i < nrLvs; i++) { + logVars_.push_back (LogVar (i)); + } + root_ = new CTNode (0, 0); + logVarSet_ = LogVarSet (logVars_); +} + + + +ConstraintTree::ConstraintTree (const LogVars& logVars) +{ + root_ = new CTNode (0, 0); + logVars_ = logVars; + logVarSet_ = LogVarSet (logVars); +} + + + +ConstraintTree::ConstraintTree ( + const LogVars& logVars, + const Tuples& tuples) +{ + root_ = new CTNode (0, 0); + logVars_ = logVars; + logVarSet_ = LogVarSet (logVars); + for (unsigned i = 0; i < tuples.size(); i++) { + addTuple (tuples[i]); + } +} + + + +ConstraintTree::ConstraintTree (const ConstraintTree& ct) +{ + root_ = CTNode::copySubtree (ct.root_); + logVars_ = ct.logVars_; + logVarSet_ = ct.logVarSet_; +} + + + +ConstraintTree::~ConstraintTree (void) +{ + CTNode::deleteSubtree (root_); +} + + + +void +ConstraintTree::addTuple (const Tuple& tuple) +{ + CTNode* prevNode = root_; + for (unsigned i = 0; i < tuple.size(); i++) { + CTChilds::const_iterator it = prevNode->findSymbol (tuple[i]); + if (it == prevNode->childs().end()) { + CTNode* newNode = new CTNode (tuple[i], i + 1); + prevNode->mergeSubtree (newNode, false); + prevNode = newNode; + } else { + prevNode = *it; + } + } +} + + + +bool +ConstraintTree::containsTuple (const Tuple& tuple) +{ + CTNode* prevNode = root_; + for (unsigned i = 0; i < tuple.size(); i++) { + CTChilds::const_iterator it = prevNode->findSymbol (tuple[i]); + if (it == prevNode->childs().end()) { + return false; + } else { + prevNode = *it; + } + } + return true; +} + + + +void +ConstraintTree::moveToTop (const LogVars& lvs) +{ + for (unsigned i = 0; i < lvs.size(); i++) { + int pos = Util::indexOf (logVars_, lvs[i]); + assert (pos != -1); + for (int j = pos; j > (int)i; j--) { + swapLogVar (logVars_[j-1]); + } + } +} + + + +void +ConstraintTree::moveToBottom (const LogVars& lvs) +{ + for (int i = lvs.size() - 1; i >= 0; i--) { + LogVars::iterator it = + std::find (logVars_.begin(), logVars_.end(), lvs[i]); + assert (it != logVars_.end()); + int pos = Util::indexOf (logVars_, lvs[i]); + int stop = logVars_.size() - (lvs.size() - i - 1); + for (int j = pos; j < stop - 1; j++) { + swapLogVar (logVars_[j]); + } + } +} + + + +void +ConstraintTree::join (ConstraintTree* ct, bool oneTwoOne) +{ + if (logVarSet_.empty()) { + CTNode::deleteSubtree (root_); + root_ = CTNode::copySubtree (ct->root()); + logVars_ = ct->logVars(); + logVarSet_ = ct->logVarSet(); + return; + } + if (oneTwoOne) { + if (logVarSet_.contains (ct->logVarSet())) { + return; + } + if (ct->logVarSet().contains (logVarSet_)) { + CTNode::deleteSubtree (root_); + root_ = CTNode::copySubtree (ct->root()); + logVars_ = ct->logVars(); + logVarSet_ = ct->logVarSet(); + return; + } + } + LogVarSet intersect = logVarSet_ & ct->logVarSet_; + if (intersect.empty()) { + // carteesian product + appendOnBottom (root_, ct->root()->childs()); + Util::addToVector (logVars_, ct->logVars_); + logVarSet_ |= ct->logVarSet_; + } else { + moveToTop (intersect.elements()); + ct->moveToTop (intersect.elements()); + + Tuples tuples; + CTNodes appendNodes; + getTuples (ct->root(), Tuples(), intersect.size(), + tuples, appendNodes); + + CTNodes::const_iterator appendIt = appendNodes.begin(); + for (unsigned i = 0; i < tuples.size(); ++ i, ++ appendIt) { + bool tupleFounded = join (root_, tuples[i], 0, *appendIt); + if (oneTwoOne && tupleFounded == false) { + assert (false); + } + } + + LogVars newLvs (ct->logVars().begin() + intersect.size(), + ct->logVars().end()); + Util::addToVector (logVars_, newLvs); + logVarSet_ |= LogVarSet (newLvs); + } +} + + + +unsigned +ConstraintTree::getLevel (LogVar X) const +{ + unsigned level = Util::indexOf (logVars_, X); + level += 1; // root is in level 0, first logVar is in level 1 + return level; +} + + + +void +ConstraintTree::rename (LogVar X_old, LogVar X_new) +{ + assert (logVarSet_.contains (X_old)); + assert (logVarSet_.contains (X_new) == false); + logVarSet_ -= X_old; + logVarSet_ |= X_new; + for (unsigned i = 0; i < logVars_.size(); i++) { + if (logVars_[i] == X_old) { + logVars_[i] = X_new; + return; + } + } + assert (false); +} + + + +void +ConstraintTree::applySubstitution (const Substitution& theta) +{ + for (unsigned i = 0; i < logVars_.size(); i++) { + logVars_[i] = theta.newNameFor (logVars_[i]); + } + logVarSet_ = LogVarSet (logVars_); +} + + + +void +ConstraintTree::project (const LogVarSet& X) +{ + assert (logVarSet_.contains (X)); + remove ((logVarSet_ - X)); +} + + + +void +ConstraintTree::remove (const LogVarSet& X) +{ + assert (logVarSet_.contains (X)); + if (X.empty()) { + return; + } + moveToBottom (X.elements()); + unsigned level = getLevel (X.front()) - 1; + CTNodes nodes = getNodesAtLevel (level); + for (CTNodes::const_iterator it = nodes.begin(); + it != nodes.end(); ++ it) { + (*it)->removeAndDeleteAllChilds(); + } + logVars_.resize (logVars_.size() - X.size()); + logVarSet_ -= X; +} + + + +bool +ConstraintTree::ConstraintTree::isSingleton (LogVar X) +{ + Symbol symb; + unsigned level = getLevel (X); + CTNodes stack; + stack.push_back (root_); + while (stack.empty() == false) { + CTNode* node = stack.back(); + stack.pop_back(); + if (node->level() == level) { + if (symb.valid()) { + if (node->symbol() != symb) { + return false; + } + } else { + symb = node->symbol(); + } + } else { + stack.insert (stack.end(), node->childs().begin(), + node->childs().end()); + } + } + return true; +} + + + +LogVarSet +ConstraintTree::singletons (void) +{ + LogVarSet singletons; + for (unsigned i = 0; i < logVars_.size(); i++) { + if (isSingleton (logVars_[i])) { + singletons.insert (logVars_[i]); + } + } + return singletons; +} + + + +TupleSet +ConstraintTree::tupleSet (unsigned stopLevel) const +{ + assert (root_->isRoot()); + Tuples tuples; + if (stopLevel == 0) { + stopLevel = logVars_.size(); + } + getTuples (root_, Tuples(), stopLevel, tuples, CTNodes() = {}); + return TupleSet (tuples); +} + + + +TupleSet +ConstraintTree::tupleSet (const LogVars& originalLvs) +{ + LogVars uniqueLvs; + for (unsigned i = 0; i < originalLvs.size(); i++) { + if (Util::contains (uniqueLvs, originalLvs[i]) == false) { + uniqueLvs.push_back (originalLvs[i]); + } + } + + Tuples tuples; + moveToTop (uniqueLvs); + unsigned stopLevel = uniqueLvs.size(); + getTuples (root_, Tuples(), stopLevel, tuples, CTNodes() = {}); + + if (originalLvs.size() != uniqueLvs.size()) { + vector indexes; + indexes.reserve (originalLvs.size()); + for (unsigned i = 0; i < originalLvs.size(); i++) { + indexes.push_back (Util::indexOf (uniqueLvs, originalLvs[i])); + } + Tuples tuples2; + tuples2.reserve (tuples.size()); + for (unsigned i = 0; i < tuples.size(); i++) { + Tuple t; + t.reserve (originalLvs.size()); + for (unsigned j = 0; j < originalLvs.size(); j++) { + t.push_back (tuples[i][indexes[j]]); + } + tuples2.push_back (t); + } + return TupleSet (tuples2); + } + + return TupleSet (tuples); +} + + + +void +ConstraintTree::exportToGraphViz ( + const char* fileName, + bool showLogVars) const +{ + ofstream out (fileName); + if (!out.is_open()) { + cerr << "error: cannot open file to write at " ; + cerr << "ConstraintTree::exportToDotFile()" << endl; + abort(); + } + out << "digraph {" << endl; + ConstraintTree copy (*this); + // copy.moveToTop (copy.logVarSet_.elements()); + CTNodes nodes = getNodesBelow (copy.root_); + out << "\"" << copy.root_ << "\"" << " [label=\"R\"]" << endl; + for (CTNodes::const_iterator it = ++ nodes.begin(); + it != nodes.end(); ++ it) { + out << "\"" << *it << "\""; + out << " [label=\"" << **it << "\"]" ; + out << endl; + } + for (CTNodes::const_iterator it = nodes.begin(); + it != nodes.end(); ++ it) { + const CTChilds& childs = (*it)->childs(); + for (CTChilds::const_iterator chIt = childs.begin(); + chIt != childs.end(); ++ chIt) { + out << "\"" << *it << "\"" ; + out << " -> " ; + out << "\"" << *chIt << "\"" << endl ; + } + } + if (showLogVars) { + out << "Root [label=\"\", shape=plaintext]" << endl; + for (unsigned i = 0; i < copy.logVars_.size(); i++) { + out << copy.logVars_[i] << " [label=" ; + out << copy.logVars_[i] << ", " ; + out << "shape=plaintext, fontsize=14]" << endl; + } + out << "Root -> " << copy.logVars_[0]; + out << " [style=invis]" << endl; + for (unsigned i = 0; i < copy.logVars_.size() - 1; i++) { + out << copy.logVars_[i] << " -> " << copy.logVars_[i + 1]; + out << " [style=invis]" << endl; + } + } + out << "}" << endl; + out.close(); +} + + + +bool +ConstraintTree::isCountNormalized (const LogVarSet& Ys) +{ + assert (logVarSet_.contains (Ys)); + if (Ys.empty()) { + return true; + } + if (Ys.size() == logVars_.size()) { + assert (LogVarSet (logVars_) == LogVarSet (Ys)); + return true; + } + LogVarSet Zs = logVarSet_ - LogVarSet (Ys); + moveToTop (Zs.elements()); + CTNodes nodes = getNodesAtLevel (Zs.size()); + unsigned count = countTuples (*nodes.begin()); + for (CTNodes::const_iterator it = nodes.begin(); + it != nodes.end(); ++ it) { + if (countTuples (*it) != count) { + return false; + } + } + return true; +} + + + +unsigned +ConstraintTree::getConditionalCount (const LogVarSet& Ys) +{ + assert (isCountNormalized (Ys)); + if (Ys.empty()) { + return 1; + } + if (Ys.size() == logVars_.size()) { + assert (LogVarSet (Ys) == LogVarSet (logVars_)); + return countTuples (root_); + } + LogVarSet Zs = logVarSet_ - Ys; + moveToTop (Zs.elements()); + CTNode* n = root_; + unsigned l = 0; + while (l != Zs.size()) { + n = *(n->childs().begin()); + l ++; + } + return countTuples (n); +} + + + +TinySet +ConstraintTree::getConditionalCounts (const LogVarSet& Ys) +{ + TinySet counts; + assert (logVarSet_.contains (Ys)); + if (Ys.empty()) { + counts.insert (1); + } else if (Ys.size() == logVars_.size()) { + assert (LogVarSet (logVars_) == LogVarSet (Ys)); + counts.insert (countTuples (root_)); + } else { + LogVarSet Zs = logVarSet_ - LogVarSet (Ys); + moveToTop (Zs.elements()); + CTNodes nodes = getNodesAtLevel (Zs.size()); + for (CTNodes::const_iterator it = nodes.begin(); + it != nodes.end(); ++ it) { + counts.insert (countTuples (*it)); + } + } + return counts; +} + + + +bool +ConstraintTree::isCartesianProduct (const LogVarSet& Xs) +{ + assert (logVarSet_.contains (Xs)); + if (Xs.size() <= 1) { + return true; + } + moveToTop (Xs.elements()); + for (unsigned i = 1; i < Xs.size(); i++) { + CTNodes nodes = getNodesAtLevel (i); + for (unsigned j = 1; j < nodes.size(); j++) { + if (nodes[j-1]->nrChilds() != nodes[ j ]->nrChilds()) { + return false; + } + if (nodes[j-1]->childSymbols() != nodes[ j ]->childSymbols()) { + return false; + } + } + } + return true; +} + + + +std::pair +ConstraintTree::split (const Tuple& tuple) +{ + // assumes that my log vars are already on top + LogVars lvs (logVars_.begin(), logVars_.begin() + tuple.size()); + ConstraintTree tempCt (logVars_, {tuple}); + return split (lvs, &tempCt, lvs); +} + + + +std::pair +ConstraintTree::split ( + const LogVars& lvs1, + ConstraintTree* ct, + const LogVars& lvs2) +{ + assert (lvs1.size() == lvs2.size()); + assert (lvs1.size() == LogVarSet (lvs1).size()); + assert (lvs2.size() == LogVarSet (lvs2).size()); + assert (logVarSet_.contains (lvs1)); + assert (ct->logVarSet().contains (lvs2)); + CTChilds commChilds, exclChilds; + unsigned stopLevel = lvs1.size(); + split (root_, ct->root(), commChilds, exclChilds, stopLevel); + ConstraintTree* commCt = new ConstraintTree (commChilds, logVars_); + ConstraintTree* exclCt = new ConstraintTree (exclChilds, logVars_); + // cout << commCt->tupleSet() << " + " ; + // cout << exclCt->tupleSet() << " = " ; + // cout << tupleSet() << endl; + assert ((commCt->tupleSet() | exclCt->tupleSet()) == tupleSet()); + assert ((exclCt->tupleSet (stopLevel) & ct->tupleSet (stopLevel)).empty()); + return {commCt, exclCt}; +} + + + +ConstraintTrees +ConstraintTree::countNormalize (const LogVarSet& Ys) +{ + assert (logVarSet_.contains (Ys)); + LogVarSet Zs = logVarSet_ - Ys; + if (Ys.empty() || Zs.empty()) { + return { new ConstraintTree (*this) }; + } + moveToTop (Zs.elements()); + ConstraintTrees cts; + unordered_map countMap; + unsigned stopLevel = getLevel (Zs.back()); + const CTChilds& childs = root_->childs(); + + for (CTChilds::const_iterator chIt = childs.begin(); + chIt != childs.end(); ++ chIt) { + const vector>& res = + countNormalize (*chIt, stopLevel); + for (unsigned j = 0; j < res.size(); j++) { + unordered_map::iterator it + = countMap.find (res[j].second); + if (it == countMap.end()) { + ConstraintTree* newCt = new ConstraintTree (logVars_); + it = countMap.insert (make_pair (res[j].second, newCt)).first; + cts.push_back (newCt); + } + it->second->root_->mergeSubtree (res[j].first); + } + } + return cts; +} + + + +ConstraintTrees +ConstraintTree::jointCountNormalize ( + ConstraintTree* commCt, + ConstraintTree* exclCt, + LogVar X, + LogVar X_new1, + LogVar X_new2) +{ + unsigned N = getConditionalCount (X); + // cout << "My tuples: " << tupleSet() << endl; + // cout << "CommCt tuples: " << commCt->tupleSet() << endl; + // cout << "ExclCt tuples: " << exclCt->tupleSet() << endl; + // cout << "Counted Lv: " << X << endl; + // cout << "X_new1: " << X_new1 << endl; + // cout << "X_new2: " << X_new2 << endl; + // cout << "Original N: " << N << endl; + // cout << endl; + + ConstraintTrees normCts1 = commCt->countNormalize (X); + vector counts1 (normCts1.size()); + for (unsigned i = 0; i < normCts1.size(); i++) { + counts1[i] = normCts1[i]->getConditionalCount (X); + // cout << "normCts1[" << i << "] #" << counts1[i] ; + // cout << " " << normCts1[i]->tupleSet() << endl; + } + + ConstraintTrees normCts2 = exclCt->countNormalize (X); + vector counts2 (normCts2.size()); + for (unsigned i = 0; i < normCts2.size(); i++) { + counts2[i] = normCts2[i]->getConditionalCount (X); + // cout << "normCts2[" << i << "] #" << counts2[i] ; + // cout << " " << normCts2[i]->tupleSet() << endl; + } + // cout << endl; + + ConstraintTree* excl1 = 0; + for (unsigned i = 0; i < normCts1.size(); i++) { + if (counts1[i] == N) { + excl1 = normCts1[i]; + normCts1.erase (normCts1.begin() + i); + counts1.erase (counts1.begin() + i); + // cout << "joint-count(" << N << ",0)" << endl; + break; + } + } + + ConstraintTree* excl2 = 0; + for (unsigned i = 0; i < normCts2.size(); i++) { + if (counts2[i] == N) { + excl2 = normCts2[i]; + normCts2.erase (normCts2.begin() + i); + counts2.erase (counts2.begin() + i); + // cout << "joint-count(0," << N << ")" << endl; + break; + } + } + + for (unsigned i = 0; i < normCts1.size(); i++) { + unsigned j; + for (j = 0; counts1[i] + counts2[j] != N; j++) ; + // cout << "joint-count(" << counts1[i] ; + // cout << "," << counts2[j] << ")" << endl; + const CTChilds& childs = normCts2[j]->root_->childs(); + for (CTChilds::const_iterator chIt = childs.begin(); + chIt != childs.end(); ++ chIt) { + normCts1[i]->root_->mergeSubtree (CTNode::copySubtree (*chIt)); + } + delete normCts2[j]; + } + + ConstraintTrees cts = normCts1; + commCt->rename (X, X_new1); + exclCt->rename (X, X_new2); + for (unsigned i = 0; i < cts.size(); i++) { + cts[i]->remove (X); + cts[i]->join (commCt); + cts[i]->join (exclCt); + } + + if (excl1 != 0) { + cts.push_back (excl1); + } + if (excl2 != 0) { + cts.push_back (excl2); + } + + return cts; +} + + + +LogVars +ConstraintTree::expand (LogVar X) +{ + moveToBottom ({X}); + assert (isCountNormalized (X)); + CTNodes nodes = getNodesAtLevel (logVars_.size() - 1); + unsigned nrSymbols = getConditionalCount (X); + for (CTNodes::const_iterator it = nodes.begin(); + it != nodes.end(); ++ it) { + Symbols symbols; + const CTChilds& childs = (*it)->childs(); + for (CTChilds::const_iterator chIt = childs.begin(); + chIt != childs.end(); ++ chIt) { + symbols.push_back ((*chIt)->symbol()); + } + (*it)->removeAndDeleteAllChilds(); + CTNode* prev = *it; + assert (symbols.size() == nrSymbols); + for (unsigned j = 0; j < nrSymbols; j++) { + CTNode* newNode = new CTNode (symbols[j], (*it)->level() + j); + prev->mergeSubtree (newNode); + prev = newNode; + } + } + LogVars newLvs; + logVars_.pop_back(); + for (unsigned i = 0; i < nrSymbols; i++) { + logVars_.push_back (LogVar (logVarSet_.back() + 1)); + newLvs.push_back (LogVar (logVarSet_.back() + 1)); + logVarSet_.insert (LogVar (logVarSet_.back() + 1)); + } + logVarSet_ -= X; + return newLvs; +} + + + +ConstraintTrees +ConstraintTree::ground (LogVar X) +{ + moveToTop ({X}); + ConstraintTrees cts; + const CTChilds& nodes = root_->childs(); + for (CTChilds::const_iterator it = nodes.begin(); + it != nodes.end(); ++ it) { + CTNode* copy = CTNode::copySubtree (*it); + copy->setSymbol ((*it)->symbol()); + ConstraintTree* newCt = new ConstraintTree (logVars_); + newCt->root()->mergeSubtree (copy); + cts.push_back (newCt); + } + return cts; +} + + + +void +ConstraintTree::copyLogVar (LogVar X_1, LogVar X_2) +{ + moveToBottom ({X_1}); + CTNodes leafs = getNodesAtLevel (logVars_.size()); + for (unsigned i = 0; i < leafs.size(); i++) { + leafs[i]->childs().insert_sorted ( + new CTNode (leafs[i]->symbol(), leafs[i]->level() + 1)); + } + logVars_.push_back (X_2); + logVarSet_.insert (X_2); +} + + + +unsigned +ConstraintTree::countTuples (const CTNode* n) const +{ + if (n->isLeaf()) { + return 1; + } + unsigned sum = 0; + const CTChilds& childs = n->childs(); + for (CTChilds::const_iterator chIt = childs.begin(); + chIt != childs.end(); ++ chIt) { + sum += countTuples (*chIt); + } + return sum; +} + + + +CTNodes +ConstraintTree::getNodesBelow (CTNode* fromHere) const +{ + CTNodes nodes; + queue queue; + queue.push (fromHere); + while (queue.empty() == false) { + CTNode* node = queue.front(); + nodes.push_back (node); + for (CTChilds::const_iterator chIt = node->childs().begin(); + chIt != node->childs().end(); ++ chIt) { + queue.push (*chIt); + } + queue.pop(); + } + return nodes; +} + + + +CTNodes +ConstraintTree::getNodesAtLevel (unsigned level) const +{ + assert (level <= logVars_.size()); + if (level == 0) { + return { root_ }; + } + CTNodes stack; + CTNodes nodes; + stack.push_back (root_); + while (stack.empty() == false) { + CTNode* node = stack.back(); + stack.pop_back(); + if (node->level() + 1 == level) { + nodes.insert (nodes.end(), node->childs().begin(), + node->childs().end()); + } else { + stack.insert (stack.end(), node->childs().begin(), + node->childs().end()); + } + } + return nodes; +} + + + +unsigned +ConstraintTree::nrNodes (const CTNode* n) const +{ + unsigned nr = 0; + if (n->isLeaf() == false) { + for (CTChilds::const_iterator chIt = n->childs().begin(); + chIt != n->childs().end(); ++ chIt) { + nr += nrNodes (*chIt); + } + } + return nr; +} + + + +void +ConstraintTree::appendOnBottom (CTNode* n, const CTChilds& childs) +{ + if (childs.empty()) { + return; + } + CTNodes stack { n }; + while (stack.empty() == false) { + CTNode* node = stack.back(); + stack.pop_back(); + if (node->isLeaf()) { + for (CTChilds::const_iterator chIt = childs.begin(); + chIt != childs.end(); ++ chIt) { + node->mergeSubtree (CTNode::copySubtree (*chIt)); + } + } else { + stack.insert (stack.end(), node->childs().begin(), + node->childs().end()); + } + } +} + + + +void +ConstraintTree::swapLogVar (LogVar X) +{ + int pos = Util::indexOf (logVars_, X); + assert (pos != -1); + const CTNodes& nodes = getNodesAtLevel (pos); + for (CTNodes::const_iterator nodeIt = nodes.begin(); + nodeIt != nodes.end(); ++ nodeIt) { + CTChilds childsCopy = (*nodeIt)->childs(); + (*nodeIt)->removeChilds(); + for (CTChilds::const_iterator ccIt = childsCopy.begin(); + ccIt != childsCopy.end(); ++ ccIt) { + const CTChilds& grandsons = (*ccIt)->childs(); + for (CTChilds::const_iterator gsIt = grandsons.begin(); + gsIt != grandsons.end(); ++ gsIt) { + CTNode* childCopy = new CTNode ( + (*ccIt)->symbol(), (*ccIt)->level() + 1, (*gsIt)->childs()); + (*gsIt)->removeChilds(); + (*gsIt)->childs().insert_sorted (childCopy); + (*gsIt)->setLevel ((*gsIt)->level() - 1); + (*nodeIt)->mergeSubtree ((*gsIt), false); + } + delete (*ccIt); + } + } + std::swap (logVars_[pos], logVars_[pos + 1]); +} + + + +bool +ConstraintTree::join ( + CTNode* currNode, + const Tuple& tuple, + unsigned currIdx, + CTNode* appendNode) +{ + bool tupleFounded = false; + CTChilds::const_iterator it = currNode->findSymbol (tuple[currIdx]); + if (it != currNode->childs().end()) { + if (currIdx == tuple.size() - 1) { + appendOnBottom (*it, appendNode->childs()); + return true; + } else { + tupleFounded = join (*it, tuple, currIdx + 1, appendNode); + } + } + return tupleFounded; +} + + + +void +ConstraintTree::getTuples ( + CTNode* n, + Tuples currTuples, + unsigned stopLevel, + Tuples& tuplesCollected, + CTNodes& continuationNodes) const +{ + if (n->isRoot() == false) { + if (currTuples.size() == 0) { + currTuples.push_back ({ n->symbol()}); + } else { + for (unsigned i = 0; i < currTuples.size(); i++) { + currTuples[i].push_back (n->symbol()); + } + } + if (n->level() == stopLevel) { + for (unsigned i = 0; i < currTuples.size(); i++) { + tuplesCollected.push_back (currTuples[i]); + continuationNodes.push_back (n); + } + return; + } + } + const CTChilds& childs = n->childs(); + for (CTChilds::const_iterator chIt = childs.begin(); + chIt != childs.end(); ++ chIt) { + getTuples (*chIt, currTuples, stopLevel, tuplesCollected, + continuationNodes); + } +} + + + +unsigned +ConstraintTree::size (void) const +{ + return countTuples (root_); +} + + + +unsigned +ConstraintTree::nrSymbols (LogVar X) +{ + moveToTop ({X}); + return root_->childs().size(); +} + + + +vector> +ConstraintTree::countNormalize ( + const CTNode* n, + unsigned stopLevel) +{ + if (n->level() == stopLevel) { + return vector>() = { + make_pair (CTNode::copySubtree (n), countTuples (n)) + }; + } + vector> res; + const CTChilds& childs = n->childs(); + for (CTChilds::const_iterator chIt = childs.begin(); + chIt != childs.end(); ++ chIt) { + const vector>& lowerRes = + countNormalize (*chIt, stopLevel); + for (unsigned j = 0; j < lowerRes.size(); j++) { + CTNode* newNode = new CTNode (*n); + newNode->mergeSubtree (lowerRes[j].first); + res.push_back (make_pair (newNode, lowerRes[j].second)); + } + } + return res; +} + + + +void +ConstraintTree::split ( + CTNode* n1, + CTNode* n2, + CTChilds& commChilds, + CTChilds& exclChilds, + unsigned stopLevel) +{ + CTChilds& childs1 = n1->childs(); + for (CTChilds::const_iterator chIt1 = childs1.begin(); + chIt1 != childs1.end(); ++ chIt1) { + CTChilds::iterator chIt2 = n2->findSymbol ((*chIt1)->symbol()); + if (chIt2 == n2->childs().end()) { + exclChilds.insert_sorted (CTNode::copySubtree (*chIt1)); + } else { + if ((*chIt1)->level() == stopLevel) { + commChilds.insert_sorted (CTNode::copySubtree (*chIt1)); + } else { + CTChilds lowerCommChilds, lowerExclChilds; + split (*chIt1, *chIt2, lowerCommChilds, lowerExclChilds, stopLevel); + if (lowerCommChilds.empty() == false) { + commChilds.insert_sorted (new CTNode (**chIt1, lowerCommChilds)); + } + if (lowerExclChilds.empty() == false) { + exclChilds.insert_sorted (new CTNode (**chIt1, lowerExclChilds)); + } + } + } + } +} + diff --git a/packages/CLPBN/horus/ConstraintTree.h b/packages/CLPBN/horus/ConstraintTree.h new file mode 100644 index 000000000..802422858 --- /dev/null +++ b/packages/CLPBN/horus/ConstraintTree.h @@ -0,0 +1,231 @@ +#ifndef HORUS_CONSTRAINTTREE_H +#define HORUS_CONSTRAINTTREE_H + +#include +#include + +#include +#include + +#include "TinySet.h" +#include "LiftedUtils.h" + +using namespace std; + + +class CTNode; +typedef vector CTNodes; + +class ConstraintTree; +typedef vector ConstraintTrees; + + +class CTNode +{ + public: + + struct CompareSymbol + { + bool operator() (const CTNode* n1, const CTNode* n2) const + { + return n1->symbol() < n2->symbol(); + } + }; + + private: + + typedef TinySet CTChilds_; + + public: + + CTNode (const CTNode& n, const CTChilds_& chs = CTChilds_()) + : symbol_(n.symbol()), childs_(chs), level_(n.level()) { } + + CTNode (Symbol s, unsigned l, const CTChilds_& chs = CTChilds_()) + : symbol_(s), childs_(chs), level_(l) { } + + unsigned level (void) const { return level_; } + + void setLevel (unsigned level) { level_ = level; } + + Symbol symbol (void) const { return symbol_; } + + void setSymbol (const Symbol s) { symbol_ = s; } + + public: + + CTChilds_& childs (void) { return childs_; } + + const CTChilds_& childs (void) const { return childs_; } + + unsigned nrChilds (void) const { return childs_.size(); } + + bool isRoot (void) const { return level_ == 0; } + + bool isLeaf (void) const { return childs_.empty(); } + + CTChilds_::iterator findSymbol (Symbol symb) + { + CTNode tmp (symb, 0); + return childs_.find (&tmp); + } + + void mergeSubtree (CTNode*, bool = true); + + void removeChild (CTNode*); + + void removeChilds (void); + + void removeAndDeleteChild (CTNode*); + + void removeAndDeleteAllChilds (void); + + SymbolSet childSymbols (void) const; + + static CTNode* copySubtree (const CTNode*); + + static void deleteSubtree (CTNode*); + + private: + void updateChildLevels (CTNode*, unsigned); + + Symbol symbol_; + CTChilds_ childs_; + unsigned level_; +}; + +ostream& operator<< (ostream &out, const CTNode&); + + +typedef TinySet CTChilds; + + +class ConstraintTree +{ + public: + ConstraintTree (unsigned); + + ConstraintTree (const LogVars&); + + ConstraintTree (const LogVars&, const Tuples&); + + ConstraintTree (const ConstraintTree&); + + ConstraintTree (const CTChilds& rootChilds, const LogVars& logVars) + : root_(new CTNode (0, 0, rootChilds)), + logVars_(logVars), + logVarSet_(logVars) { } + + ~ConstraintTree (void); + + CTNode* root (void) const { return root_; } + + bool empty (void) const { return root_->childs().empty(); } + + const LogVars& logVars (void) const + { + assert (LogVarSet (logVars_) == logVarSet_); + return logVars_; + } + + const LogVarSet& logVarSet (void) const + { + assert (LogVarSet (logVars_) == logVarSet_); + return logVarSet_; + } + + unsigned nrLogVars (void) const + { + return logVars_.size(); + assert (LogVarSet (logVars_) == logVarSet_); + } + + void addTuple (const Tuple&); + + bool containsTuple (const Tuple&); + + void moveToTop (const LogVars&); + + void moveToBottom (const LogVars&); + + void join (ConstraintTree*, bool oneTwoOne = false); + + unsigned getLevel (LogVar) const; + + void rename (LogVar, LogVar); + + void applySubstitution (const Substitution&); + + void project (const LogVarSet&); + + void remove (const LogVarSet&); + + bool isSingleton (LogVar); + + LogVarSet singletons (void); + + TupleSet tupleSet (unsigned = 0) const; + + TupleSet tupleSet (const LogVars&); + + unsigned size (void) const; + + unsigned nrSymbols (LogVar); + + void exportToGraphViz (const char*, bool = false) const; + + bool isCountNormalized (const LogVarSet&); + + unsigned getConditionalCount (const LogVarSet&); + + TinySet getConditionalCounts (const LogVarSet&); + + bool isCartesianProduct (const LogVarSet&); + + std::pair split (const Tuple&); + + std::pair split ( + const LogVars&, ConstraintTree*, const LogVars&); + + ConstraintTrees countNormalize (const LogVarSet&); + + ConstraintTrees jointCountNormalize ( + ConstraintTree*, ConstraintTree*, LogVar, LogVar, LogVar); + + LogVars expand (LogVar); + + ConstraintTrees ground (LogVar); + + void copyLogVar (LogVar,LogVar); + + private: + unsigned countTuples (const CTNode*) const; + + CTNodes getNodesBelow (CTNode*) const; + + CTNodes getNodesAtLevel (unsigned) const; + + unsigned nrNodes (const CTNode* n) const; + + void appendOnBottom (CTNode* n1, const CTChilds&); + + void swapLogVar (LogVar); + + bool join (CTNode*, const Tuple&, unsigned, CTNode*); + + void getTuples (CTNode*, Tuples, unsigned, Tuples&, CTNodes&) const; + + vector> countNormalize ( + const CTNode*, unsigned); + + static void split ( + CTNode*, CTNode*, CTChilds&, CTChilds&, unsigned); + + CTNode* root_; + LogVars logVars_; + LogVarSet logVarSet_; +}; + + +#endif // HORUS_CONSTRAINTTREE_H + diff --git a/packages/CLPBN/horus/ElimGraph.cpp b/packages/CLPBN/horus/ElimGraph.cpp new file mode 100644 index 000000000..155a74eb3 --- /dev/null +++ b/packages/CLPBN/horus/ElimGraph.cpp @@ -0,0 +1,222 @@ +#include + +#include + +#include "ElimGraph.h" + +ElimHeuristic ElimGraph::elimHeuristic = MIN_NEIGHBORS; + + +ElimGraph::ElimGraph (const vector& factors) +{ + for (unsigned i = 0; i < factors.size(); i++) { + if (factors[i] == 0) { // if contained just one var with evidence + continue; + } + const VarIds& vids = factors[i]->arguments(); + for (unsigned j = 0; j < vids.size() - 1; j++) { + EgNode* n1 = getEgNode (vids[j]); + if (n1 == 0) { + n1 = new EgNode (vids[j], factors[i]->range (j)); + addNode (n1); + } + for (unsigned k = j + 1; k < vids.size(); k++) { + EgNode* n2 = getEgNode (vids[k]); + if (n2 == 0) { + n2 = new EgNode (vids[k], factors[i]->range (k)); + addNode (n2); + } + if (neighbors (n1, n2) == false) { + addEdge (n1, n2); + } + } + } + if (vids.size() == 1) { + if (getEgNode (vids[0]) == 0) { + addNode (new EgNode (vids[0], factors[i]->range (0))); + } + } + } +} + + + +ElimGraph::~ElimGraph (void) +{ + for (unsigned i = 0; i < nodes_.size(); i++) { + delete nodes_[i]; + } +} + + + +VarIds +ElimGraph::getEliminatingOrder (const VarIds& exclude) +{ + VarIds elimOrder; + unmarked_.reserve (nodes_.size()); + for (unsigned i = 0; i < nodes_.size(); i++) { + if (Util::contains (exclude, nodes_[i]->varId()) == false) { + unmarked_.insert (nodes_[i]); + } + } + unsigned nVarsToEliminate = nodes_.size() - exclude.size(); + for (unsigned i = 0; i < nVarsToEliminate; i++) { + EgNode* node = getLowestCostNode(); + unmarked_.remove (node); + const EGNeighs& neighs = node->neighbors(); + for (unsigned j = 0; j < neighs.size(); j++) { + neighs[j]->removeNeighbor (node); + } + elimOrder.push_back (node->varId()); + connectAllNeighbors (node); + } + return elimOrder; +} + + + +void +ElimGraph::print (void) const +{ + for (unsigned i = 0; i < nodes_.size(); i++) { + cout << "node " << nodes_[i]->label() << " neighs:" ; + EGNeighs neighs = nodes_[i]->neighbors(); + for (unsigned j = 0; j < neighs.size(); j++) { + cout << " " << neighs[j]->label(); + } + cout << endl; + } +} + + + +void +ElimGraph::exportToGraphViz ( + const char* fileName, + bool showNeighborless, + const VarIds& highlightVarIds) const +{ + ofstream out (fileName); + if (!out.is_open()) { + cerr << "error: cannot open file to write at " ; + cerr << "Markov::exportToDotFile()" << endl; + abort(); + } + + out << "strict graph {" << endl; + + for (unsigned i = 0; i < nodes_.size(); i++) { + if (showNeighborless || nodes_[i]->neighbors().size() != 0) { + out << '"' << nodes_[i]->label() << '"' << endl; + } + } + + for (unsigned i = 0; i < highlightVarIds.size(); i++) { + EgNode* node =getEgNode (highlightVarIds[i]); + if (node) { + out << '"' << node->label() << '"' ; + out << " [shape=box3d]" << endl; + } else { + cout << "error: invalid variable id: " << highlightVarIds[i] << endl; + abort(); + } + } + + for (unsigned i = 0; i < nodes_.size(); i++) { + EGNeighs neighs = nodes_[i]->neighbors(); + for (unsigned j = 0; j < neighs.size(); j++) { + out << '"' << nodes_[i]->label() << '"' << " -- " ; + out << '"' << neighs[j]->label() << '"' << endl; + } + } + + out << "}" << endl; + out.close(); +} + + + +VarIds +ElimGraph::getEliminationOrder ( + const vector factors, + VarIds excludedVids) +{ + ElimGraph graph (factors); + // graph.print(); + // graph.exportToGraphViz ("_egg.dot"); + return graph.getEliminatingOrder (excludedVids); +} + + + +void +ElimGraph::addNode (EgNode* n) +{ + nodes_.push_back (n); + n->setIndex (nodes_.size() - 1); + varMap_.insert (make_pair (n->varId(), n)); +} + + + +EgNode* +ElimGraph::getEgNode (VarId vid) const +{ + unordered_map::const_iterator it; + it = varMap_.find (vid); + return (it != varMap_.end()) ? it->second : 0; +} + + + +EgNode* +ElimGraph::getLowestCostNode (void) const +{ + EgNode* bestNode = 0; + unsigned minCost = std::numeric_limits::max(); + unsigned cost = 0; + EGNeighs::const_iterator it; + switch (elimHeuristic) { + case MIN_NEIGHBORS: { + for (it = unmarked_.begin(); it != unmarked_.end(); ++ it) { + cost = getNeighborsCost (*it); + if (cost < minCost) { + bestNode = *it; + minCost = cost; + } + }} + break; + case MIN_WEIGHT: + //cost = getWeightCost (unmarked_[i]); + break; + case MIN_FILL: + //cost = getFillCost (unmarked_[i]); + break; + case WEIGHTED_MIN_FILL: + //cost = getWeightedFillCost (unmarked_[i]); + break; + default: + assert (false); + } + assert (bestNode); + return bestNode; +} + + + +void +ElimGraph::connectAllNeighbors (const EgNode* n) +{ + const EGNeighs& neighs = n->neighbors(); + if (neighs.size() > 0) { + for (unsigned i = 0; i < neighs.size() - 1; i++) { + for (unsigned j = i+1; j < neighs.size(); j++) { + if ( ! neighbors (neighs[i], neighs[j])) { + addEdge (neighs[i], neighs[j]); + } + } + } + } +} + diff --git a/packages/CLPBN/horus/ElimGraph.h b/packages/CLPBN/horus/ElimGraph.h new file mode 100644 index 000000000..5dca758da --- /dev/null +++ b/packages/CLPBN/horus/ElimGraph.h @@ -0,0 +1,138 @@ +#ifndef HORUS_ELIMGRAPH_H +#define HORUS_ELIMGRAPH_H + +#include "unordered_map" + +#include "FactorGraph.h" +#include "TinySet.h" +#include "Horus.h" + + +using namespace std; + +enum ElimHeuristic +{ + MIN_NEIGHBORS, + MIN_WEIGHT, + MIN_FILL, + WEIGHTED_MIN_FILL +}; + + +class EgNode; + +typedef TinySet EGNeighs; + + +class EgNode : public Var +{ + public: + EgNode (VarId vid, unsigned range) : Var (vid, range) { } + + void addNeighbor (EgNode* n) { neighs_.insert (n); } + + void removeNeighbor (EgNode* n) { neighs_.remove (n); } + + bool isNeighbor (EgNode* n) const { return neighs_.contains (n); } + + const EGNeighs& neighbors (void) const { return neighs_; } + + private: + EGNeighs neighs_; +}; + + +class ElimGraph +{ + public: + ElimGraph (const vector&); // TODO + + ~ElimGraph (void); + + VarIds getEliminatingOrder (const VarIds&); + + void print (void) const; + + void exportToGraphViz (const char*, bool = true, + const VarIds& = VarIds()) const; + + static VarIds getEliminationOrder (const vector, VarIds); + + static ElimHeuristic elimHeuristic; + + private: + + void addEdge (EgNode* n1, EgNode* n2) + { + assert (n1 != n2); + n1->addNeighbor (n2); + n2->addNeighbor (n1); + } + + unsigned getNeighborsCost (const EgNode* n) const + { + return n->neighbors().size(); + } + + unsigned getWeightCost (const EgNode* n) const + { + unsigned cost = 1; + const EGNeighs& neighs = n->neighbors(); + for (unsigned i = 0; i < neighs.size(); i++) { + cost *= neighs[i]->range(); + } + return cost; + } + + unsigned getFillCost (const EgNode* n) const + { + unsigned cost = 0; + const EGNeighs& neighs = n->neighbors(); + if (neighs.size() > 0) { + for (unsigned i = 0; i < neighs.size() - 1; i++) { + for (unsigned j = i + 1; j < neighs.size(); j++) { + if ( ! neighbors (neighs[i], neighs[j])) { + cost ++; + } + } + } + } + return cost; + } + + unsigned getWeightedFillCost (const EgNode* n) const + { + unsigned cost = 0; + const EGNeighs& neighs = n->neighbors(); + if (neighs.size() > 0) { + for (unsigned i = 0; i < neighs.size() - 1; i++) { + for (unsigned j = i+1; j < neighs.size(); j++) { + if ( ! neighbors (neighs[i], neighs[j])) { + cost += neighs[i]->range() * neighs[j]->range(); + } + } + } + } + return cost; + } + + bool neighbors (EgNode* n1, EgNode* n2) const + { + return n1->isNeighbor (n2); + } + + void addNode (EgNode*); + + EgNode* getEgNode (VarId) const; + + EgNode* getLowestCostNode (void) const; + + void connectAllNeighbors (const EgNode*); + + vector nodes_; + TinySet unmarked_; + unordered_map varMap_; +}; + +#endif // HORUS_ELIMGRAPH_H + diff --git a/packages/CLPBN/horus/Factor.cpp b/packages/CLPBN/horus/Factor.cpp new file mode 100644 index 000000000..cf1119d92 --- /dev/null +++ b/packages/CLPBN/horus/Factor.cpp @@ -0,0 +1,288 @@ +#include +#include + +#include + +#include +#include + +#include "Factor.h" +#include "Indexer.h" + + +Factor::Factor (const Factor& g) +{ + copyFromFactor (g); +} + + + +Factor::Factor ( + const VarIds& vids, + const Ranges& ranges, + const Params& params, + unsigned distId) +{ + args_ = vids; + ranges_ = ranges; + params_ = params; + distId_ = distId; + assert (params_.size() == Util::expectedSize (ranges_)); +} + + + +Factor::Factor ( + const Vars& vars, + const Params& params, + unsigned distId) +{ + for (unsigned i = 0; i < vars.size(); i++) { + args_.push_back (vars[i]->varId()); + ranges_.push_back (vars[i]->range()); + } + params_ = params; + distId_ = distId; + assert (params_.size() == Util::expectedSize (ranges_)); +} + + + +void +Factor::sumOut (VarId vid) +{ + int idx = indexOf (vid); + assert (idx != -1); + if (vid == args_.back()) { + sumOutLastVariable(); // optimization + return; + } + if (vid == args_.front()) { + sumOutFirstVariable(); // optimization + return; + } + sumOutIndex (idx); +} + + + +void +Factor::sumOutAllExcept (VarId vid) +{ + assert (indexOf (vid) != -1); + while (args_.back() != vid) { + sumOutLastVariable(); + } + while (args_.front() != vid) { + sumOutFirstVariable(); + } +} + + + +void +Factor::sumOutAllExcept (const VarIds& vids) +{ + for (int i = 0; i < (int)args_.size(); i++) { + if (Util::contains (vids, args_[i]) == false) { + sumOut (args_[i]); + i --; + } + } +} + + + +void +Factor::sumOutIndex (unsigned idx) +{ + assert (idx < args_.size()); + // number of parameters separating a different state of `var', + // with the states of the remaining variables fixed + unsigned varOffset = 1; + + // number of parameters separating a different state of the variable + // on the left of `var', with the states of the remaining vars fixed + unsigned leftVarOffset = 1; + + for (int i = args_.size() - 1; i > (int)idx; i--) { + varOffset *= ranges_[i]; + leftVarOffset *= ranges_[i]; + } + leftVarOffset *= ranges_[idx]; + + unsigned offset = 0; + unsigned count1 = 0; + unsigned count2 = 0; + unsigned newpsSize = params_.size() / ranges_[idx]; + + Params newps; + newps.reserve (newpsSize); + + while (newps.size() < newpsSize) { + double sum = LogAware::addIdenty(); + for (unsigned i = 0; i < ranges_[idx]; i++) { + if (Globals::logDomain) { + sum = Util::logSum (sum, params_[offset]); + } else { + sum += params_[offset]; + } + offset += varOffset; + } + newps.push_back (sum); + count1 ++; + if (idx == args_.size() - 1) { + offset = count1 * ranges_[idx]; + } else { + if (((offset - varOffset + 1) % leftVarOffset) == 0) { + count1 = 0; + count2 ++; + } + offset = (leftVarOffset * count2) + count1; + } + } + args_.erase (args_.begin() + idx); + ranges_.erase (ranges_.begin() + idx); + params_ = newps; +} + + + +void +Factor::sumOutAllExceptIndex (unsigned idx) +{ + assert (idx < args_.size()); + while (args_.size() > idx + 1) { + sumOutLastVariable(); + } + for (unsigned i = 0; i < idx; i++) { + sumOutFirstVariable(); + } +} + + + +void +Factor::sumOutFirstVariable (void) +{ + assert (args_.size() > 1); + unsigned range = ranges_.front(); + unsigned sep = params_.size() / range; + if (Globals::logDomain) { + for (unsigned i = sep; i < params_.size(); i++) { + params_[i % sep] = Util::logSum (params_[i % sep], params_[i]); + } + } else { + for (unsigned i = sep; i < params_.size(); i++) { + params_[i % sep] += params_[i]; + } + } + params_.resize (sep); + args_.erase (args_.begin()); + ranges_.erase (ranges_.begin()); +} + + + +void +Factor::sumOutLastVariable (void) +{ + assert (args_.size() > 1); + unsigned range = ranges_.back(); + unsigned idx1 = 0; + unsigned idx2 = 0; + if (Globals::logDomain) { + while (idx1 < params_.size()) { + params_[idx2] = params_[idx1]; + idx1 ++; + for (unsigned j = 1; j < range; j++) { + params_[idx2] = Util::logSum (params_[idx2], params_[idx1]); + idx1 ++; + } + idx2 ++; + } + } else { + while (idx1 < params_.size()) { + params_[idx2] = params_[idx1]; + idx1 ++; + for (unsigned j = 1; j < range; j++) { + params_[idx2] += params_[idx1]; + idx1 ++; + } + idx2 ++; + } + } + params_.resize (idx2); + args_.pop_back(); + ranges_.pop_back(); +} + + + +void +Factor::multiply (Factor& g) +{ + if (args_.size() == 0) { + copyFromFactor (g); + return; + } + TFactor::multiply (g); +} + + + +void +Factor::reorderAccordingVarIds (void) +{ + VarIds sortedVarIds = args_; + sort (sortedVarIds.begin(), sortedVarIds.end()); + reorderArguments (sortedVarIds); +} + + + +string +Factor::getLabel (void) const +{ + stringstream ss; + ss << "f(" ; + for (unsigned i = 0; i < args_.size(); i++) { + if (i != 0) ss << "," ; + ss << Var (args_[i], ranges_[i]).label(); + } + ss << ")" ; + return ss.str(); +} + + + +void +Factor::print (void) const +{ + Vars vars; + for (unsigned i = 0; i < args_.size(); i++) { + vars.push_back (new Var (args_[i], ranges_[i])); + } + vector jointStrings = Util::getStateLines (vars); + for (unsigned i = 0; i < params_.size(); i++) { + // cout << "[" << distId_ << "] " ; + cout << "f(" << jointStrings[i] << ")" ; + cout << " = " << params_[i] << endl; + } + cout << endl; + for (unsigned i = 0; i < vars.size(); i++) { + delete vars[i]; + } +} + + + +void +Factor::copyFromFactor (const Factor& g) +{ + args_ = g.arguments(); + ranges_ = g.ranges(); + params_ = g.params(); + distId_ = g.distId(); +} + diff --git a/packages/CLPBN/horus/Factor.h b/packages/CLPBN/horus/Factor.h new file mode 100644 index 000000000..aa04fe32f --- /dev/null +++ b/packages/CLPBN/horus/Factor.h @@ -0,0 +1,305 @@ +#ifndef HORUS_FACTOR_H +#define HORUS_FACTOR_H + +#include + +#include "Var.h" +#include "Indexer.h" +#include "Util.h" + + +using namespace std; + + +template +class TFactor +{ + public: + const vector& arguments (void) const { return args_; } + + vector& arguments (void) { return args_; } + + const Ranges& ranges (void) const { return ranges_; } + + const Params& params (void) const { return params_; } + + Params& params (void) { return params_; } + + unsigned nrArguments (void) const { return args_.size(); } + + unsigned size (void) const { return params_.size(); } + + unsigned distId (void) const { return distId_; } + + void setDistId (unsigned id) { distId_ = id; } + + void normalize (void) { LogAware::normalize (params_); } + + void setParams (const Params& newParams) + { + params_ = newParams; + assert (params_.size() == Util::expectedSize (ranges_)); + } + + int indexOf (const T& t) const + { + int idx = -1; + for (unsigned i = 0; i < args_.size(); i++) { + if (args_[i] == t) { + idx = i; + break; + } + } + return idx; + } + + const T& argument (unsigned idx) const + { + assert (idx < args_.size()); + return args_[idx]; + } + + T& argument (unsigned idx) + { + assert (idx < args_.size()); + return args_[idx]; + } + + unsigned range (unsigned idx) const + { + assert (idx < ranges_.size()); + return ranges_[idx]; + } + + void multiply (TFactor& g) + { + const vector& g_args = g.arguments(); + const Ranges& g_ranges = g.ranges(); + const Params& g_params = g.params(); + if (args_ == g_args) { + // optimization: if the factors contain the same set of args, + // we can do a 1 to 1 operation on the parameters + if (Globals::logDomain) { + Util::add (params_, g_params); + } else { + Util::multiply (params_, g_params); + } + } else { + bool sharedArgs = false; + vector gvarpos; + for (unsigned i = 0; i < g_args.size(); i++) { + int idx = indexOf (g_args[i]); + if (idx == -1) { + ullong newSize = params_.size() * g_ranges[i]; + if (newSize > params_.max_size()) { + cerr << "error: an overflow occurred on factor multiplication" ; + cerr << endl; + abort(); + } + insertArgument (g_args[i], g_ranges[i]); + gvarpos.push_back (args_.size() - 1); + } else { + sharedArgs = true; + gvarpos.push_back (idx); + } + } + if (sharedArgs == false) { + // optimization: if the original factors doesn't have common args, + // we don't need to marry the states of the common args + unsigned count = 0; + for (unsigned i = 0; i < params_.size(); i++) { + if (Globals::logDomain) { + params_[i] += g_params[count]; + } else { + params_[i] *= g_params[count]; + } + count ++; + if (count >= g_params.size()) { + count = 0; + } + } + } else { + StatesIndexer indexer (ranges_, false); + while (indexer.valid()) { + unsigned g_li = 0; + unsigned prod = 1; + for (int j = gvarpos.size() - 1; j >= 0; j--) { + g_li += indexer[gvarpos[j]] * prod; + prod *= g_ranges[j]; + } + if (Globals::logDomain) { + params_[indexer] += g_params[g_li]; + } else { + params_[indexer] *= g_params[g_li]; + } + ++ indexer; + } + } + } + } + + void absorveEvidence (const T& arg, unsigned evidence) + { + int idx = indexOf (arg); + assert (idx != -1); + assert (evidence < ranges_[idx]); + Params copy = params_; + params_.clear(); + params_.reserve (copy.size() / ranges_[idx]); + StatesIndexer indexer (ranges_); + for (unsigned i = 0; i < evidence; i++) { + indexer.increment (idx); + } + while (indexer.valid()) { + params_.push_back (copy[indexer]); + indexer.incrementExcluding (idx); + } + args_.erase (args_.begin() + idx); + ranges_.erase (ranges_.begin() + idx); + } + + void reorderArguments (const vector newArgs) + { + assert (newArgs.size() == args_.size()); + if (newArgs == args_) { + return; // already in the wanted order + } + Ranges newRanges; + vector positions; + for (unsigned i = 0; i < newArgs.size(); i++) { + unsigned idx = indexOf (newArgs[i]); + newRanges.push_back (ranges_[idx]); + positions.push_back (idx); + } + unsigned N = ranges_.size(); + Params newParams (params_.size()); + for (unsigned i = 0; i < params_.size(); i++) { + unsigned li = i; + // calculate vector index corresponding to linear index + vector vi (N); + for (int k = N-1; k >= 0; k--) { + vi[k] = li % ranges_[k]; + li /= ranges_[k]; + } + // convert permuted vector index to corresponding linear index + unsigned prod = 1; + unsigned new_li = 0; + for (int k = N - 1; k >= 0; k--) { + new_li += vi[positions[k]] * prod; + prod *= ranges_[positions[k]]; + } + newParams[new_li] = params_[i]; + } + args_ = newArgs; + ranges_ = newRanges; + params_ = newParams; + } + + bool contains (const T& arg) const + { + return Util::contains (args_, arg); + } + + bool contains (const vector& args) const + { + for (unsigned i = 0; i < args_.size(); i++) { + if (contains (args[i]) == false) { + return false; + } + } + return true; + } + + double& operator[] (psize_t idx) + { + assert (idx < params_.size()); + return params_[idx]; + } + + + protected: + vector args_; + Ranges ranges_; + Params params_; + unsigned distId_; + + private: + void insertArgument (const T& arg, unsigned range) + { + assert (indexOf (arg) == -1); + Params copy = params_; + params_.clear(); + params_.reserve (copy.size() * range); + for (unsigned i = 0; i < copy.size(); i++) { + for (unsigned reps = 0; reps < range; reps++) { + params_.push_back (copy[i]); + } + } + args_.push_back (arg); + ranges_.push_back (range); + } + + void insertArguments (const vector& args, const Ranges& ranges) + { + Params copy = params_; + unsigned nrStates = 1; + for (unsigned i = 0; i < args.size(); i++) { + assert (indexOf (args[i]) == -1); + args_.push_back (args[i]); + ranges_.push_back (ranges[i]); + nrStates *= ranges[i]; + } + params_.clear(); + params_.reserve (copy.size() * nrStates); + for (unsigned i = 0; i < copy.size(); i++) { + for (unsigned reps = 0; reps < nrStates; reps++) { + params_.push_back (copy[i]); + } + } + } +}; + + + +class Factor : public TFactor +{ + public: + Factor (void) { } + + Factor (const Factor&); + + Factor (const VarIds&, const Ranges&, const Params&, + unsigned = Util::maxUnsigned()); + + Factor (const Vars&, const Params&, + unsigned = Util::maxUnsigned()); + + void sumOut (VarId); + + void sumOutAllExcept (VarId); + + void sumOutAllExcept (const VarIds&); + + void sumOutIndex (unsigned idx); + + void sumOutAllExceptIndex (unsigned idx); + + void sumOutFirstVariable (void); + + void sumOutLastVariable (void); + + void multiply (Factor&); + + void reorderAccordingVarIds (void); + + string getLabel (void) const; + + void print (void) const; + + private: + void copyFromFactor (const Factor& f); + +}; + +#endif // HORUS_FACTOR_H + diff --git a/packages/CLPBN/horus/FactorGraph.cpp b/packages/CLPBN/horus/FactorGraph.cpp new file mode 100644 index 000000000..314489652 --- /dev/null +++ b/packages/CLPBN/horus/FactorGraph.cpp @@ -0,0 +1,465 @@ +#include +#include +#include + +#include +#include +#include + +#include "FactorGraph.h" +#include "Factor.h" +#include "BayesNet.h" +#include "BayesBall.h" +#include "Util.h" + + +FactorGraph::FactorGraph (const FactorGraph& fg) +{ + const VarNodes& varNodes = fg.varNodes(); + for (unsigned i = 0; i < varNodes.size(); i++) { + addVarNode (new VarNode (varNodes[i])); + } + const FacNodes& facNodes = fg.facNodes(); + for (unsigned i = 0; i < facNodes.size(); i++) { + FacNode* facNode = new FacNode (facNodes[i]->factor()); + addFacNode (facNode); + const VarNodes& neighs = facNodes[i]->neighbors(); + for (unsigned j = 0; j < neighs.size(); j++) { + addEdge (varNodes_[neighs[j]->getIndex()], facNode); + } + } + fromBayesNet_ = fg.isFromBayesNetwork(); +} + + + +void +FactorGraph::readFromUaiFormat (const char* fileName) +{ + std::ifstream is (fileName); + if (!is.is_open()) { + cerr << "error: cannot read from file " << fileName << endl; + abort(); + } + ignoreLines (is); + string line; + getline (is, line); + if (line != "MARKOV") { + cerr << "error: the network must be a MARKOV network " << endl; + abort(); + } + // read the number of vars + ignoreLines (is); + unsigned nrVars; + is >> nrVars; + // read the range of each var + ignoreLines (is); + Ranges ranges (nrVars); + for (unsigned i = 0; i < nrVars; i++) { + is >> ranges[i]; + } + unsigned nrFactors; + unsigned nrArgs; + unsigned vid; + is >> nrFactors; + vector factorVarIds; + vector factorRanges; + for (unsigned i = 0; i < nrFactors; i++) { + ignoreLines (is); + is >> nrArgs; + factorVarIds.push_back ({ }); + factorRanges.push_back ({ }); + for (unsigned j = 0; j < nrArgs; j++) { + is >> vid; + if (vid >= ranges.size()) { + cerr << "error: invalid variable identifier `" << vid << "'" << endl; + cerr << "identifiers must be between 0 and " << ranges.size() - 1 ; + cerr << endl; + abort(); + } + factorVarIds.back().push_back (vid); + factorRanges.back().push_back (ranges[vid]); + } + } + // read the parameters + unsigned nrParams; + for (unsigned i = 0; i < nrFactors; i++) { + ignoreLines (is); + is >> nrParams; + if (nrParams != Util::expectedSize (factorRanges[i])) { + cerr << "error: invalid number of parameters for factor nº " << i ; + cerr << ", expected: " << Util::expectedSize (factorRanges[i]); + cerr << ", given: " << nrParams << endl; + abort(); + } + Params params (nrParams); + for (unsigned j = 0; j < nrParams; j++) { + is >> params[j]; + } + if (Globals::logDomain) { + Util::toLog (params); + } + addFactor (Factor (factorVarIds[i], factorRanges[i], params)); + } + is.close(); +} + + + +void +FactorGraph::readFromLibDaiFormat (const char* fileName) +{ + std::ifstream is (fileName); + if (!is.is_open()) { + cerr << "error: cannot read from file " << fileName << endl; + abort(); + } + ignoreLines (is); + unsigned nrFactors; + unsigned nrArgs; + VarId vid; + is >> nrFactors; + for (unsigned i = 0; i < nrFactors; i++) { + ignoreLines (is); + // read the factor arguments + is >> nrArgs; + VarIds vids; + for (unsigned j = 0; j < nrArgs; j++) { + ignoreLines (is); + is >> vid; + vids.push_back (vid); + } + // read ranges + Ranges ranges (nrArgs); + for (unsigned j = 0; j < nrArgs; j++) { + ignoreLines (is); + is >> ranges[j]; + VarNode* var = getVarNode (vids[j]); + if (var != 0 && ranges[j] != var->range()) { + cerr << "error: variable `" << vids[j] << "' appears in two or " ; + cerr << "more factors with a different range" << endl; + } + } + // read parameters + ignoreLines (is); + unsigned nNonzeros; + is >> nNonzeros; + Params params (Util::expectedSize (ranges), 0); + for (unsigned j = 0; j < nNonzeros; j++) { + ignoreLines (is); + unsigned index; + is >> index; + ignoreLines (is); + double val; + is >> val; + params[index] = val; + } + if (Globals::logDomain) { + Util::toLog (params); + } + reverse (vids.begin(), vids.end()); + Factor f (vids, ranges, params); + reverse (vids.begin(), vids.end()); + f.reorderArguments (vids); + addFactor (f); + } + is.close(); +} + + + +FactorGraph::~FactorGraph (void) +{ + for (unsigned i = 0; i < varNodes_.size(); i++) { + delete varNodes_[i]; + } + for (unsigned i = 0; i < facNodes_.size(); i++) { + delete facNodes_[i]; + } +} + + + +void +FactorGraph::addFactor (const Factor& factor) +{ + FacNode* fn = new FacNode (factor); + addFacNode (fn); + const VarIds& vids = fn->factor().arguments(); + for (unsigned i = 0; i < vids.size(); i++) { + VarMap::const_iterator it = varMap_.find (vids[i]); + if (it != varMap_.end()) { + addEdge (it->second, fn); + } else { + VarNode* vn = new VarNode (vids[i], fn->factor().range (i)); + addVarNode (vn); + addEdge (vn, fn); + } + } +} + + + +void +FactorGraph::addVarNode (VarNode* vn) +{ + varNodes_.push_back (vn); + vn->setIndex (varNodes_.size() - 1); + varMap_.insert (make_pair (vn->varId(), vn)); +} + + + +void +FactorGraph::addFacNode (FacNode* fn) +{ + facNodes_.push_back (fn); + fn->setIndex (facNodes_.size() - 1); +} + + + +void +FactorGraph::addEdge (VarNode* vn, FacNode* fn) +{ + vn->addNeighbor (fn); + fn->addNeighbor (vn); +} + + + +bool +FactorGraph::isTree (void) const +{ + return !containsCycle(); +} + + + +DAGraph& +FactorGraph::getStructure (void) +{ + assert (fromBayesNet_); + if (structure_.empty()) { + for (unsigned i = 0; i < varNodes_.size(); i++) { + structure_.addNode (new DAGraphNode (varNodes_[i])); + } + for (unsigned i = 0; i < facNodes_.size(); i++) { + const VarIds& vids = facNodes_[i]->factor().arguments(); + for (unsigned j = 1; j < vids.size(); j++) { + structure_.addEdge (vids[j], vids[0]); + } + } + } + return structure_; +} + + + +void +FactorGraph::print (void) const +{ + for (unsigned i = 0; i < varNodes_.size(); i++) { + cout << "var id = " << varNodes_[i]->varId() << endl; + cout << "label = " << varNodes_[i]->label() << endl; + cout << "range = " << varNodes_[i]->range() << endl; + cout << "evidence = " << varNodes_[i]->getEvidence() << endl; + cout << "factors = " ; + for (unsigned j = 0; j < varNodes_[i]->neighbors().size(); j++) { + cout << varNodes_[i]->neighbors()[j]->getLabel() << " " ; + } + cout << endl << endl; + } + for (unsigned i = 0; i < facNodes_.size(); i++) { + facNodes_[i]->factor().print(); + } +} + + + +void +FactorGraph::exportToGraphViz (const char* fileName) const +{ + ofstream out (fileName); + if (!out.is_open()) { + cerr << "error: cannot open file to write at " ; + cerr << "FactorGraph::exportToDotFile()" << endl; + abort(); + } + out << "graph \"" << fileName << "\" {" << endl; + for (unsigned i = 0; i < varNodes_.size(); i++) { + if (varNodes_[i]->hasEvidence()) { + out << '"' << varNodes_[i]->label() << '"' ; + out << " [style=filled, fillcolor=yellow]" << endl; + } + } + for (unsigned i = 0; i < facNodes_.size(); i++) { + out << '"' << facNodes_[i]->getLabel() << '"' ; + out << " [label=\"" << facNodes_[i]->getLabel(); + out << "\"" << ", shape=box]" << endl; + } + for (unsigned i = 0; i < facNodes_.size(); i++) { + const VarNodes& myVars = facNodes_[i]->neighbors(); + for (unsigned j = 0; j < myVars.size(); j++) { + out << '"' << facNodes_[i]->getLabel() << '"' ; + out << " -- " ; + out << '"' << myVars[j]->label() << '"' << endl; + } + } + out << "}" << endl; + out.close(); +} + + + +void +FactorGraph::exportToUaiFormat (const char* fileName) const +{ + ofstream out (fileName); + if (!out.is_open()) { + cerr << "error: cannot open file " << fileName << endl; + abort(); + } + out << "MARKOV" << endl; + out << varNodes_.size() << endl; + for (unsigned i = 0; i < varNodes_.size(); i++) { + out << varNodes_[i]->range() << " " ; + } + out << endl; + out << facNodes_.size() << endl; + for (unsigned i = 0; i < facNodes_.size(); i++) { + const VarNodes& factorVars = facNodes_[i]->neighbors(); + out << factorVars.size(); + for (unsigned j = 0; j < factorVars.size(); j++) { + out << " " << factorVars[j]->getIndex(); + } + out << endl; + } + for (unsigned i = 0; i < facNodes_.size(); i++) { + Params params = facNodes_[i]->factor().params(); + if (Globals::logDomain) { + Util::fromLog (params); + } + out << endl << params.size() << endl << " " ; + for (unsigned j = 0; j < params.size(); j++) { + out << params[j] << " " ; + } + out << endl; + } + out.close(); +} + + + +void +FactorGraph::exportToLibDaiFormat (const char* fileName) const +{ + ofstream out (fileName); + if (!out.is_open()) { + cerr << "error: cannot open file " << fileName << endl; + abort(); + } + out << facNodes_.size() << endl << endl; + for (unsigned i = 0; i < facNodes_.size(); i++) { + const VarNodes& factorVars = facNodes_[i]->neighbors(); + out << factorVars.size() << endl; + for (int j = factorVars.size() - 1; j >= 0; j--) { + out << factorVars[j]->varId() << " " ; + } + out << endl; + for (unsigned j = 0; j < factorVars.size(); j++) { + out << factorVars[j]->range() << " " ; + } + out << endl; + Params params = facNodes_[i]->factor().params(); + if (Globals::logDomain) { + Util::fromLog (params); + } + out << params.size() << endl; + for (unsigned j = 0; j < params.size(); j++) { + out << j << " " << params[j] << endl; + } + out << endl; + } + out.close(); +} + + + +void +FactorGraph::ignoreLines (std::ifstream& is) const +{ + string ignoreStr; + while (is.peek() == '#' || is.peek() == '\n') { + getline (is, ignoreStr); + } +} + + + +bool +FactorGraph::containsCycle (void) const +{ + vector visitedVars (varNodes_.size(), false); + vector visitedFactors (facNodes_.size(), false); + for (unsigned i = 0; i < varNodes_.size(); i++) { + int v = varNodes_[i]->getIndex(); + if (!visitedVars[v]) { + if (containsCycle (varNodes_[i], 0, visitedVars, visitedFactors)) { + return true; + } + } + } + return false; +} + + + +bool +FactorGraph::containsCycle ( + const VarNode* v, + const FacNode* p, + vector& visitedVars, + vector& visitedFactors) const +{ + visitedVars[v->getIndex()] = true; + const FacNodes& adjacencies = v->neighbors(); + for (unsigned i = 0; i < adjacencies.size(); i++) { + int w = adjacencies[i]->getIndex(); + if (!visitedFactors[w]) { + if (containsCycle (adjacencies[i], v, visitedVars, visitedFactors)) { + return true; + } + } + else if (visitedFactors[w] && adjacencies[i] != p) { + return true; + } + } + return false; // no cycle detected in this component +} + + + +bool +FactorGraph::containsCycle ( + const FacNode* v, + const VarNode* p, + vector& visitedVars, + vector& visitedFactors) const +{ + visitedFactors[v->getIndex()] = true; + const VarNodes& adjacencies = v->neighbors(); + for (unsigned i = 0; i < adjacencies.size(); i++) { + int w = adjacencies[i]->getIndex(); + if (!visitedVars[w]) { + if (containsCycle (adjacencies[i], v, visitedVars, visitedFactors)) { + return true; + } + } + else if (visitedVars[w] && adjacencies[i] != p) { + return true; + } + } + return false; // no cycle detected in this component +} + diff --git a/packages/CLPBN/horus/FactorGraph.h b/packages/CLPBN/horus/FactorGraph.h new file mode 100644 index 000000000..ab1057ca0 --- /dev/null +++ b/packages/CLPBN/horus/FactorGraph.h @@ -0,0 +1,145 @@ +#ifndef HORUS_FACTORGRAPH_H +#define HORUS_FACTORGRAPH_H + +#include + +#include "Factor.h" +#include "BayesNet.h" +#include "Horus.h" + +using namespace std; + + +class FacNode; + +class VarNode : public Var +{ + public: + VarNode (VarId varId, unsigned nrStates, + int evidence = Constants::NO_EVIDENCE) + : Var (varId, nrStates, evidence) { } + + VarNode (const Var* v) : Var (v) { } + + void addNeighbor (FacNode* fn) { neighs_.push_back (fn); } + + const FacNodes& neighbors (void) const { return neighs_; } + + private: + DISALLOW_COPY_AND_ASSIGN (VarNode); + + FacNodes neighs_; +}; + + +class FacNode +{ + public: + FacNode (const Factor& f) : factor_(f), index_(-1) { } + + const Factor& factor (void) const { return factor_; } + + Factor& factor (void) { return factor_; } + + void addNeighbor (VarNode* vn) { neighs_.push_back (vn); } + + const VarNodes& neighbors (void) const { return neighs_; } + + int getIndex (void) const { return index_; } + + void setIndex (int index) { index_ = index; } + + string getLabel (void) { return factor_.getLabel(); } + + private: + DISALLOW_COPY_AND_ASSIGN (FacNode); + + VarNodes neighs_; + Factor factor_; + int index_; +}; + + +struct CompVarId +{ + bool operator() (const Var* v1, const Var* v2) const + { + return v1->varId() < v2->varId(); + } +}; + + +class FactorGraph +{ + public: + FactorGraph (bool fbn = false) : fromBayesNet_(fbn) { } + + FactorGraph (const FactorGraph&); + + ~FactorGraph (void); + + const VarNodes& varNodes (void) const { return varNodes_; } + + const FacNodes& facNodes (void) const { return facNodes_; } + + bool isFromBayesNetwork (void) const { return fromBayesNet_ ; } + + unsigned nrVarNodes (void) const { return varNodes_.size(); } + + unsigned nrFacNodes (void) const { return facNodes_.size(); } + + VarNode* getVarNode (VarId vid) const + { + VarMap::const_iterator it = varMap_.find (vid); + return it != varMap_.end() ? it->second : 0; + } + + void readFromUaiFormat (const char*); + + void readFromLibDaiFormat (const char*); + + void addFactor (const Factor& factor); + + void addVarNode (VarNode*); + + void addFacNode (FacNode*); + + void addEdge (VarNode*, FacNode*); + + bool isTree (void) const; + + DAGraph& getStructure (void); + + void print (void) const; + + void exportToGraphViz (const char*) const; + + void exportToUaiFormat (const char*) const; + + void exportToLibDaiFormat (const char*) const; + + private: + // DISALLOW_COPY_AND_ASSIGN (FactorGraph); + + void ignoreLines (std::ifstream&) const; + + bool containsCycle (void) const; + + bool containsCycle (const VarNode*, const FacNode*, + vector&, vector&) const; + + bool containsCycle (const FacNode*, const VarNode*, + vector&, vector&) const; + + VarNodes varNodes_; + FacNodes facNodes_; + + DAGraph structure_; + bool fromBayesNet_; + + typedef unordered_map VarMap; + VarMap varMap_; +}; + +#endif // HORUS_FACTORGRAPH_H + diff --git a/packages/CLPBN/horus/FoveSolver.cpp b/packages/CLPBN/horus/FoveSolver.cpp new file mode 100644 index 000000000..b3a1a24dc --- /dev/null +++ b/packages/CLPBN/horus/FoveSolver.cpp @@ -0,0 +1,1000 @@ + +#include +#include + +#include "FoveSolver.h" +#include "Histogram.h" +#include "Util.h" + + +vector +LiftedOperator::getValidOps ( + ParfactorList& pfList, + const Grounds& query) +{ + vector validOps; + vector multOps; + + multOps = ProductOperator::getValidOps (pfList); + validOps.insert (validOps.end(), multOps.begin(), multOps.end()); + + if (Globals::verbosity > 1 || multOps.empty()) { + vector sumOutOps; + vector countOps; + vector groundOps; + sumOutOps = SumOutOperator::getValidOps (pfList, query); + countOps = CountingOperator::getValidOps (pfList); + groundOps = GroundOperator::getValidOps (pfList); + validOps.insert (validOps.end(), sumOutOps.begin(), sumOutOps.end()); + validOps.insert (validOps.end(), countOps.begin(), countOps.end()); + validOps.insert (validOps.end(), groundOps.begin(), groundOps.end()); + } + + return validOps; +} + + + +void +LiftedOperator::printValidOps ( + ParfactorList& pfList, + const Grounds& query) +{ + vector validOps; + validOps = LiftedOperator::getValidOps (pfList, query); + for (unsigned i = 0; i < validOps.size(); i++) { + cout << "-> " << validOps[i]->toString(); + delete validOps[i]; + } +} + + + +vector +LiftedOperator::getParfactorsWithGroup ( + ParfactorList& pfList, unsigned group) +{ + vector iters; + ParfactorList::iterator pflIt = pfList.begin(); + while (pflIt != pfList.end()) { + if ((*pflIt)->containsGroup (group)) { + iters.push_back (pflIt); + } + ++ pflIt; + } + return iters; +} + + + +double +ProductOperator::getLogCost (void) +{ + return std::log (0.0); +} + + + +void +ProductOperator::apply (void) +{ + Parfactor* g1 = *g1_; + Parfactor* g2 = *g2_; + g1->multiply (*g2); + pfList_.remove (g1_); + pfList_.removeAndDelete (g2_); + pfList_.addShattered (g1); +} + + + +vector +ProductOperator::getValidOps (ParfactorList& pfList) +{ + vector validOps; + ParfactorList::iterator it1 = pfList.begin(); + ParfactorList::iterator penultimate = -- pfList.end(); + set pfs; + while (it1 != penultimate) { + if (Util::contains (pfs, *it1)) { + ++ it1; + continue; + } + ParfactorList::iterator it2 = it1; + ++ it2; + while (it2 != pfList.end()) { + if (Util::contains (pfs, *it2)) { + ++ it2; + continue; + } else { + if (validOp (*it1, *it2)) { + pfs.insert (*it1); + pfs.insert (*it2); + validOps.push_back (new ProductOperator ( + it1, it2, pfList)); + if (Globals::verbosity < 2) { + return validOps; + } + break; + } + } + ++ it2; + } + ++ it1; + } + return validOps; +} + + + +string +ProductOperator::toString (void) +{ + stringstream ss; + ss << "just multiplicate " ; + ss << (*g1_)->getAllGroups(); + ss << " x " ; + ss << (*g2_)->getAllGroups(); + ss << " [cost=" << std::exp (getLogCost()) << "]" << endl; + return ss.str(); +} + + + +bool +ProductOperator::validOp (Parfactor* g1, Parfactor* g2) +{ + TinySet g1_gs (g1->getAllGroups()); + TinySet g2_gs (g2->getAllGroups()); + if (g1_gs.contains (g2_gs) || g2_gs.contains (g1_gs)) { + TinySet intersect = g1_gs & g2_gs; + for (unsigned i = 0; i < intersect.size(); i++) { + if (g1->nrFormulasWithGroup (intersect[i]) != 1 || + g2->nrFormulasWithGroup (intersect[i]) != 1) { + return false; + } + int idx1 = g1->indexOfGroup (intersect[i]); + int idx2 = g2->indexOfGroup (intersect[i]); + if (g1->range (idx1) != g2->range (idx2)) { + return false; + } + } + return Parfactor::canMultiply (g1, g2); + } + return false; +} + + + +double +SumOutOperator::getLogCost (void) +{ + TinySet groupSet; + ParfactorList::const_iterator pfIter = pfList_.begin(); + unsigned nrProdFactors = 0; + while (pfIter != pfList_.end()) { + if ((*pfIter)->containsGroup (group_)) { + vector groups = (*pfIter)->getAllGroups(); + groupSet |= TinySet (groups); + ++ nrProdFactors; + } + ++ pfIter; + } + if (nrProdFactors == 1) { + // best possible case + return std::log (0.0); + } + double cost = 1.0; + for (unsigned i = 0; i < groupSet.size(); i++) { + pfIter = pfList_.begin(); + while (pfIter != pfList_.end()) { + if ((*pfIter)->containsGroup (groupSet[i])) { + int idx = (*pfIter)->indexOfGroup (groupSet[i]); + cost *= (*pfIter)->range (idx); + break; + } + ++ pfIter; + } + } + return std::log (cost); +} + + + +void +SumOutOperator::apply (void) +{ + vector iters; + iters = getParfactorsWithGroup (pfList_, group_); + Parfactor* product = *(iters[0]); + pfList_.remove (iters[0]); + for (unsigned i = 1; i < iters.size(); i++) { + product->multiply (**(iters[i])); + pfList_.removeAndDelete (iters[i]); + } + if (product->nrArguments() == 1) { + delete product; + return; + } + int fIdx = product->indexOfGroup (group_); + LogVarSet excl = product->exclusiveLogVars (fIdx); + if (product->constr()->isCountNormalized (excl)) { + product->sumOut (fIdx); + pfList_.addShattered (product); + } else { + Parfactors pfs = FoveSolver::countNormalize (product, excl); + for (unsigned i = 0; i < pfs.size(); i++) { + pfs[i]->sumOut (fIdx); + pfList_.add (pfs[i]); + } + delete product; + } +} + + + +vector +SumOutOperator::getValidOps ( + ParfactorList& pfList, + const Grounds& query) +{ + vector validOps; + set allGroups; + ParfactorList::const_iterator it = pfList.begin(); + while (it != pfList.end()) { + const ProbFormulas& formulas = (*it)->arguments(); + for (unsigned i = 0; i < formulas.size(); i++) { + allGroups.insert (formulas[i].group()); + } + ++ it; + } + set::const_iterator groupIt = allGroups.begin(); + while (groupIt != allGroups.end()) { + if (validOp (*groupIt, pfList, query)) { + validOps.push_back (new SumOutOperator (*groupIt, pfList)); + } + ++ groupIt; + } + return validOps; +} + + + +string +SumOutOperator::toString (void) +{ + stringstream ss; + vector pfIters; + pfIters = getParfactorsWithGroup (pfList_, group_); + int idx = (*pfIters[0])->indexOfGroup (group_); + ProbFormula f = (*pfIters[0])->argument (idx); + TupleSet tupleSet = (*pfIters[0])->constr()->tupleSet (f.logVars()); + ss << "sum out " << f.functor() << "/" << f.arity(); + ss << "|" << tupleSet << " (group " << group_ << ")"; + ss << " [cost=" << std::exp (getLogCost()) << "]" << endl; + return ss.str(); +} + + + +bool +SumOutOperator::validOp ( + unsigned group, + ParfactorList& pfList, + const Grounds& query) +{ + vector pfIters; + pfIters = getParfactorsWithGroup (pfList, group); + if (isToEliminate (*pfIters[0], group, query) == false) { + return false; + } + int range = -1; + for (unsigned i = 0; i < pfIters.size(); i++) { + if ((*pfIters[i])->nrFormulasWithGroup (group) > 1) { + return false; + } + int fIdx = (*pfIters[i])->indexOfGroup (group); + if ((*pfIters[i])->argument (fIdx).contains ( + (*pfIters[i])->elimLogVars()) == false) { + return false; + } + if (range == -1) { + range = (*pfIters[i])->range (fIdx); + } else if ((int)(*pfIters[i])->range (fIdx) != range) { + return false; + } + } + return true; +} + + + +bool +SumOutOperator::isToEliminate ( + Parfactor* g, + unsigned group, + const Grounds& query) +{ + int fIdx = g->indexOfGroup (group); + const ProbFormula& formula = g->argument (fIdx); + bool toElim = true; + for (unsigned i = 0; i < query.size(); i++) { + if (formula.functor() == query[i].functor() && + formula.arity() == query[i].arity()) { + g->constr()->moveToTop (formula.logVars()); + if (g->constr()->containsTuple (query[i].args())) { + toElim = false; + break; + } + } + } + return toElim; +} + + + +double +CountingOperator::getLogCost (void) +{ + double cost = 0.0; + int fIdx = (*pfIter_)->indexOfLogVar (X_); + unsigned range = (*pfIter_)->range (fIdx); + unsigned size = (*pfIter_)->size() / range; + TinySet counts; + counts = (*pfIter_)->constr()->getConditionalCounts (X_); + for (unsigned i = 0; i < counts.size(); i++) { + cost += size * HistogramSet::nrHistograms (counts[i], range); + } + unsigned group = (*pfIter_)->argument (fIdx).group(); + int lvIndex = Util::indexOf ( + (*pfIter_)->argument (fIdx).logVars(), X_); + assert (lvIndex != -1); + ParfactorList::iterator pfIter = pfList_.begin(); + while (pfIter != pfList_.end()) { + if (pfIter != pfIter_) { + int fIdx2 = (*pfIter)->indexOfGroup (group); + if (fIdx2 != -1) { + LogVar Y = ((*pfIter)->argument (fIdx2).logVars()[lvIndex]); + if ((*pfIter)->canCountConvert (Y) == false) { + // the real cost should be the cost of grounding Y + cost *= 10.0; + } + } + } + ++ pfIter; + } + return std::log (cost); +} + + + +void +CountingOperator::apply (void) +{ + if ((*pfIter_)->constr()->isCountNormalized (X_)) { + (*pfIter_)->countConvert (X_); + } else { + Parfactor* pf = *pfIter_; + pfList_.remove (pfIter_); + Parfactors pfs = FoveSolver::countNormalize (pf, X_); + for (unsigned i = 0; i < pfs.size(); i++) { + unsigned condCount = pfs[i]->constr()->getConditionalCount (X_); + bool cartProduct = pfs[i]->constr()->isCartesianProduct ( + pfs[i]->countedLogVars() | X_); + if (condCount > 1 && cartProduct) { + pfs[i]->countConvert (X_); + } + pfList_.add (pfs[i]); + } + delete pf; + } +} + + + +vector +CountingOperator::getValidOps (ParfactorList& pfList) +{ + vector validOps; + ParfactorList::iterator it = pfList.begin(); + while (it != pfList.end()) { + LogVarSet candidates = (*it)->uncountedLogVars(); + for (unsigned i = 0; i < candidates.size(); i++) { + if (validOp (*it, candidates[i])) { + validOps.push_back (new CountingOperator ( + it, candidates[i], pfList)); + } else { + } + } + ++ it; + } + return validOps; +} + + + +string +CountingOperator::toString (void) +{ + stringstream ss; + ss << "count convert " << X_ << " in " ; + ss << (*pfIter_)->getLabel(); + ss << " [cost=" << std::exp (getLogCost()) << "]" << endl; + Parfactors pfs = FoveSolver::countNormalize (*pfIter_, X_); + if ((*pfIter_)->constr()->isCountNormalized (X_) == false) { + for (unsigned i = 0; i < pfs.size(); i++) { + ss << " º " << pfs[i]->getLabel() << endl; + } + } + for (unsigned i = 0; i < pfs.size(); i++) { + delete pfs[i]; + } + return ss.str(); +} + + + +bool +CountingOperator::validOp (Parfactor* g, LogVar X) +{ + if (g->nrFormulas (X) != 1) { + return false; + } + int fIdx = g->indexOfLogVar (X); + if (g->argument (fIdx).isCounting()) { + return false; + } + bool countNormalized = g->constr()->isCountNormalized (X); + if (countNormalized) { + return g->canCountConvert (X); + } + return true; +} + + + +double +GroundOperator::getLogCost (void) +{ + vector> affectedFormulas; + affectedFormulas = getAffectedFormulas(); + // cout << "affected formulas: " ; + // for (unsigned i = 0; i < affectedFormulas.size(); i++) { + // cout << affectedFormulas[i].first << ":" ; + // cout << affectedFormulas[i].second << " " ; + // } + // cout << "cost =" ; + double totalCost = std::log (0.0); + ParfactorList::iterator pflIt = pfList_.begin(); + while (pflIt != pfList_.end()) { + Parfactor* pf = *pflIt; + double reps = 0.0; + double pfSize = std::log (pf->size()); + bool willBeAffected = false; + LogVarSet lvsToGround; + for (unsigned i = 0; i < affectedFormulas.size(); i++) { + int fIdx = pf->indexOfGroup (affectedFormulas[i].first); + if (fIdx != -1) { + ProbFormula f = pf->argument (fIdx); + LogVar X = f.logVars()[affectedFormulas[i].second]; + bool isCountingLv = pf->countedLogVars().contains (X); + if (isCountingLv) { + unsigned nrHists = pf->range (fIdx); + unsigned nrSymbols = pf->constr()->getConditionalCount (X); + unsigned range = pf->argument (fIdx).range(); + double power = std::log (range) * nrSymbols; + pfSize = (pfSize - std::log (nrHists)) + power; + } else { + if (lvsToGround.contains (X) == false) { + reps += std::log (pf->constr()->nrSymbols (X)); + lvsToGround.insert (X); + } + } + willBeAffected = true; + } + } + if (willBeAffected) { + // cout << " + " << std::exp (reps) << "x" << std::exp (pfSize); + double pfCost = reps + pfSize; + totalCost = Util::logSum (totalCost, pfCost); + } + ++ pflIt; + } + // cout << endl; + return totalCost; +} + + + +void +GroundOperator::apply (void) +{ + // TODO if we update the correct groups + // we can skip shattering + ParfactorList::iterator pfIter; + pfIter = getParfactorsWithGroup (pfList_, group_).front(); + Parfactor* pf = *pfIter; + int idx = pf->indexOfGroup (group_); + ProbFormula f = pf->argument (idx); + LogVar X = f.logVars()[lvIndex_]; + bool countedLv = pf->countedLogVars().contains (X); + pfList_.remove (pfIter); + if (countedLv) { + pf->fullExpand (X); + pfList_.add (pf); + } else { + ConstraintTrees cts = pf->constr()->ground (X); + for (unsigned i = 0; i < cts.size(); i++) { + pfList_.add (new Parfactor (pf, cts[i])); + } + delete pf; + } + ParfactorList::iterator pflIt = pfList_.begin(); + while (pflIt != pfList_.end()) { + (*pflIt)->simplifyGrounds(); + ++ pflIt; + } +} + + + +vector +GroundOperator::getValidOps (ParfactorList& pfList) +{ + vector validOps; + set allGroups; + ParfactorList::const_iterator it = pfList.begin(); + while (it != pfList.end()) { + const ProbFormulas& formulas = (*it)->arguments(); + for (unsigned i = 0; i < formulas.size(); i++) { + if (Util::contains (allGroups, formulas[i].group()) == false) { + const LogVars& lvs = formulas[i].logVars(); + for (unsigned j = 0; j < lvs.size(); j++) { + if ((*it)->constr()->isSingleton (lvs[j]) == false) { + validOps.push_back (new GroundOperator ( + formulas[i].group(), j, pfList)); + } + } + allGroups.insert (formulas[i].group()); + } + } + ++ it; + } + return validOps; +} + + + +string +GroundOperator::toString (void) +{ + stringstream ss; + vector pfIters; + pfIters = getParfactorsWithGroup (pfList_, group_); + Parfactor* pf = *(getParfactorsWithGroup (pfList_, group_).front()); + int idx = pf->indexOfGroup (group_); + ProbFormula f = pf->argument (idx); + LogVar lv = f.logVars()[lvIndex_]; + TupleSet tupleSet = pf->constr()->tupleSet ({lv}); + string pos = "th"; + if (lvIndex_ == 0) { + pos = "st" ; + } else if (lvIndex_ == 1) { + pos = "nd" ; + } else if (lvIndex_ == 2) { + pos = "rd" ; + } + ss << "grounding " << lvIndex_ + 1 << pos << " log var in " ; + ss << f.functor() << "/" << f.arity(); + ss << "|" << tupleSet << " (group " << group_ << ")"; + ss << " [cost=" << std::exp (getLogCost()) << "]" << endl; + return ss.str(); +} + + + +vector> +GroundOperator::getAffectedFormulas (void) +{ + vector> affectedFormulas; + affectedFormulas.push_back (make_pair (group_, lvIndex_)); + queue> q; + q.push (make_pair (group_, lvIndex_)); + while (q.empty() == false) { + pair front = q.front(); + ParfactorList::iterator pflIt = pfList_.begin(); + while (pflIt != pfList_.end()) { + int idx = (*pflIt)->indexOfGroup (front.first); + if (idx != -1) { + ProbFormula f = (*pflIt)->argument (idx); + LogVar X = f.logVars()[front.second]; + const ProbFormulas& fs = (*pflIt)->arguments(); + for (unsigned i = 0; i < fs.size(); i++) { + if ((int)i != idx && fs[i].contains (X)) { + pair pair = make_pair ( + fs[i].group(), fs[i].indexOf (X)); + if (Util::contains (affectedFormulas, pair) == false) { + q.push (pair); + affectedFormulas.push_back (pair); + } + } + } + } + ++ pflIt; + } + q.pop(); + } + return affectedFormulas; +} + + + +Params +FoveSolver::getPosterioriOf (const Ground& query) +{ + return getJointDistributionOf ({query}); +} + + + +Params +FoveSolver::getJointDistributionOf (const Grounds& query) +{ + runSolver (query); + (*pfList_.begin())->normalize(); + Params params = (*pfList_.begin())->params(); + if (Globals::logDomain) { + Util::fromLog (params); + } + return params; +} + + + +void +FoveSolver::printSolverFlags (void) const +{ + stringstream ss; + ss << "fove [" ; + ss << "log_domain=" << Util::toString (Globals::logDomain); + ss << "]" ; + cout << ss.str() << endl; +} + + + +void +FoveSolver::absorveEvidence ( + ParfactorList& pfList, + ObservedFormulas& obsFormulas) +{ + for (unsigned i = 0; i < obsFormulas.size(); i++) { + Parfactors newPfs; + ParfactorList::iterator it = pfList.begin(); + while (it != pfList.end()) { + Parfactor* pf = *it; + it = pfList.remove (it); + Parfactors absorvedPfs = absorve (obsFormulas[i], pf); + if (absorvedPfs.empty() == false) { + if (absorvedPfs.size() == 1 && absorvedPfs[0] == 0) { + // just remove pf; + } else { + Util::addToVector (newPfs, absorvedPfs); + } + delete pf; + } else { + it = pfList.insertShattered (it, pf); + ++ it; + } + } + pfList.add (newPfs); + } + if (Globals::verbosity > 2 && obsFormulas.empty() == false) { + Util::printAsteriskLine(); + cout << "AFTER EVIDENCE ABSORVED" << endl; + for (unsigned i = 0; i < obsFormulas.size(); i++) { + cout << " -> " << obsFormulas[i] << endl; + } + Util::printAsteriskLine(); + pfList.print(); + } +} + + + +Parfactors +FoveSolver::countNormalize ( + Parfactor* g, + const LogVarSet& set) +{ + Parfactors normPfs; + if (set.empty()) { + normPfs.push_back (new Parfactor (*g)); + } else { + ConstraintTrees normCts = g->constr()->countNormalize (set); + for (unsigned i = 0; i < normCts.size(); i++) { + normPfs.push_back (new Parfactor (g, normCts[i])); + } + } + return normPfs; +} + + + +Parfactor +FoveSolver::calcGroundMultiplication (Parfactor pf) +{ + LogVarSet lvs = pf.constr()->logVarSet(); + lvs -= pf.constr()->singletons(); + Parfactors newPfs = {new Parfactor (pf)}; + for (unsigned i = 0; i < lvs.size(); i++) { + Parfactors pfs = newPfs; + newPfs.clear(); + for (unsigned j = 0; j < pfs.size(); j++) { + bool countedLv = pfs[j]->countedLogVars().contains (lvs[i]); + if (countedLv) { + pfs[j]->fullExpand (lvs[i]); + newPfs.push_back (pfs[j]); + } else { + ConstraintTrees cts = pfs[j]->constr()->ground (lvs[i]); + for (unsigned k = 0; k < cts.size(); k++) { + newPfs.push_back (new Parfactor (pfs[j], cts[k])); + } + delete pfs[j]; + } + } + } + ParfactorList pfList (newPfs); + Parfactors groundShatteredPfs (pfList.begin(),pfList.end()); + for (unsigned i = 1; i < groundShatteredPfs.size(); i++) { + groundShatteredPfs[0]->multiply (*groundShatteredPfs[i]); + } + return Parfactor (*groundShatteredPfs[0]); +} + + + +void +FoveSolver::runSolver (const Grounds& query) +{ + largestCost_ = std::log (0); + shatterAgainstQuery (query); + runWeakBayesBall (query); + while (true) { + if (Globals::verbosity > 2) { + Util::printDashedLine(); + pfList_.print(); + if (Globals::verbosity > 3) { + LiftedOperator::printValidOps (pfList_, query); + } + } + LiftedOperator* op = getBestOperation (query); + if (op == 0) { + break; + } + if (Globals::verbosity > 1) { + cout << "best operation: " << op->toString(); + if (Globals::verbosity > 2) { + cout << endl; + } + } + op->apply(); + delete op; + } + assert (pfList_.size() > 0); + if (pfList_.size() > 1) { + ParfactorList::iterator pfIter = pfList_.begin(); + pfIter ++; + while (pfIter != pfList_.end()) { + (*pfList_.begin())->multiply (**pfIter); + ++ pfIter; + } + } + if (Globals::verbosity > 0) { + cout << "largest cost = " << std::exp (largestCost_) << endl; + cout << endl; + } + (*pfList_.begin())->simplifyGrounds(); + (*pfList_.begin())->reorderAccordingGrounds (query); +} + + + +LiftedOperator* +FoveSolver::getBestOperation (const Grounds& query) +{ + double bestCost = 0.0; + LiftedOperator* bestOp = 0; + vector validOps; + validOps = LiftedOperator::getValidOps (pfList_, query); + for (unsigned i = 0; i < validOps.size(); i++) { + double cost = validOps[i]->getLogCost(); + if ((bestOp == 0) || (cost < bestCost)) { + bestOp = validOps[i]; + bestCost = cost; + } + } + if (bestCost > largestCost_) { + largestCost_ = bestCost; + } + for (unsigned i = 0; i < validOps.size(); i++) { + if (validOps[i] != bestOp) { + delete validOps[i]; + } + } + return bestOp; +} + + + +void +FoveSolver::runWeakBayesBall (const Grounds& query) +{ + queue todo; // groups to process + set done; // processed or in queue + for (unsigned i = 0; i < query.size(); i++) { + ParfactorList::iterator it = pfList_.begin(); + while (it != pfList_.end()) { + int group = (*it)->findGroup (query[i]); + if (group != -1) { + todo.push (group); + done.insert (group); + break; + } + ++ it; + } + } + + set requiredPfs; + while (todo.empty() == false) { + unsigned group = todo.front(); + ParfactorList::iterator it = pfList_.begin(); + while (it != pfList_.end()) { + if (Util::contains (requiredPfs, *it) == false && + (*it)->containsGroup (group)) { + vector groups = (*it)->getAllGroups(); + for (unsigned i = 0; i < groups.size(); i++) { + if (Util::contains (done, groups[i]) == false) { + todo.push (groups[i]); + done.insert (groups[i]); + } + } + requiredPfs.insert (*it); + } + ++ it; + } + todo.pop(); + } + + ParfactorList::iterator it = pfList_.begin(); + bool foundNotRequired = false; + while (it != pfList_.end()) { + if (Util::contains (requiredPfs, *it) == false) { + if (Globals::verbosity > 2) { + if (foundNotRequired == false) { + Util::printHeader ("PARFACTORS TO DISCARD"); + foundNotRequired = true; + } + (*it)->print(); + } + it = pfList_.removeAndDelete (it); + } else { + ++ it; + } + } +} + + + +void +FoveSolver::shatterAgainstQuery (const Grounds& query) +{ + for (unsigned i = 0; i < query.size(); i++) { + if (query[i].isAtom()) { + continue; + } + bool found = false; + Parfactors newPfs; + ParfactorList::iterator it = pfList_.begin(); + while (it != pfList_.end()) { + if ((*it)->containsGround (query[i])) { + found = true; + std::pair split; + LogVars queryLvs ( + (*it)->constr()->logVars().begin(), + (*it)->constr()->logVars().begin() + query[i].arity()); + split = (*it)->constr()->split (query[i].args()); + ConstraintTree* commCt = split.first; + ConstraintTree* exclCt = split.second; + newPfs.push_back (new Parfactor (*it, commCt)); + if (exclCt->empty() == false) { + newPfs.push_back (new Parfactor (*it, exclCt)); + } else { + delete exclCt; + } + it = pfList_.removeAndDelete (it); + } else { + ++ it; + } + } + if (found == false) { + cerr << "error: could not find a parfactor with ground " ; + cerr << "`" << query[i] << "'" << endl; + exit (0); + } + pfList_.add (newPfs); + } + if (Globals::verbosity > 2) { + Util::printAsteriskLine(); + cout << "SHATTERED AGAINST THE QUERY" << endl; + for (unsigned i = 0; i < query.size(); i++) { + cout << " -> " << query[i] << endl; + } + Util::printAsteriskLine(); + pfList_.print(); + } +} + + + +Parfactors +FoveSolver::absorve ( + ObservedFormula& obsFormula, + Parfactor* g) +{ + Parfactors absorvedPfs; + const ProbFormulas& formulas = g->arguments(); + for (unsigned i = 0; i < formulas.size(); i++) { + if (obsFormula.functor() == formulas[i].functor() && + obsFormula.arity() == formulas[i].arity()) { + + if (obsFormula.isAtom()) { + if (formulas.size() > 1) { + g->absorveEvidence (formulas[i], obsFormula.evidence()); + } else { + // hack to erase parfactor g + absorvedPfs.push_back (0); + } + break; + } + + g->constr()->moveToTop (formulas[i].logVars()); + std::pair res; + res = g->constr()->split ( + formulas[i].logVars(), + &(obsFormula.constr()), + obsFormula.constr().logVars()); + ConstraintTree* commCt = res.first; + ConstraintTree* exclCt = res.second; + + if (commCt->empty() == false) { + if (formulas.size() > 1) { + LogVarSet excl = g->exclusiveLogVars (i); + Parfactors countNormPfs = countNormalize (g, excl); + for (unsigned j = 0; j < countNormPfs.size(); j++) { + countNormPfs[j]->absorveEvidence ( + formulas[i], obsFormula.evidence()); + absorvedPfs.push_back (countNormPfs[j]); + } + } else { + delete commCt; + } + if (exclCt->empty() == false) { + absorvedPfs.push_back (new Parfactor (g, exclCt)); + } else { + delete exclCt; + } + if (absorvedPfs.empty()) { + // hack to erase parfactor g + absorvedPfs.push_back (0); + } + break; + } else { + delete commCt; + delete exclCt; + } + } + } + return absorvedPfs; +} + diff --git a/packages/CLPBN/horus/FoveSolver.h b/packages/CLPBN/horus/FoveSolver.h new file mode 100644 index 000000000..c0c1cfc71 --- /dev/null +++ b/packages/CLPBN/horus/FoveSolver.h @@ -0,0 +1,168 @@ +#ifndef HORUS_FOVESOLVER_H +#define HORUS_FOVESOLVER_H + + +#include "ParfactorList.h" + + +class LiftedOperator +{ + public: + virtual double getLogCost (void) = 0; + + virtual void apply (void) = 0; + + virtual string toString (void) = 0; + + static vector getValidOps ( + ParfactorList&, const Grounds&); + + static void printValidOps (ParfactorList&, const Grounds&); + + static vector getParfactorsWithGroup ( + ParfactorList&, unsigned group); +}; + + + +class ProductOperator : public LiftedOperator +{ + public: + ProductOperator ( + ParfactorList::iterator g1, ParfactorList::iterator g2, + ParfactorList& pfList) : g1_(g1), g2_(g2), pfList_(pfList) { } + + double getLogCost (void); + + void apply (void); + + static vector getValidOps (ParfactorList&); + + string toString (void); + + private: + static bool validOp (Parfactor*, Parfactor*); + + ParfactorList::iterator g1_; + ParfactorList::iterator g2_; + ParfactorList& pfList_; +}; + + + +class SumOutOperator : public LiftedOperator +{ + public: + SumOutOperator (unsigned group, ParfactorList& pfList) + : group_(group), pfList_(pfList) { } + + double getLogCost (void); + + void apply (void); + + static vector getValidOps ( + ParfactorList&, const Grounds&); + + string toString (void); + + private: + static bool validOp (unsigned, ParfactorList&, const Grounds&); + + static bool isToEliminate (Parfactor*, unsigned, const Grounds&); + + unsigned group_; + ParfactorList& pfList_; +}; + + + +class CountingOperator : public LiftedOperator +{ + public: + CountingOperator ( + ParfactorList::iterator pfIter, + LogVar X, + ParfactorList& pfList) + : pfIter_(pfIter), X_(X), pfList_(pfList) { } + + double getLogCost (void); + + void apply (void); + + static vector getValidOps (ParfactorList&); + + string toString (void); + + private: + static bool validOp (Parfactor*, LogVar); + + ParfactorList::iterator pfIter_; + LogVar X_; + ParfactorList& pfList_; +}; + + + +class GroundOperator : public LiftedOperator +{ + public: + GroundOperator ( + unsigned group, + unsigned lvIndex, + ParfactorList& pfList) + : group_(group), lvIndex_(lvIndex), pfList_(pfList) { } + + double getLogCost (void); + + void apply (void); + + static vector getValidOps (ParfactorList&); + + string toString (void); + + private: + vector> getAffectedFormulas (void); + + unsigned group_; + unsigned lvIndex_; + ParfactorList& pfList_; +}; + + + +class FoveSolver +{ + public: + FoveSolver (const ParfactorList& pfList) : pfList_(pfList) { } + + Params getPosterioriOf (const Ground&); + + Params getJointDistributionOf (const Grounds&); + + void printSolverFlags (void) const; + + static void absorveEvidence ( + ParfactorList& pfList, ObservedFormulas& obsFormulas); + + static Parfactors countNormalize (Parfactor*, const LogVarSet&); + + static Parfactor calcGroundMultiplication (Parfactor pf); + + private: + void runSolver (const Grounds&); + + LiftedOperator* getBestOperation (const Grounds&); + + void runWeakBayesBall (const Grounds&); + + void shatterAgainstQuery (const Grounds&); + + static Parfactors absorve (ObservedFormula&, Parfactor*); + + ParfactorList pfList_; + + double largestCost_; +}; + +#endif // HORUS_FOVESOLVER_H + diff --git a/packages/CLPBN/horus/Histogram.cpp b/packages/CLPBN/horus/Histogram.cpp new file mode 100644 index 000000000..6c1181cce --- /dev/null +++ b/packages/CLPBN/horus/Histogram.cpp @@ -0,0 +1,145 @@ +#include + +#include +#include + +#include "Histogram.h" +#include "Util.h" + + +HistogramSet::HistogramSet (unsigned size, unsigned range) +{ + size_ = size; + hist_.resize (range, 0); + hist_[0] = size; +} + + + +void +HistogramSet::nextHistogram (void) +{ + for (int i = hist_.size() - 2; i >= 0; i--) { + if (hist_[i] > 0) { + hist_[i] --; + hist_[i + 1] = maxCount (i + 1); + clearAfter (i + 1); + break; + } + } + assert (std::accumulate (hist_.begin(), hist_.end(), 0) == (int)size_); +} + + + +unsigned +HistogramSet::operator[] (unsigned idx) const +{ + assert (idx < hist_.size()); + return hist_[idx]; +} + + + +unsigned +HistogramSet::nrHistograms (void) const +{ + return HistogramSet::nrHistograms (size_, hist_.size()); +} + + + +void +HistogramSet::reset (void) +{ + std::fill (hist_.begin() + 1, hist_.end(), 0); + hist_[0] = size_; +} + + + +vector +HistogramSet::getHistograms (unsigned N, unsigned R) +{ + HistogramSet hs (N, R); + unsigned H = hs.nrHistograms(); + vector histograms; + histograms.reserve (H); + for (unsigned i = 0; i < H; i++) { + histograms.push_back (hs.hist_); + hs.nextHistogram(); + } + return histograms; +} + + + +unsigned +HistogramSet::nrHistograms (unsigned N, unsigned R) +{ + return Util::nrCombinations (N + R - 1, R - 1); +} + + + +unsigned +HistogramSet::findIndex ( + const Histogram& h, + const vector& hists) +{ + vector::const_iterator it = std::lower_bound ( + hists.begin(), hists.end(), h, std::greater()); + assert (it != hists.end() && *it == h); + return std::distance (hists.begin(), it); +} + + + +vector +HistogramSet::getNumAssigns (unsigned N, unsigned R) +{ + HistogramSet hs (N, R); + double N_fac = Util::logFactorial (N); + unsigned H = hs.nrHistograms(); + vector numAssigns; + numAssigns.reserve (H); + for (unsigned h = 0; h < H; h++) { + double prod = 0.0; + for (unsigned r = 0; r < R; r++) { + prod += Util::logFactorial (hs[r]); + } + double res = N_fac - prod; + numAssigns.push_back (Globals::logDomain ? res : std::exp (res)); + hs.nextHistogram(); + } + return numAssigns; +} + + + +ostream& operator<< (ostream &os, const HistogramSet& hs) +{ + os << "#" << hs.hist_; + return os; +} + + + +unsigned +HistogramSet::maxCount (unsigned idx) const +{ + unsigned sum = 0; + for (unsigned i = 0; i < idx; i++) { + sum += hist_[i]; + } + return size_ - sum; +} + + + +void +HistogramSet::clearAfter (unsigned idx) +{ + std::fill (hist_.begin() + idx + 1, hist_.end(), 0); +} + diff --git a/packages/CLPBN/horus/Histogram.h b/packages/CLPBN/horus/Histogram.h new file mode 100644 index 000000000..bbee1b2c9 --- /dev/null +++ b/packages/CLPBN/horus/Histogram.h @@ -0,0 +1,45 @@ +#ifndef HORUS_HISTOGRAM_H +#define HORUS_HISTOGRAM_H + +#include +#include + +using namespace std; + +typedef vector Histogram; + +class HistogramSet +{ + public: + HistogramSet (unsigned, unsigned); + + void nextHistogram (void); + + unsigned operator[] (unsigned idx) const; + + unsigned nrHistograms (void) const; + + void reset (void); + + static vector getHistograms (unsigned ,unsigned); + + static unsigned nrHistograms (unsigned, unsigned); + + static unsigned findIndex ( + const Histogram&, const vector&); + + static vector getNumAssigns (unsigned, unsigned); + + friend std::ostream& operator<< (ostream &os, const HistogramSet& hs); + + private: + unsigned maxCount (unsigned) const; + + void clearAfter (unsigned); + + unsigned size_; + Histogram hist_; +}; + +#endif // HORUS_HISTOGRAM_H + diff --git a/packages/CLPBN/horus/Horus.h b/packages/CLPBN/horus/Horus.h new file mode 100644 index 000000000..90f346bfd --- /dev/null +++ b/packages/CLPBN/horus/Horus.h @@ -0,0 +1,81 @@ +#ifndef HORUS_HORUS_H +#define HORUS_HORUS_H + +#include + +#include + +#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ + TypeName(const TypeName&); \ + void operator=(const TypeName&) + +using namespace std; + +class Var; +class Factor; +class VarNode; +class FacNode; + +typedef vector Params; +typedef unsigned VarId; +typedef vector VarIds; +typedef vector Vars; +typedef vector VarNodes; +typedef vector FacNodes; +typedef vector Factors; +typedef vector States; +typedef vector Ranges; +typedef Params::size_type psize_t; +typedef unsigned long long ullong; + + +enum InfAlgorithms +{ + VE, // variable elimination + BP, // belief propagation + CBP // counting belief propagation +}; + + +namespace Globals { + +extern bool logDomain; + +// level of debug information +extern unsigned verbosity; + +extern InfAlgorithms infAlgorithm; + +}; + + +namespace Constants { + +// show message calculation for belief propagation +const bool SHOW_BP_CALCS = false; + +const int NO_EVIDENCE = -1; + +// number of digits to show when printing a parameter +const unsigned PRECISION = 6; + +const bool COLLECT_STATS = false; + +}; + + +namespace BpOptions +{ + enum Schedule { + SEQ_FIXED, + SEQ_RANDOM, + PARALLEL, + MAX_RESIDUAL + }; + extern Schedule schedule; + extern double accuracy; + extern unsigned maxIter; +} + +#endif // HORUS_HORUS_H + diff --git a/packages/CLPBN/horus/HorusCli.cpp b/packages/CLPBN/horus/HorusCli.cpp new file mode 100644 index 000000000..00bbeefbd --- /dev/null +++ b/packages/CLPBN/horus/HorusCli.cpp @@ -0,0 +1,188 @@ +#include + +#include +#include + +#include "FactorGraph.h" +#include "VarElimSolver.h" +#include "BpSolver.h" +#include "CbpSolver.h" + +using namespace std; + +int readHorusFlags (int, const char* []); +void readFactorGraph (FactorGraph&, const char*); +VarIds readQueryAndEvidence (FactorGraph&, int, const char* [], int); + +void runSolver (const FactorGraph&, const VarIds&); + +const string USAGE = "usage: ./hcli [HORUS_FLAG=VALUE] \ +NETWORK_FILE [VARIABLE | OBSERVED_VARIABLE=EVIDENCE] ..." ; + + +int +main (int argc, const char* argv[]) +{ + if (argc <= 1) { + cerr << "error: no graphical model specified" << endl; + cerr << USAGE << endl; + exit (0); + } + int idx = readHorusFlags (argc, argv); + FactorGraph fg; + readFactorGraph (fg, argv[idx]); + VarIds queryIds = readQueryAndEvidence (fg, argc, argv, idx + 1); + runSolver (fg, queryIds); + return 0; +} + + + +int +readHorusFlags (int argc, const char* argv[]) +{ + int i = 1; + for (; i < argc; i++) { + const string& arg = argv[i]; + size_t pos = arg.find ('='); + if (pos == std::string::npos) { + return i; + } + string leftArg = arg.substr (0, pos); + string rightArg = arg.substr (pos + 1); + if (leftArg.empty()) { + cerr << "error: missing left argument" << endl; + cerr << USAGE << endl; + exit (0); + } + if (rightArg.empty()) { + cerr << "error: missing right argument" << endl; + cerr << USAGE << endl; + exit (0); + } + Util::setHorusFlag (leftArg, rightArg); + } + return i + 1; +} + + + +void +readFactorGraph (FactorGraph& fg, const char* s) +{ + string fileName (s); + string extension = fileName.substr (fileName.find_last_of ('.') + 1); + if (extension == "uai") { + fg.readFromUaiFormat (fileName.c_str()); + } else if (extension == "fg") { + fg.readFromLibDaiFormat (fileName.c_str()); + } else { + cerr << "error: the graphical model must be defined either " ; + cerr << "in a UAI or libDAI file" << endl; + exit (0); + } +} + + + +VarIds +readQueryAndEvidence ( + FactorGraph& fg, + int argc, + const char* argv[], + int start) +{ + VarIds queryIds; + for (int i = start; i < argc; i++) { + const string& arg = argv[i]; + if (arg.find ('=') == std::string::npos) { + if (Util::isInteger (arg) == false) { + cerr << "error: `" << arg << "' " ; + cerr << "is not a variable id" ; + cerr << endl; + exit (0); + } + VarId vid = Util::stringToUnsigned (arg); + VarNode* queryVar = fg.getVarNode (vid); + if (queryVar == false) { + cerr << "error: unknow variable with id " ; + cerr << "`" << vid << "'" << endl; + exit (0); + } + queryIds.push_back (vid); + } else { + size_t pos = arg.find ('='); + string leftArg = arg.substr (0, pos); + string rightArg = arg.substr (pos + 1); + if (leftArg.empty()) { + cerr << "error: missing left argument" << endl; + cerr << USAGE << endl; + exit (0); + } + if (Util::isInteger (leftArg) == false) { + cerr << "error: `" << leftArg << "' " ; + cerr << "is not a variable id" << endl ; + exit (0); + continue; + } + VarId vid = Util::stringToUnsigned (leftArg); + VarNode* observedVar = fg.getVarNode (vid); + if (observedVar == false) { + cerr << "error: unknow variable with id " ; + cerr << "`" << vid << "'" << endl; + exit (0); + } + if (rightArg.empty()) { + cerr << "error: missing right argument" << endl; + cerr << USAGE << endl; + exit (0); + } + if (Util::isInteger (rightArg) == false) { + cerr << "error: `" << rightArg << "' " ; + cerr << "is not a state index" << endl ; + exit (0); + } + unsigned stateIdx = Util::stringToUnsigned (rightArg); + if (observedVar->isValidState (stateIdx) == false) { + cerr << "error: `" << stateIdx << "' " ; + cerr << "is not a valid state index for variable with id " ; + cerr << "`" << vid << "'" << endl; + exit (0); + } + observedVar->setEvidence (stateIdx); + } + } + return queryIds; +} + + + +void +runSolver (const FactorGraph& fg, const VarIds& queryIds) +{ + Solver* solver = 0; + switch (Globals::infAlgorithm) { + case InfAlgorithms::VE: + solver = new VarElimSolver (fg); + break; + case InfAlgorithms::BP: + solver = new BpSolver (fg); + break; + case InfAlgorithms::CBP: + solver = new CbpSolver (fg); + break; + default: + assert (false); + } + if (Globals::verbosity > 0) { + solver->printSolverFlags(); + cout << endl; + } + if (queryIds.size() == 0) { + solver->printAllPosterioris(); + } else { + solver->printAnswer (queryIds); + } + delete solver; +} + diff --git a/packages/CLPBN/horus/HorusYap.cpp b/packages/CLPBN/horus/HorusYap.cpp new file mode 100644 index 000000000..c74616a95 --- /dev/null +++ b/packages/CLPBN/horus/HorusYap.cpp @@ -0,0 +1,586 @@ +#include + +#include + +#include +#include + +#include + +#include "ParfactorList.h" +#include "FactorGraph.h" +#include "FoveSolver.h" +#include "VarElimSolver.h" +#include "BpSolver.h" +#include "CbpSolver.h" +#include "ElimGraph.h" +#include "BayesBall.h" + + +using namespace std; + + +typedef std::pair LiftedNetwork; + + +Params readParameters (YAP_Term); + +vector readUnsignedList (YAP_Term); + +void readLiftedEvidence (YAP_Term, ObservedFormulas&); + +Parfactor* readParfactor (YAP_Term); + +void runVeSolver (FactorGraph* fg, const vector& tasks, + vector& results); + +void runBpSolver (FactorGraph* fg, const vector& tasks, + vector& results); + + + + +vector +readUnsignedList (YAP_Term list) +{ + vector vec; + while (list != YAP_TermNil()) { + vec.push_back ((unsigned) YAP_IntOfTerm (YAP_HeadOfTerm (list))); + list = YAP_TailOfTerm (list); + } + return vec; +} + + + +int createLiftedNetwork (void) +{ + Parfactors parfactors; + YAP_Term parfactorList = YAP_ARG1; + while (parfactorList != YAP_TermNil()) { + YAP_Term pfTerm = YAP_HeadOfTerm (parfactorList); + parfactors.push_back (readParfactor (pfTerm)); + parfactorList = YAP_TailOfTerm (parfactorList); + } + + // LiftedUtils::printSymbolDictionary(); + if (Globals::verbosity > 2) { + Util::printHeader ("INITIAL PARFACTORS"); + for (unsigned i = 0; i < parfactors.size(); i++) { + parfactors[i]->print(); + cout << endl; + } + } + + ParfactorList* pfList = new ParfactorList (parfactors); + + if (Globals::verbosity > 2) { + Util::printHeader ("SHATTERED PARFACTORS"); + pfList->print(); + } + + // read evidence + ObservedFormulas* obsFormulas = new ObservedFormulas(); + readLiftedEvidence (YAP_ARG2, *(obsFormulas)); + + LiftedNetwork* net = new LiftedNetwork (pfList, obsFormulas); + YAP_Int p = (YAP_Int) (net); + return YAP_Unify (YAP_MkIntTerm (p), YAP_ARG3); +} + + + +Parfactor* readParfactor (YAP_Term pfTerm) +{ + // read dist id + unsigned distId = YAP_IntOfTerm (YAP_ArgOfTerm (1, pfTerm)); + + // read the ranges + Ranges ranges; + YAP_Term rangeList = YAP_ArgOfTerm (3, pfTerm); + while (rangeList != YAP_TermNil()) { + unsigned range = (unsigned) YAP_IntOfTerm (YAP_HeadOfTerm (rangeList)); + ranges.push_back (range); + rangeList = YAP_TailOfTerm (rangeList); + } + + // read parametric random vars + ProbFormulas formulas; + unsigned count = 0; + unordered_map lvMap; + YAP_Term pvList = YAP_ArgOfTerm (2, pfTerm); + while (pvList != YAP_TermNil()) { + YAP_Term formulaTerm = YAP_HeadOfTerm (pvList); + if (YAP_IsAtomTerm (formulaTerm)) { + string name ((char*) YAP_AtomName (YAP_AtomOfTerm (formulaTerm))); + Symbol functor = LiftedUtils::getSymbol (name); + formulas.push_back (ProbFormula (functor, ranges[count])); + } else { + LogVars logVars; + YAP_Functor yapFunctor = YAP_FunctorOfTerm (formulaTerm); + string name ((char*) YAP_AtomName (YAP_NameOfFunctor (yapFunctor))); + Symbol functor = LiftedUtils::getSymbol (name); + unsigned arity = (unsigned) YAP_ArityOfFunctor (yapFunctor); + for (unsigned i = 1; i <= arity; i++) { + YAP_Term ti = YAP_ArgOfTerm (i, formulaTerm); + unordered_map::iterator it = lvMap.find (ti); + if (it != lvMap.end()) { + logVars.push_back (it->second); + } else { + unsigned newLv = lvMap.size(); + lvMap[ti] = newLv; + logVars.push_back (newLv); + } + } + formulas.push_back (ProbFormula (functor, logVars, ranges[count])); + } + count ++; + pvList = YAP_TailOfTerm (pvList); + } + + // read the parameters + const Params& params = readParameters (YAP_ArgOfTerm (4, pfTerm)); + + // read the constraint + Tuples tuples; + if (lvMap.size() >= 1) { + YAP_Term tupleList = YAP_ArgOfTerm (5, pfTerm); + while (tupleList != YAP_TermNil()) { + YAP_Term term = YAP_HeadOfTerm (tupleList); + assert (YAP_IsApplTerm (term)); + YAP_Functor yapFunctor = YAP_FunctorOfTerm (term); + unsigned arity = (unsigned) YAP_ArityOfFunctor (yapFunctor); + assert (lvMap.size() == arity); + Tuple tuple (arity); + for (unsigned i = 1; i <= arity; i++) { + YAP_Term ti = YAP_ArgOfTerm (i, term); + if (YAP_IsAtomTerm (ti) == false) { + cerr << "error: constraint has free variables" << endl; + abort(); + } + string name ((char*) YAP_AtomName (YAP_AtomOfTerm (ti))); + tuple[i - 1] = LiftedUtils::getSymbol (name); + } + tuples.push_back (tuple); + tupleList = YAP_TailOfTerm (tupleList); + } + } + return new Parfactor (formulas, params, tuples, distId); +} + + + +void readLiftedEvidence ( + YAP_Term observedList, + ObservedFormulas& obsFormulas) +{ + while (observedList != YAP_TermNil()) { + YAP_Term pair = YAP_HeadOfTerm (observedList); + YAP_Term ground = YAP_ArgOfTerm (1, pair); + Symbol functor; + Symbols args; + if (YAP_IsAtomTerm (ground)) { + string name ((char*) YAP_AtomName (YAP_AtomOfTerm (ground))); + functor = LiftedUtils::getSymbol (name); + } else { + assert (YAP_IsApplTerm (ground)); + YAP_Functor yapFunctor = YAP_FunctorOfTerm (ground); + string name ((char*) (YAP_AtomName (YAP_NameOfFunctor (yapFunctor)))); + functor = LiftedUtils::getSymbol (name); + unsigned arity = (unsigned) YAP_ArityOfFunctor (yapFunctor); + for (unsigned i = 1; i <= arity; i++) { + YAP_Term ti = YAP_ArgOfTerm (i, ground); + assert (YAP_IsAtomTerm (ti)); + string arg ((char *) YAP_AtomName (YAP_AtomOfTerm (ti))); + args.push_back (LiftedUtils::getSymbol (arg)); + } + } + unsigned evidence = (unsigned) YAP_IntOfTerm (YAP_ArgOfTerm (2, pair)); + bool found = false; + cout << "has evidence()" << endl; + for (unsigned i = 0; i < obsFormulas.size(); i++) { + if (obsFormulas[i].functor() == functor && + obsFormulas[i].arity() == args.size() && + obsFormulas[i].evidence() == evidence) { + obsFormulas[i].addTuple (args); + found = true; + } + } + if (found == false) { + obsFormulas.push_back (ObservedFormula (functor, evidence, args)); + } + observedList = YAP_TailOfTerm (observedList); + } +} + + + +int +createGroundNetwork (void) +{ + string factorsType ((char*) YAP_AtomName (YAP_AtomOfTerm (YAP_ARG1))); + bool fromBayesNet = factorsType == "bayes"; + FactorGraph* fg = new FactorGraph (fromBayesNet); + YAP_Term factorList = YAP_ARG2; + while (factorList != YAP_TermNil()) { + YAP_Term factor = YAP_HeadOfTerm (factorList); + // read the var ids + VarIds varIds = readUnsignedList (YAP_ArgOfTerm (1, factor)); + // read the ranges + Ranges ranges = readUnsignedList (YAP_ArgOfTerm (2, factor)); + // read the parameters + Params params = readParameters (YAP_ArgOfTerm (3, factor)); + // read dist id + unsigned distId = (unsigned) YAP_IntOfTerm (YAP_ArgOfTerm (4, factor)); + fg->addFactor (Factor (varIds, ranges, params, distId)); + factorList = YAP_TailOfTerm (factorList); + } + + unsigned nrObservedVars = 0; + YAP_Term evidenceList = YAP_ARG3; + while (evidenceList != YAP_TermNil()) { + YAP_Term evTerm = YAP_HeadOfTerm (evidenceList); + unsigned vid = (unsigned) YAP_IntOfTerm ((YAP_ArgOfTerm (1, evTerm))); + unsigned ev = (unsigned) YAP_IntOfTerm ((YAP_ArgOfTerm (2, evTerm))); + assert (fg->getVarNode (vid)); + fg->getVarNode (vid)->setEvidence (ev); + evidenceList = YAP_TailOfTerm (evidenceList); + nrObservedVars ++; + } + if (Globals::verbosity > 0) { + cout << "factor graph contains " ; + cout << fg->nrVarNodes() << " variables " ; + cout << "(" << nrObservedVars << " observed) and " ; + cout << fg->nrFacNodes() << " factors " << endl; + } + YAP_Int p = (YAP_Int) (fg); + return YAP_Unify (YAP_MkIntTerm (p), YAP_ARG4); +} + + + +Params +readParameters (YAP_Term paramL) +{ + Params params; + assert (YAP_IsPairTerm (paramL)); + while (paramL != YAP_TermNil()) { + params.push_back ((double) YAP_FloatOfTerm (YAP_HeadOfTerm (paramL))); + paramL = YAP_TailOfTerm (paramL); + } + if (Globals::logDomain) { + Util::toLog (params); + } + return params; +} + + + +int +runLiftedSolver (void) +{ + LiftedNetwork* network = (LiftedNetwork*) YAP_IntOfTerm (YAP_ARG1); + YAP_Term taskList = YAP_ARG2; + vector results; + ParfactorList pfListCopy (*network->first); + FoveSolver::absorveEvidence (pfListCopy, *network->second); + while (taskList != YAP_TermNil()) { + Grounds queryVars; + YAP_Term jointList = YAP_HeadOfTerm (taskList); + while (jointList != YAP_TermNil()) { + YAP_Term ground = YAP_HeadOfTerm (jointList); + if (YAP_IsAtomTerm (ground)) { + string name ((char*) YAP_AtomName (YAP_AtomOfTerm (ground))); + queryVars.push_back (Ground (LiftedUtils::getSymbol (name))); + } else { + assert (YAP_IsApplTerm (ground)); + YAP_Functor yapFunctor = YAP_FunctorOfTerm (ground); + string name ((char*) (YAP_AtomName (YAP_NameOfFunctor (yapFunctor)))); + unsigned arity = (unsigned) YAP_ArityOfFunctor (yapFunctor); + Symbol functor = LiftedUtils::getSymbol (name); + Symbols args; + for (unsigned i = 1; i <= arity; i++) { + YAP_Term ti = YAP_ArgOfTerm (i, ground); + assert (YAP_IsAtomTerm (ti)); + string arg ((char *) YAP_AtomName (YAP_AtomOfTerm (ti))); + args.push_back (LiftedUtils::getSymbol (arg)); + } + queryVars.push_back (Ground (functor, args)); + } + jointList = YAP_TailOfTerm (jointList); + } + FoveSolver solver (pfListCopy); + if (Globals::verbosity > 0 && taskList == YAP_ARG2) { + solver.printSolverFlags(); + cout << endl; + } + if (queryVars.size() == 1) { + results.push_back (solver.getPosterioriOf (queryVars[0])); + } else { + results.push_back (solver.getJointDistributionOf (queryVars)); + } + taskList = YAP_TailOfTerm (taskList); + } + + YAP_Term list = YAP_TermNil(); + for (int i = results.size() - 1; i >= 0; i--) { + const Params& beliefs = results[i]; + YAP_Term queryBeliefsL = YAP_TermNil(); + for (int j = beliefs.size() - 1; j >= 0; j--) { + YAP_Int sl1 = YAP_InitSlot (list); + YAP_Term belief = YAP_MkFloatTerm (beliefs[j]); + queryBeliefsL = YAP_MkPairTerm (belief, queryBeliefsL); + list = YAP_GetFromSlot (sl1); + YAP_RecoverSlots (1); + } + list = YAP_MkPairTerm (queryBeliefsL, list); + } + + return YAP_Unify (list, YAP_ARG3); +} + + + +int +runGroundSolver (void) +{ + FactorGraph* fg = (FactorGraph*) YAP_IntOfTerm (YAP_ARG1); + vector tasks; + YAP_Term taskList = YAP_ARG2; + while (taskList != YAP_TermNil()) { + tasks.push_back (readUnsignedList (YAP_HeadOfTerm (taskList))); + taskList = YAP_TailOfTerm (taskList); + } + + vector results; + if (Globals::infAlgorithm == InfAlgorithms::VE) { + runVeSolver (fg, tasks, results); + } else { + runBpSolver (fg, tasks, results); + } + + YAP_Term list = YAP_TermNil(); + for (int i = results.size() - 1; i >= 0; i--) { + const Params& beliefs = results[i]; + YAP_Term queryBeliefsL = YAP_TermNil(); + for (int j = beliefs.size() - 1; j >= 0; j--) { + YAP_Int sl1 = YAP_InitSlot (list); + YAP_Term belief = YAP_MkFloatTerm (beliefs[j]); + queryBeliefsL = YAP_MkPairTerm (belief, queryBeliefsL); + list = YAP_GetFromSlot (sl1); + YAP_RecoverSlots (1); + } + list = YAP_MkPairTerm (queryBeliefsL, list); + } + return YAP_Unify (list, YAP_ARG3); +} + + + +void runVeSolver ( + FactorGraph* fg, + const vector& tasks, + vector& results) +{ + results.reserve (tasks.size()); + for (unsigned i = 0; i < tasks.size(); i++) { + FactorGraph* mfg = fg; + if (fg->isFromBayesNetwork()) { + // mfg = BayesBall::getMinimalFactorGraph (*fg, tasks[i]); + } + // VarElimSolver solver (*mfg); + VarElimSolver solver (*fg); //FIXME + if (Globals::verbosity > 0 && i == 0) { + solver.printSolverFlags(); + cout << endl; + } + results.push_back (solver.solveQuery (tasks[i])); + if (fg->isFromBayesNetwork()) { + // delete mfg; + } + } +} + + + +void runBpSolver ( + FactorGraph* fg, + const vector& tasks, + vector& results) +{ + std::set vids; + for (unsigned i = 0; i < tasks.size(); i++) { + Util::addToSet (vids, tasks[i]); + } + Solver* solver = 0; + FactorGraph* mfg = fg; + if (fg->isFromBayesNetwork()) { + //mfg = BayesBall::getMinimalFactorGraph ( + // *fg, VarIds (vids.begin(),vids.end())); + } + if (Globals::infAlgorithm == InfAlgorithms::BP) { + solver = new BpSolver (*fg); // FIXME + } else if (Globals::infAlgorithm == InfAlgorithms::CBP) { + CFactorGraph::checkForIdenticalFactors = false; + solver = new CbpSolver (*fg); // FIXME + } else { + cerr << "error: unknow solver" << endl; + abort(); + } + if (Globals::verbosity > 0) { + solver->printSolverFlags(); + cout << endl; + } + results.reserve (tasks.size()); + for (unsigned i = 0; i < tasks.size(); i++) { + results.push_back (solver->solveQuery (tasks[i])); + } + if (fg->isFromBayesNetwork()) { + //delete mfg; + } + delete solver; +} + + + +int +setParfactorsParams (void) +{ + LiftedNetwork* network = (LiftedNetwork*) YAP_IntOfTerm (YAP_ARG1); + ParfactorList* pfList = network->first; + YAP_Term distList = YAP_ARG2; + unordered_map paramsMap; + while (distList != YAP_TermNil()) { + YAP_Term dist = YAP_HeadOfTerm (distList); + unsigned distId = (unsigned) YAP_IntOfTerm (YAP_ArgOfTerm (1, dist)); + assert (Util::contains (paramsMap, distId) == false); + paramsMap[distId] = readParameters (YAP_ArgOfTerm (2, dist)); + distList = YAP_TailOfTerm (distList); + } + ParfactorList::iterator it = pfList->begin(); + while (it != pfList->end()) { + assert (Util::contains (paramsMap, (*it)->distId())); + // (*it)->setParams (paramsMap[(*it)->distId()]); + ++ it; + } + return TRUE; +} + + + +int +setFactorsParams (void) +{ + return TRUE; // TODO + FactorGraph* fg = (FactorGraph*) YAP_IntOfTerm (YAP_ARG1); + YAP_Term distList = YAP_ARG2; + unordered_map paramsMap; + while (distList != YAP_TermNil()) { + YAP_Term dist = YAP_HeadOfTerm (distList); + unsigned distId = (unsigned) YAP_IntOfTerm (YAP_ArgOfTerm (1, dist)); + assert (Util::contains (paramsMap, distId) == false); + paramsMap[distId] = readParameters (YAP_ArgOfTerm (2, dist)); + distList = YAP_TailOfTerm (distList); + } + const FacNodes& facNodes = fg->facNodes(); + for (unsigned i = 0; i < facNodes.size(); i++) { + unsigned distId = facNodes[i]->factor().distId(); + assert (Util::contains (paramsMap, distId)); + facNodes[i]->factor().setParams (paramsMap[distId]); + } + return TRUE; +} + + + +int +setVarsInformation (void) +{ + Var::clearVarsInfo(); + vector labels; + YAP_Term labelsL = YAP_ARG1; + while (labelsL != YAP_TermNil()) { + YAP_Atom atom = YAP_AtomOfTerm (YAP_HeadOfTerm (labelsL)); + labels.push_back ((char*) YAP_AtomName (atom)); + labelsL = YAP_TailOfTerm (labelsL); + } + unsigned count = 0; + YAP_Term stateNamesL = YAP_ARG2; + while (stateNamesL != YAP_TermNil()) { + States states; + YAP_Term namesL = YAP_HeadOfTerm (stateNamesL); + while (namesL != YAP_TermNil()) { + YAP_Atom atom = YAP_AtomOfTerm (YAP_HeadOfTerm (namesL)); + states.push_back ((char*) YAP_AtomName (atom)); + namesL = YAP_TailOfTerm (namesL); + } + Var::addVarInfo (count, labels[count], states); + count ++; + stateNamesL = YAP_TailOfTerm (stateNamesL); + } + return TRUE; +} + + + +int +setHorusFlag (void) +{ + string key ((char*) YAP_AtomName (YAP_AtomOfTerm (YAP_ARG1))); + string value; + if (key == "verbosity") { + stringstream ss; + ss << (int) YAP_IntOfTerm (YAP_ARG2); + ss >> value; + } else if (key == "accuracy") { + stringstream ss; + ss << (float) YAP_FloatOfTerm (YAP_ARG2); + ss >> value; + } else if (key == "max_iter") { + stringstream ss; + ss << (int) YAP_IntOfTerm (YAP_ARG2); + ss >> value; + } else { + value = ((char*) YAP_AtomName (YAP_AtomOfTerm (YAP_ARG2))); + } + return Util::setHorusFlag (key, value); +} + + + +int +freeGroundNetwork (void) +{ + delete (FactorGraph*) YAP_IntOfTerm (YAP_ARG1); + return TRUE; +} + + + +int +freeParfactors (void) +{ + LiftedNetwork* network = (LiftedNetwork*) YAP_IntOfTerm (YAP_ARG1); + delete network->first; + delete network->second; + delete network; + return TRUE; +} + + + +extern "C" void +init_predicates (void) +{ + YAP_UserCPredicate ("create_lifted_network", createLiftedNetwork, 3); + YAP_UserCPredicate ("create_ground_network", createGroundNetwork, 4); + YAP_UserCPredicate ("run_lifted_solver", runLiftedSolver, 3); + YAP_UserCPredicate ("run_ground_solver", runGroundSolver, 3); + YAP_UserCPredicate ("set_parfactors_params", setParfactorsParams, 2); + YAP_UserCPredicate ("set_factors_params", setFactorsParams, 2); + YAP_UserCPredicate ("set_vars_information", setVarsInformation, 2); + YAP_UserCPredicate ("set_horus_flag", setHorusFlag, 2); + YAP_UserCPredicate ("free_parfactors", freeParfactors, 1); + YAP_UserCPredicate ("free_ground_network", freeGroundNetwork, 1); +} + diff --git a/packages/CLPBN/horus/Indexer.h b/packages/CLPBN/horus/Indexer.h new file mode 100644 index 000000000..3ebe53f94 --- /dev/null +++ b/packages/CLPBN/horus/Indexer.h @@ -0,0 +1,296 @@ +#ifndef HORUS_STATESINDEXER_H +#define HORUS_STATESINDEXER_H + +#include +#include +#include + +#include +#include + +#include "Var.h" +#include "Util.h" + + + +class StatesIndexer +{ + public: + + StatesIndexer (const Ranges& ranges, bool calcOffsets = true) + { + size_ = 1; + indices_.resize (ranges.size(), 0); + ranges_ = ranges; + for (unsigned i = 0; i < ranges.size(); i++) { + size_ *= ranges[i]; + } + li_ = 0; + if (calcOffsets) { + calculateOffsets(); + } + } + + StatesIndexer (const Vars& vars, bool calcOffsets = true) + { + size_ = 1; + indices_.resize (vars.size(), 0); + ranges_.reserve (vars.size()); + for (unsigned i = 0; i < vars.size(); i++) { + ranges_.push_back (vars[i]->range()); + size_ *= vars[i]->range(); + } + li_ = 0; + if (calcOffsets) { + calculateOffsets(); + } + } + + void increment (void) + { + for (int i = ranges_.size() - 1; i >= 0; i--) { + indices_[i] ++; + if (indices_[i] != ranges_[i]) { + break; + } else { + indices_[i] = 0; + } + } + li_ ++; + } + + void increment (unsigned dim) + { + assert (dim < ranges_.size()); + assert (ranges_.size() == offsets_.size()); + assert (indices_[dim] < ranges_[dim]); + indices_[dim] ++; + li_ += offsets_[dim]; + } + + void incrementExcluding (unsigned skipDim) + { + assert (ranges_.size() == offsets_.size()); + for (int i = ranges_.size() - 1; i >= 0; i--) { + if (i != (int)skipDim) { + indices_[i] ++; + li_ += offsets_[i]; + if (indices_[i] != ranges_[i]) { + return; + } else { + indices_[i] = 0; + li_ -= offsets_[i] * ranges_[i]; + } + } + } + li_ = size_; + } + + unsigned linearIndex (void) const + { + return li_; + } + + const vector& indices (void) const + { + return indices_; + } + + StatesIndexer& operator ++ (void) + { + increment(); + return *this; + } + + operator unsigned (void) const + { + return li_; + } + + unsigned operator[] (unsigned dim) const + { + assert (valid()); + assert (dim < ranges_.size()); + return indices_[dim]; + } + + bool valid (void) const + { + return li_ < size_; + } + + void reset (void) + { + std::fill (indices_.begin(), indices_.end(), 0); + li_ = 0; + } + + void reset (unsigned dim) + { + indices_[dim] = 0; + li_ -= offsets_[dim] * ranges_[dim]; + } + + unsigned size (void) const + { + return size_ ; + } + + friend ostream& operator<< (ostream &os, const StatesIndexer& idx) + { + os << "(" << std::setw (2) << std::setfill('0') << idx.li_ << ") " ; + os << idx.indices_; + return os; + } + + private: + void calculateOffsets (void) + { + unsigned prod = 1; + offsets_.resize (ranges_.size()); + for (int i = ranges_.size() - 1; i >= 0; i--) { + offsets_[i] = prod; + prod *= ranges_[i]; + } + } + + unsigned li_; + unsigned size_; + vector indices_; + vector ranges_; + vector offsets_; +}; + + + +class MapIndexer +{ + public: + MapIndexer (const Ranges& ranges, const vector& mapDims) + { + assert (ranges.size() == mapDims.size()); + unsigned prod = 1; + offsets_.resize (ranges.size()); + for (int i = ranges.size() - 1; i >= 0; i--) { + if (mapDims[i]) { + offsets_[i] = prod; + prod *= ranges[i]; + } + } + indices_.resize (ranges.size(), 0); + ranges_ = ranges; + index_ = 0; + valid_ = true; + } + + MapIndexer (const Ranges& ranges, unsigned ignoreDim) + { + unsigned prod = 1; + offsets_.resize (ranges.size()); + for (int i = ranges.size() - 1; i >= 0; i--) { + if (i != (int)ignoreDim) { + offsets_[i] = prod; + prod *= ranges[i]; + } + } + indices_.resize (ranges.size(), 0); + ranges_ = ranges; + index_ = 0; + valid_ = true; + } + + /* + MapIndexer ( + const VarIds& loopVids, + const Ranges& loopRanges, + const VarIds& mapVids, + const Ranges& mapRanges) + { + unsigned prod = 1; + vector offsets (mapRanges.size()); + for (int i = mapRanges.size() - 1; i >= 0; i--) { + offsets[i] = prod; + prod *= mapRanges[i]; + } + + offsets_.reserve (loopVids.size()); + for (unsigned i = 0; i < loopVids.size(); i++) { + VarIds::const_iterator it = + std::find (mapVids.begin(), mapVids.end(), loopVids[i]); + if (it != mapVids.end()) { + offsets_.push_back (offsets[it - mapVids.begin()]); + } else { + offsets_.push_back (0); + } + } + + indices_.resize (loopVids.size(), 0); + ranges_ = loopRanges; + index_ = 0; + size_ = prod; + } + */ + + MapIndexer& operator ++ (void) + { + assert (valid_); + for (int i = ranges_.size() - 1; i >= 0; i--) { + indices_[i] ++; + index_ += offsets_[i]; + if (indices_[i] != ranges_[i]) { + return *this; + } else { + indices_[i] = 0; + index_ -= offsets_[i] * ranges_[i]; + } + } + valid_ = false; + return *this; + } + + unsigned mappedIndex (void) const + { + return index_; + } + + operator unsigned (void) const + { + return index_; + } + + unsigned operator[] (unsigned dim) const + { + assert (valid()); + assert (dim < ranges_.size()); + return indices_[dim]; + } + + bool valid (void) const + { + return valid_; + } + + void reset (void) + { + std::fill (indices_.begin(), indices_.end(), 0); + index_ = 0; + } + + friend ostream& operator<< (ostream &os, const MapIndexer& idx) + { + os << "(" << std::setw (2) << std::setfill('0') << idx.index_ << ") " ; + os << idx.indices_; + return os; + } + + private: + unsigned index_; + bool valid_; + vector ranges_; + vector indices_; + vector offsets_; +}; + + +#endif // HORUS_STATESINDEXER_H + diff --git a/packages/CLPBN/horus/LiftedUtils.cpp b/packages/CLPBN/horus/LiftedUtils.cpp new file mode 100644 index 000000000..6df19b85d --- /dev/null +++ b/packages/CLPBN/horus/LiftedUtils.cpp @@ -0,0 +1,131 @@ +#include + +#include +#include +#include + +#include "LiftedUtils.h" +#include "ConstraintTree.h" + + +namespace LiftedUtils { + + +unordered_map symbolDict; + + +Symbol +getSymbol (const string& symbolName) +{ + unordered_map::iterator it + = symbolDict.find (symbolName); + if (it != symbolDict.end()) { + return it->second; + } else { + symbolDict[symbolName] = symbolDict.size() - 1; + return symbolDict.size() - 1; + } +} + + + +void +printSymbolDictionary (void) +{ + unordered_map::const_iterator it + = symbolDict.begin(); + while (it != symbolDict.end()) { + cout << it->first << " -> " << it->second << endl; + it ++; + } +} + +} + + + +ostream& operator<< (ostream &os, const Symbol& s) +{ + unordered_map::const_iterator it + = LiftedUtils::symbolDict.begin(); + while (it != LiftedUtils::symbolDict.end() && it->second != s) { + it ++; + } + assert (it != LiftedUtils::symbolDict.end()); + os << it->first; + return os; +} + + + +ostream& operator<< (ostream &os, const LogVar& X) +{ + const string labels[] = { + "A", "B", "C", "D", "E", "F", + "G", "H", "I", "J", "K", "M" }; + (X >= 12) ? os << "X_" << X.id_ : os << labels[X]; + return os; +} + + + +ostream& operator<< (ostream &os, const Tuple& t) +{ + os << "(" ; + for (unsigned i = 0; i < t.size(); i++) { + os << ((i != 0) ? "," : "") << t[i]; + } + os << ")" ; + return os; +} + + + +ostream& operator<< (ostream &os, const Ground& gr) +{ + os << gr.functor(); + os << "(" ; + for (unsigned i = 0; i < gr.args().size(); i++) { + if (i != 0) os << ", " ; + os << gr.args()[i]; + } + os << ")" ; + return os; +} + + + +LogVars +Substitution::getDiscardedLogVars (void) const +{ + LogVars discardedLvs; + set doneLvs; + unordered_map::const_iterator it; + it = subs_.begin(); + while (it != subs_.end()) { + if (Util::contains (doneLvs, it->second)) { + discardedLvs.push_back (it->first); + } else { + doneLvs.insert (it->second); + } + it ++; + } + return discardedLvs; +} + + + +ostream& operator<< (ostream &os, const Substitution& theta) +{ + unordered_map::const_iterator it; + os << "[" ; + it = theta.subs_.begin(); + while (it != theta.subs_.end()) { + if (it != theta.subs_.begin()) os << ", " ; + os << it->first << "->" << it->second ; + ++ it; + } + os << "]" ; + return os; +} + diff --git a/packages/CLPBN/horus/LiftedUtils.h b/packages/CLPBN/horus/LiftedUtils.h new file mode 100644 index 000000000..d89fe477b --- /dev/null +++ b/packages/CLPBN/horus/LiftedUtils.h @@ -0,0 +1,166 @@ +#ifndef HORUS_LIFTEDUTILS_H +#define HORUS_LIFTEDUTILS_H + +#include +#include +#include +#include + + +#include "TinySet.h" +#include "Util.h" + + +using namespace std; + + +class Symbol +{ + public: + Symbol (void) : id_(Util::maxUnsigned()) { } + + Symbol (unsigned id) : id_(id) { } + + operator unsigned (void) const { return id_; } + + bool valid (void) const { return id_ != Util::maxUnsigned(); } + + static Symbol invalid (void) { return Symbol(); } + + friend ostream& operator<< (ostream &os, const Symbol& s); + + private: + unsigned id_; +}; + + +class LogVar +{ + public: + LogVar (void) : id_(Util::maxUnsigned()) { } + + LogVar (unsigned id) : id_(id) { } + + operator unsigned (void) const { return id_; } + + LogVar& operator++ (void) + { + assert (valid()); + id_ ++; + return *this; + } + + bool valid (void) const + { + return id_ != Util::maxUnsigned(); + } + + friend ostream& operator<< (ostream &os, const LogVar& X); + + private: + unsigned id_; +}; + + +namespace std { +template <> struct hash { + size_t operator() (const Symbol& s) const { + return std::hash() (s); + }}; + +template <> struct hash { + size_t operator() (const LogVar& X) const { + return std::hash() (X); + }}; +}; + + +typedef vector Symbols; +typedef vector Tuple; +typedef vector Tuples; +typedef vector LogVars; +typedef TinySet SymbolSet; +typedef TinySet LogVarSet; +typedef TinySet TupleSet; + + +ostream& operator<< (ostream &os, const Tuple& t); + + +namespace LiftedUtils { +Symbol getSymbol (const string&); +void printSymbolDictionary (void); +} + + + +class Ground +{ + public: + Ground (Symbol f) : functor_(f) { } + + Ground (Symbol f, const Symbols& args) : functor_(f), args_(args) { } + + Symbol functor (void) const { return functor_; } + + Symbols args (void) const { return args_; } + + unsigned arity (void) const { return args_.size(); } + + bool isAtom (void) const { return args_.size() == 0; } + + friend ostream& operator<< (ostream &os, const Ground& gr); + + private: + Symbol functor_; + Symbols args_; +}; + +typedef vector Grounds; + + + +class Substitution +{ + public: + void add (LogVar X_old, LogVar X_new) + { + assert (Util::contains (subs_, X_old) == false); + subs_.insert (make_pair (X_old, X_new)); + } + + void rename (LogVar X_old, LogVar X_new) + { + assert (Util::contains (subs_, X_old)); + subs_.find (X_old)->second = X_new; + } + + LogVar newNameFor (LogVar X) const + { + unordered_map::const_iterator it; + it = subs_.find (X); + if (it != subs_.end()) { + return subs_.find (X)->second; + } + return X; + } + + bool containsReplacementFor (LogVar X) const + { + return Util::contains (subs_, X); + } + + unsigned nrReplacements (void) const { return subs_.size(); } + + LogVars getDiscardedLogVars (void) const; + + friend ostream& operator<< (ostream &os, const Substitution& theta); + + private: + unordered_map subs_; + +}; + + +#endif // HORUS_LIFTEDUTILS_H + diff --git a/packages/CLPBN/horus/Makefile.in b/packages/CLPBN/horus/Makefile.in new file mode 100644 index 000000000..553535979 --- /dev/null +++ b/packages/CLPBN/horus/Makefile.in @@ -0,0 +1,177 @@ +# +# default base directory for YAP installation +# (EROOT for architecture-dependent files) +# +GCC = @GCC@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ +ROOTDIR = $(prefix) +EROOTDIR = @exec_prefix@ +abs_top_builddir = @abs_top_builddir@ +# +# where the binary should be +# +BINDIR = $(EROOTDIR)/bin +# +# where YAP should look for libraries +# +LIBDIR=@libdir@ +YAPLIBDIR=@libdir@/Yap +# +# +CC=@CC@ +CXX=@CXX@ + +# normal +#CXXFLAGS= -std=c++0x @SHLIB_CXXFLAGS@ $(YAP_EXTRAS) $(DEFS) -D_YAP_NOT_INSTALLED_=1 -I$(srcdir) -I../../../.. -I$(srcdir)/../../../../include @CPPFLAGS@ -DNDEBUG + +# debug +CXXFLAGS= -std=c++0x @SHLIB_CXXFLAGS@ $(YAP_EXTRAS) $(DEFS) -D_YAP_NOT_INSTALLED_=1 -I$(srcdir) -I../../../.. -I$(srcdir)/../../../../include @CPPFLAGS@ -g -O0 -Wextra + + +# +# +# You shouldn't need to change what follows. +# +INSTALL=@INSTALL@ +INSTALL_DATA=@INSTALL_DATA@ +INSTALL_PROGRAM=@INSTALL_PROGRAM@ +SHELL=/bin/sh +RANLIB=@RANLIB@ +srcdir=@srcdir@ +SO=@SO@ +#4.1VPATH=@srcdir@:@srcdir@/OPTYap +CWD=$(PWD) + + +HEADERS = \ + $(srcdir)/BayesNet.h \ + $(srcdir)/BayesBall.h \ + $(srcdir)/ElimGraph.h \ + $(srcdir)/FactorGraph.h \ + $(srcdir)/Factor.h \ + $(srcdir)/CFactorGraph.h \ + $(srcdir)/ConstraintTree.h \ + $(srcdir)/Solver.h \ + $(srcdir)/VarElimSolver.h \ + $(srcdir)/BpSolver.h \ + $(srcdir)/CbpSolver.h \ + $(srcdir)/FoveSolver.h \ + $(srcdir)/Var.h \ + $(srcdir)/Indexer.h \ + $(srcdir)/Parfactor.h \ + $(srcdir)/ProbFormula.h \ + $(srcdir)/Histogram.h \ + $(srcdir)/ParfactorList.h \ + $(srcdir)/LiftedUtils.h \ + $(srcdir)/TinySet.h \ + $(srcdir)/Util.h \ + $(srcdir)/Horus.h + +CPP_SOURCES = \ + $(srcdir)/BayesNet.cpp \ + $(srcdir)/BayesBall.cpp \ + $(srcdir)/ElimGraph.cpp \ + $(srcdir)/FactorGraph.cpp \ + $(srcdir)/Factor.cpp \ + $(srcdir)/CFactorGraph.cpp \ + $(srcdir)/ConstraintTree.cpp \ + $(srcdir)/Var.cpp \ + $(srcdir)/Solver.cpp \ + $(srcdir)/VarElimSolver.cpp \ + $(srcdir)/BpSolver.cpp \ + $(srcdir)/CbpSolver.cpp \ + $(srcdir)/FoveSolver.cpp \ + $(srcdir)/Parfactor.cpp \ + $(srcdir)/ProbFormula.cpp \ + $(srcdir)/Histogram.cpp \ + $(srcdir)/ParfactorList.cpp \ + $(srcdir)/LiftedUtils.cpp \ + $(srcdir)/Util.cpp \ + $(srcdir)/HorusYap.cpp \ + $(srcdir)/HorusCli.cpp + +OBJS = \ + BayesNet.o \ + BayesBall.o \ + ElimGraph.o \ + FactorGraph.o \ + Factor.o \ + CFactorGraph.o \ + ConstraintTree.o \ + Var.o \ + Solver.o \ + VarElimSolver.o \ + BpSolver.o \ + CbpSolver.o \ + FoveSolver.o \ + Parfactor.o \ + ProbFormula.o \ + Histogram.o \ + ParfactorList.o \ + LiftedUtils.o \ + Util.o \ + HorusYap.o + +HCLI_OBJS = \ + BayesNet.o \ + BayesBall.o \ + ElimGraph.o \ + FactorGraph.o \ + Factor.o \ + CFactorGraph.o \ + ConstraintTree.o \ + Var.o \ + Solver.o \ + VarElimSolver.o \ + BpSolver.o \ + CbpSolver.o \ + FoveSolver.o \ + Parfactor.o \ + ProbFormula.o \ + Histogram.o \ + ParfactorList.o \ + LiftedUtils.o \ + Util.o \ + HorusCli.o + +SOBJS=horus.@SO@ + + +all: $(SOBJS) hcli + +# default rule +%.o : $(srcdir)/%.cpp + $(CXX) -c $(CXXFLAGS) $< -o $@ + + +@DO_SECOND_LD@horus.@SO@: $(OBJS) +@DO_SECOND_LD@ @SHLIB_CXX_LD@ -o horus.@SO@ $(OBJS) @EXTRA_LIBS_FOR_SWIDLLS@ + + +hcli: $(HCLI_OBJS) + $(CXX) -o hcli $(HCLI_OBJS) + + +install: all + $(INSTALL_PROGRAM) $(SOBJS) $(DESTDIR) $(YAPLIBDIR) + + +clean: + rm -f *.o *~ $(OBJS) $(SOBJS) *.BAK hcli + + +erase_dots: + rm -f *.dot *.png + + +depend: $(HEADERS) $(CPP_SOURCES) + -@if test "$(GCC)" = yes; then\ + $(CC) -std=c++0x -MM -MG $(CFLAGS) -I$(srcdir) -I$(srcdir)/../../../../include -I$(srcdir)/../../../../H $(CPP_SOURCES) >> Makefile;\ + else\ + makedepend -f - -- $(CFLAGS) -I$(srcdir)/../../../../H -I$(srcdir)/../../../../include -- $(CPP_SOURCES) |\ + sed 's|.*/\([^:]*\):|\1:|' >> Makefile ;\ + fi + +# DO NOT DELETE THIS LINE -- make depend depends on it. + diff --git a/packages/CLPBN/horus/Parfactor.cpp b/packages/CLPBN/horus/Parfactor.cpp new file mode 100644 index 000000000..50813694c --- /dev/null +++ b/packages/CLPBN/horus/Parfactor.cpp @@ -0,0 +1,911 @@ + +#include "Parfactor.h" +#include "Histogram.h" +#include "Indexer.h" +#include "Util.h" +#include "Horus.h" + + +Parfactor::Parfactor ( + const ProbFormulas& formulas, + const Params& params, + const Tuples& tuples, + unsigned distId) +{ + args_ = formulas; + params_ = params; + distId_ = distId; + + LogVars logVars; + for (unsigned i = 0; i < args_.size(); i++) { + ranges_.push_back (args_[i].range()); + const LogVars& lvs = args_[i].logVars(); + for (unsigned j = 0; j < lvs.size(); j++) { + if (Util::contains (logVars, lvs[j]) == false) { + logVars.push_back (lvs[j]); + } + } + } + constr_ = new ConstraintTree (logVars, tuples); + assert (params_.size() == Util::expectedSize (ranges_)); +} + + + +Parfactor::Parfactor (const Parfactor* g, const Tuple& tuple) +{ + args_ = g->arguments(); + params_ = g->params(); + ranges_ = g->ranges(); + distId_ = g->distId(); + constr_ = new ConstraintTree (g->logVars(), {tuple}); + assert (params_.size() == Util::expectedSize (ranges_)); +} + + + +Parfactor::Parfactor (const Parfactor* g, ConstraintTree* constr) +{ + args_ = g->arguments(); + params_ = g->params(); + ranges_ = g->ranges(); + distId_ = g->distId(); + constr_ = constr; + assert (params_.size() == Util::expectedSize (ranges_)); +} + + + +Parfactor::Parfactor (const Parfactor& g) +{ + args_ = g.arguments(); + params_ = g.params(); + ranges_ = g.ranges(); + distId_ = g.distId(); + constr_ = new ConstraintTree (*g.constr()); + assert (params_.size() == Util::expectedSize (ranges_)); +} + + + +Parfactor::~Parfactor (void) +{ + delete constr_; +} + + + +LogVarSet +Parfactor::countedLogVars (void) const +{ + LogVarSet set; + for (unsigned i = 0; i < args_.size(); i++) { + if (args_[i].isCounting()) { + set.insert (args_[i].countedLogVar()); + } + } + return set; +} + + + +LogVarSet +Parfactor::uncountedLogVars (void) const +{ + return constr_->logVarSet() - countedLogVars(); +} + + + +LogVarSet +Parfactor::elimLogVars (void) const +{ + LogVarSet requiredToElim = constr_->logVarSet(); + requiredToElim -= constr_->singletons(); + requiredToElim -= countedLogVars(); + return requiredToElim; +} + + + +LogVarSet +Parfactor::exclusiveLogVars (unsigned fIdx) const +{ + assert (fIdx < args_.size()); + LogVarSet remaining; + for (unsigned i = 0; i < args_.size(); i++) { + if (i != fIdx) { + remaining |= args_[i].logVarSet(); + } + } + return args_[fIdx].logVarSet() - remaining; +} + + + +void +Parfactor::setConstraintTree (ConstraintTree* newTree) +{ + delete constr_; + constr_ = newTree; +} + + + +void +Parfactor::sumOut (unsigned fIdx) +{ + assert (fIdx < args_.size()); + assert (args_[fIdx].contains (elimLogVars())); + + if (args_[fIdx].isCounting()) { + unsigned N = constr_->getConditionalCount ( + args_[fIdx].countedLogVar()); + unsigned R = args_[fIdx].range(); + vector numAssigns = HistogramSet::getNumAssigns (N, R); + StatesIndexer sindexer (ranges_, fIdx); + while (sindexer.valid()) { + unsigned h = sindexer[fIdx]; + if (Globals::logDomain) { + params_[sindexer] += numAssigns[h]; + } else { + params_[sindexer] *= numAssigns[h]; + } + ++ sindexer; + } + } + + Params copy = params_; + params_.clear(); + params_.resize (copy.size() / ranges_[fIdx], LogAware::addIdenty()); + MapIndexer indexer (ranges_, fIdx); + if (Globals::logDomain) { + for (unsigned i = 0; i < copy.size(); i++) { + params_[indexer] = Util::logSum (params_[indexer], copy[i]); + ++ indexer; + } + } else { + for (unsigned i = 0; i < copy.size(); i++) { + params_[indexer] += copy[i]; + ++ indexer; + } + } + + LogVarSet excl = exclusiveLogVars (fIdx); + if (args_[fIdx].isCounting()) { + // counting log vars were already raised on counting conversion + LogAware::pow (params_, constr_->getConditionalCount ( + excl - args_[fIdx].countedLogVar())); + } else { + LogAware::pow (params_, constr_->getConditionalCount (excl)); + } + constr_->remove (excl); + + args_.erase (args_.begin() + fIdx); + ranges_.erase (ranges_.begin() + fIdx); +} + + + +void +Parfactor::multiply (Parfactor& g) +{ + alignAndExponentiate (this, &g); + TFactor::multiply (g); + constr_->join (g.constr(), true); + simplifyGrounds(); + assert (constr_->isCartesianProduct (countedLogVars())); +} + + + +bool +Parfactor::canCountConvert (LogVar X) +{ + if (nrFormulas (X) != 1) { + return false; + } + int fIdx = indexOfLogVar (X); + if (args_[fIdx].isCounting()) { + return false; + } + if (constr_->isCountNormalized (X) == false) { + return false; + } + if (constr_->getConditionalCount (X) == 1) { + return false; + } + if (constr_->isCartesianProduct (countedLogVars() | X) == false) { + return false; + } + return true; +} + + + +void +Parfactor::countConvert (LogVar X) +{ + int fIdx = indexOfLogVar (X); + assert (constr_->isCountNormalized (X)); + assert (constr_->getConditionalCount (X) > 1); + assert (canCountConvert (X)); + + unsigned N = constr_->getConditionalCount (X); + unsigned R = ranges_[fIdx]; + unsigned H = HistogramSet::nrHistograms (N, R); + vector histograms = HistogramSet::getHistograms (N, R); + + StatesIndexer indexer (ranges_); + vector sumout (params_.size() / R); + unsigned count = 0; + while (indexer.valid()) { + sumout[count].reserve (R); + for (unsigned r = 0; r < R; r++) { + sumout[count].push_back (params_[indexer]); + indexer.increment (fIdx); + } + count ++; + indexer.reset (fIdx); + indexer.incrementExcluding (fIdx); + } + + params_.clear(); + params_.reserve (sumout.size() * H); + + ranges_[fIdx] = H; + MapIndexer mapIndexer (ranges_, fIdx); + while (mapIndexer.valid()) { + double prod = LogAware::multIdenty(); + unsigned i = mapIndexer.mappedIndex(); + unsigned h = mapIndexer[fIdx]; + for (unsigned r = 0; r < R; r++) { + if (Globals::logDomain) { + prod += LogAware::pow (sumout[i][r], histograms[h][r]); + } else { + prod *= LogAware::pow (sumout[i][r], histograms[h][r]); + } + } + params_.push_back (prod); + ++ mapIndexer; + } + args_[fIdx].setCountedLogVar (X); + simplifyCountingFormulas (fIdx); +} + + + +void +Parfactor::expand (LogVar X, LogVar X_new1, LogVar X_new2) +{ + int fIdx = indexOfLogVar (X); + assert (fIdx != -1); + assert (args_[fIdx].isCounting()); + + unsigned N1 = constr_->getConditionalCount (X_new1); + unsigned N2 = constr_->getConditionalCount (X_new2); + unsigned N = N1 + N2; + unsigned R = args_[fIdx].range(); + unsigned H1 = HistogramSet::nrHistograms (N1, R); + unsigned H2 = HistogramSet::nrHistograms (N2, R); + + vector histograms = HistogramSet::getHistograms (N, R); + vector histograms1 = HistogramSet::getHistograms (N1, R); + vector histograms2 = HistogramSet::getHistograms (N2, R); + + vector sumIndexes; + sumIndexes.reserve (H1 * H2); + for (unsigned i = 0; i < H1; i++) { + for (unsigned j = 0; j < H2; j++) { + Histogram hist = histograms1[i]; + std::transform ( + hist.begin(), hist.end(), + histograms2[j].begin(), + hist.begin(), + plus()); + sumIndexes.push_back (HistogramSet::findIndex (hist, histograms)); + } + } + + expandPotential (fIdx, H1 * H2, sumIndexes); + + args_.insert (args_.begin() + fIdx + 1, args_[fIdx]); + args_[fIdx].rename (X, X_new1); + args_[fIdx + 1].rename (X, X_new2); + if (H1 == 2) { + args_[fIdx].clearCountedLogVar(); + } + if (H2 == 2) { + args_[fIdx + 1].clearCountedLogVar(); + } + ranges_.insert (ranges_.begin() + fIdx + 1, H2); + ranges_[fIdx] = H1; +} + + + +void +Parfactor::fullExpand (LogVar X) +{ + int fIdx = indexOfLogVar (X); + assert (fIdx != -1); + assert (args_[fIdx].isCounting()); + + unsigned N = constr_->getConditionalCount (X); + unsigned R = args_[fIdx].range(); + vector originHists = HistogramSet::getHistograms (N, R); + vector expandHists = HistogramSet::getHistograms (1, R); + assert (ranges_[fIdx] == originHists.size()); + vector sumIndexes; + sumIndexes.reserve (N * R); + + Ranges expandRanges (N, R); + StatesIndexer indexer (expandRanges); + while (indexer.valid()) { + vector hist (R, 0); + for (unsigned n = 0; n < N; n++) { + std::transform ( + hist.begin(), hist.end(), + expandHists[indexer[n]].begin(), + hist.begin(), + plus()); + } + sumIndexes.push_back (HistogramSet::findIndex (hist, originHists)); + ++ indexer; + } + + expandPotential (fIdx, std::pow (R, N), sumIndexes); + + ProbFormula f = args_[fIdx]; + args_.erase (args_.begin() + fIdx); + ranges_.erase (ranges_.begin() + fIdx); + LogVars newLvs = constr_->expand (X); + assert (newLvs.size() == N); + for (unsigned i = 0 ; i < N; i++) { + ProbFormula newFormula (f.functor(), f.logVars(), f.range()); + newFormula.rename (X, newLvs[i]); + args_.insert (args_.begin() + fIdx + i, newFormula); + ranges_.insert (ranges_.begin() + fIdx + i, R); + } +} + + + +void +Parfactor::reorderAccordingGrounds (const Grounds& grounds) +{ + ProbFormulas newFormulas; + for (unsigned i = 0; i < grounds.size(); i++) { + for (unsigned j = 0; j < args_.size(); j++) { + if (grounds[i].functor() == args_[j].functor() && + grounds[i].arity() == args_[j].arity()) { + constr_->moveToTop (args_[j].logVars()); + if (constr_->containsTuple (grounds[i].args())) { + newFormulas.push_back (args_[j]); + break; + } + } + } + assert (newFormulas.size() == i + 1); + } + reorderArguments (newFormulas); +} + + + +void +Parfactor::absorveEvidence (const ProbFormula& formula, unsigned evidence) +{ + int fIdx = indexOf (formula); + assert (fIdx != -1); + LogVarSet excl = exclusiveLogVars (fIdx); + assert (args_[fIdx].isCounting() == false); + assert (constr_->isCountNormalized (excl)); + LogAware::pow (params_, constr_->getConditionalCount (excl)); + TFactor::absorveEvidence (formula, evidence); + constr_->remove (excl); +} + + + +void +Parfactor::setNewGroups (void) +{ + for (unsigned i = 0; i < args_.size(); i++) { + args_[i].setGroup (ProbFormula::getNewGroup()); + } +} + + + +void +Parfactor::applySubstitution (const Substitution& theta) +{ + for (unsigned i = 0; i < args_.size(); i++) { + LogVars& lvs = args_[i].logVars(); + for (unsigned j = 0; j < lvs.size(); j++) { + lvs[j] = theta.newNameFor (lvs[j]); + } + if (args_[i].isCounting()) { + LogVar clv = args_[i].countedLogVar(); + args_[i].setCountedLogVar (theta.newNameFor (clv)); + } + } + constr_->applySubstitution (theta); +} + + + +int +Parfactor::findGroup (const Ground& ground) const +{ + int group = -1; + for (unsigned i = 0; i < args_.size(); i++) { + if (args_[i].functor() == ground.functor() && + args_[i].arity() == ground.arity()) { + constr_->moveToTop (args_[i].logVars()); + if (constr_->containsTuple (ground.args())) { + group = args_[i].group(); + break; + } + } + } + return group; +} + + + +bool +Parfactor::containsGround (const Ground& ground) const +{ + return findGroup (ground) != -1; +} + + + +bool +Parfactor::containsGroup (unsigned group) const +{ + for (unsigned i = 0; i < args_.size(); i++) { + if (args_[i].group() == group) { + return true; + } + } + return false; +} + + + +unsigned +Parfactor::nrFormulas (LogVar X) const +{ + unsigned count = 0; + for (unsigned i = 0; i < args_.size(); i++) { + if (args_[i].contains (X)) { + count ++; + } + } + return count; +} + + + +int +Parfactor::indexOfLogVar (LogVar X) const +{ + int idx = -1; + assert (nrFormulas (X) == 1); + for (unsigned i = 0; i < args_.size(); i++) { + if (args_[i].contains (X)) { + idx = i; + break; + } + } + return idx; +} + + + +int +Parfactor::indexOfGroup (unsigned group) const +{ + int pos = -1; + for (unsigned i = 0; i < args_.size(); i++) { + if (args_[i].group() == group) { + pos = i; + break; + } + } + return pos; +} + + + +unsigned +Parfactor::nrFormulasWithGroup (unsigned group) const +{ + unsigned count = 0; + for (unsigned i = 0; i < args_.size(); i++) { + if (args_[i].group() == group) { + count ++; + } + } + return count; +} + + + +vector +Parfactor::getAllGroups (void) const +{ + vector groups (args_.size()); + for (unsigned i = 0; i < args_.size(); i++) { + groups[i] = args_[i].group(); + } + return groups; +} + + + +string +Parfactor::getLabel (void) const +{ + stringstream ss; + ss << "phi(" ; + for (unsigned i = 0; i < args_.size(); i++) { + if (i != 0) ss << "," ; + ss << args_[i]; + } + ss << ")" ; + ConstraintTree copy (*constr_); + copy.moveToTop (copy.logVarSet().elements()); + ss << "|" << copy.tupleSet(); + return ss.str(); +} + + + +void +Parfactor::print (bool printParams) const +{ + cout << "Formulas: " ; + for (unsigned i = 0; i < args_.size(); i++) { + if (i != 0) cout << ", " ; + cout << args_[i]; + } + cout << endl; + if (args_[0].group() != Util::maxUnsigned()) { + vector groups; + for (unsigned i = 0; i < args_.size(); i++) { + groups.push_back (string ("g") + Util::toString (args_[i].group())); + } + cout << "Groups: " << groups << endl; + } + cout << "LogVars: " << constr_->logVarSet() << endl; + cout << "Ranges: " << ranges_ << endl; + if (printParams == false) { + cout << "Params: " ; + if (params_.size() <= 32) { + cout.precision(10); + cout << params_ << endl; + } else { + cout << "|" << params_.size() << "|" << endl; + } + } + ConstraintTree copy (*constr_); + copy.moveToTop (copy.logVarSet().elements()); + cout << "Tuples: " << copy.tupleSet() << endl; + if (printParams) { + printParameters(); + } +} + + + +void +Parfactor::printParameters (void) const +{ + vector jointStrings; + StatesIndexer indexer (ranges_); + while (indexer.valid()) { + stringstream ss; + for (unsigned i = 0; i < args_.size(); i++) { + if (i != 0) ss << ", " ; + if (args_[i].isCounting()) { + unsigned N = constr_->getConditionalCount ( + args_[i].countedLogVar()); + HistogramSet hs (N, args_[i].range()); + unsigned c = 0; + while (c < indexer[i]) { + hs.nextHistogram(); + c ++; + } + ss << hs; + } else { + ss << indexer[i]; + } + } + jointStrings.push_back (ss.str()); + ++ indexer; + } + for (unsigned i = 0; i < params_.size(); i++) { + cout << "f(" << jointStrings[i] << ")" ; + cout << " = " << params_[i] << endl; + } +} + + + +void +Parfactor::printProjections (void) const +{ + ConstraintTree copy (*constr_); + + LogVarSet Xs = copy.logVarSet(); + for (unsigned i = 0; i < Xs.size(); i++) { + cout << "-> projection of " << Xs[i] << ": " ; + cout << copy.tupleSet ({Xs[i]}) << endl; + } +} + + + +void +Parfactor::expandPotential ( + int fIdx, + unsigned newRange, + const vector& sumIndexes) +{ + ullong newSize = (params_.size() / ranges_[fIdx]) * newRange; + if (newSize > params_.max_size()) { + cerr << "error: an overflow occurred when performing expansion" ; + cerr << endl; + abort(); + } + + Params copy = params_; + params_.clear(); + params_.reserve (newSize); + + unsigned prod = 1; + vector offsets_ (ranges_.size()); + for (int i = ranges_.size() - 1; i >= 0; i--) { + offsets_[i] = prod; + prod *= ranges_[i]; + } + + unsigned index = 0; + ranges_[fIdx] = newRange; + vector indices (ranges_.size(), 0); + for (unsigned k = 0; k < newSize; k++) { + if (index >= copy.size()) { + abort(); + } + assert (index < copy.size()); + params_.push_back (copy[index]); + for (int i = ranges_.size() - 1; i >= 0; i--) { + indices[i] ++; + if (i == fIdx) { + if (indices[i] != ranges_[i]) { + int diff = sumIndexes[indices[i]] - sumIndexes[indices[i] - 1]; + index += diff * offsets_[i]; + break; + } else { + // last index contains the old range minus 1 + index -= sumIndexes.back() * offsets_[i]; + indices[i] = 0; + } + } else { + if (indices[i] != ranges_[i]) { + index += offsets_[i]; + break; + } else { + index -= (ranges_[i] - 1) * offsets_[i]; + indices[i] = 0; + } + } + } + } +} + + + +void +Parfactor::simplifyCountingFormulas (int fIdx) +{ + // check if we can simplify the parfactor + for (unsigned i = 0; i < args_.size(); i++) { + if ((int)i != fIdx && + args_[i].isCounting() && + args_[i].group() == args_[fIdx].group()) { + // if they only differ in the name of the counting log var + if ((args_[i].logVarSet() - args_[i].countedLogVar()) == + (args_[fIdx].logVarSet()) - args_[fIdx].countedLogVar() && + ranges_[i] == ranges_[fIdx]) { + simplifyParfactor (fIdx, i); + break; + } + } + } +} + + + +void +Parfactor::simplifyGrounds (void) +{ + LogVarSet singletons = constr_->singletons(); + for (int i = 0; i < (int)args_.size() - 1; i++) { + for (unsigned j = i + 1; j < args_.size(); j++) { + if (args_[i].group() == args_[j].group() && + singletons.contains (args_[i].logVarSet()) && + singletons.contains (args_[j].logVarSet())) { + simplifyParfactor (i, j); + i --; + break; + } + } + } +} + + + +bool +Parfactor::canMultiply (Parfactor* g1, Parfactor* g2) +{ + std::pair res = getAlignLogVars (g1, g2); + LogVarSet Xs_1 (res.first); + LogVarSet Xs_2 (res.second); + LogVarSet Y_1 = g1->logVarSet() - Xs_1; + LogVarSet Y_2 = g2->logVarSet() - Xs_2; + Y_1 -= g1->countedLogVars(); + Y_2 -= g2->countedLogVars(); + return g1->constr()->isCountNormalized (Y_1) && + g2->constr()->isCountNormalized (Y_2); +} + + + +void +Parfactor::simplifyParfactor (unsigned fIdx1, unsigned fIdx2) +{ + Params copy = params_; + params_.clear(); + StatesIndexer indexer (ranges_); + while (indexer.valid()) { + if (indexer[fIdx1] == indexer[fIdx2]) { + params_.push_back (copy[indexer]); + } + ++ indexer; + } + for (unsigned i = 0; i < args_[fIdx2].logVars().size(); i++) { + if (nrFormulas (args_[fIdx2].logVars()[i]) == 1) { + constr_->remove ({ args_[fIdx2].logVars()[i] }); + } + } + args_.erase (args_.begin() + fIdx2); + ranges_.erase (ranges_.begin() + fIdx2); +} + + + +std::pair +Parfactor::getAlignLogVars (Parfactor* g1, Parfactor* g2) +{ + g1->simplifyGrounds(); + g2->simplifyGrounds(); + LogVars Xs_1, Xs_2; + TinySet matchedI; + TinySet matchedJ; + ProbFormulas& formulas1 = g1->arguments(); + ProbFormulas& formulas2 = g2->arguments(); + for (unsigned i = 0; i < formulas1.size(); i++) { + for (unsigned j = 0; j < formulas2.size(); j++) { + if (formulas1[i].group() == formulas2[j].group() && + g1->range (i) == g2->range (j) && + matchedI.contains (i) == false && + matchedJ.contains (j) == false) { + Util::addToVector (Xs_1, formulas1[i].logVars()); + Util::addToVector (Xs_2, formulas2[j].logVars()); + matchedI.insert (i); + matchedJ.insert (j); + } + } + } + return make_pair (Xs_1, Xs_2); +} + + + +void +Parfactor::alignAndExponentiate (Parfactor* g1, Parfactor* g2) +{ + alignLogicalVars (g1, g2); + LogVarSet comm = g1->logVarSet() & g2->logVarSet(); + LogVarSet Y_1 = g1->logVarSet() - comm; + LogVarSet Y_2 = g2->logVarSet() - comm; + Y_1 -= g1->countedLogVars(); + Y_2 -= g2->countedLogVars(); + assert (g1->constr()->isCountNormalized (Y_1)); + assert (g2->constr()->isCountNormalized (Y_2)); + unsigned condCount1 = g1->constr()->getConditionalCount (Y_1); + unsigned condCount2 = g2->constr()->getConditionalCount (Y_2); + LogAware::pow (g1->params(), 1.0 / condCount2); + LogAware::pow (g2->params(), 1.0 / condCount1); +} + + + +void +Parfactor::alignLogicalVars (Parfactor* g1, Parfactor* g2) +{ + std::pair res = getAlignLogVars (g1, g2); + const LogVars& alignLvs1 = res.first; + const LogVars& alignLvs2 = res.second; + // cout << "ALIGNING :::::::::::::::::" << endl; + // g1->print(); + // cout << "AND" << endl; + // g2->print(); + // cout << "-> align lvs1 = " << alignLvs1 << endl; + // cout << "-> align lvs2 = " << alignLvs2 << endl; + LogVar freeLogVar (0); + Substitution theta1, theta2; + for (unsigned i = 0; i < alignLvs1.size(); i++) { + bool b1 = theta1.containsReplacementFor (alignLvs1[i]); + bool b2 = theta2.containsReplacementFor (alignLvs2[i]); + if (b1 == false && b2 == false) { + theta1.add (alignLvs1[i], freeLogVar); + theta2.add (alignLvs2[i], freeLogVar); + ++ freeLogVar; + } else if (b1 == false && b2) { + theta1.add (alignLvs1[i], theta2.newNameFor (alignLvs2[i])); + } else if (b1 && b2 == false) { + theta2.add (alignLvs2[i], theta1.newNameFor (alignLvs1[i])); + } + } + + const LogVarSet& allLvs1 = g1->logVarSet(); + for (unsigned i = 0; i < allLvs1.size(); i++) { + if (theta1.containsReplacementFor (allLvs1[i]) == false) { + theta1.add (allLvs1[i], freeLogVar); + ++ freeLogVar; + } + } + const LogVarSet& allLvs2 = g2->logVarSet(); + for (unsigned i = 0; i < allLvs2.size(); i++) { + if (theta2.containsReplacementFor (allLvs2[i]) == false) { + theta2.add (allLvs2[i], freeLogVar); + ++ freeLogVar; + } + } + + // handle this type of situation: + // g1 = p(X), q(X) ; X in {(p1),(p2)} + // g2 = p(X), q(Y) ; (X,Y) in {(p1,p2),(p2,p1)} + LogVars discardedLvs1 = theta1.getDiscardedLogVars(); + for (unsigned i = 0; i < discardedLvs1.size(); i++) { + if (g1->constr()->isSingleton (discardedLvs1[i]) && + g1->nrFormulas (discardedLvs1[i]) == 1) { + g1->constr()->remove (discardedLvs1[i]); + } else { + LogVar X_new = ++ g1->constr()->logVarSet().back(); + theta1.rename (discardedLvs1[i], X_new); + } + } + LogVars discardedLvs2 = theta2.getDiscardedLogVars(); + for (unsigned i = 0; i < discardedLvs2.size(); i++) { + if (g2->constr()->isSingleton (discardedLvs2[i]) && + g2->nrFormulas (discardedLvs2[i]) == 1) { + g2->constr()->remove (discardedLvs2[i]); + } else { + LogVar X_new = ++ g2->constr()->logVarSet().back(); + theta2.rename (discardedLvs2[i], X_new); + } + } + + // cout << "theta1: " << theta1 << endl; + // cout << "theta2: " << theta2 << endl; + g1->applySubstitution (theta1); + g2->applySubstitution (theta2); +} + diff --git a/packages/CLPBN/horus/Parfactor.h b/packages/CLPBN/horus/Parfactor.h new file mode 100644 index 000000000..1a55e9c55 --- /dev/null +++ b/packages/CLPBN/horus/Parfactor.h @@ -0,0 +1,121 @@ +#ifndef HORUS_PARFACTOR_H +#define HORUS_PARFACTOR_H + +#include +#include + +#include "ProbFormula.h" +#include "ConstraintTree.h" +#include "LiftedUtils.h" +#include "Horus.h" + +#include "Factor.h" + +class Parfactor : public TFactor +{ + public: + Parfactor ( + const ProbFormulas&, + const Params&, + const Tuples&, + unsigned); + + Parfactor (const Parfactor*, const Tuple&); + + Parfactor (const Parfactor*, ConstraintTree*); + + Parfactor (const Parfactor&); + + ~Parfactor (void); + + ConstraintTree* constr (void) { return constr_; } + + const ConstraintTree* constr (void) const { return constr_; } + + const LogVars& logVars (void) const { return constr_->logVars(); } + + const LogVarSet& logVarSet (void) const { return constr_->logVarSet(); } + + LogVarSet countedLogVars (void) const; + + LogVarSet uncountedLogVars (void) const; + + LogVarSet elimLogVars (void) const; + + LogVarSet exclusiveLogVars (unsigned) const; + + void setConstraintTree (ConstraintTree*); + + void sumOut (unsigned fIdx); + + void multiply (Parfactor&); + + bool canCountConvert (LogVar X); + + void countConvert (LogVar); + + void expand (LogVar, LogVar, LogVar); + + void fullExpand (LogVar); + + void reorderAccordingGrounds (const Grounds&); + + void absorveEvidence (const ProbFormula&, unsigned); + + void setNewGroups (void); + + void applySubstitution (const Substitution&); + + int findGroup (const Ground&) const; + + bool containsGround (const Ground&) const; + + bool containsGroup (unsigned) const; + + unsigned nrFormulas (LogVar) const; + + int indexOfLogVar (LogVar) const; + + int indexOfGroup (unsigned) const; + + unsigned nrFormulasWithGroup (unsigned) const; + + vector getAllGroups (void) const; + + void print (bool = false) const; + + void printParameters (void) const; + + void printProjections (void) const; + + string getLabel (void) const; + + void simplifyGrounds (void); + + static bool canMultiply (Parfactor*, Parfactor*); + + private: + + void simplifyCountingFormulas (int fIdx); + + void simplifyParfactor (unsigned fIdx1, unsigned fIdx2); + + static std::pair getAlignLogVars ( + Parfactor* g1, Parfactor* g2); + + void expandPotential (int fIdx, unsigned newRange, + const vector& sumIndexes); + + static void alignAndExponentiate (Parfactor*, Parfactor*); + + static void alignLogicalVars (Parfactor*, Parfactor*); + + ConstraintTree* constr_; + +}; + + +typedef vector Parfactors; + +#endif // HORUS_PARFACTOR_H + diff --git a/packages/CLPBN/horus/ParfactorList.cpp b/packages/CLPBN/horus/ParfactorList.cpp new file mode 100644 index 000000000..d588a393a --- /dev/null +++ b/packages/CLPBN/horus/ParfactorList.cpp @@ -0,0 +1,619 @@ +#include + +#include "ParfactorList.h" + + +ParfactorList::ParfactorList (const ParfactorList& pfList) +{ + ParfactorList::const_iterator it = pfList.begin(); + while (it != pfList.end()) { + addShattered (new Parfactor (**it)); + ++ it; + } + +} + + + +ParfactorList::ParfactorList (const Parfactors& pfs) +{ + add (pfs); +} + + + +ParfactorList::~ParfactorList (void) +{ + ParfactorList::const_iterator it = pfList_.begin(); + while (it != pfList_.end()) { + delete *it; + ++ it; + } +} + + + +void +ParfactorList::add (Parfactor* pf) +{ + pf->setNewGroups(); + addToShatteredList (pf); +} + + + +void +ParfactorList::add (const Parfactors& pfs) +{ + for (unsigned i = 0; i < pfs.size(); i++) { + pfs[i]->setNewGroups(); + addToShatteredList (pfs[i]); + } +} + + + +void +ParfactorList::addShattered (Parfactor* pf) +{ + assert (isAllShattered()); + pfList_.push_back (pf); + assert (isAllShattered()); +} + + + +list::iterator +ParfactorList::insertShattered ( + list::iterator it, + Parfactor* pf) +{ + return pfList_.insert (it, pf); + assert (isAllShattered()); +} + + + +list::iterator +ParfactorList::remove (list::iterator it) +{ + return pfList_.erase (it); +} + + + +list::iterator +ParfactorList::removeAndDelete (list::iterator it) +{ + delete *it; + return pfList_.erase (it); +} + + + +bool +ParfactorList::isAllShattered (void) const +{ + if (pfList_.size() <= 1) { + return true; + } + vector pfs (pfList_.begin(), pfList_.end()); + for (unsigned i = 0; i < pfs.size(); i++) { + assert (isShattered (pfs[i])); + } + for (unsigned i = 0; i < pfs.size() - 1; i++) { + for (unsigned j = i + 1; j < pfs.size(); j++) { + if (isShattered (pfs[i], pfs[j]) == false) { + return false; + } + } + } + return true; +} + + + +void +ParfactorList::print (void) const +{ + Parfactors pfVec (pfList_.begin(), pfList_.end()); + std::sort (pfVec.begin(), pfVec.end(), sortByParams()); + for (unsigned i = 0; i < pfVec.size(); i++) { + pfVec[i]->print(); + cout << endl; + } +} + + + +bool +ParfactorList::isShattered (const Parfactor* g) const +{ + const ProbFormulas& formulas = g->arguments(); + if (formulas.size() < 2) { + return true; + } + ConstraintTree ct (*g->constr()); + for (unsigned i = 0; i < formulas.size() - 1; i++) { + for (unsigned j = i + 1; j < formulas.size(); j++) { + if (formulas[i].group() == formulas[j].group()) { + if (identical ( + formulas[i], *(g->constr()), + formulas[j], *(g->constr())) == false) { + g->print(); + cout << "-> not identical on positions " ; + cout << i << " and " << j << endl; + return false; + } + } else { + if (disjoint ( + formulas[i], *(g->constr()), + formulas[j], *(g->constr())) == false) { + g->print(); + cout << "-> not disjoint on positions " ; + cout << i << " and " << j << endl; + return false; + } + } + } + } + return true; +} + + + +bool +ParfactorList::isShattered ( + const Parfactor* g1, + const Parfactor* g2) const +{ + assert (g1 != g2); + const ProbFormulas& fms1 = g1->arguments(); + const ProbFormulas& fms2 = g2->arguments(); + + for (unsigned i = 0; i < fms1.size(); i++) { + for (unsigned j = 0; j < fms2.size(); j++) { + if (fms1[i].group() == fms2[j].group()) { + if (identical ( + fms1[i], *(g1->constr()), + fms2[j], *(g2->constr())) == false) { + g1->print(); + cout << "^" << endl; + g2->print(); + cout << "-> not identical on group " << fms1[i].group() << endl; + return false; + } + } else { + if (disjoint ( + fms1[i], *(g1->constr()), + fms2[j], *(g2->constr())) == false) { + g1->print(); + cout << "^" << endl; + g2->print(); + cout << "-> not disjoint on groups " << fms1[i].group(); + cout << " and " << fms2[j].group() << endl; + return false; + } + } + } + } + return true; +} + + + +void +ParfactorList::addToShatteredList (Parfactor* g) +{ + queue residuals; + residuals.push (g); + while (residuals.empty() == false) { + Parfactor* pf = residuals.front(); + bool pfSplitted = false; + list::iterator pfIter; + pfIter = pfList_.begin(); + while (pfIter != pfList_.end()) { + std::pair shattRes; + shattRes = shatter (*pfIter, pf); + if (shattRes.first.empty() == false) { + pfIter = removeAndDelete (pfIter); + Util::addToQueue (residuals, shattRes.first); + } else { + ++ pfIter; + } + if (shattRes.second.empty() == false) { + delete pf; + Util::addToQueue (residuals, shattRes.second); + pfSplitted = true; + break; + } + } + residuals.pop(); + if (pfSplitted == false) { + Parfactors res = shatterAgainstMySelf (pf); + if (res.empty()) { + addShattered (pf); + } else { + Util::addToQueue (residuals, res); + } + } + } + assert (isAllShattered()); +} + + + +Parfactors +ParfactorList::shatterAgainstMySelf (Parfactor* g) +{ + Parfactors pfs; + queue residuals; + residuals.push (g); + bool shattered = true; + while (residuals.empty() == false) { + Parfactor* pf = residuals.front(); + Parfactors res = shatterAgainstMySelf2 (pf); + if (res.empty()) { + assert (isShattered (pf)); + if (shattered) { + return { }; + } + pfs.push_back (pf); + } else { + shattered = false; + for (unsigned i = 0; i < res.size(); i++) { + assert (res[i]->constr()->empty() == false); + residuals.push (res[i]); + } + delete pf; + } + residuals.pop(); + } + return pfs; +} + + + +Parfactors +ParfactorList::shatterAgainstMySelf2 (Parfactor* g) +{ + // slip a parfactor with overlapping formulas: + // e.g. {s(X),s(Y)}, with (X,Y) in {(p1,p2),(p1,p3),(p4,p1)} + const ProbFormulas& formulas = g->arguments(); + for (unsigned i = 0; i < formulas.size() - 1; i++) { + for (unsigned j = i + 1; j < formulas.size(); j++) { + if (formulas[i].sameSkeletonAs (formulas[j])) { + Parfactors res = shatterAgainstMySelf (g, i, j); + if (res.empty() == false) { + return res; + } + } + } + } + return Parfactors(); +} + + + +Parfactors +ParfactorList::shatterAgainstMySelf ( + Parfactor* g, + unsigned fIdx1, + unsigned fIdx2) +{ + /* + Util::printDashedLine(); + cout << "-> SHATTERING" << endl; + g->print(); + cout << "-> ON: " << g->argument (fIdx1) << "|" ; + cout << g->constr()->tupleSet (g->argument (fIdx1).logVars()) << endl; + cout << "-> ON: " << g->argument (fIdx2) << "|" ; + cout << g->constr()->tupleSet (g->argument (fIdx2).logVars()) << endl; + Util::printDashedLine(); + */ + ProbFormula& f1 = g->argument (fIdx1); + ProbFormula& f2 = g->argument (fIdx2); + if (f1.isAtom()) { + cerr << "error: a ground occurs twice in a parfactor" << endl; + cerr << endl; + abort(); + } + assert (g->constr()->empty() == false); + ConstraintTree ctCopy (*g->constr()); + if (f1.group() == f2.group()) { + assert (identical (f1, *(g->constr()), f2, ctCopy)); + return { }; + } + + g->constr()->moveToTop (f1.logVars()); + ctCopy.moveToTop (f2.logVars()); + + std::pair split1 = + g->constr()->split (f1.logVars(), &ctCopy, f2.logVars()); + ConstraintTree* commCt1 = split1.first; + ConstraintTree* exclCt1 = split1.second; + + if (commCt1->empty()) { + // disjoint + delete commCt1; + delete exclCt1; + return { }; + } + + unsigned newGroup = ProbFormula::getNewGroup(); + Parfactors res1 = shatter (g, fIdx1, commCt1, exclCt1, newGroup); + if (res1.empty()) { + res1.push_back (g); + } + + Parfactors res; + ctCopy.moveToTop (f1.logVars()); + for (unsigned i = 0; i < res1.size(); i++) { + res1[i]->constr()->moveToTop (f2.logVars()); + std::pair split2; + split2 = res1[i]->constr()->split (f2.logVars(), &ctCopy, f1.logVars()); + ConstraintTree* commCt2 = split2.first; + ConstraintTree* exclCt2 = split2.second; + if (commCt2->empty()) { + if (res1[i] != g) { + res.push_back (res1[i]); + } + delete commCt2; + delete exclCt2; + continue; + } + newGroup = ProbFormula::getNewGroup(); + Parfactors res2 = shatter (res1[i], fIdx2, commCt2, exclCt2, newGroup); + if (res2.empty()) { + if (res1[i] != g) { + res.push_back (res1[i]); + } + } else { + Util::addToVector (res, res2); + for (unsigned j = 0; j < res2.size(); j++) { + } + if (res1[i] != g) { + delete res1[i]; + } + } + } + + if (res.empty()) { + g->argument (fIdx2).setGroup (g->argument (fIdx1).group()); + updateGroups (f2.group(), f1.group()); + } + return res; +} + + + +std::pair +ParfactorList::shatter (Parfactor* g1, Parfactor* g2) +{ + ProbFormulas& formulas1 = g1->arguments(); + ProbFormulas& formulas2 = g2->arguments(); + assert (g1 != 0 && g2 != 0 && g1 != g2); + for (unsigned i = 0; i < formulas1.size(); i++) { + for (unsigned j = 0; j < formulas2.size(); j++) { + if (formulas1[i].sameSkeletonAs (formulas2[j])) { + std::pair res; + res = shatter (i, g1, j, g2); + if (res.first.empty() == false || + res.second.empty() == false) { + return res; + } + } + } + } + return make_pair (Parfactors(), Parfactors()); +} + + + +std::pair +ParfactorList::shatter ( + unsigned fIdx1, Parfactor* g1, + unsigned fIdx2, Parfactor* g2) +{ + ProbFormula& f1 = g1->argument (fIdx1); + ProbFormula& f2 = g2->argument (fIdx2); + /* + Util::printDashedLine(); + cout << "-> SHATTERING" << endl; + g1->print(); + cout << "-> WITH" << endl; + g2->print(); + cout << "-> ON: " << f1 << "|" ; + cout << g1->constr()->tupleSet (f1.logVars()) << endl; + cout << "-> ON: " << f2 << "|" ; + cout << g2->constr()->tupleSet (f2.logVars()) << endl; + Util::printDashedLine(); + */ + if (f1.isAtom()) { + f2.setGroup (f1.group()); + updateGroups (f2.group(), f1.group()); + return { }; + } + assert (g1->constr()->empty() == false); + assert (g2->constr()->empty() == false); + if (f1.group() == f2.group()) { + assert (identical (f1, *(g1->constr()), f2, *(g2->constr()))); + return { }; + } + + g1->constr()->moveToTop (f1.logVars()); + g2->constr()->moveToTop (f2.logVars()); + + std::pair split1 = + g1->constr()->split (f1.logVars(), g2->constr(), f2.logVars()); + ConstraintTree* commCt1 = split1.first; + ConstraintTree* exclCt1 = split1.second; + + if (commCt1->empty()) { + // disjoint + delete commCt1; + delete exclCt1; + return { }; + } + + std::pair split2 = + g2->constr()->split (f2.logVars(), g1->constr(), f1.logVars()); + ConstraintTree* commCt2 = split2.first; + ConstraintTree* exclCt2 = split2.second; + + assert (commCt1->tupleSet (f1.logVars()) == + commCt2->tupleSet (f2.logVars())); + + // unsigned static count = 0; count ++; + // stringstream ss1; ss1 << "" << count << "_A.dot" ; + // stringstream ss2; ss2 << "" << count << "_B.dot" ; + // stringstream ss3; ss3 << "" << count << "_A_comm.dot" ; + // stringstream ss4; ss4 << "" << count << "_A_excl.dot" ; + // stringstream ss5; ss5 << "" << count << "_B_comm.dot" ; + // stringstream ss6; ss6 << "" << count << "_B_excl.dot" ; + // g1->constr()->exportToGraphViz (ss1.str().c_str(), true); + // g2->constr()->exportToGraphViz (ss2.str().c_str(), true); + // commCt1->exportToGraphViz (ss3.str().c_str(), true); + // exclCt1->exportToGraphViz (ss4.str().c_str(), true); + // commCt2->exportToGraphViz (ss5.str().c_str(), true); + // exclCt2->exportToGraphViz (ss6.str().c_str(), true); + + if (exclCt1->empty() && exclCt2->empty()) { + // identical + f2.setGroup (f1.group()); + updateGroups (f2.group(), f1.group()); + delete commCt1; + delete exclCt1; + delete commCt2; + delete exclCt2; + return { }; + } + + unsigned group; + if (exclCt1->empty()) { + group = f1.group(); + } else if (exclCt2->empty()) { + group = f2.group(); + } else { + group = ProbFormula::getNewGroup(); + } + Parfactors res1 = shatter (g1, fIdx1, commCt1, exclCt1, group); + Parfactors res2 = shatter (g2, fIdx2, commCt2, exclCt2, group); + return make_pair (res1, res2); +} + + + +Parfactors +ParfactorList::shatter ( + Parfactor* g, + unsigned fIdx, + ConstraintTree* commCt, + ConstraintTree* exclCt, + unsigned commGroup) +{ + ProbFormula& f = g->argument (fIdx); + if (exclCt->empty()) { + delete commCt; + delete exclCt; + f.setGroup (commGroup); + return { }; + } + + Parfactors result; + if (f.isCounting()) { + LogVar X_new1 = g->constr()->logVarSet().back() + 1; + LogVar X_new2 = g->constr()->logVarSet().back() + 2; + ConstraintTrees cts = g->constr()->jointCountNormalize ( + commCt, exclCt, f.countedLogVar(), X_new1, X_new2); + for (unsigned i = 0; i < cts.size(); i++) { + Parfactor* newPf = new Parfactor (g, cts[i]); + if (cts[i]->nrLogVars() == g->constr()->nrLogVars() + 1) { + newPf->expand (f.countedLogVar(), X_new1, X_new2); + assert (g->constr()->getConditionalCount (f.countedLogVar()) == + cts[i]->getConditionalCount (X_new1) + + cts[i]->getConditionalCount (X_new2)); + } else { + assert (g->constr()->getConditionalCount (f.countedLogVar()) == + cts[i]->getConditionalCount (f.countedLogVar())); + } + newPf->setNewGroups(); + result.push_back (newPf); + } + delete commCt; + delete exclCt; + } else { + Parfactor* newPf = new Parfactor (g, commCt); + newPf->setNewGroups(); + newPf->argument (fIdx).setGroup (commGroup); + result.push_back (newPf); + newPf = new Parfactor (g, exclCt); + newPf->setNewGroups(); + result.push_back (newPf); + } + return result; +} + + + +void +ParfactorList::updateGroups (unsigned oldGroup, unsigned newGroup) +{ + for (ParfactorList::iterator it = pfList_.begin(); + it != pfList_.end(); it++) { + ProbFormulas& formulas = (*it)->arguments(); + for (unsigned i = 0; i < formulas.size(); i++) { + if (formulas[i].group() == oldGroup) { + formulas[i].setGroup (newGroup); + } + } + } +} + + + +bool +ParfactorList::proper ( + const ProbFormula& f1, ConstraintTree ct1, + const ProbFormula& f2, ConstraintTree ct2) const +{ + return disjoint (f1, ct1, f2, ct2) + || identical (f1, ct1, f2, ct2); +} + + + +bool +ParfactorList::identical ( + const ProbFormula& f1, ConstraintTree ct1, + const ProbFormula& f2, ConstraintTree ct2) const +{ + if (f1.sameSkeletonAs (f2) == false) { + return false; + } + if (f1.isAtom()) { + return true; + } + TupleSet ts1 = ct1.tupleSet (f1.logVars()); + TupleSet ts2 = ct2.tupleSet (f2.logVars()); + return ts1 == ts2; +} + + + +bool +ParfactorList::disjoint ( + const ProbFormula& f1, ConstraintTree ct1, + const ProbFormula& f2, ConstraintTree ct2) const +{ + if (f1.sameSkeletonAs (f2) == false) { + return true; + } + if (f1.isAtom()) { + return false; + } + TupleSet ts1 = ct1.tupleSet (f1.logVars()); + TupleSet ts2 = ct2.tupleSet (f2.logVars()); + return (ts1 & ts2).empty(); +} + diff --git a/packages/CLPBN/horus/ParfactorList.h b/packages/CLPBN/horus/ParfactorList.h new file mode 100644 index 000000000..bcf5aa3e1 --- /dev/null +++ b/packages/CLPBN/horus/ParfactorList.h @@ -0,0 +1,120 @@ +#ifndef HORUS_PARFACTORLIST_H +#define HORUS_PARFACTORLIST_H + +#include +#include + +#include "Parfactor.h" +#include "ProbFormula.h" + + +using namespace std; + + +class ParfactorList +{ + public: + ParfactorList (void) { } + + ParfactorList (const ParfactorList&); + + ParfactorList (const Parfactors&); + + ~ParfactorList (void); + + const list& parfactors (void) const { return pfList_; } + + void clear (void) { pfList_.clear(); } + + unsigned size (void) const { return pfList_.size(); } + + typedef std::list::iterator iterator; + + iterator begin (void) { return pfList_.begin(); } + + iterator end (void) { return pfList_.end(); } + + typedef std::list::const_iterator const_iterator; + + const_iterator begin (void) const { return pfList_.begin(); } + + const_iterator end (void) const { return pfList_.end(); } + + void add (Parfactor* pf); + + void add (const Parfactors& pfs); + + void addShattered (Parfactor* pf); + + list::iterator insertShattered ( + list::iterator, Parfactor*); + + list::iterator remove (list::iterator); + + list::iterator removeAndDelete (list::iterator); + + bool isAllShattered (void) const; + + void print (void) const; + + private: + + bool isShattered (const Parfactor*) const; + + bool isShattered (const Parfactor*, const Parfactor*) const; + + void addToShatteredList (Parfactor*); + + Parfactors shatterAgainstMySelf (Parfactor* g); + + Parfactors shatterAgainstMySelf2 (Parfactor* g); + + Parfactors shatterAgainstMySelf ( + Parfactor* g, unsigned fIdx1, unsigned fIdx2); + + std::pair shatter ( + Parfactor*, Parfactor*); + + std::pair shatter ( + unsigned, Parfactor*, unsigned, Parfactor*); + + Parfactors shatter ( + Parfactor*, + unsigned, + ConstraintTree*, + ConstraintTree*, + unsigned); + + void updateGroups (unsigned group1, unsigned group2); + + bool proper ( + const ProbFormula&, ConstraintTree, + const ProbFormula&, ConstraintTree) const; + + bool identical ( + const ProbFormula&, ConstraintTree, + const ProbFormula&, ConstraintTree) const; + + bool disjoint ( + const ProbFormula&, ConstraintTree, + const ProbFormula&, ConstraintTree) const; + + struct sortByParams + { + inline bool operator() (const Parfactor* pf1, const Parfactor* pf2) + { + if (pf1->params().size() < pf2->params().size()) { + return true; + } else if (pf1->params().size() == pf2->params().size() && + pf1->params() < pf2->params()) { + return true; + } + return false; + } + }; + + list pfList_; +}; + +#endif // HORUS_PARFACTORLIST_H + diff --git a/packages/CLPBN/horus/ProbFormula.cpp b/packages/CLPBN/horus/ProbFormula.cpp new file mode 100644 index 000000000..09f555ebe --- /dev/null +++ b/packages/CLPBN/horus/ProbFormula.cpp @@ -0,0 +1,139 @@ +#include "ProbFormula.h" + + +int ProbFormula::freeGroup_ = 0; + + + +bool +ProbFormula::sameSkeletonAs (const ProbFormula& f) const +{ + return functor_ == f.functor() && logVars_.size() == f.arity(); +} + + + +bool +ProbFormula::contains (LogVar lv) const +{ + return Util::contains (logVars_, lv); +} + + + +bool +ProbFormula::contains (LogVarSet s) const +{ + return LogVarSet (logVars_).contains (s); +} + + + +int +ProbFormula::indexOf (LogVar X) const +{ + return Util::indexOf (logVars_, X); +} + + + +bool +ProbFormula::isAtom (void) const +{ + return logVars_.size() == 0; +} + + + +bool +ProbFormula::isCounting (void) const +{ + return countedLogVar_.valid(); +} + + + +LogVar +ProbFormula::countedLogVar (void) const +{ + assert (isCounting()); + return countedLogVar_; +} + + + +void +ProbFormula::setCountedLogVar (LogVar lv) +{ + countedLogVar_ = lv; +} + + + +void +ProbFormula::clearCountedLogVar (void) +{ + countedLogVar_ = LogVar(); +} + + + +void +ProbFormula::rename (LogVar oldName, LogVar newName) +{ + for (unsigned i = 0; i < logVars_.size(); i++) { + if (logVars_[i] == oldName) { + logVars_[i] = newName; + } + } + if (isCounting() && countedLogVar_ == oldName) { + countedLogVar_ = newName; + } +} + + +bool operator== (const ProbFormula& f1, const ProbFormula& f2) +{ + return f1.group_ == f2.group_ && + f1.logVars_ == f2.logVars_; +} + + + +std::ostream& operator<< (ostream &os, const ProbFormula& f) +{ + os << f.functor_; + if (f.isAtom() == false) { + os << "(" ; + for (unsigned i = 0; i < f.logVars_.size(); i++) { + if (i != 0) os << ","; + if (f.isCounting() && f.logVars_[i] == f.countedLogVar_) { + os << "#" ; + } + os << f.logVars_[i]; + } + os << ")" ; + } + os << "::" << f.range_; + return os; +} + + + +unsigned +ProbFormula::getNewGroup (void) +{ + freeGroup_ ++; + return freeGroup_; +} + + + +ostream& operator<< (ostream &os, const ObservedFormula& of) +{ + os << of.functor_ << "/" << of.arity_; + os << "|" << of.constr_.tupleSet(); + os << " [evidence=" << of.evidence_ << "]"; + return os; +} + diff --git a/packages/CLPBN/horus/ProbFormula.h b/packages/CLPBN/horus/ProbFormula.h new file mode 100644 index 000000000..e05665889 --- /dev/null +++ b/packages/CLPBN/horus/ProbFormula.h @@ -0,0 +1,112 @@ +#ifndef HORUS_PROBFORMULA_H +#define HORUS_PROBFORMULA_H + +#include + +#include "ConstraintTree.h" +#include "LiftedUtils.h" +#include "Horus.h" + +typedef unsigned PrvGroup; + +class ProbFormula +{ + public: + ProbFormula (Symbol f, const LogVars& lvs, unsigned range) + : functor_(f), logVars_(lvs), range_(range), + countedLogVar_(), group_(Util::maxUnsigned()) { } + + ProbFormula (Symbol f, unsigned r) + : functor_(f), range_(r), group_(Util::maxUnsigned()) { } + + Symbol functor (void) const { return functor_; } + + unsigned arity (void) const { return logVars_.size(); } + + unsigned range (void) const { return range_; } + + LogVars& logVars (void) { return logVars_; } + + const LogVars& logVars (void) const { return logVars_; } + + LogVarSet logVarSet (void) const { return LogVarSet (logVars_); } + + unsigned group (void) const { return group_; } + + void setGroup (unsigned g) { group_ = g; } + + bool sameSkeletonAs (const ProbFormula&) const; + + bool contains (LogVar) const; + + bool contains (LogVarSet) const; + + int indexOf (LogVar) const; + + bool isAtom (void) const; + + bool isCounting (void) const; + + LogVar countedLogVar (void) const; + + void setCountedLogVar (LogVar); + + void clearCountedLogVar (void); + + void rename (LogVar, LogVar); + + static unsigned getNewGroup (void); + + friend std::ostream& operator<< (ostream &os, const ProbFormula& f); + + friend bool operator== (const ProbFormula& f1, const ProbFormula& f2); + + private: + Symbol functor_; + LogVars logVars_; + unsigned range_; + LogVar countedLogVar_; + unsigned group_; + static int freeGroup_; +}; + +typedef vector ProbFormulas; + + +class ObservedFormula +{ + public: + ObservedFormula (Symbol f, unsigned a, unsigned ev) + : functor_(f), arity_(a), evidence_(ev), constr_(a) { } + + ObservedFormula (Symbol f, unsigned ev, const Tuple& tuple) + : functor_(f), arity_(tuple.size()), evidence_(ev), constr_(arity_) + { + constr_.addTuple (tuple); + } + + Symbol functor (void) const { return functor_; } + + unsigned arity (void) const { return arity_; } + + unsigned evidence (void) const { return evidence_; } + + ConstraintTree& constr (void) { return constr_; } + + bool isAtom (void) const { return arity_ == 0; } + + void addTuple (const Tuple& tuple) { constr_.addTuple (tuple); } + + friend ostream& operator<< (ostream &os, const ObservedFormula& of); + + private: + Symbol functor_; + unsigned arity_; + unsigned evidence_; + ConstraintTree constr_; +}; + +typedef vector ObservedFormulas; + +#endif // HORUS_PROBFORMULA_H + diff --git a/packages/CLPBN/horus/Solver.cpp b/packages/CLPBN/horus/Solver.cpp new file mode 100644 index 000000000..a310c6e8a --- /dev/null +++ b/packages/CLPBN/horus/Solver.cpp @@ -0,0 +1,42 @@ +#include "Solver.h" +#include "Util.h" + + +void +Solver::printAnswer (const VarIds& vids) +{ + Vars unobservedVars; + VarIds unobservedVids; + for (unsigned i = 0; i < vids.size(); i++) { + VarNode* vn = fg.getVarNode (vids[i]); + if (vn->hasEvidence() == false) { + unobservedVars.push_back (vn); + unobservedVids.push_back (vids[i]); + } + } + Params res = solveQuery (unobservedVids); + vector stateLines = Util::getStateLines (unobservedVars); + for (unsigned i = 0; i < res.size(); i++) { + cout << "P(" << stateLines[i] << ") = " ; + cout << std::setprecision (Constants::PRECISION) << res[i]; + cout << endl; + } + cout << endl; +} + + + +void +Solver::printAllPosterioris (void) +{ + VarIds vids; + const VarNodes& vars = fg.varNodes(); + for (unsigned i = 0; i < vars.size(); i++) { + vids.push_back (vars[i]->varId()); + } + std::sort (vids.begin(), vids.end()); + for (unsigned i = 0; i < vids.size(); i++) { + printAnswer ({vids[i]}); + } +} + diff --git a/packages/CLPBN/horus/Solver.h b/packages/CLPBN/horus/Solver.h new file mode 100644 index 000000000..cc22795d1 --- /dev/null +++ b/packages/CLPBN/horus/Solver.h @@ -0,0 +1,32 @@ +#ifndef HORUS_SOLVER_H +#define HORUS_SOLVER_H + +#include + +#include "Var.h" +#include "FactorGraph.h" + + +using namespace std; + +class Solver +{ + public: + Solver (const FactorGraph& factorGraph) : fg(factorGraph) { } + + virtual ~Solver() { } // ensure that subclass destructor is called + + virtual Params solveQuery (VarIds queryVids) = 0; + + virtual void printSolverFlags (void) const = 0; + + void printAnswer (const VarIds& vids); + + void printAllPosterioris (void); + + protected: + const FactorGraph& fg; +}; + +#endif // HORUS_SOLVER_H + diff --git a/packages/CLPBN/horus/TODO b/packages/CLPBN/horus/TODO new file mode 100644 index 000000000..e2c0a5284 --- /dev/null +++ b/packages/CLPBN/horus/TODO @@ -0,0 +1,12 @@ +- Refactor sum out in factor +- Add a way to sum out several vars at the same time +- Receive ranges as a constant reference in Indexer +- Check if evidence remains in the compressed factor graph +- Consider using hashs instead of vectors of colors to calculate the groups in + counting bp +- use more psize_t instead of unsigned for looping through params +- Find a way to decrease the time required to find an + elimination order for variable elimination +- Add a sequential elimination heuristic + + diff --git a/packages/CLPBN/horus/TinySet.h b/packages/CLPBN/horus/TinySet.h new file mode 100644 index 000000000..8c1d01f1c --- /dev/null +++ b/packages/CLPBN/horus/TinySet.h @@ -0,0 +1,243 @@ +#ifndef HORUS_TINYSET_H +#define HORUS_TINYSET_H + +#include +#include + +using namespace std; + + +template > +class TinySet +{ + public: + + TinySet (const TinySet& s) + : vec_(s.vec_), cmp_(s.cmp_) { } + + TinySet (const Compare& cmp = Compare()) + : vec_(), cmp_(cmp) { } + + TinySet (const T& t, const Compare& cmp = Compare()) + : vec_(1, t), cmp_(cmp) { } + + TinySet (const vector& elements, const Compare& cmp = Compare()) + : vec_(elements), cmp_(cmp) + { + std::sort (begin(), end(), cmp_); + } + + typedef typename vector::iterator iterator; + typedef typename vector::const_iterator const_iterator; + + iterator insert (const T& t) + { + iterator it = std::lower_bound (begin(), end(), t, cmp_); + if (it == end() || cmp_(t, *it)) { + vec_.insert (it, t); + } + return it; + } + + void insert_sorted (const T& t) + { + vec_.push_back (t); + assert (consistent()); + } + + void remove (const T& t) + { + iterator it = std::lower_bound (begin(), end(), t, cmp_); + if (it != end()) { + vec_.erase (it); + } + } + + const_iterator find (const T& t) const + { + const_iterator it = std::lower_bound (begin(), end(), t, cmp_); + return it == end() || cmp_(t, *it) ? end() : it; + } + + iterator find (const T& t) + { + iterator it = std::lower_bound (begin(), end(), t, cmp_); + return it == end() || cmp_(t, *it) ? end() : it; + } + + /* set union */ + TinySet operator| (const TinySet& s) const + { + TinySet res; + std::set_union ( + vec_.begin(), vec_.end(), + s.vec_.begin(), s.vec_.end(), + std::back_inserter (res.vec_), + cmp_); + return res; + } + + /* set intersection */ + TinySet operator& (const TinySet& s) const + { + TinySet res; + std::set_intersection ( + vec_.begin(), vec_.end(), + s.vec_.begin(), s.vec_.end(), + std::back_inserter (res.vec_), + cmp_); + return res; + } + + /* set difference */ + TinySet operator- (const TinySet& s) const + { + TinySet res; + std::set_difference ( + vec_.begin(), vec_.end(), + s.vec_.begin(), s.vec_.end(), + std::back_inserter (res.vec_), + cmp_); + return res; + } + + TinySet& operator|= (const TinySet& s) + { + return *this = (*this | s); + } + + TinySet& operator&= (const TinySet& s) + { + return *this = (*this & s); + } + + TinySet& operator-= (const TinySet& s) + { + return *this = (*this - s); + } + + bool contains (const T& t) const + { + return std::binary_search ( + vec_.begin(), vec_.end(), t, cmp_); + } + + bool contains (const TinySet& s) const + { + return std::includes ( + vec_.begin(), + vec_.end(), + s.vec_.begin(), + s.vec_.end(), + cmp_); + } + + bool in (const TinySet& s) const + { + return std::includes ( + s.vec_.begin(), + s.vec_.end(), + vec_.begin(), + vec_.end(), + cmp_); + } + + bool intersects (const TinySet& s) const + { + return (*this & s).size() > 0; + } + + const T& operator[] (typename vector::size_type i) const + { + return vec_[i]; + } + + T front (void) const + { + return vec_.front(); + } + + T& front (void) + { + return vec_.front(); + } + + T back (void) const + { + return vec_.back(); + } + + T& back (void) + { + return vec_.back(); + } + + const vector& elements (void) const + { + return vec_; + } + + bool empty (void) const + { + return size() == 0; + } + + typename vector::size_type size (void) const + { + return vec_.size(); + } + + void clear (void) + { + vec_.clear(); + } + + void reserve (typename vector::size_type size) + { + vec_.reserve (size); + } + + iterator begin (void) { return vec_.begin(); } + iterator end (void) { return vec_.end(); } + const_iterator begin (void) const { return vec_.begin(); } + const_iterator end (void) const { return vec_.end(); } + + friend bool operator== (const TinySet& s1, const TinySet& s2) + { + return s1.vec_ == s2.vec_; + } + + friend bool operator!= (const TinySet& s1, const TinySet& s2) + { + return ! (s1.vec_ == s2.vec_); + } + + friend std::ostream& operator << (std::ostream& out, const TinySet& s) + { + out << "{" ; + typename vector::size_type i; + for (i = 0; i < s.size(); i++) { + out << ((i != 0) ? "," : "") << s.vec_[i]; + } + out << "}" ; + return out; + } + + private: + bool consistent (void) const + { + typename vector::size_type i; + for (i = 0; i < vec_.size() - 1; i++) { + if (cmp_(vec_[i], vec_[i + 1]) == false) { + return false; + } + } + return true; + } + + vector vec_; + Compare cmp_; +}; + +#endif // HORUS_TINYSET_H + diff --git a/packages/CLPBN/horus/Util.cpp b/packages/CLPBN/horus/Util.cpp new file mode 100644 index 000000000..083103ff8 --- /dev/null +++ b/packages/CLPBN/horus/Util.cpp @@ -0,0 +1,643 @@ +#include + +#include +#include + +#include "Util.h" +#include "Indexer.h" +#include "ElimGraph.h" + + +namespace Globals { +bool logDomain = false; + +unsigned verbosity = 0; + +InfAlgorithms infAlgorithm = InfAlgorithms::VE; +}; + + + + +namespace BpOptions { +Schedule schedule = BpOptions::Schedule::SEQ_FIXED; +//Schedule schedule = BpOptions::Schedule::SEQ_RANDOM; +//Schedule schedule = BpOptions::Schedule::PARALLEL; +//Schedule schedule = BpOptions::Schedule::MAX_RESIDUAL; +double accuracy = 0.0001; +unsigned maxIter = 1000; +} + + + +vector Statistics::netInfo_; +vector Statistics::compressInfo_; +unsigned Statistics::primaryNetCount_; + + +namespace Util { + + +template <> std::string +toString (const bool& b) +{ + std::stringstream ss; + ss << std::boolalpha << b; + return ss.str(); +} + + + +unsigned +stringToUnsigned (string str) +{ + int val; + stringstream ss; + ss << str; + ss >> val; + if (val < 0) { + cerr << "error: the readed number is negative" << endl; + abort(); + } + return static_cast (val); +} + + + +double +stringToDouble (string str) +{ + double val; + stringstream ss; + ss << str; + ss >> val; + return val; +} + + + +void +toLog (Params& v) +{ + for (unsigned i = 0; i < v.size(); i++) { + v[i] = log (v[i]); + } +} + + + +void +fromLog (Params& v) +{ + for (unsigned i = 0; i < v.size(); i++) { + v[i] = exp (v[i]); + } +} + + + +double +factorial (unsigned num) +{ + double result = 1.0; + for (unsigned i = 1; i <= num; i++) { + result *= i; + } + return result; +} + + + +double +logFactorial (unsigned num) +{ + double result = 0.0; + if (num < 150) { + result = std::log (factorial (num)); + } else { + for (unsigned i = 1; i <= num; i++) { + result += std::log (i); + } + } + return result; +} + + + +unsigned +nrCombinations (unsigned n, unsigned k) +{ + assert (n >= k); + int diff = n - k; + unsigned result = 0; + if (n < 150) { + unsigned prod = 1; + for (int i = n; i > diff; i--) { + prod *= i; + } + result = prod / factorial (k); + } else { + double prod = 0.0; + for (int i = n; i > diff; i--) { + prod += std::log (i); + } + prod -= logFactorial (k); + result = static_cast (std::exp (prod)); + } + return result; +} + + + +unsigned +expectedSize (const Ranges& ranges) +{ + unsigned prod = 1; + for (unsigned i = 0; i < ranges.size(); i++) { + prod *= ranges[i]; + } + return prod; +} + + + +unsigned +getNumberOfDigits (int num) +{ + unsigned count = 1; + while (num >= 10) { + num /= 10; + count ++; + } + return count; +} + + + +bool +isInteger (const string& s) +{ + stringstream ss1 (s); + stringstream ss2; + int integer; + ss1 >> integer; + ss2 << integer; + return (ss1.str() == ss2.str()); +} + + + +string +parametersToString (const Params& v, unsigned precision) +{ + stringstream ss; + ss.precision (precision); + ss << "[" ; + for (unsigned i = 0; i < v.size(); i++) { + if (i != 0) ss << ", " ; + ss << v[i]; + } + ss << "]" ; + return ss.str(); +} + + + +vector +getStateLines (const Vars& vars) +{ + StatesIndexer idx (vars); + vector jointStrings; + while (idx.valid()) { + stringstream ss; + for (unsigned i = 0; i < vars.size(); i++) { + if (i != 0) ss << ", " ; + ss << vars[i]->label() << "=" << vars[i]->states()[(idx[i])]; + } + jointStrings.push_back (ss.str()); + ++ idx; + } + return jointStrings; +} + + + +bool +setHorusFlag (string key, string value) +{ + bool returnVal = true; + if (key == "verbosity") { + stringstream ss; + ss << value; + ss >> Globals::verbosity; + } else if (key == "inf_alg") { + if ( value == "ve") { + Globals::infAlgorithm = InfAlgorithms::VE; + } else if (value == "bp") { + Globals::infAlgorithm = InfAlgorithms::BP; + } else if (value == "cbp") { + Globals::infAlgorithm = InfAlgorithms::CBP; + } else { + cerr << "warning: invalid value `" << value << "' " ; + cerr << "for `" << key << "'" << endl; + returnVal = false; + } + } else if (key == "elim_heuristic") { + if ( value == "min_neighbors") { + ElimGraph::elimHeuristic = ElimHeuristic::MIN_NEIGHBORS; + } else if (value == "min_weight") { + ElimGraph::elimHeuristic = ElimHeuristic::MIN_WEIGHT; + } else if (value == "min_fill") { + ElimGraph::elimHeuristic = ElimHeuristic::MIN_FILL; + } else if (value == "weighted_min_fill") { + ElimGraph::elimHeuristic = ElimHeuristic::WEIGHTED_MIN_FILL; + } else { + cerr << "warning: invalid value `" << value << "' " ; + cerr << "for `" << key << "'" << endl; + returnVal = false; + } + } else if (key == "schedule") { + if ( value == "seq_fixed") { + BpOptions::schedule = BpOptions::Schedule::SEQ_FIXED; + } else if (value == "seq_random") { + BpOptions::schedule = BpOptions::Schedule::SEQ_RANDOM; + } else if (value == "parallel") { + BpOptions::schedule = BpOptions::Schedule::PARALLEL; + } else if (value == "max_residual") { + BpOptions::schedule = BpOptions::Schedule::MAX_RESIDUAL; + } else { + cerr << "warning: invalid value `" << value << "' " ; + cerr << "for `" << key << "'" << endl; + returnVal = false; + } + } else if (key == "accuracy") { + stringstream ss; + ss << value; + ss >> BpOptions::accuracy; + } else if (key == "max_iter") { + stringstream ss; + ss << value; + ss >> BpOptions::maxIter; + } else if (key == "use_logarithms") { + if ( value == "true") { + Globals::logDomain = true; + } else if (value == "false") { + Globals::logDomain = false; + } else { + cerr << "warning: invalid value `" << value << "' " ; + cerr << "for `" << key << "'" << endl; + returnVal = false; + } + } else { + cerr << "warning: invalid key `" << key << "'" << endl; + returnVal = false; + } + return returnVal; +} + + + +void +printHeader (string header, std::ostream& os) +{ + printAsteriskLine (os); + os << header << endl; + printAsteriskLine (os); +} + + + +void +printSubHeader (string header, std::ostream& os) +{ + printDashedLine (os); + os << header << endl; + printDashedLine (os); +} + + + +void +printAsteriskLine (std::ostream& os) +{ + os << "********************************" ; + os << "********************************" ; + os << endl; +} + + + +void +printDashedLine (std::ostream& os) +{ + os << "--------------------------------" ; + os << "--------------------------------" ; + os << endl; +} + + +} + + + +namespace LogAware { + +void +normalize (Params& v) +{ + double sum = LogAware::addIdenty(); + if (Globals::logDomain) { + for (unsigned i = 0; i < v.size(); i++) { + sum = Util::logSum (sum, v[i]); + } + assert (sum != -numeric_limits::infinity()); + for (unsigned i = 0; i < v.size(); i++) { + v[i] -= sum; + } + } else { + for (unsigned i = 0; i < v.size(); i++) { + sum += v[i]; + } + assert (sum != 0.0); + for (unsigned i = 0; i < v.size(); i++) { + v[i] /= sum; + } + } +} + + + +double +getL1Distance (const Params& v1, const Params& v2) +{ + assert (v1.size() == v2.size()); + double dist = 0.0; + if (Globals::logDomain) { + for (unsigned i = 0; i < v1.size(); i++) { + dist += abs (exp(v1[i]) - exp(v2[i])); + } + } else { + for (unsigned i = 0; i < v1.size(); i++) { + dist += abs (v1[i] - v2[i]); + } + } + return dist; +} + + + +double +getMaxNorm (const Params& v1, const Params& v2) +{ + assert (v1.size() == v2.size()); + double max = 0.0; + if (Globals::logDomain) { + for (unsigned i = 0; i < v1.size(); i++) { + double diff = abs (exp(v1[i]) - exp(v2[i])); + if (diff > max) { + max = diff; + } + } + } else { + for (unsigned i = 0; i < v1.size(); i++) { + double diff = abs (v1[i] - v2[i]); + if (diff > max) { + max = diff; + } + } + } + return max; +} + + +double +pow (double p, unsigned expoent) +{ + return Globals::logDomain ? p * expoent : std::pow (p, expoent); +} + + + +double +pow (double p, double expoent) +{ + // assumes that `expoent' is never in log domain + return Globals::logDomain ? p * expoent : std::pow (p, expoent); +} + + + +void +pow (Params& v, unsigned expoent) +{ + if (expoent == 1) { + return; + } + if (Globals::logDomain) { + for (unsigned i = 0; i < v.size(); i++) { + v[i] *= expoent; + } + } else { + for (unsigned i = 0; i < v.size(); i++) { + v[i] = std::pow (v[i], expoent); + } + } +} + + + +void +pow (Params& v, double expoent) +{ + // assumes that `expoent' is never in log domain + if (Globals::logDomain) { + for (unsigned i = 0; i < v.size(); i++) { + v[i] *= expoent; + } + } else { + for (unsigned i = 0; i < v.size(); i++) { + v[i] = std::pow (v[i], expoent); + } + } +} + +} + + + +unsigned +Statistics::getSolvedNetworksCounting (void) +{ + return netInfo_.size(); +} + + + +void +Statistics::incrementPrimaryNetworksCounting (void) +{ + primaryNetCount_ ++; +} + + + +unsigned +Statistics::getPrimaryNetworksCounting (void) +{ + return primaryNetCount_; +} + + + +void +Statistics::updateStatistics ( + unsigned size, + bool loopy, + unsigned nIters, + double time) +{ + netInfo_.push_back (NetInfo (size, loopy, nIters, time)); +} + + + +void +Statistics::printStatistics (void) +{ + cout << getStatisticString(); +} + + + +void +Statistics::writeStatistics (const char* fileName) +{ + ofstream out (fileName); + if (!out.is_open()) { + cerr << "error: cannot open file to write at " ; + cerr << "Statistics::writeStats()" << endl; + abort(); + } + out << getStatisticString(); + out.close(); +} + + + +void +Statistics::updateCompressingStatistics ( + unsigned nrGroundVars, + unsigned nrGroundFactors, + unsigned nrClusterVars, + unsigned nrClusterFactors, + unsigned nrNeighborless) +{ + compressInfo_.push_back (CompressInfo (nrGroundVars, nrGroundFactors, + nrClusterVars, nrClusterFactors, nrNeighborless)); +} + + + +string +Statistics::getStatisticString (void) +{ + stringstream ss2, ss3, ss4, ss1; + ss1 << "running mode: " ; + switch (Globals::infAlgorithm) { + case InfAlgorithms::VE: ss1 << "ve" << endl; break; + case InfAlgorithms::BP: ss1 << "bp" << endl; break; + case InfAlgorithms::CBP: ss1 << "cbp" << endl; break; + } + ss1 << "message schedule: " ; + switch (BpOptions::schedule) { + case BpOptions::Schedule::SEQ_FIXED: + ss1 << "sequential fixed" << endl; + break; + case BpOptions::Schedule::SEQ_RANDOM: + ss1 << "sequential random" << endl; + break; + case BpOptions::Schedule::PARALLEL: + ss1 << "parallel" << endl; + break; + case BpOptions::Schedule::MAX_RESIDUAL: + ss1 << "max residual" << endl; + break; + } + ss1 << "max iterations: " << BpOptions::maxIter << endl; + ss1 << "accuracy " << BpOptions::accuracy << endl; + ss1 << endl << endl; + Util::printSubHeader ("Network information", ss2); + ss2 << left; + ss2 << setw (15) << "Network Size" ; + ss2 << setw (9) << "Loopy" ; + ss2 << setw (15) << "Iterations" ; + ss2 << setw (15) << "Solving Time" ; + ss2 << endl; + unsigned nLoopyNets = 0; + unsigned nUnconvergedRuns = 0; + double totalSolvingTime = 0.0; + for (unsigned i = 0; i < netInfo_.size(); i++) { + ss2 << setw (15) << netInfo_[i].size; + if (netInfo_[i].loopy) { + ss2 << setw (9) << "yes"; + nLoopyNets ++; + } else { + ss2 << setw (9) << "no"; + } + if (netInfo_[i].nIters == 0) { + ss2 << setw (15) << "n/a" ; + } else { + ss2 << setw (15) << netInfo_[i].nIters; + if (netInfo_[i].nIters > BpOptions::maxIter) { + nUnconvergedRuns ++; + } + } + ss2 << setw (15) << netInfo_[i].time; + totalSolvingTime += netInfo_[i].time; + ss2 << endl; + } + ss2 << endl << endl; + + unsigned c1 = 0, c2 = 0, c3 = 0, c4 = 0; + if (compressInfo_.size() > 0) { + Util::printSubHeader ("Compress information", ss3); + ss3 << left; + ss3 << "Ground Cluster Ground Cluster Neighborless" << endl; + ss3 << "Vars Vars Factors Factors Vars" << endl; + for (unsigned i = 0; i < compressInfo_.size(); i++) { + ss3 << setw (9) << compressInfo_[i].nrGroundVars; + ss3 << setw (10) << compressInfo_[i].nrClusterVars; + ss3 << setw (10) << compressInfo_[i].nrGroundFactors; + ss3 << setw (10) << compressInfo_[i].nrClusterFactors; + ss3 << setw (10) << compressInfo_[i].nrNeighborless; + ss3 << endl; + c1 += compressInfo_[i].nrGroundVars - compressInfo_[i].nrNeighborless; + c2 += compressInfo_[i].nrClusterVars; + c3 += compressInfo_[i].nrGroundFactors - compressInfo_[i].nrNeighborless; + c4 += compressInfo_[i].nrClusterFactors; + if (compressInfo_[i].nrNeighborless != 0) { + c2 --; + c4 --; + } + } + ss3 << endl << endl; + } + + ss4 << "primary networks: " << primaryNetCount_ << endl; + ss4 << "solved networks: " << netInfo_.size() << endl; + ss4 << "loopy networks: " << nLoopyNets << endl; + ss4 << "unconverged runs: " << nUnconvergedRuns << endl; + ss4 << "total solving time: " << totalSolvingTime << endl; + if (compressInfo_.size() > 0) { + double pc1 = (1.0 - (c2 / (double)c1)) * 100.0; + double pc2 = (1.0 - (c4 / (double)c3)) * 100.0; + ss4 << setprecision (5); + ss4 << "variable compression: " << pc1 << "%" << endl; + ss4 << "factor compression: " << pc2 << "%" << endl; + } + ss4 << endl << endl; + + ss1 << ss4.str() << ss2.str() << ss3.str(); + return ss1.str(); +} + diff --git a/packages/CLPBN/horus/Util.h b/packages/CLPBN/horus/Util.h new file mode 100644 index 000000000..5b9304d2a --- /dev/null +++ b/packages/CLPBN/horus/Util.h @@ -0,0 +1,422 @@ +#ifndef HORUS_UTIL_H +#define HORUS_UTIL_H + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include "Horus.h" + +using namespace std; + + +namespace Util { + +template void addToVector (vector&, const vector&); + +template void addToSet (set&, const vector&); + +template void addToQueue (queue&, const vector&); + +template bool contains (const vector&, const T&); + +template bool contains (const set&, const T&); + +template bool contains ( + const unordered_map&, const K&); + +template int indexOf (const vector&, const T&); + +template std::string toString (const T&); + +template <> std::string toString (const bool&); + +unsigned stringToUnsigned (string); + +double stringToDouble (string); + +void toLog (Params&); + +void fromLog (Params&); + +double logSum (double, double); + +void multiply (Params&, const Params&); + +void multiply (Params&, const Params&, unsigned); + +void add (Params&, const Params&); + +void subtract (Params&, const Params&); + +void add (Params&, const Params&, unsigned); + +unsigned maxUnsigned (void); + +double factorial (unsigned); + +double logFactorial (unsigned); + +unsigned nrCombinations (unsigned, unsigned); + +unsigned expectedSize (const Ranges&); + +unsigned getNumberOfDigits (int); + +bool isInteger (const string&); + +string parametersToString (const Params&, unsigned = Constants::PRECISION); + +vector getStateLines (const Vars&); + +bool setHorusFlag (string key, string value); + +void printHeader (string, std::ostream& os = std::cout); + +void printSubHeader (string, std::ostream& os = std::cout); + +void printAsteriskLine (std::ostream& os = std::cout); + +void printDashedLine (std::ostream& os = std::cout); + +}; + + + +template void +Util::addToVector (vector& v, const vector& elements) +{ + v.insert (v.end(), elements.begin(), elements.end()); +} + + + +template void +Util::addToSet (set& s, const vector& elements) +{ + s.insert (elements.begin(), elements.end()); +} + + + +template void +Util::addToQueue (queue& q, const vector& elements) +{ + for (unsigned i = 0; i < elements.size(); i++) { + q.push (elements[i]); + } +} + + + +template bool +Util::contains (const vector& v, const T& e) +{ + return std::find (v.begin(), v.end(), e) != v.end(); +} + + + +template bool +Util::contains (const set& s, const T& e) +{ + return s.find (e) != s.end(); +} + + + +template bool +Util::contains (const unordered_map& m, const K& k) +{ + return m.find (k) != m.end(); +} + + + +template int +Util::indexOf (const vector& v, const T& e) +{ + int pos = std::distance (v.begin(), + std::find (v.begin(), v.end(), e)); + if (pos == (int)v.size()) { + pos = -1; + } + return pos; +} + + + +template std::string +Util::toString (const T& t) +{ + std::stringstream ss; + ss << t; + return ss.str(); +} + + + +template +std::ostream& operator << (std::ostream& os, const vector& v) +{ + os << "[" ; + for (unsigned i = 0; i < v.size(); i++) { + os << ((i != 0) ? ", " : "") << v[i]; + } + os << "]" ; + return os; +} + + +namespace { +const double NEG_INF = -numeric_limits::infinity(); +}; + + +inline double +Util::logSum (double x, double y) +{ + // std::log (std::exp (x) + std::exp (y)) can overflow! + assert (std::isnan (x) == false); + assert (std::isnan (y) == false); + if (x == NEG_INF) { + return y; + } + if (y == NEG_INF) { + return x; + } + // if one value is much smaller than the other, + // keep the larger value + const double tol = 460.517; // log (1e200) + if (x < y - tol) { + return y; + } + if (y < x - tol) { + return x; + } + assert (std::isnan (x - y) == false); + const double exp_diff = std::exp (x - y); + if (std::isfinite (exp_diff) == false) { + // difference is too large + return x > y ? x : y; + } + // otherwise return the sum + return y + std::log (static_cast(1.0) + exp_diff); +} + + + +inline void +Util::multiply (Params& v1, const Params& v2) +{ + assert (v1.size() == v2.size()); + for (unsigned i = 0; i < v1.size(); i++) { + v1[i] *= v2[i]; + } +} + + + +inline void +Util::multiply (Params& v1, const Params& v2, unsigned repetitions) +{ + for (unsigned count = 0; count < v1.size(); ) { + for (unsigned i = 0; i < v2.size(); i++) { + for (unsigned r = 0; r < repetitions; r++) { + v1[count] *= v2[i]; + count ++; + } + } + } +} + + + +inline void +Util::add (Params& v1, const Params& v2) +{ + assert (v1.size() == v2.size()); + std::transform (v1.begin(), v1.end(), v2.begin(), + v1.begin(), plus()); +} + + + +inline void +Util::subtract (Params& v1, const Params& v2) +{ + assert (v1.size() == v2.size()); + std::transform (v1.begin(), v1.end(), v2.begin(), + v1.begin(), minus()); +} + + + +inline void +Util::add (Params& v1, const Params& v2, unsigned repetitions) +{ + for (unsigned count = 0; count < v1.size(); ) { + for (unsigned i = 0; i < v2.size(); i++) { + for (unsigned r = 0; r < repetitions; r++) { + v1[count] += v2[i]; + count ++; + } + } + } +} + + + +inline unsigned +Util::maxUnsigned (void) +{ + return numeric_limits::max(); +} + + + +namespace LogAware { + +inline double +one() +{ + return Globals::logDomain ? 0.0 : 1.0; +} + + +inline double +zero() { + return Globals::logDomain ? NEG_INF : 0.0 ; +} + + +inline double +addIdenty() +{ + return Globals::logDomain ? NEG_INF : 0.0; +} + + +inline double +multIdenty() +{ + return Globals::logDomain ? 0.0 : 1.0; +} + + +inline double +withEvidence() +{ + return Globals::logDomain ? 0.0 : 1.0; +} + + +inline double +noEvidence() { + return Globals::logDomain ? NEG_INF : 0.0; +} + + +inline double +tl (double v) +{ + return Globals::logDomain ? log (v) : v; +} + + +inline double +fl (double v) +{ + return Globals::logDomain ? exp (v) : v; +} + + +void normalize (Params&); + +double getL1Distance (const Params&, const Params&); + +double getMaxNorm (const Params&, const Params&); + +double pow (double, unsigned); + +double pow (double, double); + +void pow (Params&, unsigned); + +void pow (Params&, double); + +}; + + + +struct NetInfo +{ + NetInfo (unsigned size, bool loopy, unsigned nIters, double time) + { + this->size = size; + this->loopy = loopy; + this->nIters = nIters; + this->time = time; + } + unsigned size; + bool loopy; + unsigned nIters; + double time; +}; + + +struct CompressInfo +{ + CompressInfo (unsigned a, unsigned b, unsigned c, unsigned d, unsigned e) + { + nrGroundVars = a; + nrGroundFactors = b; + nrClusterVars = c; + nrClusterFactors = d; + nrNeighborless = e; + } + unsigned nrGroundVars; + unsigned nrGroundFactors; + unsigned nrClusterVars; + unsigned nrClusterFactors; + unsigned nrNeighborless; +}; + + +class Statistics +{ + public: + static unsigned getSolvedNetworksCounting (void); + + static void incrementPrimaryNetworksCounting (void); + + static unsigned getPrimaryNetworksCounting (void); + + static void updateStatistics (unsigned, bool, unsigned, double); + + static void printStatistics (void); + + static void writeStatistics (const char*); + + static void updateCompressingStatistics ( + unsigned, unsigned, unsigned, unsigned, unsigned); + + private: + static string getStatisticString (void); + + static vector netInfo_; + static vector compressInfo_; + static unsigned primaryNetCount_; +}; + +#endif // HORUS_UTIL_H + diff --git a/packages/CLPBN/horus/Var.cpp b/packages/CLPBN/horus/Var.cpp new file mode 100644 index 000000000..b786a302d --- /dev/null +++ b/packages/CLPBN/horus/Var.cpp @@ -0,0 +1,102 @@ +#include +#include + +#include "Var.h" + +using namespace std; + + +unordered_map Var::varsInfo_; + + +Var::Var (const Var* v) +{ + varId_ = v->varId(); + range_ = v->range(); + evidence_ = v->getEvidence(); + index_ = std::numeric_limits::max(); +} + + + +Var::Var (VarId varId, unsigned range, int evidence) +{ + assert (range != 0); + assert (evidence < (int) range); + varId_ = varId; + range_ = range; + evidence_ = evidence; + index_ = std::numeric_limits::max(); +} + + + +bool +Var::isValidState (int stateIndex) +{ + return stateIndex >= 0 && stateIndex < (int) range_; +} + + + +bool +Var::isValidState (const string& stateName) +{ + States states = Var::getVarInfo (varId_).states; + return Util::contains (states, stateName); +} + + + +void +Var::setEvidence (int ev) +{ + assert (ev < (int) range_); + evidence_ = ev; +} + + + +void +Var::setEvidence (const string& ev) +{ + States states = Var::getVarInfo (varId_).states; + for (unsigned i = 0; i < states.size(); i++) { + if (states[i] == ev) { + evidence_ = i; + return; + } + } + assert (false); +} + + + +string +Var::label (void) const +{ + if (Var::varsHaveInfo()) { + return Var::getVarInfo (varId_).label; + } + stringstream ss; + ss << "x" << varId_; + return ss.str(); +} + + + +States +Var::states (void) const +{ + if (Var::varsHaveInfo()) { + return Var::getVarInfo (varId_).states; + } + States states; + for (unsigned i = 0; i < range_; i++) { + stringstream ss; + ss << i ; + states.push_back (ss.str()); + } + return states; +} + diff --git a/packages/CLPBN/horus/Var.h b/packages/CLPBN/horus/Var.h new file mode 100644 index 000000000..ce759330b --- /dev/null +++ b/packages/CLPBN/horus/Var.h @@ -0,0 +1,108 @@ +#ifndef HORUS_Var_H +#define HORUS_Var_H + +#include + +#include + +#include "Util.h" +#include "Horus.h" + + +using namespace std; + + +struct VarInfo +{ + VarInfo (string l, const States& sts) : label(l), states(sts) { } + string label; + States states; +}; + + + +class Var +{ + public: + Var (const Var*); + + Var (VarId, unsigned, int = Constants::NO_EVIDENCE); + + virtual ~Var (void) { }; + + unsigned varId (void) const { return varId_; } + + unsigned range (void) const { return range_; } + + int getEvidence (void) const { return evidence_; } + + unsigned getIndex (void) const { return index_; } + + void setIndex (unsigned idx) { index_ = idx; } + + operator unsigned () const { return index_; } + + bool hasEvidence (void) const + { + return evidence_ != Constants::NO_EVIDENCE; + } + + bool operator== (const Var& var) const + { + assert (!(varId_ == var.varId() && range_ != var.range())); + return varId_ == var.varId(); + } + + bool operator!= (const Var& var) const + { + assert (!(varId_ == var.varId() && range_ != var.range())); + return varId_ != var.varId(); + } + + bool isValidState (int); + + bool isValidState (const string&); + + void setEvidence (int); + + void setEvidence (const string&); + + string label (void) const; + + States states (void) const; + + static void addVarInfo ( + VarId vid, string label, const States& states) + { + assert (Util::contains (varsInfo_, vid) == false); + varsInfo_.insert (make_pair (vid, VarInfo (label, states))); + } + + static VarInfo getVarInfo (VarId vid) + { + assert (Util::contains (varsInfo_, vid)); + return varsInfo_.find (vid)->second; + } + + static bool varsHaveInfo (void) + { + return varsInfo_.size() != 0; + } + + static void clearVarsInfo (void) + { + varsInfo_.clear(); + } + + private: + VarId varId_; + unsigned range_; + int evidence_; + unsigned index_; + + static unordered_map varsInfo_; + +}; + +#endif // BP_Var_H + diff --git a/packages/CLPBN/horus/VarElimSolver.cpp b/packages/CLPBN/horus/VarElimSolver.cpp new file mode 100644 index 000000000..70634e91e --- /dev/null +++ b/packages/CLPBN/horus/VarElimSolver.cpp @@ -0,0 +1,216 @@ +#include + +#include "VarElimSolver.h" +#include "ElimGraph.h" +#include "Factor.h" +#include "Util.h" + + +VarElimSolver::~VarElimSolver (void) +{ + delete factorList_.back(); +} + + + +Params +VarElimSolver::solveQuery (VarIds queryVids) +{ + if (Globals::verbosity > 1) { + cout << "Solving query on " ; + for (unsigned i = 0; i < queryVids.size(); i++) { + if (i != 0) cout << ", " ; + cout << fg.getVarNode (queryVids[i])->label(); + } + cout << endl; + } + factorList_.clear(); + varFactors_.clear(); + elimOrder_.clear(); + createFactorList(); + absorveEvidence(); + findEliminationOrder (queryVids); + processFactorList (queryVids); + Params params = factorList_.back()->params(); + if (Globals::logDomain) { + Util::fromLog (params); + } + return params; +} + + + +void +VarElimSolver::printSolverFlags (void) const +{ + stringstream ss; + ss << "variable elimination [" ; + ss << "elim_heuristic=" ; + ElimHeuristic eh = ElimGraph::elimHeuristic; + switch (eh) { + case MIN_NEIGHBORS: ss << "min_neighbors"; break; + case MIN_WEIGHT: ss << "min_weight"; break; + case MIN_FILL: ss << "min_fill"; break; + case WEIGHTED_MIN_FILL: ss << "weighted_min_fill"; break; + } + ss << ",log_domain=" << Util::toString (Globals::logDomain); + ss << "]" ; + cout << ss.str() << endl; +} + + + +void +VarElimSolver::createFactorList (void) +{ + const FacNodes& facNodes = fg.facNodes(); + factorList_.reserve (facNodes.size() * 2); + for (unsigned i = 0; i < facNodes.size(); i++) { + factorList_.push_back (new Factor (facNodes[i]->factor())); + const VarNodes& neighs = facNodes[i]->neighbors(); + for (unsigned j = 0; j < neighs.size(); j++) { + unordered_map >::iterator it + = varFactors_.find (neighs[j]->varId()); + if (it == varFactors_.end()) { + it = varFactors_.insert (make_pair ( + neighs[j]->varId(), vector())).first; + } + it->second.push_back (i); + } + } +} + + + +void +VarElimSolver::absorveEvidence (void) +{ + if (Globals::verbosity > 2) { + Util::printDashedLine(); + cout << "(initial factor list)" << endl; + printActiveFactors(); + } + const VarNodes& varNodes = fg.varNodes(); + for (unsigned i = 0; i < varNodes.size(); i++) { + if (varNodes[i]->hasEvidence()) { + if (Globals::verbosity > 1) { + cout << "-> aborving evidence on "; + cout << varNodes[i]->label() << " = " ; + cout << varNodes[i]->getEvidence() << endl; + } + const vector& idxs = + varFactors_.find (varNodes[i]->varId())->second; + for (unsigned j = 0; j < idxs.size(); j++) { + Factor* factor = factorList_[idxs[j]]; + if (factor->nrArguments() == 1) { + factorList_[idxs[j]] = 0; + } else { + factorList_[idxs[j]]->absorveEvidence ( + varNodes[i]->varId(), varNodes[i]->getEvidence()); + } + } + } + } +} + + + +void +VarElimSolver::findEliminationOrder (const VarIds& vids) +{ + elimOrder_ = ElimGraph::getEliminationOrder (factorList_, vids); +} + + + +void +VarElimSolver::processFactorList (const VarIds& vids) +{ + totalFactorSize_ = 0; + largestFactorSize_ = 0; + for (unsigned i = 0; i < elimOrder_.size(); i++) { + if (Globals::verbosity >= 2) { + if (Globals::verbosity >= 3) { + Util::printDashedLine(); + printActiveFactors(); + } + cout << "-> summing out " ; + cout << fg.getVarNode (elimOrder_[i])->label() << endl; + } + eliminate (elimOrder_[i]); + } + + Factor* finalFactor = new Factor(); + for (unsigned i = 0; i < factorList_.size(); i++) { + if (factorList_[i]) { + finalFactor->multiply (*factorList_[i]); + delete factorList_[i]; + factorList_[i] = 0; + } + } + + VarIds unobservedVids; + for (unsigned i = 0; i < vids.size(); i++) { + if (fg.getVarNode (vids[i])->hasEvidence() == false) { + unobservedVids.push_back (vids[i]); + } + } + + finalFactor->reorderArguments (unobservedVids); + finalFactor->normalize(); + factorList_.push_back (finalFactor); + if (Globals::verbosity > 0) { + cout << "total factor size: " << totalFactorSize_ << endl; + cout << "largest factor size: " << largestFactorSize_ << endl; + cout << endl; + } +} + + + +void +VarElimSolver::eliminate (VarId elimVar) +{ + Factor* result = 0; + vector& idxs = varFactors_.find (elimVar)->second; + for (unsigned i = 0; i < idxs.size(); i++) { + unsigned idx = idxs[i]; + if (factorList_[idx]) { + if (result == 0) { + result = new Factor (*factorList_[idx]); + } else { + result->multiply (*factorList_[idx]); + } + delete factorList_[idx]; + factorList_[idx] = 0; + } + } + totalFactorSize_ += result->size(); + if (result->size() > largestFactorSize_) { + largestFactorSize_ = result->size(); + } + if (result != 0 && result->nrArguments() != 1) { + result->sumOut (elimVar); + factorList_.push_back (result); + const VarIds& resultVarIds = result->arguments(); + for (unsigned i = 0; i < resultVarIds.size(); i++) { + vector& idxs = + varFactors_.find (resultVarIds[i])->second; + idxs.push_back (factorList_.size() - 1); + } + } +} + + + +void +VarElimSolver::printActiveFactors (void) +{ + for (unsigned i = 0; i < factorList_.size(); i++) { + if (factorList_[i] != 0) { + cout << factorList_[i]->getLabel() << " " ; + cout << factorList_[i]->params() << endl; + } + } +} + diff --git a/packages/CLPBN/horus/VarElimSolver.h b/packages/CLPBN/horus/VarElimSolver.h new file mode 100644 index 000000000..d5ed441a9 --- /dev/null +++ b/packages/CLPBN/horus/VarElimSolver.h @@ -0,0 +1,46 @@ +#ifndef HORUS_VARELIMSOLVER_H +#define HORUS_VARELIMSOLVER_H + +#include "unordered_map" + +#include "Solver.h" +#include "FactorGraph.h" +#include "Horus.h" + + +using namespace std; + + +class VarElimSolver : public Solver +{ + public: + VarElimSolver (const FactorGraph& fg) : Solver (fg) { } + + ~VarElimSolver (void); + + Params solveQuery (VarIds); + + void printSolverFlags (void) const; + + private: + void createFactorList (void); + + void absorveEvidence (void); + + void findEliminationOrder (const VarIds&); + + void processFactorList (const VarIds&); + + void eliminate (VarId); + + void printActiveFactors (void); + + Factors factorList_; + VarIds elimOrder_; + unsigned largestFactorSize_; + unsigned totalFactorSize_; + unordered_map> varFactors_; +}; + +#endif // HORUS_VARELIMSOLVER_H + diff --git a/packages/CLPBN/horus/benchmarks/benchs.sh b/packages/CLPBN/horus/benchmarks/benchs.sh new file mode 100755 index 000000000..7ceb25cef --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/benchs.sh @@ -0,0 +1,78 @@ + + +function prepare_new_run +{ + YAP=~/bin/$SHORTNAME-$SOLVER + + LOG_FILE=$SOLVER.log + #LOG_FILE=results`date "+ %H:%M:%S %d-%m-%Y"`. + + rm -f $LOG_FILE + rm -f ignore.$LOG_FILE + + cp ~/bin/yap $YAP +} + + + +function run_solver +{ + constraint=$1 + solver_flag=true + if [ -n "$2" ]; then + if [ $SOLVER = hve ]; then + solver_flag=clpbn_horus:set_horus_flag\(elim_heuristic,$2\) + elif [ $SOLVER = bp ]; then + solver_flag=clpbn_horus:set_horus_flag\(schedule,$2\) + elif [ $SOLVER = cbp ]; then + solver_flag=clpbn_horus:set_horus_flag\(schedule,$2\) + else + echo "unknow flag $2" + fi + fi + /usr/bin/time -o $LOG_FILE -a -f "%U\t%S\t%e\t%M" \ + $YAP << EOF >> $LOG_FILE &>> ignore.$LOG_FILE +nogc. +[$NETWORK]. +[$constraint]. +clpbn_horus:set_solver($SOLVER). +clpbn_horus:set_horus_flag(use_logarithms, true). +clpbn_horus:set_horus_flag(verbosity, 1). +$solver_flag. +$QUERY. +open("$LOG_FILE", 'append', S), format(S, '$constraint ~15+ ', []), close(S). +EOF +} + + + +function clear_log_files +{ + rm -f *~ + rm -f ../*~ + rm -f school/*.log school/*~ + rm -f ../school/*.log ../school/*~ + rm -f city/*.log city/*~ + rm -f ../city/*.log ../city/*~ + rm -f workshop_attrs/*.log workshop_attrs/*~ + rm -f ../workshop_attrs/*.log ../workshop_attrs/*~ + echo all done! +} + + + +function write_header +{ + echo -n "****************************************" >> $LOG_FILE + echo "****************************************" >> $LOG_FILE + echo "results for solver $1 user(s) sys(s) real(s), mem(kB)" >> $LOG_FILE + echo -n "****************************************" >> $LOG_FILE + echo "****************************************" >> $LOG_FILE +} + + +if [ $1 ] && [ $1 == "clean" ]; then + clear_log_files +fi + + diff --git a/packages/CLPBN/horus/benchmarks/city/bp.log b/packages/CLPBN/horus/benchmarks/city/bp.log new file mode 100644 index 000000000..72572c927 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/city/bp.log @@ -0,0 +1,4 @@ +************************************************************************ +results for solver bp(shedule=seq_fixed) +************************************************************************ +city1000: real:0:00.20 user:0.12 sys:0.02 diff --git a/packages/CLPBN/horus/benchmarks/city/bp_tests.sh b/packages/CLPBN/horus/benchmarks/city/bp_tests.sh new file mode 100755 index 000000000..cfd74d818 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/city/bp_tests.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +source city.sh +source ../benchs.sh + +SOLVER="bp" + +function run_all_graphs +{ + write_header $1 + run_solver city1000 $2 + run_solver city5000 $2 + run_solver city10000 $2 + run_solver city15000 $2 + run_solver city20000 $2 + run_solver city25000 $2 + run_solver city30000 $2 + run_solver city35000 $2 + run_solver city40000 $2 + run_solver city45000 $2 + run_solver city50000 $2 + run_solver city55000 $2 + run_solver city60000 $2 + run_solver city65000 $2 + return + run_solver city70000 $2 + run_solver city75000 $2 + run_solver city80000 $2 + run_solver city85000 $2 + run_solver city90000 $2 + run_solver city95000 $2 + run_solver city100000 $2 +} + +prepare_new_run +run_all_graphs "bp(shedule=seq_fixed) " seq_fixed + diff --git a/packages/CLPBN/horus/benchmarks/city/cbp_tests.sh b/packages/CLPBN/horus/benchmarks/city/cbp_tests.sh new file mode 100755 index 000000000..dd9868ae2 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/city/cbp_tests.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +source city.sh +source ../benchs.sh + +SOLVER="cbp" + +function run_all_graphs +{ + write_header $1 + run_solver city1000 $2 + run_solver city5000 $2 + run_solver city10000 $2 + run_solver city15000 $2 + run_solver city20000 $2 + run_solver city25000 $2 + run_solver city30000 $2 + run_solver city35000 $2 + run_solver city40000 $2 + run_solver city45000 $2 + run_solver city50000 $2 + run_solver city55000 $2 + run_solver city60000 $2 + run_solver city65000 $2 + run_solver city70000 $2 + run_solver city75000 $2 + run_solver city80000 $2 + run_solver city85000 $2 + run_solver city90000 $2 + run_solver city95000 $2 + run_solver city100000 $2 +} + +prepare_new_run +run_all_graphs "cbp(shedule=seq_fixed) " seq_fixed + diff --git a/packages/CLPBN/horus/benchmarks/city/city.sh b/packages/CLPBN/horus/benchmarks/city/city.sh new file mode 100755 index 000000000..27fa93935 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/city/city.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +NETWORK="'../../examples/city'" +SHORTNAME="city" +QUERY="is_joe_guilty(X)" + diff --git a/packages/CLPBN/horus/benchmarks/city/fove_tests.sh b/packages/CLPBN/horus/benchmarks/city/fove_tests.sh new file mode 100755 index 000000000..149d3b332 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/city/fove_tests.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +source city.sh +source ../benchs.sh + +SOLVER="fove" + +function run_all_graphs +{ + write_header $1 + run_solver city1000 $2 + run_solver city5000 $2 + run_solver city10000 $2 + run_solver city15000 $2 + run_solver city20000 $2 + run_solver city25000 $2 + run_solver city30000 $2 + run_solver city35000 $2 + run_solver city40000 $2 + run_solver city45000 $2 + run_solver city50000 $2 + run_solver city55000 $2 + run_solver city60000 $2 + run_solver city65000 $2 + run_solver city70000 $2 + run_solver city75000 $2 + run_solver city80000 $2 + run_solver city85000 $2 + run_solver city90000 $2 + run_solver city95000 $2 + run_solver city100000 $2 +} + +prepare_new_run +run_all_graphs "fove " + diff --git a/packages/CLPBN/horus/benchmarks/city/gen_city.sh b/packages/CLPBN/horus/benchmarks/city/gen_city.sh new file mode 100755 index 000000000..7c95f4ed3 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/city/gen_city.sh @@ -0,0 +1,33 @@ +#! /home/tgomes/bin/yap -L -- + + +:- initialization(main). + + +main :- + unix(argv([N])), + atomic_concat(['city', N, '.yap'], FileName), + open(FileName, 'write', S), + atom_number(N, N2), + generate_people(S, N2, 1), + write(S, '\n'), + generate_evidence(S, N2, 1), + write(S, '\n'), + close(S). + + +generate_people(S, N, Counting) :- + Counting > N, !. +generate_people(S, N, Counting) :- + format(S, 'people(p~w, nyc).~n', [Counting]), + Counting1 is Counting + 1, + generate_people(S, N, Counting1). + + +generate_evidence(S, N, Counting) :- + Counting > N, !. +generate_evidence(S, N, Counting) :- !, + format(S, 'ev(descn(p~w, t)).~n', [Counting]), + Counting1 is Counting + 1, + generate_evidence(S, N, Counting1). + diff --git a/packages/CLPBN/horus/benchmarks/city/hve_tests.sh b/packages/CLPBN/horus/benchmarks/city/hve_tests.sh new file mode 100755 index 000000000..1893d21ab --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/city/hve_tests.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +source city.sh +source ../benchs.sh + +SOLVER="hve" + +function run_all_graphs +{ + write_header $1 + run_solver city1000 $2 + run_solver city5000 $2 + run_solver city10000 $2 + run_solver city15000 $2 + run_solver city20000 $2 + run_solver city25000 $2 + run_solver city30000 $2 + run_solver city35000 $2 + run_solver city40000 $2 + run_solver city45000 $2 + run_solver city50000 $2 + run_solver city55000 $2 + run_solver city60000 $2 + run_solver city65000 $2 + run_solver city70000 $2 + + run_solver city75000 $2 + run_solver city80000 $2 + run_solver city85000 $2 + run_solver city90000 $2 + run_solver city95000 $2 + run_solver city100000 $2 +} + +prepare_new_run +run_all_graphs "hve(elim_heuristic=min_neighbors) " min_neighbors + diff --git a/packages/CLPBN/horus/benchmarks/city/ignore.bp.log b/packages/CLPBN/horus/benchmarks/city/ignore.bp.log new file mode 100644 index 000000000..d5feb408d --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/city/ignore.bp.log @@ -0,0 +1,96 @@ +YAP 6.3.2 (i686-linux): Sáb Abr 28 13:56:07 WEST 2012 +yes + % consulting /home/tiago/yap-6.3/packages/CLPBN/clpbn/bp/examples/city.yap... + % reconsulting /home/tiago/share/Yap/pfl.yap... + % reconsulting /home/tiago/share/Yap/lists.yap... + % reconsulting /home/tiago/share/Yap/error.pl... + % reconsulted /home/tiago/share/Yap/error.pl in module error, 4 msec 27448 bytes + % reconsulted /home/tiago/share/Yap/lists.yap in module lists, 4 msec 60536 bytes + % reconsulting /home/tiago/share/Yap/clpbn.yap... + % reconsulting /home/tiago/share/Yap/atts.yap... + % reconsulted /home/tiago/share/Yap/atts.yap in module attributes, 0 msec 22808 bytes + % reconsulting /home/tiago/share/Yap/terms.yap... + % reconsulted /home/tiago/share/Yap/terms.yap in module terms, 0 msec 1480 bytes + % reconsulting /home/tiago/share/Yap/clpbn/ve.yap... + % reconsulting /home/tiago/share/Yap/ordsets.yap... + % reconsulted /home/tiago/share/Yap/ordsets.yap in module ordsets, 4 msec 23928 bytes + % reconsulting /home/tiago/share/Yap/clpbn/xbif.yap... + % reconsulting /home/tiago/share/Yap/clpbn/dists.yap... + % reconsulting /home/tiago/share/Yap/matrix.yap... + % reconsulted /home/tiago/share/Yap/matrix.yap in module matrix, 0 msec 20608 bytes + % reconsulting /home/tiago/share/Yap/clpbn/matrix_cpt_utils.yap... + % reconsulted /home/tiago/share/Yap/clpbn/matrix_cpt_utils.yap in module clpbn_matrix_utils, 0 msec 33504 bytes + % reconsulted /home/tiago/share/Yap/clpbn/dists.yap in module clpbn_dist, 4 msec 97560 bytes + % reconsulted /home/tiago/share/Yap/clpbn/xbif.yap in module xbif, 4 msec 109176 bytes + % reconsulting /home/tiago/share/Yap/clpbn/graphviz.yap... + % reconsulted /home/tiago/share/Yap/clpbn/graphviz.yap in module clpbn_gviz, 0 msec 7784 bytes + % reconsulting /home/tiago/share/Yap/clpbn/utils.yap... + % reconsulted /home/tiago/share/Yap/clpbn/utils.yap in module clpbn_utils, 0 msec 13912 bytes + % reconsulting /home/tiago/share/Yap/clpbn/display.yap... + % reconsulted /home/tiago/share/Yap/clpbn/display.yap in module clpbn_display, 0 msec 11232 bytes + % reconsulting /home/tiago/share/Yap/clpbn/connected.yap... + % reconsulting /home/tiago/share/Yap/dgraphs.yap... + % reconsulting /home/tiago/share/Yap/rbtrees.yap... + % reconsulted /home/tiago/share/Yap/rbtrees.yap in module rbtrees, 8 msec 117496 bytes + % reconsulting /home/tiago/share/Yap/wdgraphs.yap... + % reconsulting /home/tiago/share/Yap/heaps.yap... + % reconsulted /home/tiago/share/Yap/heaps.yap in module heaps, 4 msec 13520 bytes + % reconsulted /home/tiago/share/Yap/wdgraphs.yap in module wdgraphs, 4 msec 72176 bytes + % reconsulted /home/tiago/share/Yap/dgraphs.yap in module dgraphs, 16 msec 243240 bytes + % reconsulted /home/tiago/share/Yap/clpbn/connected.yap in module clpbn_connected, 16 msec 261736 bytes + % reconsulting /home/tiago/share/Yap/clpbn/aggregates.yap... + % reconsulted /home/tiago/share/Yap/clpbn/aggregates.yap in module clpbn_aggregates, 0 msec 36512 bytes + % reconsulted /home/tiago/share/Yap/clpbn/ve.yap in module clpbn_ve, 36 msec 500808 bytes + % reconsulting /home/tiago/share/Yap/clpbn/bp.yap... + % reconsulting /home/tiago/share/Yap/charsio.yap... + % reconsulted /home/tiago/share/Yap/charsio.yap in module charsio, 0 msec 10592 bytes + % reconsulting /home/tiago/share/Yap/bhash.yap... + % reconsulted /home/tiago/share/Yap/bhash.yap in module b_hash, 0 msec 30624 bytes + % reconsulting /home/tiago/share/Yap/clpbn/horus.yap... +% Warning: (/home/tiago/share/Yap/clpbn/horus.yap:23). +% Importing private predicate pfl:set_pfl_flag/2 to clpbn_horus. + % reconsulted /home/tiago/share/Yap/clpbn/horus.yap in module clpbn_horus, 4 msec 14248 bytes + % reconsulted /home/tiago/share/Yap/clpbn/bp.yap in module clpbn_bp, 8 msec 87944 bytes + % reconsulting /home/tiago/share/Yap/clpbn/fove.yap... + % reconsulted /home/tiago/share/Yap/clpbn/fove.yap in module clpbn_fove, 4 msec 17464 bytes + % reconsulting /home/tiago/share/Yap/clpbn/jt.yap... + % reconsulting /home/tiago/share/Yap/undgraphs.yap... + % reconsulting /home/tiago/share/Yap/wundgraphs.yap... + % reconsulted /home/tiago/share/Yap/wundgraphs.yap in module wundgraphs, 4 msec 37816 bytes + % reconsulted /home/tiago/share/Yap/undgraphs.yap in module undgraphs, 8 msec 66048 bytes + % reconsulted /home/tiago/share/Yap/clpbn/jt.yap in module jt, 12 msec 143960 bytes + % reconsulting /home/tiago/share/Yap/clpbn/bdd.yap... + % reconsulting /home/tiago/share/Yap/hacks.yap... + % reconsulted /home/tiago/share/Yap/hacks.yap in module yap_hacks, 0 msec 4968 bytes + ERROR!! (/home/tiago/share/Yap/clpbn/bdd.yap:54). + PERMISSION ERROR- use_module(library(bdd)): cannot read from library(bdd) + % reconsulted /home/tiago/share/Yap/clpbn/bdd.yap in module clpbn_bdd, 8 msec 152336 bytes + % reconsulting /home/tiago/share/Yap/clpbn/gibbs.yap... + % reconsulting /home/tiago/share/Yap/clpbn/topsort.yap... + % reconsulted /home/tiago/share/Yap/clpbn/topsort.yap in module topsort, 0 msec 5848 bytes + % reconsulted /home/tiago/share/Yap/clpbn/gibbs.yap in module clpbn_gibbs, 0 msec 79344 bytes + % reconsulting /home/tiago/share/Yap/clpbn/pgrammar.yap... + % reconsulted /home/tiago/share/Yap/clpbn/pgrammar.yap in module clpbn_pgrammar, 4 msec 44088 bytes + % reconsulting /home/tiago/share/Yap/clpbn/graphs.yap... + % reconsulted /home/tiago/share/Yap/clpbn/graphs.yap in module clpbn2graph, 0 msec 8408 bytes + % reconsulting /home/tiago/share/Yap/clpbn/evidence.yap... + % reconsulted /home/tiago/share/Yap/clpbn/evidence.yap in module clpbn_evidence, 4 msec 21256 bytes + % reconsulting /home/tiago/share/Yap/clpbn/ground_factors.yap... + % reconsulted /home/tiago/share/Yap/clpbn/ground_factors.yap in module clpbn_ground_factors, 4 msec 16360 bytes + % reconsulted /home/tiago/share/Yap/clpbn.yap in module clpbn, 92 msec 1188576 bytes + % reconsulted /home/tiago/share/Yap/pfl.yap in module pfl, 96 msec 1277856 bytes + % consulted /home/tiago/yap-6.3/packages/CLPBN/clpbn/bp/examples/city.yap in module user, 96 msec 1313552 bytes +yes + ERROR!! + PERMISSION ERROR- consult(city1000): cannot read from city1000 +yes +yes +yes +yes +belief propagation [schedule=seq_fixed,max_iter=1000,accuracy=0.0001,log_domain=true] + +Sum-Product converged in 6 iterations + +p(X=y)= 0.2383192848945889, +p(X=n)= 0.761680715105411 +S = ''(0xa0288d8) diff --git a/packages/CLPBN/horus/benchmarks/comp_workshops/bp_tests.sh b/packages/CLPBN/horus/benchmarks/comp_workshops/bp_tests.sh new file mode 100755 index 000000000..6120edf5d --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/comp_workshops/bp_tests.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +source cw.sh +source ../benchs.sh + +SOLVER="bp" + +function run_all_graphs +{ + write_header $1 + run_solver p1000w$N_WORKSHOPS $2 + run_solver p5000w$N_WORKSHOPS $2 + run_solver p10000w$N_WORKSHOPS $2 + run_solver p15000w$N_WORKSHOPS $2 + run_solver p20000w$N_WORKSHOPS $2 + run_solver p25000w$N_WORKSHOPS $2 + return + run_solver p30000w$N_WORKSHOPS $2 + run_solver p35000w$N_WORKSHOPS $2 + run_solver p40000w$N_WORKSHOPS $2 + run_solver p45000w$N_WORKSHOPS $2 + run_solver p50000w$N_WORKSHOPS $2 + run_solver p55000w$N_WORKSHOPS $2 + run_solver p60000w$N_WORKSHOPS $2 + run_solver p65000w$N_WORKSHOPS $2 + run_solver p70000w$N_WORKSHOPS $2 +} + +prepare_new_run +run_all_graphs "bp(shedule=seq_fixed) " seq_fixed + diff --git a/packages/CLPBN/horus/benchmarks/comp_workshops/cbp_tests.sh b/packages/CLPBN/horus/benchmarks/comp_workshops/cbp_tests.sh new file mode 100755 index 000000000..26b5fc5ad --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/comp_workshops/cbp_tests.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source cw.sh +source ../benchs.sh + +SOLVER="cbp" + +function run_all_graphs +{ + write_header $1 + run_solver p1000w$N_WORKSHOPS $2 + run_solver p5000w$N_WORKSHOPS $2 + run_solver p10000w$N_WORKSHOPS $2 + run_solver p15000w$N_WORKSHOPS $2 + run_solver p20000w$N_WORKSHOPS $2 + run_solver p25000w$N_WORKSHOPS $2 + run_solver p30000w$N_WORKSHOPS $2 + run_solver p35000w$N_WORKSHOPS $2 + run_solver p40000w$N_WORKSHOPS $2 + run_solver p45000w$N_WORKSHOPS $2 + run_solver p50000w$N_WORKSHOPS $2 + run_solver p55000w$N_WORKSHOPS $2 + run_solver p60000w$N_WORKSHOPS $2 + run_solver p65000w$N_WORKSHOPS $2 + run_solver p70000w$N_WORKSHOPS $2 +} + +prepare_new_run +run_all_graphs "cbp(shedule=seq_fixed) " seq_fixed + diff --git a/packages/CLPBN/horus/benchmarks/comp_workshops/cw.sh b/packages/CLPBN/horus/benchmarks/comp_workshops/cw.sh new file mode 100755 index 000000000..cf5c8215b --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/comp_workshops/cw.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +NETWORK="'../../examples/comp_workshops'" +SHORTNAME="cw" +QUERY="series(X)" + +N_WORKSHOPS=10 + diff --git a/packages/CLPBN/horus/benchmarks/comp_workshops/fove_tests.sh b/packages/CLPBN/horus/benchmarks/comp_workshops/fove_tests.sh new file mode 100755 index 000000000..68e0c8d07 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/comp_workshops/fove_tests.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +source cw.sh +source ../benchs.sh + +SOLVER="fove" + +function run_all_graphs +{ + write_header $1 + run_solver p1000w$N_WORKSHOPS $2 + run_solver p5000w$N_WORKSHOPS $2 + run_solver p10000w$N_WORKSHOPS $2 + run_solver p15000w$N_WORKSHOPS $2 + run_solver p20000w$N_WORKSHOPS $2 + run_solver p25000w$N_WORKSHOPS $2 + run_solver p30000w$N_WORKSHOPS $2 + run_solver p35000w$N_WORKSHOPS $2 + run_solver p40000w$N_WORKSHOPS $2 + run_solver p45000w$N_WORKSHOPS $2 + run_solver p50000w$N_WORKSHOPS $2 + run_solver p55000w$N_WORKSHOPS $2 + run_solver p60000w$N_WORKSHOPS $2 + run_solver p65000w$N_WORKSHOPS $2 + run_solver p70000w$N_WORKSHOPS $2 +} + +prepare_new_run +run_all_graphs "fove " + + diff --git a/packages/CLPBN/horus/benchmarks/comp_workshops/gen_workshops.sh b/packages/CLPBN/horus/benchmarks/comp_workshops/gen_workshops.sh new file mode 100755 index 000000000..1b2baaeeb --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/comp_workshops/gen_workshops.sh @@ -0,0 +1,35 @@ +#!/home/tgomes/bin/yap -L -- + +:- use_module(library(lists)). + +:- initialization(main). + + +main :- + unix(argv(Args)), + nth(1, Args, NP), % number of invitees + nth(2, Args, NW), % number of workshops + atomic_concat(['p', NP , 'w', NW, '.yap'], FileName), + open(FileName, 'write', S), + atom_number(NP, NP2), + atom_number(NW, NW2), + gen(S, NP2, NW2, 1), + write(S, '\n'), + close(S). + + +gen(_, NP, _, Count) :- + Count > NP, !. +gen(S, NP, NW, Count) :- + gen_workshops(S, Count, NW, 1), + Count1 is Count + 1, + gen(S, NP, NW, Count1). + + +gen_workshops(_, _, NW, Count) :- + Count > NW, !. +gen_workshops(S, P, NW, Count) :- + format(S, 'c(p~w,w~w).~n', [P,Count]), + Count1 is Count + 1, + gen_workshops(S, P, NW, Count1). + diff --git a/packages/CLPBN/horus/benchmarks/comp_workshops/hve_tests.sh b/packages/CLPBN/horus/benchmarks/comp_workshops/hve_tests.sh new file mode 100755 index 000000000..3fa724e96 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/comp_workshops/hve_tests.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source cw.sh +source ../benchs.sh + +SOLVER="hve" + +function run_all_graphs +{ + write_header $1 + run_solver p1000w$N_WORKSHOPS $2 + run_solver p5000w$N_WORKSHOPS $2 + run_solver p10000w$N_WORKSHOPS $2 + run_solver p15000w$N_WORKSHOPS $2 + run_solver p20000w$N_WORKSHOPS $2 + run_solver p25000w$N_WORKSHOPS $2 + run_solver p30000w$N_WORKSHOPS $2 + run_solver p35000w$N_WORKSHOPS $2 + run_solver p40000w$N_WORKSHOPS $2 + run_solver p45000w$N_WORKSHOPS $2 + run_solver p50000w$N_WORKSHOPS $2 + run_solver p55000w$N_WORKSHOPS $2 + run_solver p60000w$N_WORKSHOPS $2 + run_solver p65000w$N_WORKSHOPS $2 + run_solver p70000w$N_WORKSHOPS $2 +} + +prepare_new_run +run_all_graphs "hve(elim_heuristic=min_neighbors) " min_neighbors + diff --git a/packages/CLPBN/horus/benchmarks/school/missing10.yap b/packages/CLPBN/horus/benchmarks/school/missing10.yap new file mode 100644 index 000000000..f7ac6fe10 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/school/missing10.yap @@ -0,0 +1 @@ +graph([professor_ability(p0,h),professor_ability(p1,h),professor_ability(p2,m),professor_ability(p3,m),professor_ability(p4,h),professor_ability(p5,h),professor_ability(p6,l),professor_ability(p7,l),professor_ability(p8,m),professor_ability(p9,h),professor_ability(p10,m),professor_ability(p11,h),professor_ability(p12,h),professor_ability(p13,m),professor_ability(p14,m),professor_ability(p15,m),professor_ability(p16,m),professor_ability(p17,m),professor_ability(p18,l),professor_ability(p19,h),professor_ability(p20,h),professor_ability(p21,_G131298),professor_ability(p22,m),professor_ability(p23,m),professor_ability(p24,l),professor_ability(p25,m),professor_ability(p26,h),professor_ability(p27,h),professor_ability(p28,_G131333),professor_ability(p29,m),professor_ability(p30,m),professor_ability(p31,h),professor_popularity(p0,h),professor_popularity(p1,_G131358),professor_popularity(p2,l),professor_popularity(p3,h),professor_popularity(p4,h),professor_popularity(p5,h),professor_popularity(p6,l),professor_popularity(p7,l),professor_popularity(p8,m),professor_popularity(p9,h),professor_popularity(p10,l),professor_popularity(p11,_G131408),professor_popularity(p12,h),professor_popularity(p13,l),professor_popularity(p14,m),professor_popularity(p15,h),professor_popularity(p16,m),professor_popularity(p17,h),professor_popularity(p18,l),professor_popularity(p19,_G131448),professor_popularity(p20,h),professor_popularity(p21,h),professor_popularity(p22,h),professor_popularity(p23,l),professor_popularity(p24,l),professor_popularity(p25,l),professor_popularity(p26,m),professor_popularity(p27,h),professor_popularity(p28,h),professor_popularity(p29,l),professor_popularity(p30,m),professor_popularity(p31,h),registration_grade(r0,a),registration_grade(r1,_G131518),registration_grade(r2,c),registration_grade(r3,c),registration_grade(r4,c),registration_grade(r5,c),registration_grade(r6,a),registration_grade(r7,a),registration_grade(r8,b),registration_grade(r9,a),registration_grade(r10,a),registration_grade(r11,a),registration_grade(r12,a),registration_grade(r13,a),registration_grade(r14,b),registration_grade(r15,b),registration_grade(r16,_G131593),registration_grade(r17,b),registration_grade(r18,_G131603),registration_grade(r19,c),registration_grade(r20,c),registration_grade(r21,a),registration_grade(r22,a),registration_grade(r23,b),registration_grade(r24,b),registration_grade(r25,a),registration_grade(r26,a),registration_grade(r27,b),registration_grade(r28,c),registration_grade(r29,b),registration_grade(r30,c),registration_grade(r31,b),registration_grade(r32,c),registration_grade(r33,a),registration_grade(r34,c),registration_grade(r35,c),registration_grade(r36,a),registration_grade(r37,a),registration_grade(r38,c),registration_grade(r39,a),registration_grade(r40,_G131713),registration_grade(r41,c),registration_grade(r42,b),registration_grade(r43,a),registration_grade(r44,a),registration_grade(r45,a),registration_grade(r46,a),registration_grade(r47,b),registration_grade(r48,b),registration_grade(r49,b),registration_grade(r50,_G131763),registration_grade(r51,b),registration_grade(r52,_G131773),registration_grade(r53,a),registration_grade(r54,b),registration_grade(r55,a),registration_grade(r56,c),registration_grade(r57,c),registration_grade(r58,a),registration_grade(r59,c),registration_grade(r60,a),registration_grade(r61,a),registration_grade(r62,a),registration_grade(r63,b),registration_grade(r64,b),registration_grade(r65,b),registration_grade(r66,b),registration_grade(r67,b),registration_grade(r68,a),registration_grade(r69,b),registration_grade(r70,c),registration_grade(r71,b),registration_grade(r72,a),registration_grade(r73,b),registration_grade(r74,a),registration_grade(r75,b),registration_grade(r76,c),registration_grade(r77,a),registration_grade(r78,b),registration_grade(r79,a),registration_grade(r80,b),registration_grade(r81,_G131918),registration_grade(r82,_G131923),registration_grade(r83,a),registration_grade(r84,c),registration_grade(r85,b),registration_grade(r86,b),registration_grade(r87,b),registration_grade(r88,c),registration_grade(r89,c),registration_grade(r90,c),registration_grade(r91,a),registration_grade(r92,d),registration_grade(r93,b),registration_grade(r94,c),registration_grade(r95,_G131988),registration_grade(r96,_G131993),registration_grade(r97,a),registration_grade(r98,b),registration_grade(r99,b),registration_grade(r100,a),registration_grade(r101,a),registration_grade(r102,a),registration_grade(r103,_G132028),registration_grade(r104,b),registration_grade(r105,c),registration_grade(r106,b),registration_grade(r107,b),registration_grade(r108,b),registration_grade(r109,b),registration_grade(r110,a),registration_grade(r111,a),registration_grade(r112,a),registration_grade(r113,c),registration_grade(r114,_G132083),registration_grade(r115,d),registration_grade(r116,b),registration_grade(r117,c),registration_grade(r118,a),registration_grade(r119,b),registration_grade(r120,_G132113),registration_grade(r121,c),registration_grade(r122,b),registration_grade(r123,a),registration_grade(r124,a),registration_grade(r125,b),registration_grade(r126,b),registration_grade(r127,b),registration_grade(r128,a),registration_grade(r129,c),registration_grade(r130,a),registration_grade(r131,a),registration_grade(r132,b),registration_grade(r133,a),registration_grade(r134,a),registration_grade(r135,b),registration_grade(r136,a),registration_grade(r137,b),registration_grade(r138,a),registration_grade(r139,_G132208),registration_grade(r140,a),registration_grade(r141,b),registration_grade(r142,b),registration_grade(r143,b),registration_grade(r144,_G132233),registration_grade(r145,b),registration_grade(r146,a),registration_grade(r147,a),registration_grade(r148,a),registration_grade(r149,a),registration_grade(r150,b),registration_grade(r151,a),registration_grade(r152,a),registration_grade(r153,b),registration_grade(r154,_G132283),registration_grade(r155,c),registration_grade(r156,b),registration_grade(r157,b),registration_grade(r158,c),registration_grade(r159,b),registration_grade(r160,a),registration_grade(r161,a),registration_grade(r162,b),registration_grade(r163,a),registration_grade(r164,b),registration_grade(r165,b),registration_grade(r166,c),registration_grade(r167,a),registration_grade(r168,_G132353),registration_grade(r169,a),registration_grade(r170,a),registration_grade(r171,a),registration_grade(r172,c),registration_grade(r173,b),registration_grade(r174,a),registration_grade(r175,b),registration_grade(r176,b),registration_grade(r177,c),registration_grade(r178,_G132403),registration_grade(r179,d),registration_grade(r180,c),registration_grade(r181,a),registration_grade(r182,b),registration_grade(r183,a),registration_grade(r184,a),registration_grade(r185,b),registration_grade(r186,_G132443),registration_grade(r187,a),registration_grade(r188,a),registration_grade(r189,a),registration_grade(r190,_G132463),registration_grade(r191,b),registration_grade(r192,b),registration_grade(r193,c),registration_grade(r194,b),registration_grade(r195,c),registration_grade(r196,_G132493),registration_grade(r197,a),registration_grade(r198,_G132503),registration_grade(r199,b),registration_grade(r200,b),registration_grade(r201,c),registration_grade(r202,a),registration_grade(r203,a),registration_grade(r204,b),registration_grade(r205,a),registration_grade(r206,a),registration_grade(r207,a),registration_grade(r208,c),registration_grade(r209,b),registration_grade(r210,a),registration_grade(r211,d),registration_grade(r212,b),registration_grade(r213,b),registration_grade(r214,a),registration_grade(r215,a),registration_grade(r216,b),registration_grade(r217,a),registration_grade(r218,b),registration_grade(r219,a),registration_grade(r220,_G132613),registration_grade(r221,b),registration_grade(r222,c),registration_grade(r223,a),registration_grade(r224,b),registration_grade(r225,b),registration_grade(r226,d),registration_grade(r227,b),registration_grade(r228,c),registration_grade(r229,b),registration_grade(r230,a),registration_grade(r231,_G132668),registration_grade(r232,a),registration_grade(r233,b),registration_grade(r234,b),registration_grade(r235,_G132688),registration_grade(r236,b),registration_grade(r237,c),registration_grade(r238,d),registration_grade(r239,b),registration_grade(r240,b),registration_grade(r241,a),registration_grade(r242,b),registration_grade(r243,a),registration_grade(r244,_G132733),registration_grade(r245,a),registration_grade(r246,b),registration_grade(r247,c),registration_grade(r248,b),registration_grade(r249,a),registration_grade(r250,a),registration_grade(r251,a),registration_grade(r252,b),registration_grade(r253,a),registration_grade(r254,_G132783),registration_grade(r255,a),registration_grade(r256,a),registration_grade(r257,b),registration_grade(r258,a),registration_grade(r259,a),registration_grade(r260,b),registration_grade(r261,a),registration_grade(r262,a),registration_grade(r263,a),registration_grade(r264,c),registration_grade(r265,a),registration_grade(r266,a),registration_grade(r267,a),registration_grade(r268,c),registration_grade(r269,a),registration_grade(r270,c),registration_grade(r271,b),registration_grade(r272,c),registration_grade(r273,b),registration_grade(r274,c),registration_grade(r275,a),registration_grade(r276,a),registration_grade(r277,a),registration_grade(r278,a),registration_grade(r279,a),registration_grade(r280,b),registration_grade(r281,b),registration_grade(r282,d),registration_grade(r283,a),registration_grade(r284,_G132933),registration_grade(r285,b),registration_grade(r286,a),registration_grade(r287,b),registration_grade(r288,b),registration_grade(r289,d),registration_grade(r290,_G132963),registration_grade(r291,_G132968),registration_grade(r292,b),registration_grade(r293,a),registration_grade(r294,a),registration_grade(r295,a),registration_grade(r296,b),registration_grade(r297,_G132998),registration_grade(r298,a),registration_grade(r299,a),registration_grade(r300,b),registration_grade(r301,b),registration_grade(r302,_G133023),registration_grade(r303,a),registration_grade(r304,a),registration_grade(r305,b),registration_grade(r306,b),registration_grade(r307,c),registration_grade(r308,c),registration_grade(r309,c),registration_grade(r310,a),registration_grade(r311,a),registration_grade(r312,a),registration_grade(r313,a),registration_grade(r314,c),registration_grade(r315,c),registration_grade(r316,c),registration_grade(r317,c),registration_grade(r318,c),registration_grade(r319,c),registration_grade(r320,b),registration_grade(r321,b),registration_grade(r322,a),registration_grade(r323,c),registration_grade(r324,b),registration_grade(r325,b),registration_grade(r326,a),registration_grade(r327,_G133148),registration_grade(r328,b),registration_grade(r329,a),registration_grade(r330,b),registration_grade(r331,a),registration_grade(r332,a),registration_grade(r333,a),registration_grade(r334,c),registration_grade(r335,d),registration_grade(r336,b),registration_grade(r337,b),registration_grade(r338,b),registration_grade(r339,_G133208),registration_grade(r340,b),registration_grade(r341,_G133218),registration_grade(r342,b),registration_grade(r343,a),registration_grade(r344,c),registration_grade(r345,b),registration_grade(r346,b),registration_grade(r347,b),registration_grade(r348,a),registration_grade(r349,a),registration_grade(r350,b),registration_grade(r351,_G133268),registration_grade(r352,d),registration_grade(r353,c),registration_grade(r354,c),registration_grade(r355,c),registration_grade(r356,_G133293),registration_grade(r357,b),registration_grade(r358,a),registration_grade(r359,a),registration_grade(r360,a),registration_grade(r361,b),registration_grade(r362,c),registration_grade(r363,c),registration_grade(r364,b),registration_grade(r365,b),registration_grade(r366,b),registration_grade(r367,b),registration_grade(r368,a),registration_grade(r369,c),registration_grade(r370,b),registration_grade(r371,a),registration_grade(r372,a),registration_grade(r373,a),registration_grade(r374,b),registration_grade(r375,b),registration_grade(r376,_G133393),registration_grade(r377,a),registration_grade(r378,a),registration_grade(r379,c),registration_grade(r380,a),registration_grade(r381,c),registration_grade(r382,a),registration_grade(r383,a),registration_grade(r384,b),registration_grade(r385,b),registration_grade(r386,_G133443),registration_grade(r387,a),registration_grade(r388,a),registration_grade(r389,a),registration_grade(r390,_G133463),registration_grade(r391,b),registration_grade(r392,_G133473),registration_grade(r393,b),registration_grade(r394,c),registration_grade(r395,b),registration_grade(r396,b),registration_grade(r397,a),registration_grade(r398,b),registration_grade(r399,c),registration_grade(r400,a),registration_grade(r401,c),registration_grade(r402,a),registration_grade(r403,a),registration_grade(r404,a),registration_grade(r405,a),registration_grade(r406,a),registration_grade(r407,b),registration_grade(r408,a),registration_grade(r409,_G133558),registration_grade(r410,b),registration_grade(r411,b),registration_grade(r412,a),registration_grade(r413,a),registration_grade(r414,a),registration_grade(r415,b),registration_grade(r416,b),registration_grade(r417,d),registration_grade(r418,a),registration_grade(r419,a),registration_grade(r420,a),registration_grade(r421,c),registration_grade(r422,b),registration_grade(r423,b),registration_grade(r424,a),registration_grade(r425,b),registration_grade(r426,c),registration_grade(r427,c),registration_grade(r428,c),registration_grade(r429,c),registration_grade(r430,b),registration_grade(r431,d),registration_grade(r432,c),registration_grade(r433,a),registration_grade(r434,a),registration_grade(r435,c),registration_grade(r436,a),registration_grade(r437,c),registration_grade(r438,_G133703),registration_grade(r439,b),registration_grade(r440,c),registration_grade(r441,a),registration_grade(r442,c),registration_grade(r443,a),registration_grade(r444,a),registration_grade(r445,a),registration_grade(r446,a),registration_grade(r447,d),registration_grade(r448,_G133753),registration_grade(r449,b),registration_grade(r450,a),registration_grade(r451,a),registration_grade(r452,b),registration_grade(r453,d),registration_grade(r454,d),registration_grade(r455,c),registration_grade(r456,_G133793),registration_grade(r457,a),registration_grade(r458,b),registration_grade(r459,b),registration_grade(r460,a),registration_grade(r461,b),registration_grade(r462,a),registration_grade(r463,d),registration_grade(r464,a),registration_grade(r465,a),registration_grade(r466,_G133843),registration_grade(r467,b),registration_grade(r468,a),registration_grade(r469,a),registration_grade(r470,c),registration_grade(r471,b),registration_grade(r472,_G133873),registration_grade(r473,c),registration_grade(r474,_G133883),registration_grade(r475,a),registration_grade(r476,c),registration_grade(r477,b),registration_grade(r478,a),registration_grade(r479,b),registration_grade(r480,_G133913),registration_grade(r481,_G133918),registration_grade(r482,b),registration_grade(r483,a),registration_grade(r484,a),registration_grade(r485,a),registration_grade(r486,a),registration_grade(r487,a),registration_grade(r488,a),registration_grade(r489,b),registration_grade(r490,c),registration_grade(r491,c),registration_grade(r492,b),registration_grade(r493,a),registration_grade(r494,b),registration_grade(r495,b),registration_grade(r496,a),registration_grade(r497,c),registration_grade(r498,b),registration_grade(r499,c),registration_grade(r500,b),registration_grade(r501,a),registration_grade(r502,a),registration_grade(r503,_G134028),registration_grade(r504,b),registration_grade(r505,c),registration_grade(r506,c),registration_grade(r507,a),registration_grade(r508,c),registration_grade(r509,b),registration_grade(r510,a),registration_grade(r511,c),registration_grade(r512,b),registration_grade(r513,b),registration_grade(r514,c),registration_grade(r515,c),registration_grade(r516,_G134093),registration_grade(r517,b),registration_grade(r518,a),registration_grade(r519,a),registration_grade(r520,b),registration_grade(r521,a),registration_grade(r522,b),registration_grade(r523,a),registration_grade(r524,_G134133),registration_grade(r525,c),registration_grade(r526,c),registration_grade(r527,c),registration_grade(r528,a),registration_grade(r529,b),registration_grade(r530,_G134163),registration_grade(r531,b),registration_grade(r532,a),registration_grade(r533,a),registration_grade(r534,b),registration_grade(r535,c),registration_grade(r536,a),registration_grade(r537,a),registration_grade(r538,a),registration_grade(r539,b),registration_grade(r540,b),registration_grade(r541,_G134218),registration_grade(r542,a),registration_grade(r543,_G134228),registration_grade(r544,b),registration_grade(r545,a),registration_grade(r546,b),registration_grade(r547,c),registration_grade(r548,c),registration_grade(r549,_G134258),registration_grade(r550,a),registration_grade(r551,a),registration_grade(r552,c),registration_grade(r553,_G134278),registration_grade(r554,b),registration_grade(r555,b),registration_grade(r556,a),registration_grade(r557,a),registration_grade(r558,a),registration_grade(r559,b),registration_grade(r560,b),registration_grade(r561,a),registration_grade(r562,a),registration_grade(r563,a),registration_grade(r564,b),registration_grade(r565,d),registration_grade(r566,c),registration_grade(r567,a),registration_grade(r568,a),registration_grade(r569,a),registration_grade(r570,c),registration_grade(r571,c),registration_grade(r572,b),registration_grade(r573,a),registration_grade(r574,c),registration_grade(r575,a),registration_grade(r576,a),registration_grade(r577,_G134398),registration_grade(r578,b),registration_grade(r579,a),registration_grade(r580,b),registration_grade(r581,a),registration_grade(r582,a),registration_grade(r583,a),registration_grade(r584,a),registration_grade(r585,c),registration_grade(r586,b),registration_grade(r587,c),registration_grade(r588,c),registration_grade(r589,c),registration_grade(r590,b),registration_grade(r591,c),registration_grade(r592,b),registration_grade(r593,b),registration_grade(r594,c),registration_grade(r595,b),registration_grade(r596,a),registration_grade(r597,a),registration_grade(r598,a),registration_grade(r599,a),registration_grade(r600,a),registration_grade(r601,b),registration_grade(r602,a),registration_grade(r603,d),registration_grade(r604,c),registration_grade(r605,a),registration_grade(r606,a),registration_grade(r607,b),registration_grade(r608,a),registration_grade(r609,b),registration_grade(r610,a),registration_grade(r611,a),registration_grade(r612,_G134573),registration_grade(r613,a),registration_grade(r614,d),registration_grade(r615,b),registration_grade(r616,a),registration_grade(r617,a),registration_grade(r618,b),registration_grade(r619,a),registration_grade(r620,a),registration_grade(r621,a),registration_grade(r622,b),registration_grade(r623,b),registration_grade(r624,a),registration_grade(r625,_G134638),registration_grade(r626,a),registration_grade(r627,b),registration_grade(r628,a),registration_grade(r629,b),registration_grade(r630,c),registration_grade(r631,a),registration_grade(r632,a),registration_grade(r633,b),registration_grade(r634,b),registration_grade(r635,b),registration_grade(r636,_G134693),registration_grade(r637,c),registration_grade(r638,a),registration_grade(r639,b),registration_grade(r640,c),registration_grade(r641,c),registration_grade(r642,c),registration_grade(r643,a),registration_grade(r644,a),registration_grade(r645,b),registration_grade(r646,b),registration_grade(r647,b),registration_grade(r648,a),registration_grade(r649,b),registration_grade(r650,c),registration_grade(r651,_G134768),registration_grade(r652,b),registration_grade(r653,_G134778),registration_grade(r654,b),registration_grade(r655,a),registration_grade(r656,b),registration_grade(r657,a),registration_grade(r658,a),registration_grade(r659,a),registration_grade(r660,a),registration_grade(r661,c),registration_grade(r662,a),registration_grade(r663,a),registration_grade(r664,c),registration_grade(r665,a),registration_grade(r666,b),registration_grade(r667,b),registration_grade(r668,d),registration_grade(r669,b),registration_grade(r670,a),registration_grade(r671,c),registration_grade(r672,_G134873),registration_grade(r673,a),registration_grade(r674,a),registration_grade(r675,b),registration_grade(r676,a),registration_grade(r677,a),registration_grade(r678,a),registration_grade(r679,a),registration_grade(r680,c),registration_grade(r681,b),registration_grade(r682,a),registration_grade(r683,b),registration_grade(r684,b),registration_grade(r685,a),registration_grade(r686,b),registration_grade(r687,_G134948),registration_grade(r688,c),registration_grade(r689,b),registration_grade(r690,a),registration_grade(r691,_G134968),registration_grade(r692,a),registration_grade(r693,b),registration_grade(r694,a),registration_grade(r695,a),registration_grade(r696,_G134993),registration_grade(r697,c),registration_grade(r698,b),registration_grade(r699,a),registration_grade(r700,a),registration_grade(r701,a),registration_grade(r702,a),registration_grade(r703,c),registration_grade(r704,c),registration_grade(r705,_G135038),registration_grade(r706,b),registration_grade(r707,_G135048),registration_grade(r708,b),registration_grade(r709,b),registration_grade(r710,b),registration_grade(r711,b),registration_grade(r712,c),registration_grade(r713,_G135078),registration_grade(r714,b),registration_grade(r715,a),registration_grade(r716,a),registration_grade(r717,_G135098),registration_grade(r718,a),registration_grade(r719,c),registration_grade(r720,a),registration_grade(r721,b),registration_grade(r722,b),registration_grade(r723,b),registration_grade(r724,a),registration_grade(r725,c),registration_grade(r726,a),registration_grade(r727,a),registration_grade(r728,b),registration_grade(r729,b),registration_grade(r730,c),registration_grade(r731,a),registration_grade(r732,a),registration_grade(r733,a),registration_grade(r734,b),registration_grade(r735,_G135188),registration_grade(r736,a),registration_grade(r737,b),registration_grade(r738,b),registration_grade(r739,a),registration_grade(r740,a),registration_grade(r741,a),registration_grade(r742,d),registration_grade(r743,d),registration_grade(r744,a),registration_grade(r745,b),registration_grade(r746,a),registration_grade(r747,a),registration_grade(r748,b),registration_grade(r749,c),registration_grade(r750,a),registration_grade(r751,c),registration_grade(r752,b),registration_grade(r753,c),registration_grade(r754,c),registration_grade(r755,c),registration_grade(r756,b),registration_grade(r757,c),registration_grade(r758,b),registration_grade(r759,b),registration_grade(r760,a),registration_grade(r761,a),registration_grade(r762,b),registration_grade(r763,_G135328),registration_grade(r764,a),registration_grade(r765,a),registration_grade(r766,c),registration_grade(r767,c),registration_grade(r768,c),registration_grade(r769,c),registration_grade(r770,b),registration_grade(r771,_G135368),registration_grade(r772,a),registration_grade(r773,b),registration_grade(r774,b),registration_grade(r775,a),registration_grade(r776,a),registration_grade(r777,_G135398),registration_grade(r778,c),registration_grade(r779,b),registration_grade(r780,a),registration_grade(r781,b),registration_grade(r782,a),registration_grade(r783,c),registration_grade(r784,c),registration_grade(r785,c),registration_grade(r786,c),registration_grade(r787,a),registration_grade(r788,a),registration_grade(r789,c),registration_grade(r790,b),registration_grade(r791,b),registration_grade(r792,a),registration_grade(r793,a),registration_grade(r794,b),registration_grade(r795,a),registration_grade(r796,a),registration_grade(r797,_G135498),registration_grade(r798,b),registration_grade(r799,c),registration_grade(r800,b),registration_grade(r801,b),registration_grade(r802,a),registration_grade(r803,b),registration_grade(r804,a),registration_grade(r805,b),registration_grade(r806,a),registration_grade(r807,a),registration_grade(r808,b),registration_grade(r809,c),registration_grade(r810,b),registration_grade(r811,d),registration_grade(r812,c),registration_grade(r813,c),registration_grade(r814,c),registration_grade(r815,c),registration_grade(r816,b),registration_grade(r817,a),registration_grade(r818,b),registration_grade(r819,_G135608),registration_grade(r820,d),registration_grade(r821,b),registration_grade(r822,a),registration_grade(r823,_G135628),registration_grade(r824,c),registration_grade(r825,b),registration_grade(r826,b),registration_grade(r827,_G135648),registration_grade(r828,b),registration_grade(r829,_G135658),registration_grade(r830,_G135663),registration_grade(r831,_G135668),registration_grade(r832,b),registration_grade(r833,b),registration_grade(r834,b),registration_grade(r835,a),registration_grade(r836,a),registration_grade(r837,c),registration_grade(r838,_G135703),registration_grade(r839,b),registration_grade(r840,_G135713),registration_grade(r841,a),registration_grade(r842,a),registration_grade(r843,b),registration_grade(r844,a),registration_grade(r845,c),registration_grade(r846,b),registration_grade(r847,_G135748),registration_grade(r848,c),registration_grade(r849,b),registration_grade(r850,b),registration_grade(r851,b),registration_grade(r852,c),registration_grade(r853,b),registration_grade(r854,c),registration_grade(r855,d),registration_grade(r856,c),student_intelligence(s0,l),student_intelligence(s1,l),student_intelligence(s2,h),student_intelligence(s3,h),student_intelligence(s4,h),student_intelligence(s5,h),student_intelligence(s6,m),student_intelligence(s7,h),student_intelligence(s8,h),student_intelligence(s9,m),student_intelligence(s10,m),student_intelligence(s11,m),student_intelligence(s12,h),student_intelligence(s13,h),student_intelligence(s14,h),student_intelligence(s15,m),student_intelligence(s16,h),student_intelligence(s17,m),student_intelligence(s18,m),student_intelligence(s19,h),student_intelligence(s20,m),student_intelligence(s21,h),student_intelligence(s22,_G135908),student_intelligence(s23,h),student_intelligence(s24,m),student_intelligence(s25,h),student_intelligence(s26,m),student_intelligence(s27,m),student_intelligence(s28,m),student_intelligence(s29,m),student_intelligence(s30,h),student_intelligence(s31,_G135953),student_intelligence(s32,m),student_intelligence(s33,_G135963),student_intelligence(s34,l),student_intelligence(s35,m),student_intelligence(s36,l),student_intelligence(s37,m),student_intelligence(s38,h),student_intelligence(s39,h),student_intelligence(s40,_G135998),student_intelligence(s41,m),student_intelligence(s42,m),student_intelligence(s43,h),student_intelligence(s44,h),student_intelligence(s45,h),student_intelligence(s46,l),student_intelligence(s47,h),student_intelligence(s48,m),student_intelligence(s49,_G136043),student_intelligence(s50,_G136048),student_intelligence(s51,m),student_intelligence(s52,m),student_intelligence(s53,_G136063),student_intelligence(s54,h),student_intelligence(s55,h),student_intelligence(s56,l),student_intelligence(s57,m),student_intelligence(s58,_G136088),student_intelligence(s59,m),student_intelligence(s60,_G136098),student_intelligence(s61,h),student_intelligence(s62,m),student_intelligence(s63,h),student_intelligence(s64,l),student_intelligence(s65,m),student_intelligence(s66,_G136128),student_intelligence(s67,m),student_intelligence(s68,h),student_intelligence(s69,h),student_intelligence(s70,l),student_intelligence(s71,m),student_intelligence(s72,h),student_intelligence(s73,_G136163),student_intelligence(s74,h),student_intelligence(s75,h),student_intelligence(s76,h),student_intelligence(s77,h),student_intelligence(s78,h),student_intelligence(s79,_G136193),student_intelligence(s80,m),student_intelligence(s81,l),student_intelligence(s82,h),student_intelligence(s83,h),student_intelligence(s84,m),student_intelligence(s85,h),student_intelligence(s86,m),student_intelligence(s87,h),student_intelligence(s88,h),student_intelligence(s89,_G136243),student_intelligence(s90,h),student_intelligence(s91,m),student_intelligence(s92,h),student_intelligence(s93,l),student_intelligence(s94,l),student_intelligence(s95,h),student_intelligence(s96,m),student_intelligence(s97,h),student_intelligence(s98,h),student_intelligence(s99,l),student_intelligence(s100,_G136298),student_intelligence(s101,h),student_intelligence(s102,m),student_intelligence(s103,h),student_intelligence(s104,l),student_intelligence(s105,m),student_intelligence(s106,h),student_intelligence(s107,l),student_intelligence(s108,m),student_intelligence(s109,m),student_intelligence(s110,m),student_intelligence(s111,h),student_intelligence(s112,m),student_intelligence(s113,h),student_intelligence(s114,_G136368),student_intelligence(s115,h),student_intelligence(s116,_G136378),student_intelligence(s117,_G136383),student_intelligence(s118,m),student_intelligence(s119,h),student_intelligence(s120,h),student_intelligence(s121,h),student_intelligence(s122,_G136408),student_intelligence(s123,m),student_intelligence(s124,h),student_intelligence(s125,m),student_intelligence(s126,m),student_intelligence(s127,m),student_intelligence(s128,_G136438),student_intelligence(s129,h),student_intelligence(s130,m),student_intelligence(s131,_G136453),student_intelligence(s132,h),student_intelligence(s133,h),student_intelligence(s134,h),student_intelligence(s135,h),student_intelligence(s136,m),student_intelligence(s137,m),student_intelligence(s138,l),student_intelligence(s139,h),student_intelligence(s140,h),student_intelligence(s141,m),student_intelligence(s142,m),student_intelligence(s143,h),student_intelligence(s144,h),student_intelligence(s145,h),student_intelligence(s146,m),student_intelligence(s147,m),student_intelligence(s148,m),student_intelligence(s149,h),student_intelligence(s150,l),student_intelligence(s151,h),student_intelligence(s152,h),student_intelligence(s153,m),student_intelligence(s154,m),student_intelligence(s155,h),student_intelligence(s156,m),student_intelligence(s157,m),student_intelligence(s158,h),student_intelligence(s159,h),student_intelligence(s160,m),student_intelligence(s161,m),student_intelligence(s162,h),student_intelligence(s163,m),student_intelligence(s164,m),student_intelligence(s165,m),student_intelligence(s166,m),student_intelligence(s167,h),student_intelligence(s168,h),student_intelligence(s169,m),student_intelligence(s170,_G136648),student_intelligence(s171,m),student_intelligence(s172,h),student_intelligence(s173,h),student_intelligence(s174,h),student_intelligence(s175,m),student_intelligence(s176,m),student_intelligence(s177,m),student_intelligence(s178,h),student_intelligence(s179,m),student_intelligence(s180,m),student_intelligence(s181,_G136703),student_intelligence(s182,_G136708),student_intelligence(s183,h),student_intelligence(s184,h),student_intelligence(s185,m),student_intelligence(s186,m),student_intelligence(s187,m),student_intelligence(s188,h),student_intelligence(s189,m),student_intelligence(s190,h),student_intelligence(s191,l),student_intelligence(s192,h),student_intelligence(s193,m),student_intelligence(s194,m),student_intelligence(s195,m),student_intelligence(s196,h),student_intelligence(s197,h),student_intelligence(s198,h),student_intelligence(s199,m),student_intelligence(s200,h),student_intelligence(s201,l),student_intelligence(s202,h),student_intelligence(s203,_G136813),student_intelligence(s204,h),student_intelligence(s205,h),student_intelligence(s206,h),student_intelligence(s207,h),student_intelligence(s208,m),student_intelligence(s209,_G136843),student_intelligence(s210,_G136848),student_intelligence(s211,m),student_intelligence(s212,_G136858),student_intelligence(s213,_G136863),student_intelligence(s214,h),student_intelligence(s215,m),student_intelligence(s216,h),student_intelligence(s217,m),student_intelligence(s218,h),student_intelligence(s219,h),student_intelligence(s220,h),student_intelligence(s221,h),student_intelligence(s222,_G136908),student_intelligence(s223,m),student_intelligence(s224,l),student_intelligence(s225,l),student_intelligence(s226,m),student_intelligence(s227,h),student_intelligence(s228,h),student_intelligence(s229,m),student_intelligence(s230,m),student_intelligence(s231,h),student_intelligence(s232,m),student_intelligence(s233,h),student_intelligence(s234,l),student_intelligence(s235,h),student_intelligence(s236,_G136978),student_intelligence(s237,h),student_intelligence(s238,h),student_intelligence(s239,h),student_intelligence(s240,h),student_intelligence(s241,m),student_intelligence(s242,l),student_intelligence(s243,h),student_intelligence(s244,h),student_intelligence(s245,l),student_intelligence(s246,m),student_intelligence(s247,h),student_intelligence(s248,m),student_intelligence(s249,h),student_intelligence(s250,m),student_intelligence(s251,_G137053),student_intelligence(s252,m),student_intelligence(s253,m),student_intelligence(s254,m),student_intelligence(s255,m),course_difficulty(c0,h),course_difficulty(c1,m),course_difficulty(c2,l),course_difficulty(c3,m),course_difficulty(c4,m),course_difficulty(c5,l),course_difficulty(c6,m),course_difficulty(c7,h),course_difficulty(c8,h),course_difficulty(c9,l),course_difficulty(c10,m),course_difficulty(c11,m),course_difficulty(c12,_G137138),course_difficulty(c13,h),course_difficulty(c14,m),course_difficulty(c15,h),course_difficulty(c16,l),course_difficulty(c17,h),course_difficulty(c18,m),course_difficulty(c19,l),course_difficulty(c20,m),course_difficulty(c21,h),course_difficulty(c22,m),course_difficulty(c23,m),course_difficulty(c24,h),course_difficulty(c25,m),course_difficulty(c26,l),course_difficulty(c27,h),course_difficulty(c28,m),course_difficulty(c29,m),course_difficulty(c30,m),course_difficulty(c31,m),course_difficulty(c32,l),course_difficulty(c33,m),course_difficulty(c34,_G137248),course_difficulty(c35,h),course_difficulty(c36,h),course_difficulty(c37,m),course_difficulty(c38,m),course_difficulty(c39,m),course_difficulty(c40,h),course_difficulty(c41,m),course_difficulty(c42,h),course_difficulty(c43,m),course_difficulty(c44,m),course_difficulty(c45,m),course_difficulty(c46,m),course_difficulty(c47,m),course_difficulty(c48,m),course_difficulty(c49,_G137323),course_difficulty(c50,_G137328),course_difficulty(c51,h),course_difficulty(c52,h),course_difficulty(c53,h),course_difficulty(c54,m),course_difficulty(c55,h),course_difficulty(c56,m),course_difficulty(c57,m),course_difficulty(c58,h),course_difficulty(c59,m),course_difficulty(c60,h),course_difficulty(c61,_G137383),course_difficulty(c62,_G137388),course_difficulty(c63,l),registration_satisfaction(r0,h),registration_satisfaction(r1,l),registration_satisfaction(r2,h),registration_satisfaction(r3,m),registration_satisfaction(r4,h),registration_satisfaction(r5,h),registration_satisfaction(r6,h),registration_satisfaction(r7,h),registration_satisfaction(r8,_G137438),registration_satisfaction(r9,h),registration_satisfaction(r10,h),registration_satisfaction(r11,h),registration_satisfaction(r12,h),registration_satisfaction(r13,h),registration_satisfaction(r14,m),registration_satisfaction(r15,h),registration_satisfaction(r16,h),registration_satisfaction(r17,_G137483),registration_satisfaction(r18,l),registration_satisfaction(r19,m),registration_satisfaction(r20,h),registration_satisfaction(r21,h),registration_satisfaction(r22,_G137508),registration_satisfaction(r23,m),registration_satisfaction(r24,h),registration_satisfaction(r25,h),registration_satisfaction(r26,h),registration_satisfaction(r27,h),registration_satisfaction(r28,h),registration_satisfaction(r29,h),registration_satisfaction(r30,l),registration_satisfaction(r31,h),registration_satisfaction(r32,_G137558),registration_satisfaction(r33,h),registration_satisfaction(r34,h),registration_satisfaction(r35,h),registration_satisfaction(r36,m),registration_satisfaction(r37,h),registration_satisfaction(r38,h),registration_satisfaction(r39,h),registration_satisfaction(r40,h),registration_satisfaction(r41,h),registration_satisfaction(r42,l),registration_satisfaction(r43,_G137613),registration_satisfaction(r44,h),registration_satisfaction(r45,h),registration_satisfaction(r46,m),registration_satisfaction(r47,_G137633),registration_satisfaction(r48,h),registration_satisfaction(r49,h),registration_satisfaction(r50,h),registration_satisfaction(r51,h),registration_satisfaction(r52,h),registration_satisfaction(r53,h),registration_satisfaction(r54,h),registration_satisfaction(r55,h),registration_satisfaction(r56,l),registration_satisfaction(r57,h),registration_satisfaction(r58,h),registration_satisfaction(r59,l),registration_satisfaction(r60,h),registration_satisfaction(r61,h),registration_satisfaction(r62,h),registration_satisfaction(r63,h),registration_satisfaction(r64,h),registration_satisfaction(r65,h),registration_satisfaction(r66,h),registration_satisfaction(r67,_G137733),registration_satisfaction(r68,h),registration_satisfaction(r69,m),registration_satisfaction(r70,h),registration_satisfaction(r71,h),registration_satisfaction(r72,l),registration_satisfaction(r73,h),registration_satisfaction(r74,h),registration_satisfaction(r75,h),registration_satisfaction(r76,h),registration_satisfaction(r77,h),registration_satisfaction(r78,m),registration_satisfaction(r79,h),registration_satisfaction(r80,h),registration_satisfaction(r81,h),registration_satisfaction(r82,l),registration_satisfaction(r83,m),registration_satisfaction(r84,m),registration_satisfaction(r85,h),registration_satisfaction(r86,m),registration_satisfaction(r87,m),registration_satisfaction(r88,h),registration_satisfaction(r89,h),registration_satisfaction(r90,m),registration_satisfaction(r91,h),registration_satisfaction(r92,_G137858),registration_satisfaction(r93,h),registration_satisfaction(r94,l),registration_satisfaction(r95,h),registration_satisfaction(r96,h),registration_satisfaction(r97,h),registration_satisfaction(r98,h),registration_satisfaction(r99,h),registration_satisfaction(r100,h),registration_satisfaction(r101,h),registration_satisfaction(r102,h),registration_satisfaction(r103,h),registration_satisfaction(r104,h),registration_satisfaction(r105,l),registration_satisfaction(r106,h),registration_satisfaction(r107,l),registration_satisfaction(r108,_G137938),registration_satisfaction(r109,h),registration_satisfaction(r110,h),registration_satisfaction(r111,h),registration_satisfaction(r112,h),registration_satisfaction(r113,h),registration_satisfaction(r114,m),registration_satisfaction(r115,l),registration_satisfaction(r116,_G137978),registration_satisfaction(r117,h),registration_satisfaction(r118,h),registration_satisfaction(r119,h),registration_satisfaction(r120,l),registration_satisfaction(r121,h),registration_satisfaction(r122,_G138008),registration_satisfaction(r123,l),registration_satisfaction(r124,h),registration_satisfaction(r125,m),registration_satisfaction(r126,h),registration_satisfaction(r127,h),registration_satisfaction(r128,h),registration_satisfaction(r129,h),registration_satisfaction(r130,h),registration_satisfaction(r131,h),registration_satisfaction(r132,m),registration_satisfaction(r133,h),registration_satisfaction(r134,m),registration_satisfaction(r135,h),registration_satisfaction(r136,h),registration_satisfaction(r137,h),registration_satisfaction(r138,_G138088),registration_satisfaction(r139,h),registration_satisfaction(r140,h),registration_satisfaction(r141,l),registration_satisfaction(r142,h),registration_satisfaction(r143,_G138113),registration_satisfaction(r144,h),registration_satisfaction(r145,_G138123),registration_satisfaction(r146,h),registration_satisfaction(r147,l),registration_satisfaction(r148,m),registration_satisfaction(r149,_G138143),registration_satisfaction(r150,h),registration_satisfaction(r151,h),registration_satisfaction(r152,_G138158),registration_satisfaction(r153,h),registration_satisfaction(r154,m),registration_satisfaction(r155,m),registration_satisfaction(r156,h),registration_satisfaction(r157,m),registration_satisfaction(r158,l),registration_satisfaction(r159,m),registration_satisfaction(r160,h),registration_satisfaction(r161,h),registration_satisfaction(r162,m),registration_satisfaction(r163,h),registration_satisfaction(r164,m),registration_satisfaction(r165,m),registration_satisfaction(r166,l),registration_satisfaction(r167,_G138233),registration_satisfaction(r168,_G138238),registration_satisfaction(r169,h),registration_satisfaction(r170,h),registration_satisfaction(r171,h),registration_satisfaction(r172,h),registration_satisfaction(r173,h),registration_satisfaction(r174,h),registration_satisfaction(r175,h),registration_satisfaction(r176,h),registration_satisfaction(r177,h),registration_satisfaction(r178,_G138288),registration_satisfaction(r179,l),registration_satisfaction(r180,h),registration_satisfaction(r181,m),registration_satisfaction(r182,h),registration_satisfaction(r183,l),registration_satisfaction(r184,h),registration_satisfaction(r185,h),registration_satisfaction(r186,h),registration_satisfaction(r187,h),registration_satisfaction(r188,m),registration_satisfaction(r189,h),registration_satisfaction(r190,h),registration_satisfaction(r191,h),registration_satisfaction(r192,m),registration_satisfaction(r193,h),registration_satisfaction(r194,h),registration_satisfaction(r195,h),registration_satisfaction(r196,h),registration_satisfaction(r197,h),registration_satisfaction(r198,h),registration_satisfaction(r199,h),registration_satisfaction(r200,m),registration_satisfaction(r201,h),registration_satisfaction(r202,_G138408),registration_satisfaction(r203,h),registration_satisfaction(r204,h),registration_satisfaction(r205,h),registration_satisfaction(r206,h),registration_satisfaction(r207,h),registration_satisfaction(r208,h),registration_satisfaction(r209,_G138443),registration_satisfaction(r210,h),registration_satisfaction(r211,m),registration_satisfaction(r212,h),registration_satisfaction(r213,h),registration_satisfaction(r214,h),registration_satisfaction(r215,h),registration_satisfaction(r216,h),registration_satisfaction(r217,h),registration_satisfaction(r218,m),registration_satisfaction(r219,h),registration_satisfaction(r220,h),registration_satisfaction(r221,m),registration_satisfaction(r222,l),registration_satisfaction(r223,h),registration_satisfaction(r224,h),registration_satisfaction(r225,l),registration_satisfaction(r226,l),registration_satisfaction(r227,_G138533),registration_satisfaction(r228,l),registration_satisfaction(r229,l),registration_satisfaction(r230,h),registration_satisfaction(r231,l),registration_satisfaction(r232,h),registration_satisfaction(r233,m),registration_satisfaction(r234,l),registration_satisfaction(r235,h),registration_satisfaction(r236,l),registration_satisfaction(r237,m),registration_satisfaction(r238,m),registration_satisfaction(r239,m),registration_satisfaction(r240,h),registration_satisfaction(r241,h),registration_satisfaction(r242,m),registration_satisfaction(r243,h),registration_satisfaction(r244,m),registration_satisfaction(r245,h),registration_satisfaction(r246,h),registration_satisfaction(r247,l),registration_satisfaction(r248,l),registration_satisfaction(r249,h),registration_satisfaction(r250,h),registration_satisfaction(r251,h),registration_satisfaction(r252,h),registration_satisfaction(r253,h),registration_satisfaction(r254,h),registration_satisfaction(r255,h),registration_satisfaction(r256,h),registration_satisfaction(r257,m),registration_satisfaction(r258,_G138688),registration_satisfaction(r259,_G138693),registration_satisfaction(r260,h),registration_satisfaction(r261,h),registration_satisfaction(r262,h),registration_satisfaction(r263,m),registration_satisfaction(r264,h),registration_satisfaction(r265,h),registration_satisfaction(r266,l),registration_satisfaction(r267,h),registration_satisfaction(r268,_G138738),registration_satisfaction(r269,_G138743),registration_satisfaction(r270,l),registration_satisfaction(r271,h),registration_satisfaction(r272,l),registration_satisfaction(r273,_G138763),registration_satisfaction(r274,h),registration_satisfaction(r275,h),registration_satisfaction(r276,h),registration_satisfaction(r277,h),registration_satisfaction(r278,h),registration_satisfaction(r279,h),registration_satisfaction(r280,_G138798),registration_satisfaction(r281,m),registration_satisfaction(r282,h),registration_satisfaction(r283,h),registration_satisfaction(r284,_G138818),registration_satisfaction(r285,m),registration_satisfaction(r286,h),registration_satisfaction(r287,h),registration_satisfaction(r288,h),registration_satisfaction(r289,l),registration_satisfaction(r290,m),registration_satisfaction(r291,_G138853),registration_satisfaction(r292,m),registration_satisfaction(r293,h),registration_satisfaction(r294,h),registration_satisfaction(r295,_G138873),registration_satisfaction(r296,l),registration_satisfaction(r297,h),registration_satisfaction(r298,h),registration_satisfaction(r299,h),registration_satisfaction(r300,l),registration_satisfaction(r301,h),registration_satisfaction(r302,m),registration_satisfaction(r303,h),registration_satisfaction(r304,h),registration_satisfaction(r305,l),registration_satisfaction(r306,h),registration_satisfaction(r307,l),registration_satisfaction(r308,l),registration_satisfaction(r309,m),registration_satisfaction(r310,h),registration_satisfaction(r311,l),registration_satisfaction(r312,_G138958),registration_satisfaction(r313,_G138963),registration_satisfaction(r314,h),registration_satisfaction(r315,h),registration_satisfaction(r316,l),registration_satisfaction(r317,l),registration_satisfaction(r318,h),registration_satisfaction(r319,m),registration_satisfaction(r320,h),registration_satisfaction(r321,l),registration_satisfaction(r322,h),registration_satisfaction(r323,l),registration_satisfaction(r324,h),registration_satisfaction(r325,h),registration_satisfaction(r326,h),registration_satisfaction(r327,m),registration_satisfaction(r328,h),registration_satisfaction(r329,h),registration_satisfaction(r330,l),registration_satisfaction(r331,h),registration_satisfaction(r332,l),registration_satisfaction(r333,h),registration_satisfaction(r334,h),registration_satisfaction(r335,h),registration_satisfaction(r336,_G139078),registration_satisfaction(r337,_G139083),registration_satisfaction(r338,h),registration_satisfaction(r339,h),registration_satisfaction(r340,h),registration_satisfaction(r341,_G139103),registration_satisfaction(r342,h),registration_satisfaction(r343,h),registration_satisfaction(r344,_G139118),registration_satisfaction(r345,m),registration_satisfaction(r346,h),registration_satisfaction(r347,m),registration_satisfaction(r348,m),registration_satisfaction(r349,h),registration_satisfaction(r350,m),registration_satisfaction(r351,h),registration_satisfaction(r352,l),registration_satisfaction(r353,h),registration_satisfaction(r354,h),registration_satisfaction(r355,_G139173),registration_satisfaction(r356,m),registration_satisfaction(r357,_G139183),registration_satisfaction(r358,h),registration_satisfaction(r359,l),registration_satisfaction(r360,h),registration_satisfaction(r361,m),registration_satisfaction(r362,h),registration_satisfaction(r363,l),registration_satisfaction(r364,h),registration_satisfaction(r365,m),registration_satisfaction(r366,h),registration_satisfaction(r367,h),registration_satisfaction(r368,h),registration_satisfaction(r369,_G139243),registration_satisfaction(r370,h),registration_satisfaction(r371,h),registration_satisfaction(r372,h),registration_satisfaction(r373,h),registration_satisfaction(r374,l),registration_satisfaction(r375,h),registration_satisfaction(r376,m),registration_satisfaction(r377,h),registration_satisfaction(r378,h),registration_satisfaction(r379,h),registration_satisfaction(r380,h),registration_satisfaction(r381,m),registration_satisfaction(r382,h),registration_satisfaction(r383,h),registration_satisfaction(r384,m),registration_satisfaction(r385,m),registration_satisfaction(r386,l),registration_satisfaction(r387,h),registration_satisfaction(r388,h),registration_satisfaction(r389,h),registration_satisfaction(r390,h),registration_satisfaction(r391,l),registration_satisfaction(r392,h),registration_satisfaction(r393,h),registration_satisfaction(r394,h),registration_satisfaction(r395,_G139373),registration_satisfaction(r396,h),registration_satisfaction(r397,_G139383),registration_satisfaction(r398,l),registration_satisfaction(r399,h),registration_satisfaction(r400,h),registration_satisfaction(r401,l),registration_satisfaction(r402,h),registration_satisfaction(r403,h),registration_satisfaction(r404,h),registration_satisfaction(r405,h),registration_satisfaction(r406,h),registration_satisfaction(r407,h),registration_satisfaction(r408,h),registration_satisfaction(r409,h),registration_satisfaction(r410,h),registration_satisfaction(r411,l),registration_satisfaction(r412,h),registration_satisfaction(r413,l),registration_satisfaction(r414,_G139468),registration_satisfaction(r415,m),registration_satisfaction(r416,h),registration_satisfaction(r417,h),registration_satisfaction(r418,h),registration_satisfaction(r419,h),registration_satisfaction(r420,h),registration_satisfaction(r421,h),registration_satisfaction(r422,m),registration_satisfaction(r423,h),registration_satisfaction(r424,h),registration_satisfaction(r425,h),registration_satisfaction(r426,l),registration_satisfaction(r427,h),registration_satisfaction(r428,_G139538),registration_satisfaction(r429,h),registration_satisfaction(r430,l),registration_satisfaction(r431,m),registration_satisfaction(r432,h),registration_satisfaction(r433,h),registration_satisfaction(r434,h),registration_satisfaction(r435,m),registration_satisfaction(r436,h),registration_satisfaction(r437,h),registration_satisfaction(r438,l),registration_satisfaction(r439,h),registration_satisfaction(r440,h),registration_satisfaction(r441,h),registration_satisfaction(r442,m),registration_satisfaction(r443,h),registration_satisfaction(r444,h),registration_satisfaction(r445,h),registration_satisfaction(r446,h),registration_satisfaction(r447,m),registration_satisfaction(r448,l),registration_satisfaction(r449,h),registration_satisfaction(r450,h),registration_satisfaction(r451,h),registration_satisfaction(r452,h),registration_satisfaction(r453,h),registration_satisfaction(r454,l),registration_satisfaction(r455,m),registration_satisfaction(r456,h),registration_satisfaction(r457,h),registration_satisfaction(r458,m),registration_satisfaction(r459,m),registration_satisfaction(r460,l),registration_satisfaction(r461,h),registration_satisfaction(r462,h),registration_satisfaction(r463,l),registration_satisfaction(r464,h),registration_satisfaction(r465,h),registration_satisfaction(r466,l),registration_satisfaction(r467,h),registration_satisfaction(r468,h),registration_satisfaction(r469,h),registration_satisfaction(r470,h),registration_satisfaction(r471,h),registration_satisfaction(r472,h),registration_satisfaction(r473,l),registration_satisfaction(r474,m),registration_satisfaction(r475,h),registration_satisfaction(r476,l),registration_satisfaction(r477,m),registration_satisfaction(r478,h),registration_satisfaction(r479,l),registration_satisfaction(r480,h),registration_satisfaction(r481,m),registration_satisfaction(r482,h),registration_satisfaction(r483,h),registration_satisfaction(r484,m),registration_satisfaction(r485,h),registration_satisfaction(r486,h),registration_satisfaction(r487,h),registration_satisfaction(r488,l),registration_satisfaction(r489,m),registration_satisfaction(r490,m),registration_satisfaction(r491,l),registration_satisfaction(r492,_G139858),registration_satisfaction(r493,h),registration_satisfaction(r494,m),registration_satisfaction(r495,h),registration_satisfaction(r496,_G139878),registration_satisfaction(r497,h),registration_satisfaction(r498,l),registration_satisfaction(r499,_G139893),registration_satisfaction(r500,m),registration_satisfaction(r501,h),registration_satisfaction(r502,h),registration_satisfaction(r503,l),registration_satisfaction(r504,m),registration_satisfaction(r505,h),registration_satisfaction(r506,h),registration_satisfaction(r507,h),registration_satisfaction(r508,l),registration_satisfaction(r509,m),registration_satisfaction(r510,h),registration_satisfaction(r511,l),registration_satisfaction(r512,h),registration_satisfaction(r513,h),registration_satisfaction(r514,h),registration_satisfaction(r515,_G139973),registration_satisfaction(r516,_G139978),registration_satisfaction(r517,m),registration_satisfaction(r518,h),registration_satisfaction(r519,h),registration_satisfaction(r520,h),registration_satisfaction(r521,_G140003),registration_satisfaction(r522,h),registration_satisfaction(r523,h),registration_satisfaction(r524,_G140018),registration_satisfaction(r525,l),registration_satisfaction(r526,h),registration_satisfaction(r527,l),registration_satisfaction(r528,h),registration_satisfaction(r529,h),registration_satisfaction(r530,h),registration_satisfaction(r531,m),registration_satisfaction(r532,h),registration_satisfaction(r533,h),registration_satisfaction(r534,l),registration_satisfaction(r535,m),registration_satisfaction(r536,h),registration_satisfaction(r537,h),registration_satisfaction(r538,h),registration_satisfaction(r539,h),registration_satisfaction(r540,m),registration_satisfaction(r541,_G140103),registration_satisfaction(r542,h),registration_satisfaction(r543,h),registration_satisfaction(r544,h),registration_satisfaction(r545,h),registration_satisfaction(r546,h),registration_satisfaction(r547,l),registration_satisfaction(r548,h),registration_satisfaction(r549,h),registration_satisfaction(r550,h),registration_satisfaction(r551,h),registration_satisfaction(r552,m),registration_satisfaction(r553,m),registration_satisfaction(r554,l),registration_satisfaction(r555,m),registration_satisfaction(r556,h),registration_satisfaction(r557,h),registration_satisfaction(r558,h),registration_satisfaction(r559,h),registration_satisfaction(r560,h),registration_satisfaction(r561,h),registration_satisfaction(r562,h),registration_satisfaction(r563,m),registration_satisfaction(r564,h),registration_satisfaction(r565,l),registration_satisfaction(r566,_G140228),registration_satisfaction(r567,h),registration_satisfaction(r568,h),registration_satisfaction(r569,h),registration_satisfaction(r570,h),registration_satisfaction(r571,l),registration_satisfaction(r572,m),registration_satisfaction(r573,h),registration_satisfaction(r574,m),registration_satisfaction(r575,h),registration_satisfaction(r576,h),registration_satisfaction(r577,_G140283),registration_satisfaction(r578,l),registration_satisfaction(r579,h),registration_satisfaction(r580,m),registration_satisfaction(r581,h),registration_satisfaction(r582,h),registration_satisfaction(r583,h),registration_satisfaction(r584,h),registration_satisfaction(r585,h),registration_satisfaction(r586,m),registration_satisfaction(r587,m),registration_satisfaction(r588,l),registration_satisfaction(r589,l),registration_satisfaction(r590,h),registration_satisfaction(r591,h),registration_satisfaction(r592,_G140358),registration_satisfaction(r593,h),registration_satisfaction(r594,l),registration_satisfaction(r595,_G140373),registration_satisfaction(r596,h),registration_satisfaction(r597,h),registration_satisfaction(r598,h),registration_satisfaction(r599,h),registration_satisfaction(r600,m),registration_satisfaction(r601,m),registration_satisfaction(r602,h),registration_satisfaction(r603,h),registration_satisfaction(r604,l),registration_satisfaction(r605,h),registration_satisfaction(r606,h),registration_satisfaction(r607,l),registration_satisfaction(r608,h),registration_satisfaction(r609,h),registration_satisfaction(r610,h),registration_satisfaction(r611,h),registration_satisfaction(r612,l),registration_satisfaction(r613,h),registration_satisfaction(r614,m),registration_satisfaction(r615,l),registration_satisfaction(r616,h),registration_satisfaction(r617,h),registration_satisfaction(r618,h),registration_satisfaction(r619,h),registration_satisfaction(r620,h),registration_satisfaction(r621,h),registration_satisfaction(r622,h),registration_satisfaction(r623,l),registration_satisfaction(r624,m),registration_satisfaction(r625,l),registration_satisfaction(r626,h),registration_satisfaction(r627,h),registration_satisfaction(r628,h),registration_satisfaction(r629,h),registration_satisfaction(r630,h),registration_satisfaction(r631,h),registration_satisfaction(r632,h),registration_satisfaction(r633,h),registration_satisfaction(r634,h),registration_satisfaction(r635,m),registration_satisfaction(r636,l),registration_satisfaction(r637,m),registration_satisfaction(r638,h),registration_satisfaction(r639,h),registration_satisfaction(r640,h),registration_satisfaction(r641,h),registration_satisfaction(r642,h),registration_satisfaction(r643,h),registration_satisfaction(r644,h),registration_satisfaction(r645,h),registration_satisfaction(r646,h),registration_satisfaction(r647,h),registration_satisfaction(r648,h),registration_satisfaction(r649,_G140643),registration_satisfaction(r650,h),registration_satisfaction(r651,h),registration_satisfaction(r652,m),registration_satisfaction(r653,l),registration_satisfaction(r654,h),registration_satisfaction(r655,h),registration_satisfaction(r656,m),registration_satisfaction(r657,h),registration_satisfaction(r658,h),registration_satisfaction(r659,_G140693),registration_satisfaction(r660,h),registration_satisfaction(r661,h),registration_satisfaction(r662,h),registration_satisfaction(r663,h),registration_satisfaction(r664,l),registration_satisfaction(r665,h),registration_satisfaction(r666,_G140728),registration_satisfaction(r667,h),registration_satisfaction(r668,l),registration_satisfaction(r669,h),registration_satisfaction(r670,_G140748),registration_satisfaction(r671,h),registration_satisfaction(r672,l),registration_satisfaction(r673,l),registration_satisfaction(r674,h),registration_satisfaction(r675,_G140773),registration_satisfaction(r676,_G140778),registration_satisfaction(r677,_G140783),registration_satisfaction(r678,h),registration_satisfaction(r679,h),registration_satisfaction(r680,m),registration_satisfaction(r681,h),registration_satisfaction(r682,h),registration_satisfaction(r683,h),registration_satisfaction(r684,m),registration_satisfaction(r685,h),registration_satisfaction(r686,h),registration_satisfaction(r687,l),registration_satisfaction(r688,h),registration_satisfaction(r689,m),registration_satisfaction(r690,h),registration_satisfaction(r691,h),registration_satisfaction(r692,_G140858),registration_satisfaction(r693,h),registration_satisfaction(r694,_G140868),registration_satisfaction(r695,h),registration_satisfaction(r696,h),registration_satisfaction(r697,m),registration_satisfaction(r698,h),registration_satisfaction(r699,h),registration_satisfaction(r700,h),registration_satisfaction(r701,h),registration_satisfaction(r702,_G140908),registration_satisfaction(r703,l),registration_satisfaction(r704,l),registration_satisfaction(r705,l),registration_satisfaction(r706,m),registration_satisfaction(r707,h),registration_satisfaction(r708,l),registration_satisfaction(r709,m),registration_satisfaction(r710,l),registration_satisfaction(r711,h),registration_satisfaction(r712,h),registration_satisfaction(r713,h),registration_satisfaction(r714,m),registration_satisfaction(r715,h),registration_satisfaction(r716,h),registration_satisfaction(r717,h),registration_satisfaction(r718,l),registration_satisfaction(r719,_G140993),registration_satisfaction(r720,h),registration_satisfaction(r721,h),registration_satisfaction(r722,h),registration_satisfaction(r723,h),registration_satisfaction(r724,h),registration_satisfaction(r725,h),registration_satisfaction(r726,h),registration_satisfaction(r727,_G141033),registration_satisfaction(r728,m),registration_satisfaction(r729,_G141043),registration_satisfaction(r730,h),registration_satisfaction(r731,h),registration_satisfaction(r732,h),registration_satisfaction(r733,h),registration_satisfaction(r734,h),registration_satisfaction(r735,h),registration_satisfaction(r736,h),registration_satisfaction(r737,h),registration_satisfaction(r738,h),registration_satisfaction(r739,h),registration_satisfaction(r740,h),registration_satisfaction(r741,_G141103),registration_satisfaction(r742,h),registration_satisfaction(r743,h),registration_satisfaction(r744,h),registration_satisfaction(r745,m),registration_satisfaction(r746,h),registration_satisfaction(r747,h),registration_satisfaction(r748,h),registration_satisfaction(r749,m),registration_satisfaction(r750,h),registration_satisfaction(r751,h),registration_satisfaction(r752,m),registration_satisfaction(r753,m),registration_satisfaction(r754,h),registration_satisfaction(r755,l),registration_satisfaction(r756,h),registration_satisfaction(r757,h),registration_satisfaction(r758,h),registration_satisfaction(r759,l),registration_satisfaction(r760,h),registration_satisfaction(r761,h),registration_satisfaction(r762,m),registration_satisfaction(r763,h),registration_satisfaction(r764,_G141218),registration_satisfaction(r765,h),registration_satisfaction(r766,h),registration_satisfaction(r767,h),registration_satisfaction(r768,l),registration_satisfaction(r769,l),registration_satisfaction(r770,m),registration_satisfaction(r771,m),registration_satisfaction(r772,h),registration_satisfaction(r773,m),registration_satisfaction(r774,h),registration_satisfaction(r775,h),registration_satisfaction(r776,h),registration_satisfaction(r777,l),registration_satisfaction(r778,h),registration_satisfaction(r779,_G141293),registration_satisfaction(r780,_G141298),registration_satisfaction(r781,m),registration_satisfaction(r782,m),registration_satisfaction(r783,m),registration_satisfaction(r784,l),registration_satisfaction(r785,l),registration_satisfaction(r786,h),registration_satisfaction(r787,h),registration_satisfaction(r788,h),registration_satisfaction(r789,_G141343),registration_satisfaction(r790,h),registration_satisfaction(r791,h),registration_satisfaction(r792,h),registration_satisfaction(r793,m),registration_satisfaction(r794,l),registration_satisfaction(r795,h),registration_satisfaction(r796,h),registration_satisfaction(r797,h),registration_satisfaction(r798,m),registration_satisfaction(r799,m),registration_satisfaction(r800,m),registration_satisfaction(r801,h),registration_satisfaction(r802,h),registration_satisfaction(r803,h),registration_satisfaction(r804,h),registration_satisfaction(r805,h),registration_satisfaction(r806,h),registration_satisfaction(r807,l),registration_satisfaction(r808,m),registration_satisfaction(r809,l),registration_satisfaction(r810,h),registration_satisfaction(r811,_G141453),registration_satisfaction(r812,h),registration_satisfaction(r813,_G141463),registration_satisfaction(r814,l),registration_satisfaction(r815,h),registration_satisfaction(r816,h),registration_satisfaction(r817,h),registration_satisfaction(r818,l),registration_satisfaction(r819,h),registration_satisfaction(r820,h),registration_satisfaction(r821,_G141503),registration_satisfaction(r822,m),registration_satisfaction(r823,h),registration_satisfaction(r824,m),registration_satisfaction(r825,l),registration_satisfaction(r826,l),registration_satisfaction(r827,l),registration_satisfaction(r828,m),registration_satisfaction(r829,l),registration_satisfaction(r830,h),registration_satisfaction(r831,h),registration_satisfaction(r832,m),registration_satisfaction(r833,h),registration_satisfaction(r834,h),registration_satisfaction(r835,h),registration_satisfaction(r836,h),registration_satisfaction(r837,h),registration_satisfaction(r838,l),registration_satisfaction(r839,m),registration_satisfaction(r840,m),registration_satisfaction(r841,h),registration_satisfaction(r842,h),registration_satisfaction(r843,h),registration_satisfaction(r844,h),registration_satisfaction(r845,_G141623),registration_satisfaction(r846,l),registration_satisfaction(r847,h),registration_satisfaction(r848,l),registration_satisfaction(r849,h),registration_satisfaction(r850,h),registration_satisfaction(r851,h),registration_satisfaction(r852,h),registration_satisfaction(r853,h),registration_satisfaction(r854,m),registration_satisfaction(r855,h),registration_satisfaction(r856,l)]) \ No newline at end of file diff --git a/packages/CLPBN/horus/benchmarks/school/missing20.yap b/packages/CLPBN/horus/benchmarks/school/missing20.yap new file mode 100644 index 000000000..dddf20d0c --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/school/missing20.yap @@ -0,0 +1 @@ +graph([professor_ability(p0,h),professor_ability(p1,h),professor_ability(p2,m),professor_ability(p3,m),professor_ability(p4,_G131213),professor_ability(p5,h),professor_ability(p6,l),professor_ability(p7,l),professor_ability(p8,m),professor_ability(p9,h),professor_ability(p10,m),professor_ability(p11,h),professor_ability(p12,h),professor_ability(p13,m),professor_ability(p14,m),professor_ability(p15,m),professor_ability(p16,m),professor_ability(p17,m),professor_ability(p18,_G131283),professor_ability(p19,h),professor_ability(p20,h),professor_ability(p21,h),professor_ability(p22,m),professor_ability(p23,m),professor_ability(p24,l),professor_ability(p25,m),professor_ability(p26,h),professor_ability(p27,h),professor_ability(p28,h),professor_ability(p29,m),professor_ability(p30,m),professor_ability(p31,_G131348),professor_popularity(p0,h),professor_popularity(p1,h),professor_popularity(p2,_G131363),professor_popularity(p3,_G131368),professor_popularity(p4,h),professor_popularity(p5,h),professor_popularity(p6,l),professor_popularity(p7,l),professor_popularity(p8,m),professor_popularity(p9,h),professor_popularity(p10,l),professor_popularity(p11,h),professor_popularity(p12,h),professor_popularity(p13,l),professor_popularity(p14,_G131423),professor_popularity(p15,h),professor_popularity(p16,_G131433),professor_popularity(p17,_G131438),professor_popularity(p18,_G131443),professor_popularity(p19,h),professor_popularity(p20,_G131453),professor_popularity(p21,h),professor_popularity(p22,h),professor_popularity(p23,_G131468),professor_popularity(p24,l),professor_popularity(p25,l),professor_popularity(p26,m),professor_popularity(p27,h),professor_popularity(p28,h),professor_popularity(p29,l),professor_popularity(p30,m),professor_popularity(p31,_G131508),registration_grade(r0,a),registration_grade(r1,c),registration_grade(r2,_G131523),registration_grade(r3,c),registration_grade(r4,c),registration_grade(r5,c),registration_grade(r6,a),registration_grade(r7,_G131548),registration_grade(r8,b),registration_grade(r9,_G131558),registration_grade(r10,a),registration_grade(r11,a),registration_grade(r12,a),registration_grade(r13,a),registration_grade(r14,_G131583),registration_grade(r15,b),registration_grade(r16,a),registration_grade(r17,_G131598),registration_grade(r18,_G131603),registration_grade(r19,c),registration_grade(r20,c),registration_grade(r21,a),registration_grade(r22,a),registration_grade(r23,_G131628),registration_grade(r24,b),registration_grade(r25,a),registration_grade(r26,a),registration_grade(r27,b),registration_grade(r28,_G131653),registration_grade(r29,b),registration_grade(r30,_G131663),registration_grade(r31,_G131668),registration_grade(r32,c),registration_grade(r33,a),registration_grade(r34,c),registration_grade(r35,c),registration_grade(r36,_G131693),registration_grade(r37,a),registration_grade(r38,c),registration_grade(r39,a),registration_grade(r40,_G131713),registration_grade(r41,c),registration_grade(r42,b),registration_grade(r43,a),registration_grade(r44,a),registration_grade(r45,a),registration_grade(r46,a),registration_grade(r47,b),registration_grade(r48,b),registration_grade(r49,b),registration_grade(r50,b),registration_grade(r51,b),registration_grade(r52,b),registration_grade(r53,a),registration_grade(r54,b),registration_grade(r55,_G131788),registration_grade(r56,c),registration_grade(r57,c),registration_grade(r58,a),registration_grade(r59,c),registration_grade(r60,a),registration_grade(r61,_G131818),registration_grade(r62,a),registration_grade(r63,b),registration_grade(r64,b),registration_grade(r65,b),registration_grade(r66,b),registration_grade(r67,b),registration_grade(r68,a),registration_grade(r69,_G131858),registration_grade(r70,c),registration_grade(r71,b),registration_grade(r72,a),registration_grade(r73,_G131878),registration_grade(r74,_G131883),registration_grade(r75,b),registration_grade(r76,c),registration_grade(r77,a),registration_grade(r78,b),registration_grade(r79,a),registration_grade(r80,b),registration_grade(r81,b),registration_grade(r82,a),registration_grade(r83,_G131928),registration_grade(r84,c),registration_grade(r85,b),registration_grade(r86,_G131943),registration_grade(r87,b),registration_grade(r88,c),registration_grade(r89,_G131958),registration_grade(r90,c),registration_grade(r91,a),registration_grade(r92,_G131973),registration_grade(r93,b),registration_grade(r94,_G131983),registration_grade(r95,b),registration_grade(r96,a),registration_grade(r97,a),registration_grade(r98,_G132003),registration_grade(r99,b),registration_grade(r100,a),registration_grade(r101,a),registration_grade(r102,a),registration_grade(r103,_G132028),registration_grade(r104,b),registration_grade(r105,_G132038),registration_grade(r106,b),registration_grade(r107,_G132048),registration_grade(r108,b),registration_grade(r109,b),registration_grade(r110,a),registration_grade(r111,a),registration_grade(r112,a),registration_grade(r113,_G132078),registration_grade(r114,c),registration_grade(r115,d),registration_grade(r116,b),registration_grade(r117,c),registration_grade(r118,a),registration_grade(r119,b),registration_grade(r120,b),registration_grade(r121,_G132118),registration_grade(r122,b),registration_grade(r123,a),registration_grade(r124,a),registration_grade(r125,b),registration_grade(r126,_G132143),registration_grade(r127,b),registration_grade(r128,a),registration_grade(r129,c),registration_grade(r130,a),registration_grade(r131,_G132168),registration_grade(r132,b),registration_grade(r133,a),registration_grade(r134,_G132183),registration_grade(r135,b),registration_grade(r136,a),registration_grade(r137,b),registration_grade(r138,a),registration_grade(r139,a),registration_grade(r140,_G132213),registration_grade(r141,_G132218),registration_grade(r142,b),registration_grade(r143,b),registration_grade(r144,_G132233),registration_grade(r145,b),registration_grade(r146,a),registration_grade(r147,_G132248),registration_grade(r148,a),registration_grade(r149,_G132258),registration_grade(r150,b),registration_grade(r151,a),registration_grade(r152,_G132273),registration_grade(r153,b),registration_grade(r154,a),registration_grade(r155,c),registration_grade(r156,b),registration_grade(r157,b),registration_grade(r158,c),registration_grade(r159,b),registration_grade(r160,a),registration_grade(r161,a),registration_grade(r162,_G132323),registration_grade(r163,a),registration_grade(r164,b),registration_grade(r165,_G132338),registration_grade(r166,_G132343),registration_grade(r167,a),registration_grade(r168,a),registration_grade(r169,a),registration_grade(r170,a),registration_grade(r171,a),registration_grade(r172,c),registration_grade(r173,_G132378),registration_grade(r174,a),registration_grade(r175,b),registration_grade(r176,b),registration_grade(r177,c),registration_grade(r178,b),registration_grade(r179,d),registration_grade(r180,c),registration_grade(r181,a),registration_grade(r182,b),registration_grade(r183,a),registration_grade(r184,a),registration_grade(r185,b),registration_grade(r186,c),registration_grade(r187,a),registration_grade(r188,a),registration_grade(r189,a),registration_grade(r190,a),registration_grade(r191,b),registration_grade(r192,_G132473),registration_grade(r193,c),registration_grade(r194,b),registration_grade(r195,c),registration_grade(r196,_G132493),registration_grade(r197,a),registration_grade(r198,_G132503),registration_grade(r199,b),registration_grade(r200,b),registration_grade(r201,c),registration_grade(r202,a),registration_grade(r203,a),registration_grade(r204,b),registration_grade(r205,a),registration_grade(r206,a),registration_grade(r207,a),registration_grade(r208,c),registration_grade(r209,_G132558),registration_grade(r210,_G132563),registration_grade(r211,d),registration_grade(r212,b),registration_grade(r213,b),registration_grade(r214,a),registration_grade(r215,a),registration_grade(r216,b),registration_grade(r217,a),registration_grade(r218,b),registration_grade(r219,a),registration_grade(r220,_G132613),registration_grade(r221,b),registration_grade(r222,c),registration_grade(r223,a),registration_grade(r224,b),registration_grade(r225,b),registration_grade(r226,d),registration_grade(r227,b),registration_grade(r228,c),registration_grade(r229,b),registration_grade(r230,a),registration_grade(r231,c),registration_grade(r232,a),registration_grade(r233,b),registration_grade(r234,b),registration_grade(r235,c),registration_grade(r236,_G132693),registration_grade(r237,c),registration_grade(r238,_G132703),registration_grade(r239,_G132708),registration_grade(r240,b),registration_grade(r241,a),registration_grade(r242,b),registration_grade(r243,a),registration_grade(r244,b),registration_grade(r245,a),registration_grade(r246,b),registration_grade(r247,c),registration_grade(r248,b),registration_grade(r249,a),registration_grade(r250,a),registration_grade(r251,a),registration_grade(r252,b),registration_grade(r253,a),registration_grade(r254,_G132783),registration_grade(r255,a),registration_grade(r256,a),registration_grade(r257,_G132798),registration_grade(r258,_G132803),registration_grade(r259,a),registration_grade(r260,b),registration_grade(r261,a),registration_grade(r262,_G132823),registration_grade(r263,a),registration_grade(r264,_G132833),registration_grade(r265,a),registration_grade(r266,_G132843),registration_grade(r267,a),registration_grade(r268,_G132853),registration_grade(r269,a),registration_grade(r270,c),registration_grade(r271,b),registration_grade(r272,c),registration_grade(r273,_G132878),registration_grade(r274,c),registration_grade(r275,a),registration_grade(r276,a),registration_grade(r277,a),registration_grade(r278,_G132903),registration_grade(r279,a),registration_grade(r280,_G132913),registration_grade(r281,b),registration_grade(r282,d),registration_grade(r283,a),registration_grade(r284,b),registration_grade(r285,b),registration_grade(r286,_G132943),registration_grade(r287,b),registration_grade(r288,b),registration_grade(r289,_G132958),registration_grade(r290,_G132963),registration_grade(r291,c),registration_grade(r292,b),registration_grade(r293,_G132978),registration_grade(r294,_G132983),registration_grade(r295,a),registration_grade(r296,_G132993),registration_grade(r297,_G132998),registration_grade(r298,_G133003),registration_grade(r299,a),registration_grade(r300,b),registration_grade(r301,b),registration_grade(r302,b),registration_grade(r303,a),registration_grade(r304,a),registration_grade(r305,b),registration_grade(r306,b),registration_grade(r307,c),registration_grade(r308,c),registration_grade(r309,c),registration_grade(r310,_G133063),registration_grade(r311,a),registration_grade(r312,a),registration_grade(r313,a),registration_grade(r314,c),registration_grade(r315,c),registration_grade(r316,c),registration_grade(r317,_G133098),registration_grade(r318,c),registration_grade(r319,c),registration_grade(r320,b),registration_grade(r321,b),registration_grade(r322,a),registration_grade(r323,c),registration_grade(r324,_G133133),registration_grade(r325,b),registration_grade(r326,a),registration_grade(r327,_G133148),registration_grade(r328,b),registration_grade(r329,a),registration_grade(r330,b),registration_grade(r331,a),registration_grade(r332,a),registration_grade(r333,_G133178),registration_grade(r334,_G133183),registration_grade(r335,d),registration_grade(r336,b),registration_grade(r337,b),registration_grade(r338,b),registration_grade(r339,a),registration_grade(r340,_G133213),registration_grade(r341,_G133218),registration_grade(r342,b),registration_grade(r343,a),registration_grade(r344,c),registration_grade(r345,b),registration_grade(r346,b),registration_grade(r347,_G133248),registration_grade(r348,a),registration_grade(r349,a),registration_grade(r350,_G133263),registration_grade(r351,b),registration_grade(r352,d),registration_grade(r353,c),registration_grade(r354,c),registration_grade(r355,c),registration_grade(r356,_G133293),registration_grade(r357,_G133298),registration_grade(r358,a),registration_grade(r359,_G133308),registration_grade(r360,a),registration_grade(r361,b),registration_grade(r362,c),registration_grade(r363,c),registration_grade(r364,b),registration_grade(r365,b),registration_grade(r366,b),registration_grade(r367,b),registration_grade(r368,_G133353),registration_grade(r369,c),registration_grade(r370,b),registration_grade(r371,a),registration_grade(r372,a),registration_grade(r373,a),registration_grade(r374,b),registration_grade(r375,b),registration_grade(r376,_G133393),registration_grade(r377,a),registration_grade(r378,a),registration_grade(r379,c),registration_grade(r380,a),registration_grade(r381,c),registration_grade(r382,a),registration_grade(r383,a),registration_grade(r384,b),registration_grade(r385,b),registration_grade(r386,_G133443),registration_grade(r387,a),registration_grade(r388,a),registration_grade(r389,a),registration_grade(r390,a),registration_grade(r391,b),registration_grade(r392,_G133473),registration_grade(r393,b),registration_grade(r394,c),registration_grade(r395,b),registration_grade(r396,b),registration_grade(r397,a),registration_grade(r398,b),registration_grade(r399,c),registration_grade(r400,a),registration_grade(r401,_G133518),registration_grade(r402,a),registration_grade(r403,_G133528),registration_grade(r404,a),registration_grade(r405,a),registration_grade(r406,a),registration_grade(r407,b),registration_grade(r408,a),registration_grade(r409,a),registration_grade(r410,b),registration_grade(r411,b),registration_grade(r412,a),registration_grade(r413,_G133578),registration_grade(r414,a),registration_grade(r415,b),registration_grade(r416,b),registration_grade(r417,d),registration_grade(r418,a),registration_grade(r419,a),registration_grade(r420,a),registration_grade(r421,_G133618),registration_grade(r422,b),registration_grade(r423,b),registration_grade(r424,a),registration_grade(r425,b),registration_grade(r426,_G133643),registration_grade(r427,c),registration_grade(r428,c),registration_grade(r429,c),registration_grade(r430,b),registration_grade(r431,d),registration_grade(r432,c),registration_grade(r433,a),registration_grade(r434,_G133683),registration_grade(r435,c),registration_grade(r436,a),registration_grade(r437,c),registration_grade(r438,b),registration_grade(r439,_G133708),registration_grade(r440,c),registration_grade(r441,a),registration_grade(r442,c),registration_grade(r443,a),registration_grade(r444,a),registration_grade(r445,a),registration_grade(r446,_G133743),registration_grade(r447,d),registration_grade(r448,_G133753),registration_grade(r449,b),registration_grade(r450,a),registration_grade(r451,a),registration_grade(r452,b),registration_grade(r453,d),registration_grade(r454,d),registration_grade(r455,c),registration_grade(r456,c),registration_grade(r457,a),registration_grade(r458,b),registration_grade(r459,b),registration_grade(r460,_G133813),registration_grade(r461,b),registration_grade(r462,a),registration_grade(r463,d),registration_grade(r464,a),registration_grade(r465,a),registration_grade(r466,b),registration_grade(r467,_G133848),registration_grade(r468,a),registration_grade(r469,a),registration_grade(r470,c),registration_grade(r471,_G133868),registration_grade(r472,a),registration_grade(r473,c),registration_grade(r474,b),registration_grade(r475,a),registration_grade(r476,_G133893),registration_grade(r477,b),registration_grade(r478,a),registration_grade(r479,b),registration_grade(r480,a),registration_grade(r481,b),registration_grade(r482,b),registration_grade(r483,a),registration_grade(r484,a),registration_grade(r485,a),registration_grade(r486,a),registration_grade(r487,_G133948),registration_grade(r488,_G133953),registration_grade(r489,b),registration_grade(r490,c),registration_grade(r491,_G133968),registration_grade(r492,b),registration_grade(r493,_G133978),registration_grade(r494,b),registration_grade(r495,b),registration_grade(r496,a),registration_grade(r497,c),registration_grade(r498,b),registration_grade(r499,_G134008),registration_grade(r500,b),registration_grade(r501,a),registration_grade(r502,a),registration_grade(r503,_G134028),registration_grade(r504,b),registration_grade(r505,c),registration_grade(r506,c),registration_grade(r507,a),registration_grade(r508,c),registration_grade(r509,b),registration_grade(r510,a),registration_grade(r511,c),registration_grade(r512,b),registration_grade(r513,b),registration_grade(r514,_G134083),registration_grade(r515,c),registration_grade(r516,a),registration_grade(r517,b),registration_grade(r518,a),registration_grade(r519,a),registration_grade(r520,b),registration_grade(r521,a),registration_grade(r522,b),registration_grade(r523,a),registration_grade(r524,b),registration_grade(r525,c),registration_grade(r526,c),registration_grade(r527,_G134148),registration_grade(r528,a),registration_grade(r529,_G134158),registration_grade(r530,a),registration_grade(r531,b),registration_grade(r532,a),registration_grade(r533,a),registration_grade(r534,b),registration_grade(r535,_G134188),registration_grade(r536,a),registration_grade(r537,a),registration_grade(r538,a),registration_grade(r539,b),registration_grade(r540,b),registration_grade(r541,c),registration_grade(r542,a),registration_grade(r543,a),registration_grade(r544,b),registration_grade(r545,a),registration_grade(r546,_G134243),registration_grade(r547,c),registration_grade(r548,c),registration_grade(r549,b),registration_grade(r550,_G134263),registration_grade(r551,a),registration_grade(r552,c),registration_grade(r553,b),registration_grade(r554,b),registration_grade(r555,b),registration_grade(r556,a),registration_grade(r557,a),registration_grade(r558,a),registration_grade(r559,_G134308),registration_grade(r560,b),registration_grade(r561,_G134318),registration_grade(r562,a),registration_grade(r563,_G134328),registration_grade(r564,b),registration_grade(r565,d),registration_grade(r566,c),registration_grade(r567,a),registration_grade(r568,a),registration_grade(r569,a),registration_grade(r570,c),registration_grade(r571,_G134368),registration_grade(r572,b),registration_grade(r573,_G134378),registration_grade(r574,c),registration_grade(r575,a),registration_grade(r576,a),registration_grade(r577,a),registration_grade(r578,b),registration_grade(r579,a),registration_grade(r580,b),registration_grade(r581,a),registration_grade(r582,a),registration_grade(r583,_G134428),registration_grade(r584,_G134433),registration_grade(r585,_G134438),registration_grade(r586,b),registration_grade(r587,c),registration_grade(r588,c),registration_grade(r589,c),registration_grade(r590,_G134463),registration_grade(r591,c),registration_grade(r592,b),registration_grade(r593,_G134478),registration_grade(r594,c),registration_grade(r595,b),registration_grade(r596,a),registration_grade(r597,a),registration_grade(r598,a),registration_grade(r599,a),registration_grade(r600,a),registration_grade(r601,b),registration_grade(r602,a),registration_grade(r603,_G134528),registration_grade(r604,c),registration_grade(r605,a),registration_grade(r606,_G134543),registration_grade(r607,b),registration_grade(r608,a),registration_grade(r609,b),registration_grade(r610,_G134563),registration_grade(r611,a),registration_grade(r612,c),registration_grade(r613,a),registration_grade(r614,d),registration_grade(r615,b),registration_grade(r616,a),registration_grade(r617,a),registration_grade(r618,b),registration_grade(r619,_G134608),registration_grade(r620,a),registration_grade(r621,a),registration_grade(r622,b),registration_grade(r623,b),registration_grade(r624,a),registration_grade(r625,c),registration_grade(r626,_G134643),registration_grade(r627,b),registration_grade(r628,a),registration_grade(r629,_G134658),registration_grade(r630,_G134663),registration_grade(r631,_G134668),registration_grade(r632,a),registration_grade(r633,b),registration_grade(r634,_G134683),registration_grade(r635,b),registration_grade(r636,d),registration_grade(r637,_G134698),registration_grade(r638,_G134703),registration_grade(r639,_G134708),registration_grade(r640,c),registration_grade(r641,_G134718),registration_grade(r642,c),registration_grade(r643,_G134728),registration_grade(r644,a),registration_grade(r645,b),registration_grade(r646,b),registration_grade(r647,b),registration_grade(r648,a),registration_grade(r649,b),registration_grade(r650,_G134763),registration_grade(r651,b),registration_grade(r652,_G134773),registration_grade(r653,b),registration_grade(r654,b),registration_grade(r655,a),registration_grade(r656,_G134793),registration_grade(r657,a),registration_grade(r658,_G134803),registration_grade(r659,a),registration_grade(r660,a),registration_grade(r661,_G134818),registration_grade(r662,a),registration_grade(r663,_G134828),registration_grade(r664,_G134833),registration_grade(r665,a),registration_grade(r666,b),registration_grade(r667,b),registration_grade(r668,_G134853),registration_grade(r669,b),registration_grade(r670,a),registration_grade(r671,c),registration_grade(r672,_G134873),registration_grade(r673,a),registration_grade(r674,a),registration_grade(r675,b),registration_grade(r676,a),registration_grade(r677,a),registration_grade(r678,a),registration_grade(r679,a),registration_grade(r680,c),registration_grade(r681,b),registration_grade(r682,a),registration_grade(r683,b),registration_grade(r684,b),registration_grade(r685,a),registration_grade(r686,_G134943),registration_grade(r687,_G134948),registration_grade(r688,_G134953),registration_grade(r689,_G134958),registration_grade(r690,a),registration_grade(r691,c),registration_grade(r692,_G134973),registration_grade(r693,b),registration_grade(r694,_G134983),registration_grade(r695,a),registration_grade(r696,a),registration_grade(r697,c),registration_grade(r698,b),registration_grade(r699,a),registration_grade(r700,a),registration_grade(r701,a),registration_grade(r702,a),registration_grade(r703,c),registration_grade(r704,c),registration_grade(r705,b),registration_grade(r706,b),registration_grade(r707,_G135048),registration_grade(r708,b),registration_grade(r709,b),registration_grade(r710,b),registration_grade(r711,b),registration_grade(r712,c),registration_grade(r713,a),registration_grade(r714,b),registration_grade(r715,a),registration_grade(r716,a),registration_grade(r717,a),registration_grade(r718,a),registration_grade(r719,c),registration_grade(r720,a),registration_grade(r721,b),registration_grade(r722,b),registration_grade(r723,b),registration_grade(r724,a),registration_grade(r725,c),registration_grade(r726,a),registration_grade(r727,_G135148),registration_grade(r728,b),registration_grade(r729,b),registration_grade(r730,c),registration_grade(r731,a),registration_grade(r732,a),registration_grade(r733,a),registration_grade(r734,b),registration_grade(r735,_G135188),registration_grade(r736,a),registration_grade(r737,_G135198),registration_grade(r738,b),registration_grade(r739,a),registration_grade(r740,_G135213),registration_grade(r741,a),registration_grade(r742,d),registration_grade(r743,d),registration_grade(r744,a),registration_grade(r745,b),registration_grade(r746,a),registration_grade(r747,a),registration_grade(r748,b),registration_grade(r749,c),registration_grade(r750,a),registration_grade(r751,c),registration_grade(r752,b),registration_grade(r753,c),registration_grade(r754,c),registration_grade(r755,c),registration_grade(r756,_G135293),registration_grade(r757,c),registration_grade(r758,b),registration_grade(r759,b),registration_grade(r760,a),registration_grade(r761,_G135318),registration_grade(r762,b),registration_grade(r763,a),registration_grade(r764,a),registration_grade(r765,a),registration_grade(r766,c),registration_grade(r767,c),registration_grade(r768,c),registration_grade(r769,_G135358),registration_grade(r770,_G135363),registration_grade(r771,b),registration_grade(r772,a),registration_grade(r773,b),registration_grade(r774,b),registration_grade(r775,_G135388),registration_grade(r776,_G135393),registration_grade(r777,c),registration_grade(r778,c),registration_grade(r779,_G135408),registration_grade(r780,a),registration_grade(r781,b),registration_grade(r782,a),registration_grade(r783,c),registration_grade(r784,c),registration_grade(r785,c),registration_grade(r786,c),registration_grade(r787,a),registration_grade(r788,a),registration_grade(r789,c),registration_grade(r790,b),registration_grade(r791,b),registration_grade(r792,a),registration_grade(r793,_G135478),registration_grade(r794,b),registration_grade(r795,a),registration_grade(r796,_G135493),registration_grade(r797,a),registration_grade(r798,b),registration_grade(r799,_G135508),registration_grade(r800,_G135513),registration_grade(r801,b),registration_grade(r802,_G135523),registration_grade(r803,b),registration_grade(r804,a),registration_grade(r805,b),registration_grade(r806,a),registration_grade(r807,_G135548),registration_grade(r808,b),registration_grade(r809,c),registration_grade(r810,_G135563),registration_grade(r811,d),registration_grade(r812,c),registration_grade(r813,c),registration_grade(r814,c),registration_grade(r815,c),registration_grade(r816,_G135593),registration_grade(r817,a),registration_grade(r818,b),registration_grade(r819,b),registration_grade(r820,d),registration_grade(r821,_G135618),registration_grade(r822,a),registration_grade(r823,a),registration_grade(r824,c),registration_grade(r825,b),registration_grade(r826,b),registration_grade(r827,c),registration_grade(r828,b),registration_grade(r829,_G135658),registration_grade(r830,a),registration_grade(r831,a),registration_grade(r832,b),registration_grade(r833,b),registration_grade(r834,b),registration_grade(r835,a),registration_grade(r836,a),registration_grade(r837,c),registration_grade(r838,c),registration_grade(r839,b),registration_grade(r840,b),registration_grade(r841,a),registration_grade(r842,a),registration_grade(r843,b),registration_grade(r844,a),registration_grade(r845,c),registration_grade(r846,b),registration_grade(r847,b),registration_grade(r848,_G135753),registration_grade(r849,b),registration_grade(r850,b),registration_grade(r851,b),registration_grade(r852,c),registration_grade(r853,_G135778),registration_grade(r854,c),registration_grade(r855,d),registration_grade(r856,c),student_intelligence(s0,l),student_intelligence(s1,l),student_intelligence(s2,_G135808),student_intelligence(s3,_G135813),student_intelligence(s4,h),student_intelligence(s5,h),student_intelligence(s6,m),student_intelligence(s7,h),student_intelligence(s8,h),student_intelligence(s9,m),student_intelligence(s10,m),student_intelligence(s11,m),student_intelligence(s12,h),student_intelligence(s13,h),student_intelligence(s14,h),student_intelligence(s15,m),student_intelligence(s16,h),student_intelligence(s17,m),student_intelligence(s18,m),student_intelligence(s19,h),student_intelligence(s20,m),student_intelligence(s21,h),student_intelligence(s22,h),student_intelligence(s23,_G135913),student_intelligence(s24,m),student_intelligence(s25,h),student_intelligence(s26,m),student_intelligence(s27,m),student_intelligence(s28,m),student_intelligence(s29,_G135943),student_intelligence(s30,h),student_intelligence(s31,m),student_intelligence(s32,_G135958),student_intelligence(s33,h),student_intelligence(s34,l),student_intelligence(s35,m),student_intelligence(s36,l),student_intelligence(s37,m),student_intelligence(s38,h),student_intelligence(s39,_G135993),student_intelligence(s40,h),student_intelligence(s41,m),student_intelligence(s42,m),student_intelligence(s43,h),student_intelligence(s44,h),student_intelligence(s45,_G136023),student_intelligence(s46,l),student_intelligence(s47,h),student_intelligence(s48,m),student_intelligence(s49,m),student_intelligence(s50,h),student_intelligence(s51,m),student_intelligence(s52,m),student_intelligence(s53,m),student_intelligence(s54,h),student_intelligence(s55,h),student_intelligence(s56,_G136078),student_intelligence(s57,_G136083),student_intelligence(s58,h),student_intelligence(s59,m),student_intelligence(s60,m),student_intelligence(s61,h),student_intelligence(s62,m),student_intelligence(s63,h),student_intelligence(s64,_G136118),student_intelligence(s65,m),student_intelligence(s66,h),student_intelligence(s67,m),student_intelligence(s68,h),student_intelligence(s69,h),student_intelligence(s70,l),student_intelligence(s71,_G136153),student_intelligence(s72,h),student_intelligence(s73,m),student_intelligence(s74,h),student_intelligence(s75,h),student_intelligence(s76,h),student_intelligence(s77,h),student_intelligence(s78,h),student_intelligence(s79,m),student_intelligence(s80,m),student_intelligence(s81,l),student_intelligence(s82,_G136208),student_intelligence(s83,h),student_intelligence(s84,m),student_intelligence(s85,h),student_intelligence(s86,_G136228),student_intelligence(s87,h),student_intelligence(s88,_G136238),student_intelligence(s89,m),student_intelligence(s90,h),student_intelligence(s91,m),student_intelligence(s92,h),student_intelligence(s93,l),student_intelligence(s94,l),student_intelligence(s95,h),student_intelligence(s96,m),student_intelligence(s97,_G136283),student_intelligence(s98,h),student_intelligence(s99,l),student_intelligence(s100,h),student_intelligence(s101,h),student_intelligence(s102,m),student_intelligence(s103,h),student_intelligence(s104,_G136318),student_intelligence(s105,m),student_intelligence(s106,_G136328),student_intelligence(s107,l),student_intelligence(s108,_G136338),student_intelligence(s109,m),student_intelligence(s110,m),student_intelligence(s111,_G136353),student_intelligence(s112,m),student_intelligence(s113,h),student_intelligence(s114,m),student_intelligence(s115,h),student_intelligence(s116,m),student_intelligence(s117,m),student_intelligence(s118,m),student_intelligence(s119,h),student_intelligence(s120,h),student_intelligence(s121,h),student_intelligence(s122,m),student_intelligence(s123,m),student_intelligence(s124,h),student_intelligence(s125,_G136423),student_intelligence(s126,m),student_intelligence(s127,m),student_intelligence(s128,_G136438),student_intelligence(s129,h),student_intelligence(s130,_G136448),student_intelligence(s131,h),student_intelligence(s132,h),student_intelligence(s133,h),student_intelligence(s134,_G136468),student_intelligence(s135,_G136473),student_intelligence(s136,m),student_intelligence(s137,_G136483),student_intelligence(s138,l),student_intelligence(s139,h),student_intelligence(s140,h),student_intelligence(s141,_G136503),student_intelligence(s142,m),student_intelligence(s143,_G136513),student_intelligence(s144,h),student_intelligence(s145,_G136523),student_intelligence(s146,m),student_intelligence(s147,m),student_intelligence(s148,m),student_intelligence(s149,h),student_intelligence(s150,_G136548),student_intelligence(s151,h),student_intelligence(s152,h),student_intelligence(s153,m),student_intelligence(s154,_G136568),student_intelligence(s155,h),student_intelligence(s156,m),student_intelligence(s157,m),student_intelligence(s158,_G136588),student_intelligence(s159,_G136593),student_intelligence(s160,_G136598),student_intelligence(s161,_G136603),student_intelligence(s162,h),student_intelligence(s163,_G136613),student_intelligence(s164,m),student_intelligence(s165,m),student_intelligence(s166,_G136628),student_intelligence(s167,_G136633),student_intelligence(s168,h),student_intelligence(s169,_G136643),student_intelligence(s170,m),student_intelligence(s171,m),student_intelligence(s172,_G136658),student_intelligence(s173,h),student_intelligence(s174,h),student_intelligence(s175,m),student_intelligence(s176,_G136678),student_intelligence(s177,m),student_intelligence(s178,h),student_intelligence(s179,m),student_intelligence(s180,_G136698),student_intelligence(s181,h),student_intelligence(s182,m),student_intelligence(s183,h),student_intelligence(s184,h),student_intelligence(s185,m),student_intelligence(s186,m),student_intelligence(s187,m),student_intelligence(s188,h),student_intelligence(s189,m),student_intelligence(s190,h),student_intelligence(s191,l),student_intelligence(s192,h),student_intelligence(s193,_G136763),student_intelligence(s194,m),student_intelligence(s195,m),student_intelligence(s196,h),student_intelligence(s197,h),student_intelligence(s198,h),student_intelligence(s199,m),student_intelligence(s200,h),student_intelligence(s201,l),student_intelligence(s202,h),student_intelligence(s203,m),student_intelligence(s204,h),student_intelligence(s205,h),student_intelligence(s206,h),student_intelligence(s207,h),student_intelligence(s208,_G136838),student_intelligence(s209,_G136843),student_intelligence(s210,m),student_intelligence(s211,m),student_intelligence(s212,m),student_intelligence(s213,h),student_intelligence(s214,_G136868),student_intelligence(s215,m),student_intelligence(s216,h),student_intelligence(s217,m),student_intelligence(s218,h),student_intelligence(s219,h),student_intelligence(s220,_G136898),student_intelligence(s221,_G136903),student_intelligence(s222,h),student_intelligence(s223,m),student_intelligence(s224,_G136918),student_intelligence(s225,_G136923),student_intelligence(s226,_G136928),student_intelligence(s227,h),student_intelligence(s228,h),student_intelligence(s229,m),student_intelligence(s230,m),student_intelligence(s231,_G136953),student_intelligence(s232,m),student_intelligence(s233,h),student_intelligence(s234,l),student_intelligence(s235,h),student_intelligence(s236,h),student_intelligence(s237,h),student_intelligence(s238,h),student_intelligence(s239,_G136993),student_intelligence(s240,h),student_intelligence(s241,m),student_intelligence(s242,l),student_intelligence(s243,h),student_intelligence(s244,h),student_intelligence(s245,l),student_intelligence(s246,m),student_intelligence(s247,h),student_intelligence(s248,_G137038),student_intelligence(s249,h),student_intelligence(s250,m),student_intelligence(s251,_G137053),student_intelligence(s252,m),student_intelligence(s253,_G137063),student_intelligence(s254,m),student_intelligence(s255,m),course_difficulty(c0,h),course_difficulty(c1,_G137083),course_difficulty(c2,l),course_difficulty(c3,m),course_difficulty(c4,m),course_difficulty(c5,l),course_difficulty(c6,_G137108),course_difficulty(c7,_G137113),course_difficulty(c8,h),course_difficulty(c9,l),course_difficulty(c10,m),course_difficulty(c11,m),course_difficulty(c12,m),course_difficulty(c13,h),course_difficulty(c14,m),course_difficulty(c15,h),course_difficulty(c16,l),course_difficulty(c17,h),course_difficulty(c18,m),course_difficulty(c19,_G137173),course_difficulty(c20,_G137178),course_difficulty(c21,h),course_difficulty(c22,_G137188),course_difficulty(c23,_G137193),course_difficulty(c24,h),course_difficulty(c25,m),course_difficulty(c26,l),course_difficulty(c27,_G137213),course_difficulty(c28,m),course_difficulty(c29,m),course_difficulty(c30,m),course_difficulty(c31,_G137233),course_difficulty(c32,l),course_difficulty(c33,_G137243),course_difficulty(c34,l),course_difficulty(c35,h),course_difficulty(c36,h),course_difficulty(c37,m),course_difficulty(c38,_G137268),course_difficulty(c39,m),course_difficulty(c40,h),course_difficulty(c41,m),course_difficulty(c42,h),course_difficulty(c43,_G137293),course_difficulty(c44,_G137298),course_difficulty(c45,_G137303),course_difficulty(c46,m),course_difficulty(c47,m),course_difficulty(c48,m),course_difficulty(c49,l),course_difficulty(c50,m),course_difficulty(c51,h),course_difficulty(c52,h),course_difficulty(c53,h),course_difficulty(c54,_G137348),course_difficulty(c55,_G137353),course_difficulty(c56,_G137358),course_difficulty(c57,m),course_difficulty(c58,h),course_difficulty(c59,m),course_difficulty(c60,h),course_difficulty(c61,m),course_difficulty(c62,l),course_difficulty(c63,l),registration_satisfaction(r0,_G137398),registration_satisfaction(r1,l),registration_satisfaction(r2,h),registration_satisfaction(r3,_G137413),registration_satisfaction(r4,h),registration_satisfaction(r5,h),registration_satisfaction(r6,h),registration_satisfaction(r7,h),registration_satisfaction(r8,l),registration_satisfaction(r9,h),registration_satisfaction(r10,h),registration_satisfaction(r11,h),registration_satisfaction(r12,h),registration_satisfaction(r13,h),registration_satisfaction(r14,m),registration_satisfaction(r15,_G137473),registration_satisfaction(r16,h),registration_satisfaction(r17,l),registration_satisfaction(r18,_G137488),registration_satisfaction(r19,m),registration_satisfaction(r20,h),registration_satisfaction(r21,_G137503),registration_satisfaction(r22,_G137508),registration_satisfaction(r23,_G137513),registration_satisfaction(r24,h),registration_satisfaction(r25,h),registration_satisfaction(r26,h),registration_satisfaction(r27,h),registration_satisfaction(r28,h),registration_satisfaction(r29,h),registration_satisfaction(r30,l),registration_satisfaction(r31,h),registration_satisfaction(r32,m),registration_satisfaction(r33,h),registration_satisfaction(r34,h),registration_satisfaction(r35,h),registration_satisfaction(r36,m),registration_satisfaction(r37,h),registration_satisfaction(r38,h),registration_satisfaction(r39,h),registration_satisfaction(r40,_G137598),registration_satisfaction(r41,h),registration_satisfaction(r42,l),registration_satisfaction(r43,h),registration_satisfaction(r44,h),registration_satisfaction(r45,_G137623),registration_satisfaction(r46,m),registration_satisfaction(r47,h),registration_satisfaction(r48,h),registration_satisfaction(r49,h),registration_satisfaction(r50,h),registration_satisfaction(r51,h),registration_satisfaction(r52,h),registration_satisfaction(r53,h),registration_satisfaction(r54,h),registration_satisfaction(r55,h),registration_satisfaction(r56,_G137678),registration_satisfaction(r57,h),registration_satisfaction(r58,h),registration_satisfaction(r59,l),registration_satisfaction(r60,_G137698),registration_satisfaction(r61,h),registration_satisfaction(r62,h),registration_satisfaction(r63,h),registration_satisfaction(r64,h),registration_satisfaction(r65,_G137723),registration_satisfaction(r66,h),registration_satisfaction(r67,m),registration_satisfaction(r68,h),registration_satisfaction(r69,m),registration_satisfaction(r70,h),registration_satisfaction(r71,_G137753),registration_satisfaction(r72,l),registration_satisfaction(r73,_G137763),registration_satisfaction(r74,h),registration_satisfaction(r75,h),registration_satisfaction(r76,_G137778),registration_satisfaction(r77,h),registration_satisfaction(r78,m),registration_satisfaction(r79,h),registration_satisfaction(r80,h),registration_satisfaction(r81,h),registration_satisfaction(r82,l),registration_satisfaction(r83,_G137813),registration_satisfaction(r84,m),registration_satisfaction(r85,h),registration_satisfaction(r86,_G137828),registration_satisfaction(r87,m),registration_satisfaction(r88,h),registration_satisfaction(r89,h),registration_satisfaction(r90,_G137848),registration_satisfaction(r91,h),registration_satisfaction(r92,l),registration_satisfaction(r93,h),registration_satisfaction(r94,l),registration_satisfaction(r95,h),registration_satisfaction(r96,h),registration_satisfaction(r97,h),registration_satisfaction(r98,h),registration_satisfaction(r99,h),registration_satisfaction(r100,h),registration_satisfaction(r101,h),registration_satisfaction(r102,_G137908),registration_satisfaction(r103,h),registration_satisfaction(r104,h),registration_satisfaction(r105,l),registration_satisfaction(r106,h),registration_satisfaction(r107,l),registration_satisfaction(r108,l),registration_satisfaction(r109,h),registration_satisfaction(r110,_G137948),registration_satisfaction(r111,h),registration_satisfaction(r112,h),registration_satisfaction(r113,h),registration_satisfaction(r114,_G137968),registration_satisfaction(r115,l),registration_satisfaction(r116,h),registration_satisfaction(r117,_G137983),registration_satisfaction(r118,h),registration_satisfaction(r119,h),registration_satisfaction(r120,l),registration_satisfaction(r121,h),registration_satisfaction(r122,h),registration_satisfaction(r123,l),registration_satisfaction(r124,_G138018),registration_satisfaction(r125,m),registration_satisfaction(r126,h),registration_satisfaction(r127,_G138033),registration_satisfaction(r128,_G138038),registration_satisfaction(r129,h),registration_satisfaction(r130,_G138048),registration_satisfaction(r131,h),registration_satisfaction(r132,_G138058),registration_satisfaction(r133,_G138063),registration_satisfaction(r134,m),registration_satisfaction(r135,h),registration_satisfaction(r136,h),registration_satisfaction(r137,h),registration_satisfaction(r138,h),registration_satisfaction(r139,h),registration_satisfaction(r140,_G138098),registration_satisfaction(r141,l),registration_satisfaction(r142,h),registration_satisfaction(r143,h),registration_satisfaction(r144,h),registration_satisfaction(r145,l),registration_satisfaction(r146,_G138128),registration_satisfaction(r147,l),registration_satisfaction(r148,_G138138),registration_satisfaction(r149,h),registration_satisfaction(r150,h),registration_satisfaction(r151,h),registration_satisfaction(r152,h),registration_satisfaction(r153,h),registration_satisfaction(r154,m),registration_satisfaction(r155,m),registration_satisfaction(r156,h),registration_satisfaction(r157,_G138183),registration_satisfaction(r158,l),registration_satisfaction(r159,m),registration_satisfaction(r160,h),registration_satisfaction(r161,h),registration_satisfaction(r162,m),registration_satisfaction(r163,h),registration_satisfaction(r164,_G138218),registration_satisfaction(r165,m),registration_satisfaction(r166,_G138228),registration_satisfaction(r167,h),registration_satisfaction(r168,h),registration_satisfaction(r169,h),registration_satisfaction(r170,h),registration_satisfaction(r171,h),registration_satisfaction(r172,_G138258),registration_satisfaction(r173,h),registration_satisfaction(r174,h),registration_satisfaction(r175,h),registration_satisfaction(r176,h),registration_satisfaction(r177,h),registration_satisfaction(r178,h),registration_satisfaction(r179,l),registration_satisfaction(r180,h),registration_satisfaction(r181,m),registration_satisfaction(r182,h),registration_satisfaction(r183,l),registration_satisfaction(r184,h),registration_satisfaction(r185,_G138323),registration_satisfaction(r186,h),registration_satisfaction(r187,h),registration_satisfaction(r188,_G138338),registration_satisfaction(r189,_G138343),registration_satisfaction(r190,h),registration_satisfaction(r191,h),registration_satisfaction(r192,_G138358),registration_satisfaction(r193,h),registration_satisfaction(r194,_G138368),registration_satisfaction(r195,h),registration_satisfaction(r196,h),registration_satisfaction(r197,_G138383),registration_satisfaction(r198,h),registration_satisfaction(r199,_G138393),registration_satisfaction(r200,m),registration_satisfaction(r201,h),registration_satisfaction(r202,_G138408),registration_satisfaction(r203,h),registration_satisfaction(r204,h),registration_satisfaction(r205,h),registration_satisfaction(r206,h),registration_satisfaction(r207,h),registration_satisfaction(r208,h),registration_satisfaction(r209,h),registration_satisfaction(r210,h),registration_satisfaction(r211,m),registration_satisfaction(r212,h),registration_satisfaction(r213,h),registration_satisfaction(r214,h),registration_satisfaction(r215,_G138473),registration_satisfaction(r216,h),registration_satisfaction(r217,_G138483),registration_satisfaction(r218,m),registration_satisfaction(r219,h),registration_satisfaction(r220,h),registration_satisfaction(r221,m),registration_satisfaction(r222,l),registration_satisfaction(r223,h),registration_satisfaction(r224,h),registration_satisfaction(r225,l),registration_satisfaction(r226,l),registration_satisfaction(r227,h),registration_satisfaction(r228,_G138538),registration_satisfaction(r229,l),registration_satisfaction(r230,_G138548),registration_satisfaction(r231,l),registration_satisfaction(r232,h),registration_satisfaction(r233,_G138563),registration_satisfaction(r234,l),registration_satisfaction(r235,h),registration_satisfaction(r236,l),registration_satisfaction(r237,m),registration_satisfaction(r238,m),registration_satisfaction(r239,m),registration_satisfaction(r240,h),registration_satisfaction(r241,h),registration_satisfaction(r242,m),registration_satisfaction(r243,h),registration_satisfaction(r244,_G138618),registration_satisfaction(r245,_G138623),registration_satisfaction(r246,h),registration_satisfaction(r247,l),registration_satisfaction(r248,l),registration_satisfaction(r249,_G138643),registration_satisfaction(r250,h),registration_satisfaction(r251,h),registration_satisfaction(r252,h),registration_satisfaction(r253,h),registration_satisfaction(r254,h),registration_satisfaction(r255,_G138673),registration_satisfaction(r256,h),registration_satisfaction(r257,m),registration_satisfaction(r258,h),registration_satisfaction(r259,h),registration_satisfaction(r260,_G138698),registration_satisfaction(r261,_G138703),registration_satisfaction(r262,h),registration_satisfaction(r263,m),registration_satisfaction(r264,_G138718),registration_satisfaction(r265,_G138723),registration_satisfaction(r266,l),registration_satisfaction(r267,h),registration_satisfaction(r268,l),registration_satisfaction(r269,h),registration_satisfaction(r270,l),registration_satisfaction(r271,_G138753),registration_satisfaction(r272,l),registration_satisfaction(r273,h),registration_satisfaction(r274,h),registration_satisfaction(r275,h),registration_satisfaction(r276,h),registration_satisfaction(r277,h),registration_satisfaction(r278,h),registration_satisfaction(r279,h),registration_satisfaction(r280,h),registration_satisfaction(r281,m),registration_satisfaction(r282,h),registration_satisfaction(r283,h),registration_satisfaction(r284,_G138818),registration_satisfaction(r285,m),registration_satisfaction(r286,h),registration_satisfaction(r287,h),registration_satisfaction(r288,_G138838),registration_satisfaction(r289,l),registration_satisfaction(r290,_G138848),registration_satisfaction(r291,h),registration_satisfaction(r292,m),registration_satisfaction(r293,h),registration_satisfaction(r294,h),registration_satisfaction(r295,m),registration_satisfaction(r296,l),registration_satisfaction(r297,h),registration_satisfaction(r298,_G138888),registration_satisfaction(r299,_G138893),registration_satisfaction(r300,l),registration_satisfaction(r301,h),registration_satisfaction(r302,m),registration_satisfaction(r303,_G138913),registration_satisfaction(r304,_G138918),registration_satisfaction(r305,l),registration_satisfaction(r306,h),registration_satisfaction(r307,l),registration_satisfaction(r308,l),registration_satisfaction(r309,m),registration_satisfaction(r310,h),registration_satisfaction(r311,l),registration_satisfaction(r312,h),registration_satisfaction(r313,_G138963),registration_satisfaction(r314,h),registration_satisfaction(r315,h),registration_satisfaction(r316,l),registration_satisfaction(r317,l),registration_satisfaction(r318,h),registration_satisfaction(r319,m),registration_satisfaction(r320,h),registration_satisfaction(r321,l),registration_satisfaction(r322,h),registration_satisfaction(r323,l),registration_satisfaction(r324,h),registration_satisfaction(r325,h),registration_satisfaction(r326,_G139028),registration_satisfaction(r327,m),registration_satisfaction(r328,_G139038),registration_satisfaction(r329,h),registration_satisfaction(r330,_G139048),registration_satisfaction(r331,h),registration_satisfaction(r332,l),registration_satisfaction(r333,h),registration_satisfaction(r334,h),registration_satisfaction(r335,h),registration_satisfaction(r336,_G139078),registration_satisfaction(r337,h),registration_satisfaction(r338,h),registration_satisfaction(r339,h),registration_satisfaction(r340,h),registration_satisfaction(r341,l),registration_satisfaction(r342,h),registration_satisfaction(r343,h),registration_satisfaction(r344,h),registration_satisfaction(r345,m),registration_satisfaction(r346,h),registration_satisfaction(r347,m),registration_satisfaction(r348,m),registration_satisfaction(r349,h),registration_satisfaction(r350,m),registration_satisfaction(r351,h),registration_satisfaction(r352,l),registration_satisfaction(r353,h),registration_satisfaction(r354,h),registration_satisfaction(r355,h),registration_satisfaction(r356,_G139178),registration_satisfaction(r357,m),registration_satisfaction(r358,h),registration_satisfaction(r359,l),registration_satisfaction(r360,h),registration_satisfaction(r361,m),registration_satisfaction(r362,_G139208),registration_satisfaction(r363,l),registration_satisfaction(r364,_G139218),registration_satisfaction(r365,_G139223),registration_satisfaction(r366,h),registration_satisfaction(r367,_G139233),registration_satisfaction(r368,h),registration_satisfaction(r369,_G139243),registration_satisfaction(r370,h),registration_satisfaction(r371,h),registration_satisfaction(r372,h),registration_satisfaction(r373,h),registration_satisfaction(r374,_G139268),registration_satisfaction(r375,_G139273),registration_satisfaction(r376,_G139278),registration_satisfaction(r377,h),registration_satisfaction(r378,h),registration_satisfaction(r379,h),registration_satisfaction(r380,h),registration_satisfaction(r381,m),registration_satisfaction(r382,h),registration_satisfaction(r383,_G139313),registration_satisfaction(r384,m),registration_satisfaction(r385,m),registration_satisfaction(r386,l),registration_satisfaction(r387,h),registration_satisfaction(r388,h),registration_satisfaction(r389,h),registration_satisfaction(r390,h),registration_satisfaction(r391,l),registration_satisfaction(r392,h),registration_satisfaction(r393,h),registration_satisfaction(r394,h),registration_satisfaction(r395,h),registration_satisfaction(r396,_G139378),registration_satisfaction(r397,h),registration_satisfaction(r398,l),registration_satisfaction(r399,h),registration_satisfaction(r400,h),registration_satisfaction(r401,_G139403),registration_satisfaction(r402,_G139408),registration_satisfaction(r403,h),registration_satisfaction(r404,h),registration_satisfaction(r405,_G139423),registration_satisfaction(r406,_G139428),registration_satisfaction(r407,h),registration_satisfaction(r408,h),registration_satisfaction(r409,h),registration_satisfaction(r410,_G139448),registration_satisfaction(r411,l),registration_satisfaction(r412,h),registration_satisfaction(r413,_G139463),registration_satisfaction(r414,h),registration_satisfaction(r415,m),registration_satisfaction(r416,h),registration_satisfaction(r417,_G139483),registration_satisfaction(r418,h),registration_satisfaction(r419,_G139493),registration_satisfaction(r420,h),registration_satisfaction(r421,h),registration_satisfaction(r422,m),registration_satisfaction(r423,h),registration_satisfaction(r424,h),registration_satisfaction(r425,h),registration_satisfaction(r426,_G139528),registration_satisfaction(r427,h),registration_satisfaction(r428,h),registration_satisfaction(r429,h),registration_satisfaction(r430,l),registration_satisfaction(r431,m),registration_satisfaction(r432,h),registration_satisfaction(r433,_G139563),registration_satisfaction(r434,h),registration_satisfaction(r435,_G139573),registration_satisfaction(r436,h),registration_satisfaction(r437,h),registration_satisfaction(r438,l),registration_satisfaction(r439,_G139593),registration_satisfaction(r440,h),registration_satisfaction(r441,h),registration_satisfaction(r442,m),registration_satisfaction(r443,h),registration_satisfaction(r444,h),registration_satisfaction(r445,h),registration_satisfaction(r446,h),registration_satisfaction(r447,_G139633),registration_satisfaction(r448,l),registration_satisfaction(r449,h),registration_satisfaction(r450,h),registration_satisfaction(r451,h),registration_satisfaction(r452,_G139658),registration_satisfaction(r453,h),registration_satisfaction(r454,l),registration_satisfaction(r455,m),registration_satisfaction(r456,h),registration_satisfaction(r457,h),registration_satisfaction(r458,m),registration_satisfaction(r459,m),registration_satisfaction(r460,_G139698),registration_satisfaction(r461,h),registration_satisfaction(r462,h),registration_satisfaction(r463,l),registration_satisfaction(r464,h),registration_satisfaction(r465,_G139723),registration_satisfaction(r466,l),registration_satisfaction(r467,h),registration_satisfaction(r468,h),registration_satisfaction(r469,h),registration_satisfaction(r470,_G139748),registration_satisfaction(r471,h),registration_satisfaction(r472,h),registration_satisfaction(r473,l),registration_satisfaction(r474,m),registration_satisfaction(r475,_G139773),registration_satisfaction(r476,l),registration_satisfaction(r477,_G139783),registration_satisfaction(r478,h),registration_satisfaction(r479,l),registration_satisfaction(r480,_G139798),registration_satisfaction(r481,m),registration_satisfaction(r482,h),registration_satisfaction(r483,h),registration_satisfaction(r484,m),registration_satisfaction(r485,h),registration_satisfaction(r486,h),registration_satisfaction(r487,h),registration_satisfaction(r488,l),registration_satisfaction(r489,m),registration_satisfaction(r490,m),registration_satisfaction(r491,l),registration_satisfaction(r492,h),registration_satisfaction(r493,_G139863),registration_satisfaction(r494,m),registration_satisfaction(r495,h),registration_satisfaction(r496,_G139878),registration_satisfaction(r497,h),registration_satisfaction(r498,l),registration_satisfaction(r499,h),registration_satisfaction(r500,m),registration_satisfaction(r501,h),registration_satisfaction(r502,h),registration_satisfaction(r503,l),registration_satisfaction(r504,m),registration_satisfaction(r505,h),registration_satisfaction(r506,h),registration_satisfaction(r507,h),registration_satisfaction(r508,l),registration_satisfaction(r509,m),registration_satisfaction(r510,h),registration_satisfaction(r511,l),registration_satisfaction(r512,h),registration_satisfaction(r513,h),registration_satisfaction(r514,_G139968),registration_satisfaction(r515,l),registration_satisfaction(r516,h),registration_satisfaction(r517,m),registration_satisfaction(r518,h),registration_satisfaction(r519,h),registration_satisfaction(r520,h),registration_satisfaction(r521,h),registration_satisfaction(r522,h),registration_satisfaction(r523,h),registration_satisfaction(r524,h),registration_satisfaction(r525,l),registration_satisfaction(r526,h),registration_satisfaction(r527,l),registration_satisfaction(r528,_G140038),registration_satisfaction(r529,_G140043),registration_satisfaction(r530,h),registration_satisfaction(r531,_G140053),registration_satisfaction(r532,h),registration_satisfaction(r533,h),registration_satisfaction(r534,l),registration_satisfaction(r535,m),registration_satisfaction(r536,h),registration_satisfaction(r537,_G140083),registration_satisfaction(r538,h),registration_satisfaction(r539,h),registration_satisfaction(r540,m),registration_satisfaction(r541,_G140103),registration_satisfaction(r542,h),registration_satisfaction(r543,_G140113),registration_satisfaction(r544,h),registration_satisfaction(r545,h),registration_satisfaction(r546,h),registration_satisfaction(r547,l),registration_satisfaction(r548,_G140138),registration_satisfaction(r549,h),registration_satisfaction(r550,h),registration_satisfaction(r551,_G140153),registration_satisfaction(r552,m),registration_satisfaction(r553,m),registration_satisfaction(r554,l),registration_satisfaction(r555,m),registration_satisfaction(r556,h),registration_satisfaction(r557,h),registration_satisfaction(r558,h),registration_satisfaction(r559,h),registration_satisfaction(r560,h),registration_satisfaction(r561,_G140203),registration_satisfaction(r562,h),registration_satisfaction(r563,_G140213),registration_satisfaction(r564,h),registration_satisfaction(r565,l),registration_satisfaction(r566,l),registration_satisfaction(r567,h),registration_satisfaction(r568,h),registration_satisfaction(r569,_G140243),registration_satisfaction(r570,_G140248),registration_satisfaction(r571,l),registration_satisfaction(r572,m),registration_satisfaction(r573,h),registration_satisfaction(r574,m),registration_satisfaction(r575,_G140273),registration_satisfaction(r576,_G140278),registration_satisfaction(r577,h),registration_satisfaction(r578,l),registration_satisfaction(r579,h),registration_satisfaction(r580,m),registration_satisfaction(r581,h),registration_satisfaction(r582,h),registration_satisfaction(r583,h),registration_satisfaction(r584,h),registration_satisfaction(r585,h),registration_satisfaction(r586,m),registration_satisfaction(r587,m),registration_satisfaction(r588,l),registration_satisfaction(r589,l),registration_satisfaction(r590,_G140348),registration_satisfaction(r591,h),registration_satisfaction(r592,_G140358),registration_satisfaction(r593,_G140363),registration_satisfaction(r594,_G140368),registration_satisfaction(r595,m),registration_satisfaction(r596,h),registration_satisfaction(r597,h),registration_satisfaction(r598,_G140388),registration_satisfaction(r599,_G140393),registration_satisfaction(r600,m),registration_satisfaction(r601,m),registration_satisfaction(r602,h),registration_satisfaction(r603,_G140413),registration_satisfaction(r604,l),registration_satisfaction(r605,_G140423),registration_satisfaction(r606,h),registration_satisfaction(r607,l),registration_satisfaction(r608,h),registration_satisfaction(r609,h),registration_satisfaction(r610,h),registration_satisfaction(r611,_G140453),registration_satisfaction(r612,l),registration_satisfaction(r613,h),registration_satisfaction(r614,m),registration_satisfaction(r615,l),registration_satisfaction(r616,h),registration_satisfaction(r617,h),registration_satisfaction(r618,h),registration_satisfaction(r619,_G140493),registration_satisfaction(r620,h),registration_satisfaction(r621,_G140503),registration_satisfaction(r622,_G140508),registration_satisfaction(r623,l),registration_satisfaction(r624,m),registration_satisfaction(r625,_G140523),registration_satisfaction(r626,h),registration_satisfaction(r627,h),registration_satisfaction(r628,h),registration_satisfaction(r629,h),registration_satisfaction(r630,_G140548),registration_satisfaction(r631,h),registration_satisfaction(r632,h),registration_satisfaction(r633,h),registration_satisfaction(r634,h),registration_satisfaction(r635,m),registration_satisfaction(r636,l),registration_satisfaction(r637,_G140583),registration_satisfaction(r638,h),registration_satisfaction(r639,h),registration_satisfaction(r640,h),registration_satisfaction(r641,h),registration_satisfaction(r642,h),registration_satisfaction(r643,h),registration_satisfaction(r644,h),registration_satisfaction(r645,h),registration_satisfaction(r646,h),registration_satisfaction(r647,h),registration_satisfaction(r648,h),registration_satisfaction(r649,_G140643),registration_satisfaction(r650,h),registration_satisfaction(r651,_G140653),registration_satisfaction(r652,m),registration_satisfaction(r653,l),registration_satisfaction(r654,_G140668),registration_satisfaction(r655,h),registration_satisfaction(r656,m),registration_satisfaction(r657,h),registration_satisfaction(r658,h),registration_satisfaction(r659,h),registration_satisfaction(r660,h),registration_satisfaction(r661,h),registration_satisfaction(r662,h),registration_satisfaction(r663,h),registration_satisfaction(r664,l),registration_satisfaction(r665,h),registration_satisfaction(r666,_G140728),registration_satisfaction(r667,h),registration_satisfaction(r668,l),registration_satisfaction(r669,h),registration_satisfaction(r670,_G140748),registration_satisfaction(r671,h),registration_satisfaction(r672,_G140758),registration_satisfaction(r673,l),registration_satisfaction(r674,_G140768),registration_satisfaction(r675,l),registration_satisfaction(r676,h),registration_satisfaction(r677,h),registration_satisfaction(r678,h),registration_satisfaction(r679,_G140793),registration_satisfaction(r680,m),registration_satisfaction(r681,h),registration_satisfaction(r682,h),registration_satisfaction(r683,h),registration_satisfaction(r684,_G140818),registration_satisfaction(r685,h),registration_satisfaction(r686,h),registration_satisfaction(r687,l),registration_satisfaction(r688,_G140838),registration_satisfaction(r689,m),registration_satisfaction(r690,h),registration_satisfaction(r691,h),registration_satisfaction(r692,h),registration_satisfaction(r693,h),registration_satisfaction(r694,h),registration_satisfaction(r695,h),registration_satisfaction(r696,h),registration_satisfaction(r697,_G140883),registration_satisfaction(r698,h),registration_satisfaction(r699,h),registration_satisfaction(r700,h),registration_satisfaction(r701,h),registration_satisfaction(r702,h),registration_satisfaction(r703,l),registration_satisfaction(r704,l),registration_satisfaction(r705,_G140923),registration_satisfaction(r706,m),registration_satisfaction(r707,_G140933),registration_satisfaction(r708,l),registration_satisfaction(r709,_G140943),registration_satisfaction(r710,l),registration_satisfaction(r711,h),registration_satisfaction(r712,h),registration_satisfaction(r713,h),registration_satisfaction(r714,m),registration_satisfaction(r715,h),registration_satisfaction(r716,h),registration_satisfaction(r717,h),registration_satisfaction(r718,l),registration_satisfaction(r719,_G140993),registration_satisfaction(r720,h),registration_satisfaction(r721,h),registration_satisfaction(r722,h),registration_satisfaction(r723,h),registration_satisfaction(r724,h),registration_satisfaction(r725,h),registration_satisfaction(r726,h),registration_satisfaction(r727,h),registration_satisfaction(r728,m),registration_satisfaction(r729,h),registration_satisfaction(r730,h),registration_satisfaction(r731,h),registration_satisfaction(r732,_G141058),registration_satisfaction(r733,h),registration_satisfaction(r734,h),registration_satisfaction(r735,h),registration_satisfaction(r736,h),registration_satisfaction(r737,_G141083),registration_satisfaction(r738,h),registration_satisfaction(r739,_G141093),registration_satisfaction(r740,h),registration_satisfaction(r741,h),registration_satisfaction(r742,h),registration_satisfaction(r743,_G141113),registration_satisfaction(r744,h),registration_satisfaction(r745,m),registration_satisfaction(r746,h),registration_satisfaction(r747,h),registration_satisfaction(r748,h),registration_satisfaction(r749,m),registration_satisfaction(r750,h),registration_satisfaction(r751,h),registration_satisfaction(r752,m),registration_satisfaction(r753,m),registration_satisfaction(r754,_G141168),registration_satisfaction(r755,l),registration_satisfaction(r756,h),registration_satisfaction(r757,_G141183),registration_satisfaction(r758,_G141188),registration_satisfaction(r759,l),registration_satisfaction(r760,h),registration_satisfaction(r761,h),registration_satisfaction(r762,m),registration_satisfaction(r763,h),registration_satisfaction(r764,h),registration_satisfaction(r765,h),registration_satisfaction(r766,h),registration_satisfaction(r767,_G141233),registration_satisfaction(r768,l),registration_satisfaction(r769,_G141243),registration_satisfaction(r770,_G141248),registration_satisfaction(r771,m),registration_satisfaction(r772,h),registration_satisfaction(r773,_G141263),registration_satisfaction(r774,h),registration_satisfaction(r775,_G141273),registration_satisfaction(r776,h),registration_satisfaction(r777,l),registration_satisfaction(r778,h),registration_satisfaction(r779,h),registration_satisfaction(r780,_G141298),registration_satisfaction(r781,m),registration_satisfaction(r782,_G141308),registration_satisfaction(r783,m),registration_satisfaction(r784,l),registration_satisfaction(r785,l),registration_satisfaction(r786,_G141328),registration_satisfaction(r787,h),registration_satisfaction(r788,h),registration_satisfaction(r789,h),registration_satisfaction(r790,h),registration_satisfaction(r791,h),registration_satisfaction(r792,_G141358),registration_satisfaction(r793,m),registration_satisfaction(r794,l),registration_satisfaction(r795,h),registration_satisfaction(r796,_G141378),registration_satisfaction(r797,h),registration_satisfaction(r798,m),registration_satisfaction(r799,m),registration_satisfaction(r800,m),registration_satisfaction(r801,h),registration_satisfaction(r802,h),registration_satisfaction(r803,h),registration_satisfaction(r804,h),registration_satisfaction(r805,h),registration_satisfaction(r806,h),registration_satisfaction(r807,l),registration_satisfaction(r808,m),registration_satisfaction(r809,l),registration_satisfaction(r810,h),registration_satisfaction(r811,l),registration_satisfaction(r812,h),registration_satisfaction(r813,m),registration_satisfaction(r814,l),registration_satisfaction(r815,h),registration_satisfaction(r816,h),registration_satisfaction(r817,_G141483),registration_satisfaction(r818,_G141488),registration_satisfaction(r819,h),registration_satisfaction(r820,h),registration_satisfaction(r821,m),registration_satisfaction(r822,m),registration_satisfaction(r823,h),registration_satisfaction(r824,m),registration_satisfaction(r825,l),registration_satisfaction(r826,l),registration_satisfaction(r827,l),registration_satisfaction(r828,m),registration_satisfaction(r829,l),registration_satisfaction(r830,h),registration_satisfaction(r831,h),registration_satisfaction(r832,_G141558),registration_satisfaction(r833,_G141563),registration_satisfaction(r834,h),registration_satisfaction(r835,h),registration_satisfaction(r836,h),registration_satisfaction(r837,h),registration_satisfaction(r838,_G141588),registration_satisfaction(r839,_G141593),registration_satisfaction(r840,m),registration_satisfaction(r841,h),registration_satisfaction(r842,h),registration_satisfaction(r843,_G141613),registration_satisfaction(r844,h),registration_satisfaction(r845,l),registration_satisfaction(r846,l),registration_satisfaction(r847,h),registration_satisfaction(r848,l),registration_satisfaction(r849,h),registration_satisfaction(r850,h),registration_satisfaction(r851,_G141653),registration_satisfaction(r852,h),registration_satisfaction(r853,_G141663),registration_satisfaction(r854,m),registration_satisfaction(r855,h),registration_satisfaction(r856,_G141678)]) \ No newline at end of file diff --git a/packages/CLPBN/horus/benchmarks/school/missing30.yap b/packages/CLPBN/horus/benchmarks/school/missing30.yap new file mode 100644 index 000000000..fc5de678e --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/school/missing30.yap @@ -0,0 +1 @@ +graph([professor_ability(p0,h),professor_ability(p1,h),professor_ability(p2,_G131203),professor_ability(p3,_G131208),professor_ability(p4,h),professor_ability(p5,h),professor_ability(p6,_G131223),professor_ability(p7,_G131228),professor_ability(p8,m),professor_ability(p9,_G131238),professor_ability(p10,m),professor_ability(p11,h),professor_ability(p12,_G131253),professor_ability(p13,m),professor_ability(p14,_G131263),professor_ability(p15,m),professor_ability(p16,m),professor_ability(p17,m),professor_ability(p18,_G131283),professor_ability(p19,_G131288),professor_ability(p20,_G131293),professor_ability(p21,h),professor_ability(p22,m),professor_ability(p23,_G131308),professor_ability(p24,_G131313),professor_ability(p25,m),professor_ability(p26,h),professor_ability(p27,h),professor_ability(p28,h),professor_ability(p29,m),professor_ability(p30,m),professor_ability(p31,h),professor_popularity(p0,_G131353),professor_popularity(p1,h),professor_popularity(p2,l),professor_popularity(p3,_G131368),professor_popularity(p4,h),professor_popularity(p5,_G131378),professor_popularity(p6,_G131383),professor_popularity(p7,l),professor_popularity(p8,_G131393),professor_popularity(p9,_G131398),professor_popularity(p10,l),professor_popularity(p11,h),professor_popularity(p12,h),professor_popularity(p13,_G131418),professor_popularity(p14,m),professor_popularity(p15,h),professor_popularity(p16,m),professor_popularity(p17,h),professor_popularity(p18,l),professor_popularity(p19,h),professor_popularity(p20,_G131453),professor_popularity(p21,h),professor_popularity(p22,h),professor_popularity(p23,l),professor_popularity(p24,l),professor_popularity(p25,l),professor_popularity(p26,m),professor_popularity(p27,h),professor_popularity(p28,h),professor_popularity(p29,_G131498),professor_popularity(p30,m),professor_popularity(p31,h),registration_grade(r0,a),registration_grade(r1,c),registration_grade(r2,c),registration_grade(r3,c),registration_grade(r4,_G131533),registration_grade(r5,c),registration_grade(r6,_G131543),registration_grade(r7,_G131548),registration_grade(r8,b),registration_grade(r9,_G131558),registration_grade(r10,a),registration_grade(r11,a),registration_grade(r12,a),registration_grade(r13,_G131578),registration_grade(r14,b),registration_grade(r15,_G131588),registration_grade(r16,a),registration_grade(r17,_G131598),registration_grade(r18,c),registration_grade(r19,c),registration_grade(r20,c),registration_grade(r21,a),registration_grade(r22,a),registration_grade(r23,_G131628),registration_grade(r24,b),registration_grade(r25,_G131638),registration_grade(r26,a),registration_grade(r27,b),registration_grade(r28,c),registration_grade(r29,b),registration_grade(r30,c),registration_grade(r31,_G131668),registration_grade(r32,c),registration_grade(r33,_G131678),registration_grade(r34,c),registration_grade(r35,c),registration_grade(r36,_G131693),registration_grade(r37,a),registration_grade(r38,_G131703),registration_grade(r39,_G131708),registration_grade(r40,_G131713),registration_grade(r41,c),registration_grade(r42,_G131723),registration_grade(r43,a),registration_grade(r44,a),registration_grade(r45,a),registration_grade(r46,a),registration_grade(r47,b),registration_grade(r48,b),registration_grade(r49,b),registration_grade(r50,b),registration_grade(r51,_G131768),registration_grade(r52,_G131773),registration_grade(r53,a),registration_grade(r54,b),registration_grade(r55,a),registration_grade(r56,_G131793),registration_grade(r57,c),registration_grade(r58,a),registration_grade(r59,c),registration_grade(r60,_G131813),registration_grade(r61,_G131818),registration_grade(r62,a),registration_grade(r63,b),registration_grade(r64,b),registration_grade(r65,b),registration_grade(r66,b),registration_grade(r67,b),registration_grade(r68,a),registration_grade(r69,b),registration_grade(r70,c),registration_grade(r71,b),registration_grade(r72,a),registration_grade(r73,b),registration_grade(r74,_G131883),registration_grade(r75,b),registration_grade(r76,_G131893),registration_grade(r77,a),registration_grade(r78,b),registration_grade(r79,a),registration_grade(r80,b),registration_grade(r81,b),registration_grade(r82,_G131923),registration_grade(r83,_G131928),registration_grade(r84,c),registration_grade(r85,b),registration_grade(r86,b),registration_grade(r87,b),registration_grade(r88,c),registration_grade(r89,c),registration_grade(r90,_G131963),registration_grade(r91,a),registration_grade(r92,d),registration_grade(r93,b),registration_grade(r94,c),registration_grade(r95,b),registration_grade(r96,a),registration_grade(r97,a),registration_grade(r98,b),registration_grade(r99,_G132008),registration_grade(r100,_G132013),registration_grade(r101,a),registration_grade(r102,a),registration_grade(r103,b),registration_grade(r104,b),registration_grade(r105,c),registration_grade(r106,b),registration_grade(r107,_G132048),registration_grade(r108,b),registration_grade(r109,b),registration_grade(r110,a),registration_grade(r111,_G132068),registration_grade(r112,_G132073),registration_grade(r113,c),registration_grade(r114,c),registration_grade(r115,d),registration_grade(r116,_G132093),registration_grade(r117,c),registration_grade(r118,a),registration_grade(r119,b),registration_grade(r120,_G132113),registration_grade(r121,c),registration_grade(r122,b),registration_grade(r123,a),registration_grade(r124,a),registration_grade(r125,b),registration_grade(r126,_G132143),registration_grade(r127,_G132148),registration_grade(r128,_G132153),registration_grade(r129,_G132158),registration_grade(r130,_G132163),registration_grade(r131,_G132168),registration_grade(r132,b),registration_grade(r133,_G132178),registration_grade(r134,a),registration_grade(r135,b),registration_grade(r136,a),registration_grade(r137,_G132198),registration_grade(r138,a),registration_grade(r139,a),registration_grade(r140,_G132213),registration_grade(r141,b),registration_grade(r142,b),registration_grade(r143,b),registration_grade(r144,_G132233),registration_grade(r145,b),registration_grade(r146,_G132243),registration_grade(r147,a),registration_grade(r148,a),registration_grade(r149,a),registration_grade(r150,_G132263),registration_grade(r151,a),registration_grade(r152,_G132273),registration_grade(r153,_G132278),registration_grade(r154,a),registration_grade(r155,c),registration_grade(r156,b),registration_grade(r157,b),registration_grade(r158,_G132303),registration_grade(r159,b),registration_grade(r160,a),registration_grade(r161,_G132318),registration_grade(r162,b),registration_grade(r163,_G132328),registration_grade(r164,b),registration_grade(r165,_G132338),registration_grade(r166,c),registration_grade(r167,_G132348),registration_grade(r168,a),registration_grade(r169,_G132358),registration_grade(r170,a),registration_grade(r171,a),registration_grade(r172,c),registration_grade(r173,_G132378),registration_grade(r174,a),registration_grade(r175,b),registration_grade(r176,_G132393),registration_grade(r177,c),registration_grade(r178,_G132403),registration_grade(r179,d),registration_grade(r180,c),registration_grade(r181,a),registration_grade(r182,b),registration_grade(r183,a),registration_grade(r184,a),registration_grade(r185,_G132438),registration_grade(r186,c),registration_grade(r187,_G132448),registration_grade(r188,a),registration_grade(r189,a),registration_grade(r190,a),registration_grade(r191,b),registration_grade(r192,b),registration_grade(r193,c),registration_grade(r194,b),registration_grade(r195,c),registration_grade(r196,b),registration_grade(r197,a),registration_grade(r198,a),registration_grade(r199,b),registration_grade(r200,b),registration_grade(r201,_G132518),registration_grade(r202,a),registration_grade(r203,_G132528),registration_grade(r204,b),registration_grade(r205,a),registration_grade(r206,a),registration_grade(r207,a),registration_grade(r208,c),registration_grade(r209,b),registration_grade(r210,a),registration_grade(r211,d),registration_grade(r212,_G132573),registration_grade(r213,_G132578),registration_grade(r214,_G132583),registration_grade(r215,a),registration_grade(r216,b),registration_grade(r217,a),registration_grade(r218,b),registration_grade(r219,a),registration_grade(r220,a),registration_grade(r221,b),registration_grade(r222,c),registration_grade(r223,a),registration_grade(r224,_G132633),registration_grade(r225,b),registration_grade(r226,d),registration_grade(r227,b),registration_grade(r228,_G132653),registration_grade(r229,b),registration_grade(r230,_G132663),registration_grade(r231,c),registration_grade(r232,a),registration_grade(r233,_G132678),registration_grade(r234,b),registration_grade(r235,_G132688),registration_grade(r236,b),registration_grade(r237,c),registration_grade(r238,d),registration_grade(r239,b),registration_grade(r240,b),registration_grade(r241,_G132718),registration_grade(r242,b),registration_grade(r243,a),registration_grade(r244,b),registration_grade(r245,_G132738),registration_grade(r246,_G132743),registration_grade(r247,_G132748),registration_grade(r248,b),registration_grade(r249,a),registration_grade(r250,a),registration_grade(r251,a),registration_grade(r252,b),registration_grade(r253,a),registration_grade(r254,b),registration_grade(r255,a),registration_grade(r256,_G132793),registration_grade(r257,b),registration_grade(r258,a),registration_grade(r259,_G132808),registration_grade(r260,b),registration_grade(r261,a),registration_grade(r262,a),registration_grade(r263,a),registration_grade(r264,c),registration_grade(r265,a),registration_grade(r266,a),registration_grade(r267,a),registration_grade(r268,_G132853),registration_grade(r269,a),registration_grade(r270,c),registration_grade(r271,b),registration_grade(r272,c),registration_grade(r273,b),registration_grade(r274,c),registration_grade(r275,_G132888),registration_grade(r276,a),registration_grade(r277,_G132898),registration_grade(r278,_G132903),registration_grade(r279,_G132908),registration_grade(r280,b),registration_grade(r281,b),registration_grade(r282,d),registration_grade(r283,a),registration_grade(r284,b),registration_grade(r285,b),registration_grade(r286,a),registration_grade(r287,b),registration_grade(r288,_G132953),registration_grade(r289,_G132958),registration_grade(r290,_G132963),registration_grade(r291,c),registration_grade(r292,b),registration_grade(r293,_G132978),registration_grade(r294,a),registration_grade(r295,a),registration_grade(r296,b),registration_grade(r297,a),registration_grade(r298,a),registration_grade(r299,a),registration_grade(r300,_G133013),registration_grade(r301,b),registration_grade(r302,b),registration_grade(r303,a),registration_grade(r304,_G133033),registration_grade(r305,b),registration_grade(r306,b),registration_grade(r307,c),registration_grade(r308,c),registration_grade(r309,_G133058),registration_grade(r310,a),registration_grade(r311,a),registration_grade(r312,a),registration_grade(r313,a),registration_grade(r314,c),registration_grade(r315,c),registration_grade(r316,c),registration_grade(r317,c),registration_grade(r318,c),registration_grade(r319,c),registration_grade(r320,b),registration_grade(r321,b),registration_grade(r322,a),registration_grade(r323,c),registration_grade(r324,b),registration_grade(r325,_G133138),registration_grade(r326,a),registration_grade(r327,c),registration_grade(r328,b),registration_grade(r329,a),registration_grade(r330,b),registration_grade(r331,_G133168),registration_grade(r332,a),registration_grade(r333,_G133178),registration_grade(r334,_G133183),registration_grade(r335,d),registration_grade(r336,b),registration_grade(r337,_G133198),registration_grade(r338,_G133203),registration_grade(r339,a),registration_grade(r340,_G133213),registration_grade(r341,b),registration_grade(r342,_G133223),registration_grade(r343,a),registration_grade(r344,_G133233),registration_grade(r345,_G133238),registration_grade(r346,_G133243),registration_grade(r347,_G133248),registration_grade(r348,a),registration_grade(r349,a),registration_grade(r350,b),registration_grade(r351,b),registration_grade(r352,d),registration_grade(r353,c),registration_grade(r354,c),registration_grade(r355,_G133288),registration_grade(r356,b),registration_grade(r357,_G133298),registration_grade(r358,a),registration_grade(r359,a),registration_grade(r360,_G133313),registration_grade(r361,b),registration_grade(r362,c),registration_grade(r363,c),registration_grade(r364,b),registration_grade(r365,b),registration_grade(r366,b),registration_grade(r367,_G133348),registration_grade(r368,a),registration_grade(r369,c),registration_grade(r370,b),registration_grade(r371,_G133368),registration_grade(r372,a),registration_grade(r373,_G133378),registration_grade(r374,b),registration_grade(r375,b),registration_grade(r376,a),registration_grade(r377,a),registration_grade(r378,a),registration_grade(r379,_G133408),registration_grade(r380,a),registration_grade(r381,c),registration_grade(r382,a),registration_grade(r383,a),registration_grade(r384,b),registration_grade(r385,b),registration_grade(r386,d),registration_grade(r387,_G133448),registration_grade(r388,a),registration_grade(r389,a),registration_grade(r390,a),registration_grade(r391,b),registration_grade(r392,b),registration_grade(r393,b),registration_grade(r394,c),registration_grade(r395,b),registration_grade(r396,b),registration_grade(r397,a),registration_grade(r398,_G133503),registration_grade(r399,c),registration_grade(r400,a),registration_grade(r401,c),registration_grade(r402,a),registration_grade(r403,a),registration_grade(r404,_G133533),registration_grade(r405,_G133538),registration_grade(r406,a),registration_grade(r407,b),registration_grade(r408,_G133553),registration_grade(r409,a),registration_grade(r410,b),registration_grade(r411,b),registration_grade(r412,a),registration_grade(r413,a),registration_grade(r414,_G133583),registration_grade(r415,b),registration_grade(r416,b),registration_grade(r417,d),registration_grade(r418,a),registration_grade(r419,a),registration_grade(r420,a),registration_grade(r421,_G133618),registration_grade(r422,_G133623),registration_grade(r423,_G133628),registration_grade(r424,a),registration_grade(r425,b),registration_grade(r426,_G133643),registration_grade(r427,c),registration_grade(r428,c),registration_grade(r429,_G133658),registration_grade(r430,b),registration_grade(r431,d),registration_grade(r432,_G133673),registration_grade(r433,a),registration_grade(r434,a),registration_grade(r435,_G133688),registration_grade(r436,a),registration_grade(r437,c),registration_grade(r438,b),registration_grade(r439,b),registration_grade(r440,c),registration_grade(r441,a),registration_grade(r442,_G133723),registration_grade(r443,a),registration_grade(r444,a),registration_grade(r445,_G133738),registration_grade(r446,_G133743),registration_grade(r447,d),registration_grade(r448,_G133753),registration_grade(r449,b),registration_grade(r450,_G133763),registration_grade(r451,_G133768),registration_grade(r452,b),registration_grade(r453,_G133778),registration_grade(r454,_G133783),registration_grade(r455,_G133788),registration_grade(r456,c),registration_grade(r457,_G133798),registration_grade(r458,b),registration_grade(r459,_G133808),registration_grade(r460,_G133813),registration_grade(r461,b),registration_grade(r462,a),registration_grade(r463,d),registration_grade(r464,_G133833),registration_grade(r465,a),registration_grade(r466,b),registration_grade(r467,b),registration_grade(r468,_G133853),registration_grade(r469,a),registration_grade(r470,c),registration_grade(r471,b),registration_grade(r472,a),registration_grade(r473,c),registration_grade(r474,b),registration_grade(r475,a),registration_grade(r476,_G133893),registration_grade(r477,b),registration_grade(r478,_G133903),registration_grade(r479,b),registration_grade(r480,a),registration_grade(r481,b),registration_grade(r482,b),registration_grade(r483,a),registration_grade(r484,a),registration_grade(r485,a),registration_grade(r486,a),registration_grade(r487,_G133948),registration_grade(r488,a),registration_grade(r489,b),registration_grade(r490,_G133963),registration_grade(r491,c),registration_grade(r492,b),registration_grade(r493,_G133978),registration_grade(r494,b),registration_grade(r495,_G133988),registration_grade(r496,a),registration_grade(r497,c),registration_grade(r498,b),registration_grade(r499,c),registration_grade(r500,b),registration_grade(r501,a),registration_grade(r502,a),registration_grade(r503,_G134028),registration_grade(r504,_G134033),registration_grade(r505,_G134038),registration_grade(r506,c),registration_grade(r507,_G134048),registration_grade(r508,c),registration_grade(r509,b),registration_grade(r510,a),registration_grade(r511,c),registration_grade(r512,b),registration_grade(r513,b),registration_grade(r514,_G134083),registration_grade(r515,c),registration_grade(r516,a),registration_grade(r517,_G134098),registration_grade(r518,_G134103),registration_grade(r519,_G134108),registration_grade(r520,b),registration_grade(r521,a),registration_grade(r522,_G134123),registration_grade(r523,a),registration_grade(r524,b),registration_grade(r525,c),registration_grade(r526,c),registration_grade(r527,c),registration_grade(r528,_G134153),registration_grade(r529,b),registration_grade(r530,a),registration_grade(r531,b),registration_grade(r532,a),registration_grade(r533,_G134178),registration_grade(r534,b),registration_grade(r535,c),registration_grade(r536,_G134193),registration_grade(r537,a),registration_grade(r538,_G134203),registration_grade(r539,_G134208),registration_grade(r540,_G134213),registration_grade(r541,c),registration_grade(r542,a),registration_grade(r543,a),registration_grade(r544,b),registration_grade(r545,_G134238),registration_grade(r546,b),registration_grade(r547,c),registration_grade(r548,_G134253),registration_grade(r549,b),registration_grade(r550,_G134263),registration_grade(r551,a),registration_grade(r552,c),registration_grade(r553,_G134278),registration_grade(r554,_G134283),registration_grade(r555,b),registration_grade(r556,a),registration_grade(r557,a),registration_grade(r558,a),registration_grade(r559,b),registration_grade(r560,_G134313),registration_grade(r561,_G134318),registration_grade(r562,a),registration_grade(r563,a),registration_grade(r564,_G134333),registration_grade(r565,_G134338),registration_grade(r566,c),registration_grade(r567,a),registration_grade(r568,a),registration_grade(r569,_G134358),registration_grade(r570,c),registration_grade(r571,c),registration_grade(r572,b),registration_grade(r573,a),registration_grade(r574,_G134383),registration_grade(r575,a),registration_grade(r576,a),registration_grade(r577,a),registration_grade(r578,b),registration_grade(r579,a),registration_grade(r580,b),registration_grade(r581,a),registration_grade(r582,a),registration_grade(r583,a),registration_grade(r584,a),registration_grade(r585,c),registration_grade(r586,b),registration_grade(r587,_G134448),registration_grade(r588,c),registration_grade(r589,c),registration_grade(r590,b),registration_grade(r591,c),registration_grade(r592,_G134473),registration_grade(r593,_G134478),registration_grade(r594,c),registration_grade(r595,_G134488),registration_grade(r596,_G134493),registration_grade(r597,a),registration_grade(r598,a),registration_grade(r599,a),registration_grade(r600,a),registration_grade(r601,_G134518),registration_grade(r602,_G134523),registration_grade(r603,_G134528),registration_grade(r604,c),registration_grade(r605,a),registration_grade(r606,a),registration_grade(r607,_G134548),registration_grade(r608,_G134553),registration_grade(r609,_G134558),registration_grade(r610,a),registration_grade(r611,a),registration_grade(r612,c),registration_grade(r613,_G134578),registration_grade(r614,d),registration_grade(r615,_G134588),registration_grade(r616,a),registration_grade(r617,a),registration_grade(r618,b),registration_grade(r619,_G134608),registration_grade(r620,_G134613),registration_grade(r621,_G134618),registration_grade(r622,b),registration_grade(r623,b),registration_grade(r624,_G134633),registration_grade(r625,_G134638),registration_grade(r626,a),registration_grade(r627,b),registration_grade(r628,a),registration_grade(r629,b),registration_grade(r630,c),registration_grade(r631,a),registration_grade(r632,a),registration_grade(r633,_G134678),registration_grade(r634,_G134683),registration_grade(r635,b),registration_grade(r636,d),registration_grade(r637,c),registration_grade(r638,a),registration_grade(r639,b),registration_grade(r640,c),registration_grade(r641,_G134718),registration_grade(r642,c),registration_grade(r643,a),registration_grade(r644,a),registration_grade(r645,b),registration_grade(r646,b),registration_grade(r647,_G134748),registration_grade(r648,a),registration_grade(r649,_G134758),registration_grade(r650,c),registration_grade(r651,_G134768),registration_grade(r652,_G134773),registration_grade(r653,_G134778),registration_grade(r654,b),registration_grade(r655,a),registration_grade(r656,_G134793),registration_grade(r657,_G134798),registration_grade(r658,_G134803),registration_grade(r659,a),registration_grade(r660,a),registration_grade(r661,c),registration_grade(r662,_G134823),registration_grade(r663,_G134828),registration_grade(r664,_G134833),registration_grade(r665,a),registration_grade(r666,b),registration_grade(r667,b),registration_grade(r668,_G134853),registration_grade(r669,b),registration_grade(r670,a),registration_grade(r671,_G134868),registration_grade(r672,_G134873),registration_grade(r673,a),registration_grade(r674,a),registration_grade(r675,b),registration_grade(r676,_G134893),registration_grade(r677,a),registration_grade(r678,a),registration_grade(r679,a),registration_grade(r680,c),registration_grade(r681,_G134918),registration_grade(r682,_G134923),registration_grade(r683,b),registration_grade(r684,_G134933),registration_grade(r685,a),registration_grade(r686,b),registration_grade(r687,_G134948),registration_grade(r688,c),registration_grade(r689,b),registration_grade(r690,a),registration_grade(r691,_G134968),registration_grade(r692,a),registration_grade(r693,b),registration_grade(r694,_G134983),registration_grade(r695,a),registration_grade(r696,_G134993),registration_grade(r697,c),registration_grade(r698,_G135003),registration_grade(r699,a),registration_grade(r700,a),registration_grade(r701,a),registration_grade(r702,a),registration_grade(r703,c),registration_grade(r704,c),registration_grade(r705,_G135038),registration_grade(r706,b),registration_grade(r707,a),registration_grade(r708,b),registration_grade(r709,_G135058),registration_grade(r710,b),registration_grade(r711,_G135068),registration_grade(r712,c),registration_grade(r713,a),registration_grade(r714,_G135083),registration_grade(r715,a),registration_grade(r716,_G135093),registration_grade(r717,a),registration_grade(r718,_G135103),registration_grade(r719,c),registration_grade(r720,_G135113),registration_grade(r721,b),registration_grade(r722,_G135123),registration_grade(r723,b),registration_grade(r724,a),registration_grade(r725,c),registration_grade(r726,a),registration_grade(r727,a),registration_grade(r728,_G135153),registration_grade(r729,b),registration_grade(r730,_G135163),registration_grade(r731,a),registration_grade(r732,_G135173),registration_grade(r733,a),registration_grade(r734,b),registration_grade(r735,b),registration_grade(r736,a),registration_grade(r737,b),registration_grade(r738,b),registration_grade(r739,_G135208),registration_grade(r740,_G135213),registration_grade(r741,a),registration_grade(r742,_G135223),registration_grade(r743,d),registration_grade(r744,a),registration_grade(r745,b),registration_grade(r746,a),registration_grade(r747,a),registration_grade(r748,b),registration_grade(r749,c),registration_grade(r750,a),registration_grade(r751,_G135268),registration_grade(r752,_G135273),registration_grade(r753,c),registration_grade(r754,c),registration_grade(r755,c),registration_grade(r756,_G135293),registration_grade(r757,_G135298),registration_grade(r758,b),registration_grade(r759,_G135308),registration_grade(r760,a),registration_grade(r761,a),registration_grade(r762,b),registration_grade(r763,a),registration_grade(r764,_G135333),registration_grade(r765,a),registration_grade(r766,c),registration_grade(r767,c),registration_grade(r768,c),registration_grade(r769,_G135358),registration_grade(r770,b),registration_grade(r771,b),registration_grade(r772,a),registration_grade(r773,b),registration_grade(r774,_G135383),registration_grade(r775,a),registration_grade(r776,_G135393),registration_grade(r777,c),registration_grade(r778,_G135403),registration_grade(r779,b),registration_grade(r780,a),registration_grade(r781,b),registration_grade(r782,_G135423),registration_grade(r783,c),registration_grade(r784,c),registration_grade(r785,c),registration_grade(r786,c),registration_grade(r787,a),registration_grade(r788,a),registration_grade(r789,c),registration_grade(r790,b),registration_grade(r791,b),registration_grade(r792,a),registration_grade(r793,a),registration_grade(r794,_G135483),registration_grade(r795,a),registration_grade(r796,_G135493),registration_grade(r797,a),registration_grade(r798,_G135503),registration_grade(r799,c),registration_grade(r800,b),registration_grade(r801,b),registration_grade(r802,a),registration_grade(r803,b),registration_grade(r804,a),registration_grade(r805,_G135538),registration_grade(r806,_G135543),registration_grade(r807,a),registration_grade(r808,b),registration_grade(r809,_G135558),registration_grade(r810,b),registration_grade(r811,_G135568),registration_grade(r812,c),registration_grade(r813,c),registration_grade(r814,_G135583),registration_grade(r815,c),registration_grade(r816,b),registration_grade(r817,a),registration_grade(r818,b),registration_grade(r819,_G135608),registration_grade(r820,d),registration_grade(r821,b),registration_grade(r822,a),registration_grade(r823,_G135628),registration_grade(r824,c),registration_grade(r825,b),registration_grade(r826,b),registration_grade(r827,c),registration_grade(r828,b),registration_grade(r829,b),registration_grade(r830,a),registration_grade(r831,a),registration_grade(r832,b),registration_grade(r833,b),registration_grade(r834,_G135683),registration_grade(r835,a),registration_grade(r836,a),registration_grade(r837,_G135698),registration_grade(r838,c),registration_grade(r839,b),registration_grade(r840,b),registration_grade(r841,a),registration_grade(r842,a),registration_grade(r843,b),registration_grade(r844,a),registration_grade(r845,c),registration_grade(r846,b),registration_grade(r847,b),registration_grade(r848,_G135753),registration_grade(r849,b),registration_grade(r850,b),registration_grade(r851,b),registration_grade(r852,c),registration_grade(r853,b),registration_grade(r854,c),registration_grade(r855,d),registration_grade(r856,c),student_intelligence(s0,l),student_intelligence(s1,l),student_intelligence(s2,_G135808),student_intelligence(s3,_G135813),student_intelligence(s4,h),student_intelligence(s5,h),student_intelligence(s6,m),student_intelligence(s7,_G135833),student_intelligence(s8,h),student_intelligence(s9,m),student_intelligence(s10,_G135848),student_intelligence(s11,m),student_intelligence(s12,h),student_intelligence(s13,h),student_intelligence(s14,h),student_intelligence(s15,m),student_intelligence(s16,_G135878),student_intelligence(s17,m),student_intelligence(s18,_G135888),student_intelligence(s19,h),student_intelligence(s20,m),student_intelligence(s21,h),student_intelligence(s22,h),student_intelligence(s23,h),student_intelligence(s24,m),student_intelligence(s25,h),student_intelligence(s26,_G135928),student_intelligence(s27,m),student_intelligence(s28,m),student_intelligence(s29,_G135943),student_intelligence(s30,h),student_intelligence(s31,m),student_intelligence(s32,m),student_intelligence(s33,h),student_intelligence(s34,l),student_intelligence(s35,_G135973),student_intelligence(s36,l),student_intelligence(s37,m),student_intelligence(s38,h),student_intelligence(s39,_G135993),student_intelligence(s40,h),student_intelligence(s41,m),student_intelligence(s42,_G136008),student_intelligence(s43,h),student_intelligence(s44,_G136018),student_intelligence(s45,h),student_intelligence(s46,l),student_intelligence(s47,_G136033),student_intelligence(s48,m),student_intelligence(s49,m),student_intelligence(s50,h),student_intelligence(s51,m),student_intelligence(s52,_G136058),student_intelligence(s53,m),student_intelligence(s54,_G136068),student_intelligence(s55,h),student_intelligence(s56,l),student_intelligence(s57,m),student_intelligence(s58,_G136088),student_intelligence(s59,_G136093),student_intelligence(s60,m),student_intelligence(s61,_G136103),student_intelligence(s62,m),student_intelligence(s63,_G136113),student_intelligence(s64,_G136118),student_intelligence(s65,m),student_intelligence(s66,_G136128),student_intelligence(s67,m),student_intelligence(s68,h),student_intelligence(s69,h),student_intelligence(s70,l),student_intelligence(s71,m),student_intelligence(s72,_G136158),student_intelligence(s73,m),student_intelligence(s74,_G136168),student_intelligence(s75,_G136173),student_intelligence(s76,h),student_intelligence(s77,h),student_intelligence(s78,h),student_intelligence(s79,_G136193),student_intelligence(s80,_G136198),student_intelligence(s81,l),student_intelligence(s82,h),student_intelligence(s83,_G136213),student_intelligence(s84,_G136218),student_intelligence(s85,h),student_intelligence(s86,_G136228),student_intelligence(s87,h),student_intelligence(s88,_G136238),student_intelligence(s89,m),student_intelligence(s90,h),student_intelligence(s91,m),student_intelligence(s92,h),student_intelligence(s93,l),student_intelligence(s94,_G136268),student_intelligence(s95,h),student_intelligence(s96,m),student_intelligence(s97,h),student_intelligence(s98,_G136288),student_intelligence(s99,l),student_intelligence(s100,h),student_intelligence(s101,h),student_intelligence(s102,_G136308),student_intelligence(s103,_G136313),student_intelligence(s104,l),student_intelligence(s105,m),student_intelligence(s106,_G136328),student_intelligence(s107,_G136333),student_intelligence(s108,_G136338),student_intelligence(s109,m),student_intelligence(s110,_G136348),student_intelligence(s111,_G136353),student_intelligence(s112,m),student_intelligence(s113,h),student_intelligence(s114,m),student_intelligence(s115,_G136373),student_intelligence(s116,_G136378),student_intelligence(s117,m),student_intelligence(s118,m),student_intelligence(s119,h),student_intelligence(s120,h),student_intelligence(s121,h),student_intelligence(s122,_G136408),student_intelligence(s123,_G136413),student_intelligence(s124,h),student_intelligence(s125,_G136423),student_intelligence(s126,m),student_intelligence(s127,m),student_intelligence(s128,m),student_intelligence(s129,h),student_intelligence(s130,m),student_intelligence(s131,h),student_intelligence(s132,h),student_intelligence(s133,_G136463),student_intelligence(s134,h),student_intelligence(s135,_G136473),student_intelligence(s136,m),student_intelligence(s137,m),student_intelligence(s138,_G136488),student_intelligence(s139,h),student_intelligence(s140,h),student_intelligence(s141,m),student_intelligence(s142,m),student_intelligence(s143,_G136513),student_intelligence(s144,h),student_intelligence(s145,_G136523),student_intelligence(s146,m),student_intelligence(s147,_G136533),student_intelligence(s148,m),student_intelligence(s149,h),student_intelligence(s150,l),student_intelligence(s151,_G136553),student_intelligence(s152,_G136558),student_intelligence(s153,m),student_intelligence(s154,m),student_intelligence(s155,h),student_intelligence(s156,m),student_intelligence(s157,_G136583),student_intelligence(s158,h),student_intelligence(s159,h),student_intelligence(s160,m),student_intelligence(s161,_G136603),student_intelligence(s162,h),student_intelligence(s163,_G136613),student_intelligence(s164,_G136618),student_intelligence(s165,m),student_intelligence(s166,m),student_intelligence(s167,h),student_intelligence(s168,_G136638),student_intelligence(s169,m),student_intelligence(s170,m),student_intelligence(s171,m),student_intelligence(s172,_G136658),student_intelligence(s173,_G136663),student_intelligence(s174,h),student_intelligence(s175,_G136673),student_intelligence(s176,_G136678),student_intelligence(s177,_G136683),student_intelligence(s178,_G136688),student_intelligence(s179,m),student_intelligence(s180,m),student_intelligence(s181,h),student_intelligence(s182,_G136708),student_intelligence(s183,h),student_intelligence(s184,h),student_intelligence(s185,m),student_intelligence(s186,_G136728),student_intelligence(s187,m),student_intelligence(s188,h),student_intelligence(s189,m),student_intelligence(s190,h),student_intelligence(s191,l),student_intelligence(s192,h),student_intelligence(s193,m),student_intelligence(s194,m),student_intelligence(s195,m),student_intelligence(s196,_G136778),student_intelligence(s197,_G136783),student_intelligence(s198,h),student_intelligence(s199,m),student_intelligence(s200,h),student_intelligence(s201,l),student_intelligence(s202,h),student_intelligence(s203,m),student_intelligence(s204,_G136818),student_intelligence(s205,h),student_intelligence(s206,h),student_intelligence(s207,h),student_intelligence(s208,m),student_intelligence(s209,_G136843),student_intelligence(s210,_G136848),student_intelligence(s211,m),student_intelligence(s212,m),student_intelligence(s213,_G136863),student_intelligence(s214,h),student_intelligence(s215,m),student_intelligence(s216,h),student_intelligence(s217,m),student_intelligence(s218,h),student_intelligence(s219,h),student_intelligence(s220,h),student_intelligence(s221,h),student_intelligence(s222,h),student_intelligence(s223,m),student_intelligence(s224,l),student_intelligence(s225,l),student_intelligence(s226,m),student_intelligence(s227,h),student_intelligence(s228,h),student_intelligence(s229,_G136943),student_intelligence(s230,_G136948),student_intelligence(s231,h),student_intelligence(s232,_G136958),student_intelligence(s233,_G136963),student_intelligence(s234,_G136968),student_intelligence(s235,_G136973),student_intelligence(s236,h),student_intelligence(s237,h),student_intelligence(s238,h),student_intelligence(s239,h),student_intelligence(s240,h),student_intelligence(s241,m),student_intelligence(s242,l),student_intelligence(s243,h),student_intelligence(s244,h),student_intelligence(s245,l),student_intelligence(s246,_G137028),student_intelligence(s247,h),student_intelligence(s248,m),student_intelligence(s249,_G137043),student_intelligence(s250,_G137048),student_intelligence(s251,_G137053),student_intelligence(s252,_G137058),student_intelligence(s253,_G137063),student_intelligence(s254,_G137068),student_intelligence(s255,m),course_difficulty(c0,h),course_difficulty(c1,m),course_difficulty(c2,l),course_difficulty(c3,_G137093),course_difficulty(c4,m),course_difficulty(c5,l),course_difficulty(c6,m),course_difficulty(c7,h),course_difficulty(c8,h),course_difficulty(c9,l),course_difficulty(c10,m),course_difficulty(c11,_G137133),course_difficulty(c12,m),course_difficulty(c13,h),course_difficulty(c14,m),course_difficulty(c15,h),course_difficulty(c16,l),course_difficulty(c17,h),course_difficulty(c18,_G137168),course_difficulty(c19,l),course_difficulty(c20,m),course_difficulty(c21,h),course_difficulty(c22,m),course_difficulty(c23,_G137193),course_difficulty(c24,h),course_difficulty(c25,m),course_difficulty(c26,l),course_difficulty(c27,h),course_difficulty(c28,m),course_difficulty(c29,m),course_difficulty(c30,m),course_difficulty(c31,m),course_difficulty(c32,_G137238),course_difficulty(c33,m),course_difficulty(c34,l),course_difficulty(c35,h),course_difficulty(c36,h),course_difficulty(c37,m),course_difficulty(c38,m),course_difficulty(c39,_G137273),course_difficulty(c40,_G137278),course_difficulty(c41,m),course_difficulty(c42,_G137288),course_difficulty(c43,m),course_difficulty(c44,_G137298),course_difficulty(c45,_G137303),course_difficulty(c46,_G137308),course_difficulty(c47,m),course_difficulty(c48,m),course_difficulty(c49,l),course_difficulty(c50,m),course_difficulty(c51,h),course_difficulty(c52,h),course_difficulty(c53,_G137343),course_difficulty(c54,_G137348),course_difficulty(c55,h),course_difficulty(c56,m),course_difficulty(c57,m),course_difficulty(c58,h),course_difficulty(c59,m),course_difficulty(c60,h),course_difficulty(c61,m),course_difficulty(c62,_G137388),course_difficulty(c63,l),registration_satisfaction(r0,h),registration_satisfaction(r1,l),registration_satisfaction(r2,h),registration_satisfaction(r3,m),registration_satisfaction(r4,_G137418),registration_satisfaction(r5,h),registration_satisfaction(r6,h),registration_satisfaction(r7,_G137433),registration_satisfaction(r8,l),registration_satisfaction(r9,_G137443),registration_satisfaction(r10,h),registration_satisfaction(r11,h),registration_satisfaction(r12,_G137458),registration_satisfaction(r13,_G137463),registration_satisfaction(r14,m),registration_satisfaction(r15,h),registration_satisfaction(r16,h),registration_satisfaction(r17,_G137483),registration_satisfaction(r18,l),registration_satisfaction(r19,m),registration_satisfaction(r20,h),registration_satisfaction(r21,h),registration_satisfaction(r22,_G137508),registration_satisfaction(r23,m),registration_satisfaction(r24,_G137518),registration_satisfaction(r25,h),registration_satisfaction(r26,_G137528),registration_satisfaction(r27,h),registration_satisfaction(r28,_G137538),registration_satisfaction(r29,_G137543),registration_satisfaction(r30,l),registration_satisfaction(r31,h),registration_satisfaction(r32,m),registration_satisfaction(r33,h),registration_satisfaction(r34,h),registration_satisfaction(r35,_G137573),registration_satisfaction(r36,m),registration_satisfaction(r37,h),registration_satisfaction(r38,_G137588),registration_satisfaction(r39,h),registration_satisfaction(r40,h),registration_satisfaction(r41,_G137603),registration_satisfaction(r42,l),registration_satisfaction(r43,h),registration_satisfaction(r44,h),registration_satisfaction(r45,h),registration_satisfaction(r46,m),registration_satisfaction(r47,_G137633),registration_satisfaction(r48,_G137638),registration_satisfaction(r49,_G137643),registration_satisfaction(r50,h),registration_satisfaction(r51,h),registration_satisfaction(r52,h),registration_satisfaction(r53,_G137663),registration_satisfaction(r54,_G137668),registration_satisfaction(r55,_G137673),registration_satisfaction(r56,l),registration_satisfaction(r57,h),registration_satisfaction(r58,h),registration_satisfaction(r59,l),registration_satisfaction(r60,h),registration_satisfaction(r61,h),registration_satisfaction(r62,h),registration_satisfaction(r63,h),registration_satisfaction(r64,h),registration_satisfaction(r65,_G137723),registration_satisfaction(r66,h),registration_satisfaction(r67,m),registration_satisfaction(r68,h),registration_satisfaction(r69,m),registration_satisfaction(r70,h),registration_satisfaction(r71,_G137753),registration_satisfaction(r72,_G137758),registration_satisfaction(r73,h),registration_satisfaction(r74,_G137768),registration_satisfaction(r75,h),registration_satisfaction(r76,h),registration_satisfaction(r77,h),registration_satisfaction(r78,m),registration_satisfaction(r79,h),registration_satisfaction(r80,h),registration_satisfaction(r81,h),registration_satisfaction(r82,l),registration_satisfaction(r83,m),registration_satisfaction(r84,m),registration_satisfaction(r85,h),registration_satisfaction(r86,m),registration_satisfaction(r87,m),registration_satisfaction(r88,h),registration_satisfaction(r89,h),registration_satisfaction(r90,m),registration_satisfaction(r91,h),registration_satisfaction(r92,_G137858),registration_satisfaction(r93,_G137863),registration_satisfaction(r94,l),registration_satisfaction(r95,h),registration_satisfaction(r96,h),registration_satisfaction(r97,_G137883),registration_satisfaction(r98,h),registration_satisfaction(r99,_G137893),registration_satisfaction(r100,_G137898),registration_satisfaction(r101,_G137903),registration_satisfaction(r102,h),registration_satisfaction(r103,h),registration_satisfaction(r104,h),registration_satisfaction(r105,l),registration_satisfaction(r106,_G137928),registration_satisfaction(r107,l),registration_satisfaction(r108,l),registration_satisfaction(r109,h),registration_satisfaction(r110,h),registration_satisfaction(r111,h),registration_satisfaction(r112,h),registration_satisfaction(r113,h),registration_satisfaction(r114,_G137968),registration_satisfaction(r115,l),registration_satisfaction(r116,h),registration_satisfaction(r117,h),registration_satisfaction(r118,_G137988),registration_satisfaction(r119,h),registration_satisfaction(r120,_G137998),registration_satisfaction(r121,h),registration_satisfaction(r122,h),registration_satisfaction(r123,l),registration_satisfaction(r124,h),registration_satisfaction(r125,_G138023),registration_satisfaction(r126,_G138028),registration_satisfaction(r127,_G138033),registration_satisfaction(r128,h),registration_satisfaction(r129,h),registration_satisfaction(r130,_G138048),registration_satisfaction(r131,h),registration_satisfaction(r132,m),registration_satisfaction(r133,h),registration_satisfaction(r134,_G138068),registration_satisfaction(r135,h),registration_satisfaction(r136,h),registration_satisfaction(r137,_G138083),registration_satisfaction(r138,_G138088),registration_satisfaction(r139,h),registration_satisfaction(r140,h),registration_satisfaction(r141,l),registration_satisfaction(r142,_G138108),registration_satisfaction(r143,_G138113),registration_satisfaction(r144,h),registration_satisfaction(r145,_G138123),registration_satisfaction(r146,_G138128),registration_satisfaction(r147,l),registration_satisfaction(r148,m),registration_satisfaction(r149,h),registration_satisfaction(r150,h),registration_satisfaction(r151,_G138153),registration_satisfaction(r152,_G138158),registration_satisfaction(r153,_G138163),registration_satisfaction(r154,m),registration_satisfaction(r155,m),registration_satisfaction(r156,_G138178),registration_satisfaction(r157,m),registration_satisfaction(r158,l),registration_satisfaction(r159,m),registration_satisfaction(r160,h),registration_satisfaction(r161,h),registration_satisfaction(r162,m),registration_satisfaction(r163,_G138213),registration_satisfaction(r164,_G138218),registration_satisfaction(r165,m),registration_satisfaction(r166,l),registration_satisfaction(r167,h),registration_satisfaction(r168,h),registration_satisfaction(r169,h),registration_satisfaction(r170,h),registration_satisfaction(r171,h),registration_satisfaction(r172,h),registration_satisfaction(r173,h),registration_satisfaction(r174,h),registration_satisfaction(r175,_G138273),registration_satisfaction(r176,_G138278),registration_satisfaction(r177,h),registration_satisfaction(r178,h),registration_satisfaction(r179,l),registration_satisfaction(r180,h),registration_satisfaction(r181,m),registration_satisfaction(r182,h),registration_satisfaction(r183,l),registration_satisfaction(r184,h),registration_satisfaction(r185,h),registration_satisfaction(r186,_G138328),registration_satisfaction(r187,h),registration_satisfaction(r188,m),registration_satisfaction(r189,h),registration_satisfaction(r190,h),registration_satisfaction(r191,h),registration_satisfaction(r192,m),registration_satisfaction(r193,h),registration_satisfaction(r194,h),registration_satisfaction(r195,h),registration_satisfaction(r196,_G138378),registration_satisfaction(r197,h),registration_satisfaction(r198,h),registration_satisfaction(r199,h),registration_satisfaction(r200,m),registration_satisfaction(r201,h),registration_satisfaction(r202,h),registration_satisfaction(r203,_G138413),registration_satisfaction(r204,h),registration_satisfaction(r205,_G138423),registration_satisfaction(r206,h),registration_satisfaction(r207,h),registration_satisfaction(r208,_G138438),registration_satisfaction(r209,h),registration_satisfaction(r210,h),registration_satisfaction(r211,m),registration_satisfaction(r212,h),registration_satisfaction(r213,_G138463),registration_satisfaction(r214,h),registration_satisfaction(r215,_G138473),registration_satisfaction(r216,h),registration_satisfaction(r217,h),registration_satisfaction(r218,m),registration_satisfaction(r219,h),registration_satisfaction(r220,h),registration_satisfaction(r221,_G138503),registration_satisfaction(r222,_G138508),registration_satisfaction(r223,h),registration_satisfaction(r224,_G138518),registration_satisfaction(r225,l),registration_satisfaction(r226,_G138528),registration_satisfaction(r227,_G138533),registration_satisfaction(r228,l),registration_satisfaction(r229,_G138543),registration_satisfaction(r230,_G138548),registration_satisfaction(r231,_G138553),registration_satisfaction(r232,h),registration_satisfaction(r233,m),registration_satisfaction(r234,l),registration_satisfaction(r235,_G138573),registration_satisfaction(r236,l),registration_satisfaction(r237,m),registration_satisfaction(r238,m),registration_satisfaction(r239,m),registration_satisfaction(r240,h),registration_satisfaction(r241,h),registration_satisfaction(r242,_G138608),registration_satisfaction(r243,_G138613),registration_satisfaction(r244,_G138618),registration_satisfaction(r245,h),registration_satisfaction(r246,h),registration_satisfaction(r247,l),registration_satisfaction(r248,l),registration_satisfaction(r249,_G138643),registration_satisfaction(r250,h),registration_satisfaction(r251,h),registration_satisfaction(r252,h),registration_satisfaction(r253,_G138663),registration_satisfaction(r254,h),registration_satisfaction(r255,h),registration_satisfaction(r256,_G138678),registration_satisfaction(r257,_G138683),registration_satisfaction(r258,h),registration_satisfaction(r259,h),registration_satisfaction(r260,_G138698),registration_satisfaction(r261,_G138703),registration_satisfaction(r262,h),registration_satisfaction(r263,m),registration_satisfaction(r264,h),registration_satisfaction(r265,_G138723),registration_satisfaction(r266,_G138728),registration_satisfaction(r267,h),registration_satisfaction(r268,_G138738),registration_satisfaction(r269,h),registration_satisfaction(r270,l),registration_satisfaction(r271,h),registration_satisfaction(r272,l),registration_satisfaction(r273,h),registration_satisfaction(r274,h),registration_satisfaction(r275,h),registration_satisfaction(r276,_G138778),registration_satisfaction(r277,_G138783),registration_satisfaction(r278,_G138788),registration_satisfaction(r279,h),registration_satisfaction(r280,h),registration_satisfaction(r281,_G138803),registration_satisfaction(r282,_G138808),registration_satisfaction(r283,h),registration_satisfaction(r284,_G138818),registration_satisfaction(r285,_G138823),registration_satisfaction(r286,h),registration_satisfaction(r287,_G138833),registration_satisfaction(r288,_G138838),registration_satisfaction(r289,l),registration_satisfaction(r290,m),registration_satisfaction(r291,_G138853),registration_satisfaction(r292,m),registration_satisfaction(r293,h),registration_satisfaction(r294,_G138868),registration_satisfaction(r295,_G138873),registration_satisfaction(r296,l),registration_satisfaction(r297,h),registration_satisfaction(r298,h),registration_satisfaction(r299,h),registration_satisfaction(r300,l),registration_satisfaction(r301,_G138903),registration_satisfaction(r302,_G138908),registration_satisfaction(r303,_G138913),registration_satisfaction(r304,h),registration_satisfaction(r305,l),registration_satisfaction(r306,h),registration_satisfaction(r307,l),registration_satisfaction(r308,l),registration_satisfaction(r309,m),registration_satisfaction(r310,h),registration_satisfaction(r311,_G138953),registration_satisfaction(r312,h),registration_satisfaction(r313,_G138963),registration_satisfaction(r314,_G138968),registration_satisfaction(r315,h),registration_satisfaction(r316,_G138978),registration_satisfaction(r317,l),registration_satisfaction(r318,h),registration_satisfaction(r319,_G138993),registration_satisfaction(r320,h),registration_satisfaction(r321,l),registration_satisfaction(r322,h),registration_satisfaction(r323,l),registration_satisfaction(r324,_G139018),registration_satisfaction(r325,h),registration_satisfaction(r326,h),registration_satisfaction(r327,m),registration_satisfaction(r328,h),registration_satisfaction(r329,h),registration_satisfaction(r330,l),registration_satisfaction(r331,h),registration_satisfaction(r332,l),registration_satisfaction(r333,h),registration_satisfaction(r334,_G139068),registration_satisfaction(r335,h),registration_satisfaction(r336,m),registration_satisfaction(r337,h),registration_satisfaction(r338,h),registration_satisfaction(r339,h),registration_satisfaction(r340,h),registration_satisfaction(r341,l),registration_satisfaction(r342,h),registration_satisfaction(r343,h),registration_satisfaction(r344,h),registration_satisfaction(r345,_G139123),registration_satisfaction(r346,h),registration_satisfaction(r347,m),registration_satisfaction(r348,m),registration_satisfaction(r349,_G139143),registration_satisfaction(r350,m),registration_satisfaction(r351,h),registration_satisfaction(r352,l),registration_satisfaction(r353,h),registration_satisfaction(r354,_G139168),registration_satisfaction(r355,_G139173),registration_satisfaction(r356,m),registration_satisfaction(r357,m),registration_satisfaction(r358,_G139188),registration_satisfaction(r359,l),registration_satisfaction(r360,h),registration_satisfaction(r361,m),registration_satisfaction(r362,_G139208),registration_satisfaction(r363,_G139213),registration_satisfaction(r364,h),registration_satisfaction(r365,_G139223),registration_satisfaction(r366,_G139228),registration_satisfaction(r367,h),registration_satisfaction(r368,_G139238),registration_satisfaction(r369,h),registration_satisfaction(r370,h),registration_satisfaction(r371,h),registration_satisfaction(r372,_G139258),registration_satisfaction(r373,h),registration_satisfaction(r374,_G139268),registration_satisfaction(r375,h),registration_satisfaction(r376,m),registration_satisfaction(r377,h),registration_satisfaction(r378,_G139288),registration_satisfaction(r379,h),registration_satisfaction(r380,h),registration_satisfaction(r381,m),registration_satisfaction(r382,_G139308),registration_satisfaction(r383,h),registration_satisfaction(r384,m),registration_satisfaction(r385,_G139323),registration_satisfaction(r386,l),registration_satisfaction(r387,h),registration_satisfaction(r388,h),registration_satisfaction(r389,h),registration_satisfaction(r390,_G139348),registration_satisfaction(r391,l),registration_satisfaction(r392,h),registration_satisfaction(r393,_G139363),registration_satisfaction(r394,_G139368),registration_satisfaction(r395,h),registration_satisfaction(r396,h),registration_satisfaction(r397,_G139383),registration_satisfaction(r398,_G139388),registration_satisfaction(r399,h),registration_satisfaction(r400,h),registration_satisfaction(r401,_G139403),registration_satisfaction(r402,_G139408),registration_satisfaction(r403,_G139413),registration_satisfaction(r404,_G139418),registration_satisfaction(r405,_G139423),registration_satisfaction(r406,h),registration_satisfaction(r407,_G139433),registration_satisfaction(r408,h),registration_satisfaction(r409,h),registration_satisfaction(r410,h),registration_satisfaction(r411,_G139453),registration_satisfaction(r412,_G139458),registration_satisfaction(r413,l),registration_satisfaction(r414,h),registration_satisfaction(r415,m),registration_satisfaction(r416,h),registration_satisfaction(r417,_G139483),registration_satisfaction(r418,h),registration_satisfaction(r419,h),registration_satisfaction(r420,_G139498),registration_satisfaction(r421,h),registration_satisfaction(r422,m),registration_satisfaction(r423,h),registration_satisfaction(r424,h),registration_satisfaction(r425,h),registration_satisfaction(r426,l),registration_satisfaction(r427,h),registration_satisfaction(r428,h),registration_satisfaction(r429,h),registration_satisfaction(r430,l),registration_satisfaction(r431,m),registration_satisfaction(r432,h),registration_satisfaction(r433,h),registration_satisfaction(r434,h),registration_satisfaction(r435,_G139573),registration_satisfaction(r436,_G139578),registration_satisfaction(r437,h),registration_satisfaction(r438,_G139588),registration_satisfaction(r439,h),registration_satisfaction(r440,h),registration_satisfaction(r441,h),registration_satisfaction(r442,m),registration_satisfaction(r443,h),registration_satisfaction(r444,h),registration_satisfaction(r445,_G139623),registration_satisfaction(r446,_G139628),registration_satisfaction(r447,m),registration_satisfaction(r448,l),registration_satisfaction(r449,h),registration_satisfaction(r450,_G139648),registration_satisfaction(r451,h),registration_satisfaction(r452,h),registration_satisfaction(r453,h),registration_satisfaction(r454,l),registration_satisfaction(r455,m),registration_satisfaction(r456,h),registration_satisfaction(r457,_G139683),registration_satisfaction(r458,m),registration_satisfaction(r459,_G139693),registration_satisfaction(r460,l),registration_satisfaction(r461,h),registration_satisfaction(r462,_G139708),registration_satisfaction(r463,l),registration_satisfaction(r464,h),registration_satisfaction(r465,_G139723),registration_satisfaction(r466,l),registration_satisfaction(r467,h),registration_satisfaction(r468,h),registration_satisfaction(r469,h),registration_satisfaction(r470,_G139748),registration_satisfaction(r471,h),registration_satisfaction(r472,h),registration_satisfaction(r473,l),registration_satisfaction(r474,m),registration_satisfaction(r475,_G139773),registration_satisfaction(r476,l),registration_satisfaction(r477,m),registration_satisfaction(r478,h),registration_satisfaction(r479,_G139793),registration_satisfaction(r480,h),registration_satisfaction(r481,m),registration_satisfaction(r482,h),registration_satisfaction(r483,h),registration_satisfaction(r484,m),registration_satisfaction(r485,h),registration_satisfaction(r486,_G139828),registration_satisfaction(r487,_G139833),registration_satisfaction(r488,l),registration_satisfaction(r489,_G139843),registration_satisfaction(r490,m),registration_satisfaction(r491,l),registration_satisfaction(r492,h),registration_satisfaction(r493,h),registration_satisfaction(r494,m),registration_satisfaction(r495,h),registration_satisfaction(r496,h),registration_satisfaction(r497,h),registration_satisfaction(r498,_G139888),registration_satisfaction(r499,_G139893),registration_satisfaction(r500,m),registration_satisfaction(r501,h),registration_satisfaction(r502,_G139908),registration_satisfaction(r503,_G139913),registration_satisfaction(r504,_G139918),registration_satisfaction(r505,h),registration_satisfaction(r506,_G139928),registration_satisfaction(r507,h),registration_satisfaction(r508,l),registration_satisfaction(r509,m),registration_satisfaction(r510,_G139948),registration_satisfaction(r511,_G139953),registration_satisfaction(r512,h),registration_satisfaction(r513,h),registration_satisfaction(r514,h),registration_satisfaction(r515,l),registration_satisfaction(r516,_G139978),registration_satisfaction(r517,_G139983),registration_satisfaction(r518,h),registration_satisfaction(r519,h),registration_satisfaction(r520,_G139998),registration_satisfaction(r521,h),registration_satisfaction(r522,h),registration_satisfaction(r523,h),registration_satisfaction(r524,_G140018),registration_satisfaction(r525,_G140023),registration_satisfaction(r526,_G140028),registration_satisfaction(r527,l),registration_satisfaction(r528,h),registration_satisfaction(r529,h),registration_satisfaction(r530,h),registration_satisfaction(r531,m),registration_satisfaction(r532,h),registration_satisfaction(r533,h),registration_satisfaction(r534,l),registration_satisfaction(r535,m),registration_satisfaction(r536,h),registration_satisfaction(r537,h),registration_satisfaction(r538,h),registration_satisfaction(r539,_G140093),registration_satisfaction(r540,m),registration_satisfaction(r541,h),registration_satisfaction(r542,_G140108),registration_satisfaction(r543,h),registration_satisfaction(r544,h),registration_satisfaction(r545,_G140123),registration_satisfaction(r546,h),registration_satisfaction(r547,l),registration_satisfaction(r548,h),registration_satisfaction(r549,_G140143),registration_satisfaction(r550,h),registration_satisfaction(r551,h),registration_satisfaction(r552,m),registration_satisfaction(r553,m),registration_satisfaction(r554,l),registration_satisfaction(r555,_G140173),registration_satisfaction(r556,h),registration_satisfaction(r557,h),registration_satisfaction(r558,h),registration_satisfaction(r559,h),registration_satisfaction(r560,_G140198),registration_satisfaction(r561,h),registration_satisfaction(r562,h),registration_satisfaction(r563,m),registration_satisfaction(r564,h),registration_satisfaction(r565,_G140223),registration_satisfaction(r566,l),registration_satisfaction(r567,_G140233),registration_satisfaction(r568,h),registration_satisfaction(r569,h),registration_satisfaction(r570,h),registration_satisfaction(r571,l),registration_satisfaction(r572,_G140258),registration_satisfaction(r573,h),registration_satisfaction(r574,m),registration_satisfaction(r575,h),registration_satisfaction(r576,h),registration_satisfaction(r577,h),registration_satisfaction(r578,l),registration_satisfaction(r579,_G140293),registration_satisfaction(r580,m),registration_satisfaction(r581,h),registration_satisfaction(r582,h),registration_satisfaction(r583,h),registration_satisfaction(r584,_G140318),registration_satisfaction(r585,_G140323),registration_satisfaction(r586,_G140328),registration_satisfaction(r587,m),registration_satisfaction(r588,l),registration_satisfaction(r589,l),registration_satisfaction(r590,h),registration_satisfaction(r591,h),registration_satisfaction(r592,h),registration_satisfaction(r593,h),registration_satisfaction(r594,l),registration_satisfaction(r595,m),registration_satisfaction(r596,h),registration_satisfaction(r597,h),registration_satisfaction(r598,h),registration_satisfaction(r599,h),registration_satisfaction(r600,m),registration_satisfaction(r601,_G140403),registration_satisfaction(r602,h),registration_satisfaction(r603,h),registration_satisfaction(r604,l),registration_satisfaction(r605,h),registration_satisfaction(r606,h),registration_satisfaction(r607,l),registration_satisfaction(r608,_G140438),registration_satisfaction(r609,h),registration_satisfaction(r610,h),registration_satisfaction(r611,h),registration_satisfaction(r612,l),registration_satisfaction(r613,h),registration_satisfaction(r614,m),registration_satisfaction(r615,l),registration_satisfaction(r616,_G140478),registration_satisfaction(r617,h),registration_satisfaction(r618,h),registration_satisfaction(r619,h),registration_satisfaction(r620,h),registration_satisfaction(r621,h),registration_satisfaction(r622,h),registration_satisfaction(r623,l),registration_satisfaction(r624,m),registration_satisfaction(r625,l),registration_satisfaction(r626,_G140528),registration_satisfaction(r627,h),registration_satisfaction(r628,_G140538),registration_satisfaction(r629,h),registration_satisfaction(r630,h),registration_satisfaction(r631,h),registration_satisfaction(r632,h),registration_satisfaction(r633,_G140563),registration_satisfaction(r634,h),registration_satisfaction(r635,m),registration_satisfaction(r636,l),registration_satisfaction(r637,m),registration_satisfaction(r638,h),registration_satisfaction(r639,h),registration_satisfaction(r640,h),registration_satisfaction(r641,h),registration_satisfaction(r642,h),registration_satisfaction(r643,h),registration_satisfaction(r644,h),registration_satisfaction(r645,h),registration_satisfaction(r646,h),registration_satisfaction(r647,h),registration_satisfaction(r648,_G140638),registration_satisfaction(r649,h),registration_satisfaction(r650,h),registration_satisfaction(r651,h),registration_satisfaction(r652,m),registration_satisfaction(r653,_G140663),registration_satisfaction(r654,h),registration_satisfaction(r655,h),registration_satisfaction(r656,m),registration_satisfaction(r657,h),registration_satisfaction(r658,_G140688),registration_satisfaction(r659,h),registration_satisfaction(r660,_G140698),registration_satisfaction(r661,h),registration_satisfaction(r662,h),registration_satisfaction(r663,_G140713),registration_satisfaction(r664,l),registration_satisfaction(r665,h),registration_satisfaction(r666,l),registration_satisfaction(r667,_G140733),registration_satisfaction(r668,l),registration_satisfaction(r669,h),registration_satisfaction(r670,h),registration_satisfaction(r671,h),registration_satisfaction(r672,_G140758),registration_satisfaction(r673,l),registration_satisfaction(r674,_G140768),registration_satisfaction(r675,l),registration_satisfaction(r676,h),registration_satisfaction(r677,h),registration_satisfaction(r678,h),registration_satisfaction(r679,h),registration_satisfaction(r680,m),registration_satisfaction(r681,h),registration_satisfaction(r682,h),registration_satisfaction(r683,h),registration_satisfaction(r684,m),registration_satisfaction(r685,h),registration_satisfaction(r686,h),registration_satisfaction(r687,l),registration_satisfaction(r688,h),registration_satisfaction(r689,m),registration_satisfaction(r690,h),registration_satisfaction(r691,_G140853),registration_satisfaction(r692,h),registration_satisfaction(r693,_G140863),registration_satisfaction(r694,h),registration_satisfaction(r695,_G140873),registration_satisfaction(r696,h),registration_satisfaction(r697,_G140883),registration_satisfaction(r698,_G140888),registration_satisfaction(r699,h),registration_satisfaction(r700,h),registration_satisfaction(r701,h),registration_satisfaction(r702,h),registration_satisfaction(r703,_G140913),registration_satisfaction(r704,l),registration_satisfaction(r705,_G140923),registration_satisfaction(r706,m),registration_satisfaction(r707,_G140933),registration_satisfaction(r708,l),registration_satisfaction(r709,m),registration_satisfaction(r710,l),registration_satisfaction(r711,h),registration_satisfaction(r712,h),registration_satisfaction(r713,h),registration_satisfaction(r714,m),registration_satisfaction(r715,h),registration_satisfaction(r716,_G140978),registration_satisfaction(r717,h),registration_satisfaction(r718,_G140988),registration_satisfaction(r719,l),registration_satisfaction(r720,h),registration_satisfaction(r721,h),registration_satisfaction(r722,_G141008),registration_satisfaction(r723,h),registration_satisfaction(r724,h),registration_satisfaction(r725,h),registration_satisfaction(r726,h),registration_satisfaction(r727,h),registration_satisfaction(r728,m),registration_satisfaction(r729,_G141043),registration_satisfaction(r730,h),registration_satisfaction(r731,h),registration_satisfaction(r732,h),registration_satisfaction(r733,h),registration_satisfaction(r734,h),registration_satisfaction(r735,_G141073),registration_satisfaction(r736,h),registration_satisfaction(r737,h),registration_satisfaction(r738,_G141088),registration_satisfaction(r739,h),registration_satisfaction(r740,_G141098),registration_satisfaction(r741,_G141103),registration_satisfaction(r742,h),registration_satisfaction(r743,_G141113),registration_satisfaction(r744,h),registration_satisfaction(r745,m),registration_satisfaction(r746,h),registration_satisfaction(r747,h),registration_satisfaction(r748,_G141138),registration_satisfaction(r749,m),registration_satisfaction(r750,h),registration_satisfaction(r751,h),registration_satisfaction(r752,m),registration_satisfaction(r753,m),registration_satisfaction(r754,h),registration_satisfaction(r755,l),registration_satisfaction(r756,h),registration_satisfaction(r757,_G141183),registration_satisfaction(r758,h),registration_satisfaction(r759,_G141193),registration_satisfaction(r760,_G141198),registration_satisfaction(r761,h),registration_satisfaction(r762,m),registration_satisfaction(r763,_G141213),registration_satisfaction(r764,h),registration_satisfaction(r765,h),registration_satisfaction(r766,h),registration_satisfaction(r767,_G141233),registration_satisfaction(r768,_G141238),registration_satisfaction(r769,l),registration_satisfaction(r770,m),registration_satisfaction(r771,m),registration_satisfaction(r772,h),registration_satisfaction(r773,m),registration_satisfaction(r774,h),registration_satisfaction(r775,h),registration_satisfaction(r776,h),registration_satisfaction(r777,_G141283),registration_satisfaction(r778,h),registration_satisfaction(r779,h),registration_satisfaction(r780,_G141298),registration_satisfaction(r781,m),registration_satisfaction(r782,_G141308),registration_satisfaction(r783,m),registration_satisfaction(r784,l),registration_satisfaction(r785,l),registration_satisfaction(r786,h),registration_satisfaction(r787,h),registration_satisfaction(r788,h),registration_satisfaction(r789,h),registration_satisfaction(r790,h),registration_satisfaction(r791,h),registration_satisfaction(r792,h),registration_satisfaction(r793,m),registration_satisfaction(r794,_G141368),registration_satisfaction(r795,h),registration_satisfaction(r796,h),registration_satisfaction(r797,h),registration_satisfaction(r798,_G141388),registration_satisfaction(r799,m),registration_satisfaction(r800,_G141398),registration_satisfaction(r801,_G141403),registration_satisfaction(r802,_G141408),registration_satisfaction(r803,_G141413),registration_satisfaction(r804,h),registration_satisfaction(r805,h),registration_satisfaction(r806,h),registration_satisfaction(r807,_G141433),registration_satisfaction(r808,m),registration_satisfaction(r809,l),registration_satisfaction(r810,h),registration_satisfaction(r811,l),registration_satisfaction(r812,h),registration_satisfaction(r813,_G141463),registration_satisfaction(r814,l),registration_satisfaction(r815,h),registration_satisfaction(r816,h),registration_satisfaction(r817,h),registration_satisfaction(r818,_G141488),registration_satisfaction(r819,h),registration_satisfaction(r820,_G141498),registration_satisfaction(r821,_G141503),registration_satisfaction(r822,m),registration_satisfaction(r823,h),registration_satisfaction(r824,m),registration_satisfaction(r825,l),registration_satisfaction(r826,l),registration_satisfaction(r827,l),registration_satisfaction(r828,m),registration_satisfaction(r829,l),registration_satisfaction(r830,_G141548),registration_satisfaction(r831,h),registration_satisfaction(r832,m),registration_satisfaction(r833,_G141563),registration_satisfaction(r834,h),registration_satisfaction(r835,h),registration_satisfaction(r836,h),registration_satisfaction(r837,h),registration_satisfaction(r838,l),registration_satisfaction(r839,m),registration_satisfaction(r840,_G141598),registration_satisfaction(r841,h),registration_satisfaction(r842,_G141608),registration_satisfaction(r843,_G141613),registration_satisfaction(r844,_G141618),registration_satisfaction(r845,l),registration_satisfaction(r846,l),registration_satisfaction(r847,h),registration_satisfaction(r848,l),registration_satisfaction(r849,h),registration_satisfaction(r850,h),registration_satisfaction(r851,h),registration_satisfaction(r852,h),registration_satisfaction(r853,h),registration_satisfaction(r854,m),registration_satisfaction(r855,h),registration_satisfaction(r856,_G141678)]) \ No newline at end of file diff --git a/packages/CLPBN/horus/benchmarks/school/missing40.yap b/packages/CLPBN/horus/benchmarks/school/missing40.yap new file mode 100644 index 000000000..a44992bb1 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/school/missing40.yap @@ -0,0 +1 @@ +graph([professor_ability(p0,h),professor_ability(p1,h),professor_ability(p2,m),professor_ability(p3,m),professor_ability(p4,h),professor_ability(p5,h),professor_ability(p6,l),professor_ability(p7,l),professor_ability(p8,_G131233),professor_ability(p9,h),professor_ability(p10,m),professor_ability(p11,h),professor_ability(p12,h),professor_ability(p13,_G131258),professor_ability(p14,_G131263),professor_ability(p15,m),professor_ability(p16,_G131273),professor_ability(p17,m),professor_ability(p18,l),professor_ability(p19,h),professor_ability(p20,_G131293),professor_ability(p21,h),professor_ability(p22,m),professor_ability(p23,m),professor_ability(p24,l),professor_ability(p25,_G131318),professor_ability(p26,h),professor_ability(p27,h),professor_ability(p28,h),professor_ability(p29,m),professor_ability(p30,m),professor_ability(p31,h),professor_popularity(p0,_G131353),professor_popularity(p1,h),professor_popularity(p2,l),professor_popularity(p3,h),professor_popularity(p4,h),professor_popularity(p5,h),professor_popularity(p6,l),professor_popularity(p7,_G131388),professor_popularity(p8,m),professor_popularity(p9,h),professor_popularity(p10,l),professor_popularity(p11,h),professor_popularity(p12,h),professor_popularity(p13,_G131418),professor_popularity(p14,_G131423),professor_popularity(p15,h),professor_popularity(p16,m),professor_popularity(p17,h),professor_popularity(p18,_G131443),professor_popularity(p19,h),professor_popularity(p20,h),professor_popularity(p21,h),professor_popularity(p22,h),professor_popularity(p23,l),professor_popularity(p24,l),professor_popularity(p25,_G131478),professor_popularity(p26,m),professor_popularity(p27,h),professor_popularity(p28,h),professor_popularity(p29,l),professor_popularity(p30,m),professor_popularity(p31,_G131508),registration_grade(r0,a),registration_grade(r1,c),registration_grade(r2,_G131523),registration_grade(r3,c),registration_grade(r4,c),registration_grade(r5,c),registration_grade(r6,a),registration_grade(r7,a),registration_grade(r8,b),registration_grade(r9,a),registration_grade(r10,_G131563),registration_grade(r11,a),registration_grade(r12,a),registration_grade(r13,a),registration_grade(r14,b),registration_grade(r15,b),registration_grade(r16,a),registration_grade(r17,b),registration_grade(r18,_G131603),registration_grade(r19,c),registration_grade(r20,c),registration_grade(r21,a),registration_grade(r22,a),registration_grade(r23,_G131628),registration_grade(r24,b),registration_grade(r25,_G131638),registration_grade(r26,a),registration_grade(r27,b),registration_grade(r28,c),registration_grade(r29,_G131658),registration_grade(r30,c),registration_grade(r31,b),registration_grade(r32,_G131673),registration_grade(r33,_G131678),registration_grade(r34,c),registration_grade(r35,c),registration_grade(r36,a),registration_grade(r37,_G131698),registration_grade(r38,_G131703),registration_grade(r39,_G131708),registration_grade(r40,a),registration_grade(r41,c),registration_grade(r42,_G131723),registration_grade(r43,a),registration_grade(r44,a),registration_grade(r45,a),registration_grade(r46,_G131743),registration_grade(r47,_G131748),registration_grade(r48,_G131753),registration_grade(r49,b),registration_grade(r50,_G131763),registration_grade(r51,b),registration_grade(r52,b),registration_grade(r53,a),registration_grade(r54,b),registration_grade(r55,a),registration_grade(r56,_G131793),registration_grade(r57,c),registration_grade(r58,a),registration_grade(r59,c),registration_grade(r60,a),registration_grade(r61,_G131818),registration_grade(r62,a),registration_grade(r63,b),registration_grade(r64,b),registration_grade(r65,b),registration_grade(r66,b),registration_grade(r67,_G131848),registration_grade(r68,a),registration_grade(r69,b),registration_grade(r70,c),registration_grade(r71,b),registration_grade(r72,a),registration_grade(r73,b),registration_grade(r74,a),registration_grade(r75,_G131888),registration_grade(r76,c),registration_grade(r77,a),registration_grade(r78,b),registration_grade(r79,_G131908),registration_grade(r80,_G131913),registration_grade(r81,b),registration_grade(r82,a),registration_grade(r83,_G131928),registration_grade(r84,_G131933),registration_grade(r85,_G131938),registration_grade(r86,b),registration_grade(r87,b),registration_grade(r88,c),registration_grade(r89,c),registration_grade(r90,_G131963),registration_grade(r91,a),registration_grade(r92,_G131973),registration_grade(r93,b),registration_grade(r94,c),registration_grade(r95,b),registration_grade(r96,a),registration_grade(r97,_G131998),registration_grade(r98,b),registration_grade(r99,b),registration_grade(r100,_G132013),registration_grade(r101,a),registration_grade(r102,_G132023),registration_grade(r103,b),registration_grade(r104,b),registration_grade(r105,c),registration_grade(r106,b),registration_grade(r107,b),registration_grade(r108,b),registration_grade(r109,_G132058),registration_grade(r110,a),registration_grade(r111,a),registration_grade(r112,a),registration_grade(r113,c),registration_grade(r114,c),registration_grade(r115,d),registration_grade(r116,b),registration_grade(r117,c),registration_grade(r118,_G132103),registration_grade(r119,_G132108),registration_grade(r120,b),registration_grade(r121,_G132118),registration_grade(r122,b),registration_grade(r123,a),registration_grade(r124,a),registration_grade(r125,b),registration_grade(r126,_G132143),registration_grade(r127,_G132148),registration_grade(r128,a),registration_grade(r129,c),registration_grade(r130,a),registration_grade(r131,a),registration_grade(r132,_G132173),registration_grade(r133,a),registration_grade(r134,_G132183),registration_grade(r135,_G132188),registration_grade(r136,a),registration_grade(r137,b),registration_grade(r138,_G132203),registration_grade(r139,a),registration_grade(r140,a),registration_grade(r141,b),registration_grade(r142,b),registration_grade(r143,b),registration_grade(r144,c),registration_grade(r145,b),registration_grade(r146,_G132243),registration_grade(r147,a),registration_grade(r148,a),registration_grade(r149,_G132258),registration_grade(r150,_G132263),registration_grade(r151,a),registration_grade(r152,a),registration_grade(r153,_G132278),registration_grade(r154,_G132283),registration_grade(r155,c),registration_grade(r156,b),registration_grade(r157,_G132298),registration_grade(r158,c),registration_grade(r159,_G132308),registration_grade(r160,_G132313),registration_grade(r161,a),registration_grade(r162,b),registration_grade(r163,a),registration_grade(r164,_G132333),registration_grade(r165,_G132338),registration_grade(r166,c),registration_grade(r167,_G132348),registration_grade(r168,_G132353),registration_grade(r169,a),registration_grade(r170,a),registration_grade(r171,_G132368),registration_grade(r172,c),registration_grade(r173,_G132378),registration_grade(r174,a),registration_grade(r175,_G132388),registration_grade(r176,b),registration_grade(r177,c),registration_grade(r178,b),registration_grade(r179,d),registration_grade(r180,c),registration_grade(r181,_G132418),registration_grade(r182,_G132423),registration_grade(r183,a),registration_grade(r184,_G132433),registration_grade(r185,_G132438),registration_grade(r186,c),registration_grade(r187,a),registration_grade(r188,a),registration_grade(r189,_G132458),registration_grade(r190,a),registration_grade(r191,b),registration_grade(r192,b),registration_grade(r193,c),registration_grade(r194,_G132483),registration_grade(r195,c),registration_grade(r196,_G132493),registration_grade(r197,a),registration_grade(r198,_G132503),registration_grade(r199,b),registration_grade(r200,b),registration_grade(r201,c),registration_grade(r202,a),registration_grade(r203,_G132528),registration_grade(r204,_G132533),registration_grade(r205,a),registration_grade(r206,_G132543),registration_grade(r207,a),registration_grade(r208,c),registration_grade(r209,b),registration_grade(r210,a),registration_grade(r211,d),registration_grade(r212,_G132573),registration_grade(r213,b),registration_grade(r214,a),registration_grade(r215,a),registration_grade(r216,b),registration_grade(r217,a),registration_grade(r218,_G132603),registration_grade(r219,a),registration_grade(r220,a),registration_grade(r221,_G132618),registration_grade(r222,c),registration_grade(r223,_G132628),registration_grade(r224,b),registration_grade(r225,b),registration_grade(r226,_G132643),registration_grade(r227,_G132648),registration_grade(r228,c),registration_grade(r229,_G132658),registration_grade(r230,a),registration_grade(r231,c),registration_grade(r232,a),registration_grade(r233,b),registration_grade(r234,b),registration_grade(r235,c),registration_grade(r236,b),registration_grade(r237,c),registration_grade(r238,d),registration_grade(r239,b),registration_grade(r240,b),registration_grade(r241,a),registration_grade(r242,b),registration_grade(r243,a),registration_grade(r244,b),registration_grade(r245,a),registration_grade(r246,b),registration_grade(r247,c),registration_grade(r248,_G132753),registration_grade(r249,a),registration_grade(r250,a),registration_grade(r251,a),registration_grade(r252,b),registration_grade(r253,a),registration_grade(r254,_G132783),registration_grade(r255,a),registration_grade(r256,a),registration_grade(r257,_G132798),registration_grade(r258,a),registration_grade(r259,a),registration_grade(r260,b),registration_grade(r261,_G132818),registration_grade(r262,_G132823),registration_grade(r263,_G132828),registration_grade(r264,c),registration_grade(r265,a),registration_grade(r266,_G132843),registration_grade(r267,a),registration_grade(r268,c),registration_grade(r269,a),registration_grade(r270,c),registration_grade(r271,b),registration_grade(r272,c),registration_grade(r273,b),registration_grade(r274,c),registration_grade(r275,_G132888),registration_grade(r276,_G132893),registration_grade(r277,a),registration_grade(r278,a),registration_grade(r279,_G132908),registration_grade(r280,b),registration_grade(r281,b),registration_grade(r282,_G132923),registration_grade(r283,a),registration_grade(r284,b),registration_grade(r285,_G132938),registration_grade(r286,a),registration_grade(r287,b),registration_grade(r288,b),registration_grade(r289,d),registration_grade(r290,b),registration_grade(r291,c),registration_grade(r292,_G132973),registration_grade(r293,a),registration_grade(r294,_G132983),registration_grade(r295,_G132988),registration_grade(r296,b),registration_grade(r297,a),registration_grade(r298,a),registration_grade(r299,_G133008),registration_grade(r300,_G133013),registration_grade(r301,_G133018),registration_grade(r302,b),registration_grade(r303,a),registration_grade(r304,a),registration_grade(r305,_G133038),registration_grade(r306,b),registration_grade(r307,c),registration_grade(r308,_G133053),registration_grade(r309,c),registration_grade(r310,a),registration_grade(r311,a),registration_grade(r312,a),registration_grade(r313,_G133078),registration_grade(r314,_G133083),registration_grade(r315,c),registration_grade(r316,c),registration_grade(r317,c),registration_grade(r318,c),registration_grade(r319,c),registration_grade(r320,b),registration_grade(r321,b),registration_grade(r322,a),registration_grade(r323,c),registration_grade(r324,_G133133),registration_grade(r325,_G133138),registration_grade(r326,a),registration_grade(r327,c),registration_grade(r328,b),registration_grade(r329,a),registration_grade(r330,b),registration_grade(r331,a),registration_grade(r332,a),registration_grade(r333,a),registration_grade(r334,c),registration_grade(r335,d),registration_grade(r336,b),registration_grade(r337,b),registration_grade(r338,_G133203),registration_grade(r339,a),registration_grade(r340,b),registration_grade(r341,b),registration_grade(r342,b),registration_grade(r343,a),registration_grade(r344,c),registration_grade(r345,_G133238),registration_grade(r346,b),registration_grade(r347,_G133248),registration_grade(r348,a),registration_grade(r349,a),registration_grade(r350,_G133263),registration_grade(r351,_G133268),registration_grade(r352,d),registration_grade(r353,_G133278),registration_grade(r354,c),registration_grade(r355,c),registration_grade(r356,_G133293),registration_grade(r357,b),registration_grade(r358,a),registration_grade(r359,a),registration_grade(r360,_G133313),registration_grade(r361,_G133318),registration_grade(r362,c),registration_grade(r363,c),registration_grade(r364,b),registration_grade(r365,_G133338),registration_grade(r366,_G133343),registration_grade(r367,b),registration_grade(r368,a),registration_grade(r369,_G133358),registration_grade(r370,b),registration_grade(r371,_G133368),registration_grade(r372,_G133373),registration_grade(r373,_G133378),registration_grade(r374,b),registration_grade(r375,_G133388),registration_grade(r376,a),registration_grade(r377,a),registration_grade(r378,a),registration_grade(r379,c),registration_grade(r380,_G133413),registration_grade(r381,c),registration_grade(r382,_G133423),registration_grade(r383,a),registration_grade(r384,b),registration_grade(r385,b),registration_grade(r386,d),registration_grade(r387,a),registration_grade(r388,a),registration_grade(r389,a),registration_grade(r390,a),registration_grade(r391,b),registration_grade(r392,b),registration_grade(r393,_G133478),registration_grade(r394,c),registration_grade(r395,_G133488),registration_grade(r396,b),registration_grade(r397,a),registration_grade(r398,_G133503),registration_grade(r399,_G133508),registration_grade(r400,a),registration_grade(r401,c),registration_grade(r402,_G133523),registration_grade(r403,_G133528),registration_grade(r404,a),registration_grade(r405,_G133538),registration_grade(r406,_G133543),registration_grade(r407,_G133548),registration_grade(r408,a),registration_grade(r409,a),registration_grade(r410,_G133563),registration_grade(r411,b),registration_grade(r412,a),registration_grade(r413,a),registration_grade(r414,a),registration_grade(r415,_G133588),registration_grade(r416,_G133593),registration_grade(r417,d),registration_grade(r418,_G133603),registration_grade(r419,a),registration_grade(r420,a),registration_grade(r421,c),registration_grade(r422,_G133623),registration_grade(r423,b),registration_grade(r424,_G133633),registration_grade(r425,b),registration_grade(r426,c),registration_grade(r427,c),registration_grade(r428,_G133653),registration_grade(r429,c),registration_grade(r430,b),registration_grade(r431,d),registration_grade(r432,_G133673),registration_grade(r433,a),registration_grade(r434,a),registration_grade(r435,_G133688),registration_grade(r436,a),registration_grade(r437,_G133698),registration_grade(r438,_G133703),registration_grade(r439,b),registration_grade(r440,c),registration_grade(r441,a),registration_grade(r442,_G133723),registration_grade(r443,_G133728),registration_grade(r444,a),registration_grade(r445,a),registration_grade(r446,a),registration_grade(r447,d),registration_grade(r448,_G133753),registration_grade(r449,b),registration_grade(r450,a),registration_grade(r451,a),registration_grade(r452,b),registration_grade(r453,d),registration_grade(r454,_G133783),registration_grade(r455,c),registration_grade(r456,_G133793),registration_grade(r457,a),registration_grade(r458,_G133803),registration_grade(r459,b),registration_grade(r460,_G133813),registration_grade(r461,b),registration_grade(r462,_G133823),registration_grade(r463,d),registration_grade(r464,a),registration_grade(r465,_G133838),registration_grade(r466,b),registration_grade(r467,b),registration_grade(r468,_G133853),registration_grade(r469,a),registration_grade(r470,c),registration_grade(r471,_G133868),registration_grade(r472,a),registration_grade(r473,_G133878),registration_grade(r474,_G133883),registration_grade(r475,a),registration_grade(r476,c),registration_grade(r477,b),registration_grade(r478,a),registration_grade(r479,b),registration_grade(r480,a),registration_grade(r481,_G133918),registration_grade(r482,b),registration_grade(r483,a),registration_grade(r484,a),registration_grade(r485,a),registration_grade(r486,a),registration_grade(r487,_G133948),registration_grade(r488,_G133953),registration_grade(r489,b),registration_grade(r490,c),registration_grade(r491,c),registration_grade(r492,b),registration_grade(r493,a),registration_grade(r494,b),registration_grade(r495,b),registration_grade(r496,a),registration_grade(r497,_G133998),registration_grade(r498,b),registration_grade(r499,_G134008),registration_grade(r500,b),registration_grade(r501,_G134018),registration_grade(r502,_G134023),registration_grade(r503,c),registration_grade(r504,_G134033),registration_grade(r505,_G134038),registration_grade(r506,c),registration_grade(r507,a),registration_grade(r508,c),registration_grade(r509,b),registration_grade(r510,_G134063),registration_grade(r511,c),registration_grade(r512,_G134073),registration_grade(r513,b),registration_grade(r514,_G134083),registration_grade(r515,c),registration_grade(r516,_G134093),registration_grade(r517,b),registration_grade(r518,_G134103),registration_grade(r519,_G134108),registration_grade(r520,b),registration_grade(r521,a),registration_grade(r522,b),registration_grade(r523,_G134128),registration_grade(r524,b),registration_grade(r525,c),registration_grade(r526,c),registration_grade(r527,c),registration_grade(r528,a),registration_grade(r529,b),registration_grade(r530,a),registration_grade(r531,b),registration_grade(r532,a),registration_grade(r533,a),registration_grade(r534,b),registration_grade(r535,c),registration_grade(r536,a),registration_grade(r537,a),registration_grade(r538,a),registration_grade(r539,b),registration_grade(r540,b),registration_grade(r541,c),registration_grade(r542,_G134223),registration_grade(r543,a),registration_grade(r544,b),registration_grade(r545,a),registration_grade(r546,b),registration_grade(r547,c),registration_grade(r548,_G134253),registration_grade(r549,_G134258),registration_grade(r550,a),registration_grade(r551,a),registration_grade(r552,c),registration_grade(r553,b),registration_grade(r554,b),registration_grade(r555,b),registration_grade(r556,a),registration_grade(r557,a),registration_grade(r558,a),registration_grade(r559,b),registration_grade(r560,_G134313),registration_grade(r561,a),registration_grade(r562,_G134323),registration_grade(r563,a),registration_grade(r564,b),registration_grade(r565,d),registration_grade(r566,c),registration_grade(r567,_G134348),registration_grade(r568,a),registration_grade(r569,_G134358),registration_grade(r570,c),registration_grade(r571,_G134368),registration_grade(r572,_G134373),registration_grade(r573,a),registration_grade(r574,c),registration_grade(r575,a),registration_grade(r576,_G134393),registration_grade(r577,a),registration_grade(r578,_G134403),registration_grade(r579,a),registration_grade(r580,b),registration_grade(r581,a),registration_grade(r582,a),registration_grade(r583,a),registration_grade(r584,a),registration_grade(r585,c),registration_grade(r586,b),registration_grade(r587,_G134448),registration_grade(r588,_G134453),registration_grade(r589,c),registration_grade(r590,b),registration_grade(r591,c),registration_grade(r592,b),registration_grade(r593,b),registration_grade(r594,c),registration_grade(r595,_G134488),registration_grade(r596,a),registration_grade(r597,_G134498),registration_grade(r598,_G134503),registration_grade(r599,a),registration_grade(r600,_G134513),registration_grade(r601,b),registration_grade(r602,a),registration_grade(r603,d),registration_grade(r604,c),registration_grade(r605,a),registration_grade(r606,a),registration_grade(r607,b),registration_grade(r608,a),registration_grade(r609,_G134558),registration_grade(r610,a),registration_grade(r611,a),registration_grade(r612,c),registration_grade(r613,a),registration_grade(r614,_G134583),registration_grade(r615,b),registration_grade(r616,_G134593),registration_grade(r617,_G134598),registration_grade(r618,b),registration_grade(r619,a),registration_grade(r620,a),registration_grade(r621,a),registration_grade(r622,b),registration_grade(r623,b),registration_grade(r624,a),registration_grade(r625,_G134638),registration_grade(r626,a),registration_grade(r627,b),registration_grade(r628,_G134653),registration_grade(r629,b),registration_grade(r630,c),registration_grade(r631,a),registration_grade(r632,a),registration_grade(r633,b),registration_grade(r634,b),registration_grade(r635,_G134688),registration_grade(r636,d),registration_grade(r637,c),registration_grade(r638,_G134703),registration_grade(r639,b),registration_grade(r640,c),registration_grade(r641,c),registration_grade(r642,c),registration_grade(r643,a),registration_grade(r644,a),registration_grade(r645,_G134738),registration_grade(r646,_G134743),registration_grade(r647,b),registration_grade(r648,a),registration_grade(r649,b),registration_grade(r650,_G134763),registration_grade(r651,b),registration_grade(r652,_G134773),registration_grade(r653,b),registration_grade(r654,b),registration_grade(r655,a),registration_grade(r656,_G134793),registration_grade(r657,a),registration_grade(r658,a),registration_grade(r659,a),registration_grade(r660,a),registration_grade(r661,c),registration_grade(r662,_G134823),registration_grade(r663,a),registration_grade(r664,c),registration_grade(r665,a),registration_grade(r666,_G134843),registration_grade(r667,_G134848),registration_grade(r668,d),registration_grade(r669,_G134858),registration_grade(r670,a),registration_grade(r671,c),registration_grade(r672,c),registration_grade(r673,a),registration_grade(r674,a),registration_grade(r675,b),registration_grade(r676,a),registration_grade(r677,a),registration_grade(r678,_G134903),registration_grade(r679,_G134908),registration_grade(r680,_G134913),registration_grade(r681,_G134918),registration_grade(r682,a),registration_grade(r683,b),registration_grade(r684,_G134933),registration_grade(r685,a),registration_grade(r686,b),registration_grade(r687,_G134948),registration_grade(r688,_G134953),registration_grade(r689,b),registration_grade(r690,a),registration_grade(r691,c),registration_grade(r692,_G134973),registration_grade(r693,b),registration_grade(r694,a),registration_grade(r695,a),registration_grade(r696,a),registration_grade(r697,c),registration_grade(r698,_G135003),registration_grade(r699,a),registration_grade(r700,a),registration_grade(r701,a),registration_grade(r702,a),registration_grade(r703,c),registration_grade(r704,c),registration_grade(r705,b),registration_grade(r706,b),registration_grade(r707,a),registration_grade(r708,b),registration_grade(r709,_G135058),registration_grade(r710,b),registration_grade(r711,_G135068),registration_grade(r712,_G135073),registration_grade(r713,a),registration_grade(r714,b),registration_grade(r715,_G135088),registration_grade(r716,a),registration_grade(r717,a),registration_grade(r718,a),registration_grade(r719,_G135108),registration_grade(r720,a),registration_grade(r721,_G135118),registration_grade(r722,b),registration_grade(r723,_G135128),registration_grade(r724,a),registration_grade(r725,c),registration_grade(r726,_G135143),registration_grade(r727,a),registration_grade(r728,_G135153),registration_grade(r729,_G135158),registration_grade(r730,c),registration_grade(r731,a),registration_grade(r732,a),registration_grade(r733,a),registration_grade(r734,b),registration_grade(r735,b),registration_grade(r736,_G135193),registration_grade(r737,b),registration_grade(r738,_G135203),registration_grade(r739,_G135208),registration_grade(r740,a),registration_grade(r741,a),registration_grade(r742,_G135223),registration_grade(r743,d),registration_grade(r744,_G135233),registration_grade(r745,b),registration_grade(r746,a),registration_grade(r747,_G135248),registration_grade(r748,b),registration_grade(r749,c),registration_grade(r750,_G135263),registration_grade(r751,_G135268),registration_grade(r752,b),registration_grade(r753,c),registration_grade(r754,c),registration_grade(r755,c),registration_grade(r756,b),registration_grade(r757,c),registration_grade(r758,_G135303),registration_grade(r759,b),registration_grade(r760,a),registration_grade(r761,_G135318),registration_grade(r762,b),registration_grade(r763,_G135328),registration_grade(r764,a),registration_grade(r765,_G135338),registration_grade(r766,c),registration_grade(r767,_G135348),registration_grade(r768,c),registration_grade(r769,c),registration_grade(r770,_G135363),registration_grade(r771,_G135368),registration_grade(r772,a),registration_grade(r773,b),registration_grade(r774,b),registration_grade(r775,a),registration_grade(r776,_G135393),registration_grade(r777,c),registration_grade(r778,c),registration_grade(r779,b),registration_grade(r780,a),registration_grade(r781,_G135418),registration_grade(r782,a),registration_grade(r783,c),registration_grade(r784,_G135433),registration_grade(r785,_G135438),registration_grade(r786,c),registration_grade(r787,a),registration_grade(r788,a),registration_grade(r789,c),registration_grade(r790,b),registration_grade(r791,b),registration_grade(r792,a),registration_grade(r793,a),registration_grade(r794,_G135483),registration_grade(r795,a),registration_grade(r796,a),registration_grade(r797,a),registration_grade(r798,b),registration_grade(r799,c),registration_grade(r800,_G135513),registration_grade(r801,b),registration_grade(r802,a),registration_grade(r803,b),registration_grade(r804,_G135533),registration_grade(r805,b),registration_grade(r806,a),registration_grade(r807,a),registration_grade(r808,b),registration_grade(r809,_G135558),registration_grade(r810,b),registration_grade(r811,_G135568),registration_grade(r812,c),registration_grade(r813,c),registration_grade(r814,_G135583),registration_grade(r815,c),registration_grade(r816,b),registration_grade(r817,a),registration_grade(r818,_G135603),registration_grade(r819,_G135608),registration_grade(r820,_G135613),registration_grade(r821,b),registration_grade(r822,_G135623),registration_grade(r823,a),registration_grade(r824,c),registration_grade(r825,_G135638),registration_grade(r826,b),registration_grade(r827,_G135648),registration_grade(r828,b),registration_grade(r829,b),registration_grade(r830,a),registration_grade(r831,_G135668),registration_grade(r832,b),registration_grade(r833,b),registration_grade(r834,b),registration_grade(r835,a),registration_grade(r836,a),registration_grade(r837,_G135698),registration_grade(r838,_G135703),registration_grade(r839,_G135708),registration_grade(r840,b),registration_grade(r841,_G135718),registration_grade(r842,_G135723),registration_grade(r843,b),registration_grade(r844,a),registration_grade(r845,c),registration_grade(r846,_G135743),registration_grade(r847,b),registration_grade(r848,c),registration_grade(r849,b),registration_grade(r850,b),registration_grade(r851,_G135768),registration_grade(r852,_G135773),registration_grade(r853,b),registration_grade(r854,c),registration_grade(r855,d),registration_grade(r856,_G135793),student_intelligence(s0,l),student_intelligence(s1,l),student_intelligence(s2,h),student_intelligence(s3,_G135813),student_intelligence(s4,h),student_intelligence(s5,h),student_intelligence(s6,m),student_intelligence(s7,h),student_intelligence(s8,h),student_intelligence(s9,_G135843),student_intelligence(s10,_G135848),student_intelligence(s11,m),student_intelligence(s12,_G135858),student_intelligence(s13,h),student_intelligence(s14,_G135868),student_intelligence(s15,m),student_intelligence(s16,h),student_intelligence(s17,m),student_intelligence(s18,_G135888),student_intelligence(s19,_G135893),student_intelligence(s20,_G135898),student_intelligence(s21,h),student_intelligence(s22,_G135908),student_intelligence(s23,h),student_intelligence(s24,_G135918),student_intelligence(s25,_G135923),student_intelligence(s26,m),student_intelligence(s27,_G135933),student_intelligence(s28,m),student_intelligence(s29,m),student_intelligence(s30,_G135948),student_intelligence(s31,_G135953),student_intelligence(s32,_G135958),student_intelligence(s33,_G135963),student_intelligence(s34,_G135968),student_intelligence(s35,m),student_intelligence(s36,_G135978),student_intelligence(s37,m),student_intelligence(s38,h),student_intelligence(s39,h),student_intelligence(s40,h),student_intelligence(s41,m),student_intelligence(s42,m),student_intelligence(s43,h),student_intelligence(s44,_G136018),student_intelligence(s45,h),student_intelligence(s46,_G136028),student_intelligence(s47,h),student_intelligence(s48,m),student_intelligence(s49,m),student_intelligence(s50,h),student_intelligence(s51,m),student_intelligence(s52,m),student_intelligence(s53,m),student_intelligence(s54,h),student_intelligence(s55,_G136073),student_intelligence(s56,l),student_intelligence(s57,_G136083),student_intelligence(s58,_G136088),student_intelligence(s59,m),student_intelligence(s60,m),student_intelligence(s61,_G136103),student_intelligence(s62,m),student_intelligence(s63,h),student_intelligence(s64,_G136118),student_intelligence(s65,m),student_intelligence(s66,_G136128),student_intelligence(s67,m),student_intelligence(s68,_G136138),student_intelligence(s69,h),student_intelligence(s70,_G136148),student_intelligence(s71,m),student_intelligence(s72,_G136158),student_intelligence(s73,m),student_intelligence(s74,h),student_intelligence(s75,_G136173),student_intelligence(s76,h),student_intelligence(s77,h),student_intelligence(s78,h),student_intelligence(s79,_G136193),student_intelligence(s80,_G136198),student_intelligence(s81,l),student_intelligence(s82,_G136208),student_intelligence(s83,h),student_intelligence(s84,m),student_intelligence(s85,h),student_intelligence(s86,m),student_intelligence(s87,h),student_intelligence(s88,h),student_intelligence(s89,m),student_intelligence(s90,_G136248),student_intelligence(s91,m),student_intelligence(s92,_G136258),student_intelligence(s93,l),student_intelligence(s94,l),student_intelligence(s95,h),student_intelligence(s96,m),student_intelligence(s97,h),student_intelligence(s98,h),student_intelligence(s99,l),student_intelligence(s100,h),student_intelligence(s101,h),student_intelligence(s102,_G136308),student_intelligence(s103,h),student_intelligence(s104,l),student_intelligence(s105,m),student_intelligence(s106,h),student_intelligence(s107,_G136333),student_intelligence(s108,m),student_intelligence(s109,m),student_intelligence(s110,m),student_intelligence(s111,h),student_intelligence(s112,_G136358),student_intelligence(s113,h),student_intelligence(s114,m),student_intelligence(s115,h),student_intelligence(s116,_G136378),student_intelligence(s117,_G136383),student_intelligence(s118,_G136388),student_intelligence(s119,h),student_intelligence(s120,_G136398),student_intelligence(s121,h),student_intelligence(s122,_G136408),student_intelligence(s123,m),student_intelligence(s124,_G136418),student_intelligence(s125,_G136423),student_intelligence(s126,m),student_intelligence(s127,m),student_intelligence(s128,_G136438),student_intelligence(s129,h),student_intelligence(s130,_G136448),student_intelligence(s131,h),student_intelligence(s132,h),student_intelligence(s133,h),student_intelligence(s134,h),student_intelligence(s135,_G136473),student_intelligence(s136,_G136478),student_intelligence(s137,m),student_intelligence(s138,l),student_intelligence(s139,h),student_intelligence(s140,h),student_intelligence(s141,m),student_intelligence(s142,m),student_intelligence(s143,_G136513),student_intelligence(s144,h),student_intelligence(s145,_G136523),student_intelligence(s146,m),student_intelligence(s147,m),student_intelligence(s148,m),student_intelligence(s149,h),student_intelligence(s150,l),student_intelligence(s151,h),student_intelligence(s152,h),student_intelligence(s153,m),student_intelligence(s154,m),student_intelligence(s155,h),student_intelligence(s156,m),student_intelligence(s157,m),student_intelligence(s158,_G136588),student_intelligence(s159,h),student_intelligence(s160,_G136598),student_intelligence(s161,_G136603),student_intelligence(s162,_G136608),student_intelligence(s163,m),student_intelligence(s164,m),student_intelligence(s165,m),student_intelligence(s166,_G136628),student_intelligence(s167,h),student_intelligence(s168,h),student_intelligence(s169,m),student_intelligence(s170,_G136648),student_intelligence(s171,m),student_intelligence(s172,h),student_intelligence(s173,h),student_intelligence(s174,h),student_intelligence(s175,_G136673),student_intelligence(s176,_G136678),student_intelligence(s177,_G136683),student_intelligence(s178,h),student_intelligence(s179,m),student_intelligence(s180,m),student_intelligence(s181,_G136703),student_intelligence(s182,m),student_intelligence(s183,h),student_intelligence(s184,h),student_intelligence(s185,m),student_intelligence(s186,m),student_intelligence(s187,_G136733),student_intelligence(s188,_G136738),student_intelligence(s189,m),student_intelligence(s190,h),student_intelligence(s191,l),student_intelligence(s192,_G136758),student_intelligence(s193,m),student_intelligence(s194,_G136768),student_intelligence(s195,m),student_intelligence(s196,h),student_intelligence(s197,_G136783),student_intelligence(s198,_G136788),student_intelligence(s199,_G136793),student_intelligence(s200,h),student_intelligence(s201,_G136803),student_intelligence(s202,h),student_intelligence(s203,_G136813),student_intelligence(s204,_G136818),student_intelligence(s205,h),student_intelligence(s206,_G136828),student_intelligence(s207,h),student_intelligence(s208,m),student_intelligence(s209,h),student_intelligence(s210,_G136848),student_intelligence(s211,m),student_intelligence(s212,m),student_intelligence(s213,h),student_intelligence(s214,_G136868),student_intelligence(s215,m),student_intelligence(s216,h),student_intelligence(s217,m),student_intelligence(s218,h),student_intelligence(s219,h),student_intelligence(s220,h),student_intelligence(s221,h),student_intelligence(s222,_G136908),student_intelligence(s223,_G136913),student_intelligence(s224,_G136918),student_intelligence(s225,l),student_intelligence(s226,m),student_intelligence(s227,h),student_intelligence(s228,h),student_intelligence(s229,m),student_intelligence(s230,m),student_intelligence(s231,_G136953),student_intelligence(s232,m),student_intelligence(s233,_G136963),student_intelligence(s234,_G136968),student_intelligence(s235,_G136973),student_intelligence(s236,h),student_intelligence(s237,_G136983),student_intelligence(s238,h),student_intelligence(s239,h),student_intelligence(s240,_G136998),student_intelligence(s241,m),student_intelligence(s242,l),student_intelligence(s243,h),student_intelligence(s244,_G137018),student_intelligence(s245,l),student_intelligence(s246,m),student_intelligence(s247,h),student_intelligence(s248,m),student_intelligence(s249,_G137043),student_intelligence(s250,m),student_intelligence(s251,h),student_intelligence(s252,m),student_intelligence(s253,_G137063),student_intelligence(s254,m),student_intelligence(s255,m),course_difficulty(c0,h),course_difficulty(c1,_G137083),course_difficulty(c2,l),course_difficulty(c3,m),course_difficulty(c4,m),course_difficulty(c5,_G137103),course_difficulty(c6,m),course_difficulty(c7,h),course_difficulty(c8,h),course_difficulty(c9,_G137123),course_difficulty(c10,m),course_difficulty(c11,m),course_difficulty(c12,m),course_difficulty(c13,h),course_difficulty(c14,_G137148),course_difficulty(c15,h),course_difficulty(c16,l),course_difficulty(c17,h),course_difficulty(c18,m),course_difficulty(c19,l),course_difficulty(c20,_G137178),course_difficulty(c21,h),course_difficulty(c22,m),course_difficulty(c23,m),course_difficulty(c24,_G137198),course_difficulty(c25,m),course_difficulty(c26,l),course_difficulty(c27,h),course_difficulty(c28,_G137218),course_difficulty(c29,m),course_difficulty(c30,_G137228),course_difficulty(c31,m),course_difficulty(c32,_G137238),course_difficulty(c33,m),course_difficulty(c34,l),course_difficulty(c35,_G137253),course_difficulty(c36,h),course_difficulty(c37,m),course_difficulty(c38,m),course_difficulty(c39,m),course_difficulty(c40,h),course_difficulty(c41,m),course_difficulty(c42,h),course_difficulty(c43,m),course_difficulty(c44,_G137298),course_difficulty(c45,_G137303),course_difficulty(c46,_G137308),course_difficulty(c47,_G137313),course_difficulty(c48,m),course_difficulty(c49,l),course_difficulty(c50,m),course_difficulty(c51,h),course_difficulty(c52,h),course_difficulty(c53,h),course_difficulty(c54,m),course_difficulty(c55,h),course_difficulty(c56,m),course_difficulty(c57,_G137363),course_difficulty(c58,_G137368),course_difficulty(c59,m),course_difficulty(c60,_G137378),course_difficulty(c61,m),course_difficulty(c62,l),course_difficulty(c63,l),registration_satisfaction(r0,_G137398),registration_satisfaction(r1,l),registration_satisfaction(r2,h),registration_satisfaction(r3,_G137413),registration_satisfaction(r4,h),registration_satisfaction(r5,h),registration_satisfaction(r6,h),registration_satisfaction(r7,h),registration_satisfaction(r8,_G137438),registration_satisfaction(r9,h),registration_satisfaction(r10,h),registration_satisfaction(r11,h),registration_satisfaction(r12,h),registration_satisfaction(r13,_G137463),registration_satisfaction(r14,m),registration_satisfaction(r15,_G137473),registration_satisfaction(r16,h),registration_satisfaction(r17,l),registration_satisfaction(r18,_G137488),registration_satisfaction(r19,_G137493),registration_satisfaction(r20,_G137498),registration_satisfaction(r21,h),registration_satisfaction(r22,h),registration_satisfaction(r23,m),registration_satisfaction(r24,_G137518),registration_satisfaction(r25,_G137523),registration_satisfaction(r26,h),registration_satisfaction(r27,h),registration_satisfaction(r28,h),registration_satisfaction(r29,h),registration_satisfaction(r30,l),registration_satisfaction(r31,h),registration_satisfaction(r32,m),registration_satisfaction(r33,_G137563),registration_satisfaction(r34,_G137568),registration_satisfaction(r35,_G137573),registration_satisfaction(r36,m),registration_satisfaction(r37,h),registration_satisfaction(r38,_G137588),registration_satisfaction(r39,h),registration_satisfaction(r40,_G137598),registration_satisfaction(r41,_G137603),registration_satisfaction(r42,l),registration_satisfaction(r43,h),registration_satisfaction(r44,_G137618),registration_satisfaction(r45,h),registration_satisfaction(r46,m),registration_satisfaction(r47,h),registration_satisfaction(r48,h),registration_satisfaction(r49,h),registration_satisfaction(r50,_G137648),registration_satisfaction(r51,h),registration_satisfaction(r52,h),registration_satisfaction(r53,_G137663),registration_satisfaction(r54,h),registration_satisfaction(r55,h),registration_satisfaction(r56,_G137678),registration_satisfaction(r57,_G137683),registration_satisfaction(r58,_G137688),registration_satisfaction(r59,l),registration_satisfaction(r60,_G137698),registration_satisfaction(r61,h),registration_satisfaction(r62,h),registration_satisfaction(r63,h),registration_satisfaction(r64,h),registration_satisfaction(r65,h),registration_satisfaction(r66,_G137728),registration_satisfaction(r67,_G137733),registration_satisfaction(r68,h),registration_satisfaction(r69,_G137743),registration_satisfaction(r70,h),registration_satisfaction(r71,h),registration_satisfaction(r72,l),registration_satisfaction(r73,h),registration_satisfaction(r74,h),registration_satisfaction(r75,h),registration_satisfaction(r76,_G137778),registration_satisfaction(r77,h),registration_satisfaction(r78,m),registration_satisfaction(r79,h),registration_satisfaction(r80,_G137798),registration_satisfaction(r81,h),registration_satisfaction(r82,l),registration_satisfaction(r83,m),registration_satisfaction(r84,m),registration_satisfaction(r85,h),registration_satisfaction(r86,m),registration_satisfaction(r87,m),registration_satisfaction(r88,h),registration_satisfaction(r89,h),registration_satisfaction(r90,m),registration_satisfaction(r91,h),registration_satisfaction(r92,_G137858),registration_satisfaction(r93,h),registration_satisfaction(r94,l),registration_satisfaction(r95,_G137873),registration_satisfaction(r96,_G137878),registration_satisfaction(r97,h),registration_satisfaction(r98,h),registration_satisfaction(r99,h),registration_satisfaction(r100,h),registration_satisfaction(r101,_G137903),registration_satisfaction(r102,h),registration_satisfaction(r103,_G137913),registration_satisfaction(r104,_G137918),registration_satisfaction(r105,l),registration_satisfaction(r106,h),registration_satisfaction(r107,l),registration_satisfaction(r108,_G137938),registration_satisfaction(r109,_G137943),registration_satisfaction(r110,_G137948),registration_satisfaction(r111,_G137953),registration_satisfaction(r112,h),registration_satisfaction(r113,h),registration_satisfaction(r114,m),registration_satisfaction(r115,l),registration_satisfaction(r116,_G137978),registration_satisfaction(r117,_G137983),registration_satisfaction(r118,_G137988),registration_satisfaction(r119,h),registration_satisfaction(r120,l),registration_satisfaction(r121,h),registration_satisfaction(r122,_G138008),registration_satisfaction(r123,l),registration_satisfaction(r124,h),registration_satisfaction(r125,m),registration_satisfaction(r126,h),registration_satisfaction(r127,h),registration_satisfaction(r128,_G138038),registration_satisfaction(r129,_G138043),registration_satisfaction(r130,h),registration_satisfaction(r131,h),registration_satisfaction(r132,m),registration_satisfaction(r133,h),registration_satisfaction(r134,_G138068),registration_satisfaction(r135,h),registration_satisfaction(r136,_G138078),registration_satisfaction(r137,h),registration_satisfaction(r138,h),registration_satisfaction(r139,_G138093),registration_satisfaction(r140,h),registration_satisfaction(r141,_G138103),registration_satisfaction(r142,_G138108),registration_satisfaction(r143,h),registration_satisfaction(r144,h),registration_satisfaction(r145,l),registration_satisfaction(r146,h),registration_satisfaction(r147,_G138133),registration_satisfaction(r148,_G138138),registration_satisfaction(r149,h),registration_satisfaction(r150,h),registration_satisfaction(r151,h),registration_satisfaction(r152,h),registration_satisfaction(r153,_G138163),registration_satisfaction(r154,m),registration_satisfaction(r155,_G138173),registration_satisfaction(r156,h),registration_satisfaction(r157,m),registration_satisfaction(r158,l),registration_satisfaction(r159,m),registration_satisfaction(r160,h),registration_satisfaction(r161,h),registration_satisfaction(r162,m),registration_satisfaction(r163,h),registration_satisfaction(r164,m),registration_satisfaction(r165,m),registration_satisfaction(r166,_G138228),registration_satisfaction(r167,_G138233),registration_satisfaction(r168,h),registration_satisfaction(r169,h),registration_satisfaction(r170,_G138248),registration_satisfaction(r171,_G138253),registration_satisfaction(r172,h),registration_satisfaction(r173,h),registration_satisfaction(r174,h),registration_satisfaction(r175,h),registration_satisfaction(r176,h),registration_satisfaction(r177,_G138283),registration_satisfaction(r178,_G138288),registration_satisfaction(r179,l),registration_satisfaction(r180,_G138298),registration_satisfaction(r181,m),registration_satisfaction(r182,h),registration_satisfaction(r183,l),registration_satisfaction(r184,h),registration_satisfaction(r185,_G138323),registration_satisfaction(r186,_G138328),registration_satisfaction(r187,h),registration_satisfaction(r188,m),registration_satisfaction(r189,h),registration_satisfaction(r190,h),registration_satisfaction(r191,h),registration_satisfaction(r192,_G138358),registration_satisfaction(r193,_G138363),registration_satisfaction(r194,_G138368),registration_satisfaction(r195,_G138373),registration_satisfaction(r196,h),registration_satisfaction(r197,_G138383),registration_satisfaction(r198,_G138388),registration_satisfaction(r199,h),registration_satisfaction(r200,_G138398),registration_satisfaction(r201,h),registration_satisfaction(r202,h),registration_satisfaction(r203,_G138413),registration_satisfaction(r204,h),registration_satisfaction(r205,_G138423),registration_satisfaction(r206,h),registration_satisfaction(r207,_G138433),registration_satisfaction(r208,_G138438),registration_satisfaction(r209,_G138443),registration_satisfaction(r210,h),registration_satisfaction(r211,m),registration_satisfaction(r212,h),registration_satisfaction(r213,_G138463),registration_satisfaction(r214,_G138468),registration_satisfaction(r215,h),registration_satisfaction(r216,_G138478),registration_satisfaction(r217,h),registration_satisfaction(r218,m),registration_satisfaction(r219,h),registration_satisfaction(r220,h),registration_satisfaction(r221,m),registration_satisfaction(r222,l),registration_satisfaction(r223,h),registration_satisfaction(r224,h),registration_satisfaction(r225,l),registration_satisfaction(r226,l),registration_satisfaction(r227,h),registration_satisfaction(r228,_G138538),registration_satisfaction(r229,l),registration_satisfaction(r230,h),registration_satisfaction(r231,_G138553),registration_satisfaction(r232,h),registration_satisfaction(r233,m),registration_satisfaction(r234,_G138568),registration_satisfaction(r235,_G138573),registration_satisfaction(r236,l),registration_satisfaction(r237,_G138583),registration_satisfaction(r238,m),registration_satisfaction(r239,_G138593),registration_satisfaction(r240,_G138598),registration_satisfaction(r241,_G138603),registration_satisfaction(r242,m),registration_satisfaction(r243,_G138613),registration_satisfaction(r244,_G138618),registration_satisfaction(r245,h),registration_satisfaction(r246,h),registration_satisfaction(r247,l),registration_satisfaction(r248,_G138638),registration_satisfaction(r249,h),registration_satisfaction(r250,h),registration_satisfaction(r251,h),registration_satisfaction(r252,_G138658),registration_satisfaction(r253,h),registration_satisfaction(r254,_G138668),registration_satisfaction(r255,_G138673),registration_satisfaction(r256,h),registration_satisfaction(r257,m),registration_satisfaction(r258,_G138688),registration_satisfaction(r259,h),registration_satisfaction(r260,h),registration_satisfaction(r261,h),registration_satisfaction(r262,_G138708),registration_satisfaction(r263,_G138713),registration_satisfaction(r264,h),registration_satisfaction(r265,h),registration_satisfaction(r266,_G138728),registration_satisfaction(r267,h),registration_satisfaction(r268,l),registration_satisfaction(r269,h),registration_satisfaction(r270,l),registration_satisfaction(r271,h),registration_satisfaction(r272,l),registration_satisfaction(r273,_G138763),registration_satisfaction(r274,_G138768),registration_satisfaction(r275,h),registration_satisfaction(r276,h),registration_satisfaction(r277,_G138783),registration_satisfaction(r278,_G138788),registration_satisfaction(r279,_G138793),registration_satisfaction(r280,h),registration_satisfaction(r281,m),registration_satisfaction(r282,h),registration_satisfaction(r283,h),registration_satisfaction(r284,m),registration_satisfaction(r285,m),registration_satisfaction(r286,h),registration_satisfaction(r287,_G138833),registration_satisfaction(r288,h),registration_satisfaction(r289,l),registration_satisfaction(r290,_G138848),registration_satisfaction(r291,h),registration_satisfaction(r292,_G138858),registration_satisfaction(r293,_G138863),registration_satisfaction(r294,h),registration_satisfaction(r295,m),registration_satisfaction(r296,l),registration_satisfaction(r297,h),registration_satisfaction(r298,h),registration_satisfaction(r299,_G138893),registration_satisfaction(r300,_G138898),registration_satisfaction(r301,_G138903),registration_satisfaction(r302,m),registration_satisfaction(r303,h),registration_satisfaction(r304,_G138918),registration_satisfaction(r305,l),registration_satisfaction(r306,h),registration_satisfaction(r307,_G138933),registration_satisfaction(r308,l),registration_satisfaction(r309,m),registration_satisfaction(r310,_G138948),registration_satisfaction(r311,l),registration_satisfaction(r312,_G138958),registration_satisfaction(r313,h),registration_satisfaction(r314,h),registration_satisfaction(r315,h),registration_satisfaction(r316,l),registration_satisfaction(r317,l),registration_satisfaction(r318,h),registration_satisfaction(r319,_G138993),registration_satisfaction(r320,_G138998),registration_satisfaction(r321,l),registration_satisfaction(r322,h),registration_satisfaction(r323,_G139013),registration_satisfaction(r324,h),registration_satisfaction(r325,h),registration_satisfaction(r326,h),registration_satisfaction(r327,m),registration_satisfaction(r328,h),registration_satisfaction(r329,h),registration_satisfaction(r330,l),registration_satisfaction(r331,h),registration_satisfaction(r332,l),registration_satisfaction(r333,h),registration_satisfaction(r334,_G139068),registration_satisfaction(r335,h),registration_satisfaction(r336,m),registration_satisfaction(r337,h),registration_satisfaction(r338,h),registration_satisfaction(r339,h),registration_satisfaction(r340,_G139098),registration_satisfaction(r341,l),registration_satisfaction(r342,h),registration_satisfaction(r343,_G139113),registration_satisfaction(r344,h),registration_satisfaction(r345,m),registration_satisfaction(r346,h),registration_satisfaction(r347,m),registration_satisfaction(r348,_G139138),registration_satisfaction(r349,h),registration_satisfaction(r350,m),registration_satisfaction(r351,_G139153),registration_satisfaction(r352,_G139158),registration_satisfaction(r353,h),registration_satisfaction(r354,h),registration_satisfaction(r355,_G139173),registration_satisfaction(r356,m),registration_satisfaction(r357,_G139183),registration_satisfaction(r358,h),registration_satisfaction(r359,_G139193),registration_satisfaction(r360,h),registration_satisfaction(r361,m),registration_satisfaction(r362,h),registration_satisfaction(r363,_G139213),registration_satisfaction(r364,_G139218),registration_satisfaction(r365,m),registration_satisfaction(r366,h),registration_satisfaction(r367,h),registration_satisfaction(r368,h),registration_satisfaction(r369,h),registration_satisfaction(r370,h),registration_satisfaction(r371,h),registration_satisfaction(r372,h),registration_satisfaction(r373,h),registration_satisfaction(r374,l),registration_satisfaction(r375,h),registration_satisfaction(r376,_G139278),registration_satisfaction(r377,h),registration_satisfaction(r378,h),registration_satisfaction(r379,_G139293),registration_satisfaction(r380,h),registration_satisfaction(r381,m),registration_satisfaction(r382,h),registration_satisfaction(r383,_G139313),registration_satisfaction(r384,_G139318),registration_satisfaction(r385,m),registration_satisfaction(r386,_G139328),registration_satisfaction(r387,_G139333),registration_satisfaction(r388,h),registration_satisfaction(r389,h),registration_satisfaction(r390,h),registration_satisfaction(r391,_G139353),registration_satisfaction(r392,_G139358),registration_satisfaction(r393,_G139363),registration_satisfaction(r394,h),registration_satisfaction(r395,h),registration_satisfaction(r396,_G139378),registration_satisfaction(r397,_G139383),registration_satisfaction(r398,_G139388),registration_satisfaction(r399,h),registration_satisfaction(r400,_G139398),registration_satisfaction(r401,l),registration_satisfaction(r402,_G139408),registration_satisfaction(r403,h),registration_satisfaction(r404,h),registration_satisfaction(r405,h),registration_satisfaction(r406,h),registration_satisfaction(r407,h),registration_satisfaction(r408,h),registration_satisfaction(r409,h),registration_satisfaction(r410,h),registration_satisfaction(r411,l),registration_satisfaction(r412,h),registration_satisfaction(r413,l),registration_satisfaction(r414,h),registration_satisfaction(r415,_G139473),registration_satisfaction(r416,h),registration_satisfaction(r417,h),registration_satisfaction(r418,_G139488),registration_satisfaction(r419,h),registration_satisfaction(r420,h),registration_satisfaction(r421,h),registration_satisfaction(r422,m),registration_satisfaction(r423,_G139513),registration_satisfaction(r424,h),registration_satisfaction(r425,_G139523),registration_satisfaction(r426,l),registration_satisfaction(r427,h),registration_satisfaction(r428,h),registration_satisfaction(r429,h),registration_satisfaction(r430,_G139548),registration_satisfaction(r431,m),registration_satisfaction(r432,h),registration_satisfaction(r433,h),registration_satisfaction(r434,h),registration_satisfaction(r435,m),registration_satisfaction(r436,_G139578),registration_satisfaction(r437,h),registration_satisfaction(r438,_G139588),registration_satisfaction(r439,h),registration_satisfaction(r440,_G139598),registration_satisfaction(r441,h),registration_satisfaction(r442,_G139608),registration_satisfaction(r443,h),registration_satisfaction(r444,h),registration_satisfaction(r445,h),registration_satisfaction(r446,_G139628),registration_satisfaction(r447,_G139633),registration_satisfaction(r448,_G139638),registration_satisfaction(r449,_G139643),registration_satisfaction(r450,h),registration_satisfaction(r451,_G139653),registration_satisfaction(r452,h),registration_satisfaction(r453,_G139663),registration_satisfaction(r454,_G139668),registration_satisfaction(r455,m),registration_satisfaction(r456,h),registration_satisfaction(r457,_G139683),registration_satisfaction(r458,_G139688),registration_satisfaction(r459,m),registration_satisfaction(r460,l),registration_satisfaction(r461,_G139703),registration_satisfaction(r462,_G139708),registration_satisfaction(r463,l),registration_satisfaction(r464,h),registration_satisfaction(r465,h),registration_satisfaction(r466,_G139728),registration_satisfaction(r467,h),registration_satisfaction(r468,h),registration_satisfaction(r469,h),registration_satisfaction(r470,h),registration_satisfaction(r471,h),registration_satisfaction(r472,h),registration_satisfaction(r473,l),registration_satisfaction(r474,m),registration_satisfaction(r475,h),registration_satisfaction(r476,l),registration_satisfaction(r477,m),registration_satisfaction(r478,_G139788),registration_satisfaction(r479,l),registration_satisfaction(r480,h),registration_satisfaction(r481,m),registration_satisfaction(r482,h),registration_satisfaction(r483,h),registration_satisfaction(r484,m),registration_satisfaction(r485,_G139823),registration_satisfaction(r486,h),registration_satisfaction(r487,_G139833),registration_satisfaction(r488,_G139838),registration_satisfaction(r489,_G139843),registration_satisfaction(r490,m),registration_satisfaction(r491,l),registration_satisfaction(r492,h),registration_satisfaction(r493,h),registration_satisfaction(r494,_G139868),registration_satisfaction(r495,h),registration_satisfaction(r496,h),registration_satisfaction(r497,_G139883),registration_satisfaction(r498,l),registration_satisfaction(r499,h),registration_satisfaction(r500,m),registration_satisfaction(r501,h),registration_satisfaction(r502,h),registration_satisfaction(r503,_G139913),registration_satisfaction(r504,m),registration_satisfaction(r505,h),registration_satisfaction(r506,h),registration_satisfaction(r507,_G139933),registration_satisfaction(r508,_G139938),registration_satisfaction(r509,_G139943),registration_satisfaction(r510,h),registration_satisfaction(r511,l),registration_satisfaction(r512,h),registration_satisfaction(r513,h),registration_satisfaction(r514,h),registration_satisfaction(r515,l),registration_satisfaction(r516,h),registration_satisfaction(r517,m),registration_satisfaction(r518,h),registration_satisfaction(r519,h),registration_satisfaction(r520,h),registration_satisfaction(r521,h),registration_satisfaction(r522,_G140008),registration_satisfaction(r523,h),registration_satisfaction(r524,_G140018),registration_satisfaction(r525,_G140023),registration_satisfaction(r526,h),registration_satisfaction(r527,l),registration_satisfaction(r528,h),registration_satisfaction(r529,h),registration_satisfaction(r530,h),registration_satisfaction(r531,m),registration_satisfaction(r532,h),registration_satisfaction(r533,_G140063),registration_satisfaction(r534,l),registration_satisfaction(r535,m),registration_satisfaction(r536,h),registration_satisfaction(r537,h),registration_satisfaction(r538,_G140088),registration_satisfaction(r539,h),registration_satisfaction(r540,m),registration_satisfaction(r541,h),registration_satisfaction(r542,h),registration_satisfaction(r543,_G140113),registration_satisfaction(r544,h),registration_satisfaction(r545,_G140123),registration_satisfaction(r546,h),registration_satisfaction(r547,l),registration_satisfaction(r548,h),registration_satisfaction(r549,h),registration_satisfaction(r550,h),registration_satisfaction(r551,_G140153),registration_satisfaction(r552,_G140158),registration_satisfaction(r553,m),registration_satisfaction(r554,_G140168),registration_satisfaction(r555,m),registration_satisfaction(r556,h),registration_satisfaction(r557,_G140183),registration_satisfaction(r558,_G140188),registration_satisfaction(r559,h),registration_satisfaction(r560,h),registration_satisfaction(r561,h),registration_satisfaction(r562,h),registration_satisfaction(r563,_G140213),registration_satisfaction(r564,_G140218),registration_satisfaction(r565,_G140223),registration_satisfaction(r566,_G140228),registration_satisfaction(r567,h),registration_satisfaction(r568,h),registration_satisfaction(r569,h),registration_satisfaction(r570,h),registration_satisfaction(r571,_G140253),registration_satisfaction(r572,_G140258),registration_satisfaction(r573,_G140263),registration_satisfaction(r574,_G140268),registration_satisfaction(r575,h),registration_satisfaction(r576,h),registration_satisfaction(r577,h),registration_satisfaction(r578,_G140288),registration_satisfaction(r579,h),registration_satisfaction(r580,m),registration_satisfaction(r581,h),registration_satisfaction(r582,_G140308),registration_satisfaction(r583,_G140313),registration_satisfaction(r584,_G140318),registration_satisfaction(r585,h),registration_satisfaction(r586,m),registration_satisfaction(r587,_G140333),registration_satisfaction(r588,l),registration_satisfaction(r589,l),registration_satisfaction(r590,h),registration_satisfaction(r591,_G140353),registration_satisfaction(r592,h),registration_satisfaction(r593,_G140363),registration_satisfaction(r594,l),registration_satisfaction(r595,_G140373),registration_satisfaction(r596,h),registration_satisfaction(r597,h),registration_satisfaction(r598,h),registration_satisfaction(r599,_G140393),registration_satisfaction(r600,_G140398),registration_satisfaction(r601,m),registration_satisfaction(r602,h),registration_satisfaction(r603,_G140413),registration_satisfaction(r604,l),registration_satisfaction(r605,h),registration_satisfaction(r606,h),registration_satisfaction(r607,l),registration_satisfaction(r608,h),registration_satisfaction(r609,h),registration_satisfaction(r610,h),registration_satisfaction(r611,_G140453),registration_satisfaction(r612,l),registration_satisfaction(r613,h),registration_satisfaction(r614,_G140468),registration_satisfaction(r615,l),registration_satisfaction(r616,_G140478),registration_satisfaction(r617,h),registration_satisfaction(r618,h),registration_satisfaction(r619,h),registration_satisfaction(r620,h),registration_satisfaction(r621,_G140503),registration_satisfaction(r622,h),registration_satisfaction(r623,l),registration_satisfaction(r624,m),registration_satisfaction(r625,l),registration_satisfaction(r626,h),registration_satisfaction(r627,_G140533),registration_satisfaction(r628,_G140538),registration_satisfaction(r629,_G140543),registration_satisfaction(r630,h),registration_satisfaction(r631,_G140553),registration_satisfaction(r632,h),registration_satisfaction(r633,h),registration_satisfaction(r634,_G140568),registration_satisfaction(r635,_G140573),registration_satisfaction(r636,l),registration_satisfaction(r637,m),registration_satisfaction(r638,_G140588),registration_satisfaction(r639,_G140593),registration_satisfaction(r640,h),registration_satisfaction(r641,h),registration_satisfaction(r642,h),registration_satisfaction(r643,h),registration_satisfaction(r644,h),registration_satisfaction(r645,h),registration_satisfaction(r646,_G140628),registration_satisfaction(r647,_G140633),registration_satisfaction(r648,h),registration_satisfaction(r649,h),registration_satisfaction(r650,h),registration_satisfaction(r651,_G140653),registration_satisfaction(r652,_G140658),registration_satisfaction(r653,l),registration_satisfaction(r654,h),registration_satisfaction(r655,h),registration_satisfaction(r656,_G140678),registration_satisfaction(r657,h),registration_satisfaction(r658,h),registration_satisfaction(r659,_G140693),registration_satisfaction(r660,_G140698),registration_satisfaction(r661,_G140703),registration_satisfaction(r662,_G140708),registration_satisfaction(r663,h),registration_satisfaction(r664,_G140718),registration_satisfaction(r665,h),registration_satisfaction(r666,_G140728),registration_satisfaction(r667,h),registration_satisfaction(r668,_G140738),registration_satisfaction(r669,_G140743),registration_satisfaction(r670,h),registration_satisfaction(r671,_G140753),registration_satisfaction(r672,_G140758),registration_satisfaction(r673,_G140763),registration_satisfaction(r674,h),registration_satisfaction(r675,_G140773),registration_satisfaction(r676,h),registration_satisfaction(r677,h),registration_satisfaction(r678,_G140788),registration_satisfaction(r679,_G140793),registration_satisfaction(r680,m),registration_satisfaction(r681,h),registration_satisfaction(r682,h),registration_satisfaction(r683,h),registration_satisfaction(r684,m),registration_satisfaction(r685,h),registration_satisfaction(r686,_G140828),registration_satisfaction(r687,l),registration_satisfaction(r688,h),registration_satisfaction(r689,m),registration_satisfaction(r690,h),registration_satisfaction(r691,h),registration_satisfaction(r692,h),registration_satisfaction(r693,h),registration_satisfaction(r694,h),registration_satisfaction(r695,h),registration_satisfaction(r696,_G140878),registration_satisfaction(r697,m),registration_satisfaction(r698,h),registration_satisfaction(r699,h),registration_satisfaction(r700,h),registration_satisfaction(r701,h),registration_satisfaction(r702,h),registration_satisfaction(r703,_G140913),registration_satisfaction(r704,l),registration_satisfaction(r705,l),registration_satisfaction(r706,_G140928),registration_satisfaction(r707,h),registration_satisfaction(r708,l),registration_satisfaction(r709,_G140943),registration_satisfaction(r710,_G140948),registration_satisfaction(r711,h),registration_satisfaction(r712,_G140958),registration_satisfaction(r713,h),registration_satisfaction(r714,_G140968),registration_satisfaction(r715,h),registration_satisfaction(r716,_G140978),registration_satisfaction(r717,_G140983),registration_satisfaction(r718,l),registration_satisfaction(r719,l),registration_satisfaction(r720,_G140998),registration_satisfaction(r721,h),registration_satisfaction(r722,h),registration_satisfaction(r723,_G141013),registration_satisfaction(r724,_G141018),registration_satisfaction(r725,_G141023),registration_satisfaction(r726,h),registration_satisfaction(r727,h),registration_satisfaction(r728,_G141038),registration_satisfaction(r729,h),registration_satisfaction(r730,_G141048),registration_satisfaction(r731,_G141053),registration_satisfaction(r732,_G141058),registration_satisfaction(r733,h),registration_satisfaction(r734,_G141068),registration_satisfaction(r735,_G141073),registration_satisfaction(r736,h),registration_satisfaction(r737,_G141083),registration_satisfaction(r738,h),registration_satisfaction(r739,h),registration_satisfaction(r740,h),registration_satisfaction(r741,h),registration_satisfaction(r742,h),registration_satisfaction(r743,h),registration_satisfaction(r744,_G141118),registration_satisfaction(r745,m),registration_satisfaction(r746,h),registration_satisfaction(r747,_G141133),registration_satisfaction(r748,h),registration_satisfaction(r749,m),registration_satisfaction(r750,h),registration_satisfaction(r751,h),registration_satisfaction(r752,m),registration_satisfaction(r753,m),registration_satisfaction(r754,h),registration_satisfaction(r755,_G141173),registration_satisfaction(r756,h),registration_satisfaction(r757,h),registration_satisfaction(r758,h),registration_satisfaction(r759,l),registration_satisfaction(r760,h),registration_satisfaction(r761,h),registration_satisfaction(r762,m),registration_satisfaction(r763,h),registration_satisfaction(r764,h),registration_satisfaction(r765,h),registration_satisfaction(r766,h),registration_satisfaction(r767,h),registration_satisfaction(r768,_G141238),registration_satisfaction(r769,l),registration_satisfaction(r770,m),registration_satisfaction(r771,m),registration_satisfaction(r772,h),registration_satisfaction(r773,m),registration_satisfaction(r774,h),registration_satisfaction(r775,h),registration_satisfaction(r776,_G141278),registration_satisfaction(r777,l),registration_satisfaction(r778,h),registration_satisfaction(r779,_G141293),registration_satisfaction(r780,h),registration_satisfaction(r781,m),registration_satisfaction(r782,_G141308),registration_satisfaction(r783,m),registration_satisfaction(r784,_G141318),registration_satisfaction(r785,_G141323),registration_satisfaction(r786,h),registration_satisfaction(r787,h),registration_satisfaction(r788,_G141338),registration_satisfaction(r789,h),registration_satisfaction(r790,h),registration_satisfaction(r791,h),registration_satisfaction(r792,_G141358),registration_satisfaction(r793,m),registration_satisfaction(r794,l),registration_satisfaction(r795,h),registration_satisfaction(r796,h),registration_satisfaction(r797,h),registration_satisfaction(r798,m),registration_satisfaction(r799,m),registration_satisfaction(r800,_G141398),registration_satisfaction(r801,h),registration_satisfaction(r802,h),registration_satisfaction(r803,h),registration_satisfaction(r804,h),registration_satisfaction(r805,_G141423),registration_satisfaction(r806,_G141428),registration_satisfaction(r807,l),registration_satisfaction(r808,m),registration_satisfaction(r809,l),registration_satisfaction(r810,h),registration_satisfaction(r811,l),registration_satisfaction(r812,h),registration_satisfaction(r813,_G141463),registration_satisfaction(r814,_G141468),registration_satisfaction(r815,h),registration_satisfaction(r816,_G141478),registration_satisfaction(r817,h),registration_satisfaction(r818,l),registration_satisfaction(r819,_G141493),registration_satisfaction(r820,h),registration_satisfaction(r821,m),registration_satisfaction(r822,m),registration_satisfaction(r823,h),registration_satisfaction(r824,_G141518),registration_satisfaction(r825,l),registration_satisfaction(r826,l),registration_satisfaction(r827,l),registration_satisfaction(r828,_G141538),registration_satisfaction(r829,l),registration_satisfaction(r830,h),registration_satisfaction(r831,_G141553),registration_satisfaction(r832,_G141558),registration_satisfaction(r833,h),registration_satisfaction(r834,h),registration_satisfaction(r835,h),registration_satisfaction(r836,h),registration_satisfaction(r837,_G141583),registration_satisfaction(r838,l),registration_satisfaction(r839,m),registration_satisfaction(r840,m),registration_satisfaction(r841,h),registration_satisfaction(r842,h),registration_satisfaction(r843,h),registration_satisfaction(r844,h),registration_satisfaction(r845,l),registration_satisfaction(r846,_G141628),registration_satisfaction(r847,h),registration_satisfaction(r848,l),registration_satisfaction(r849,h),registration_satisfaction(r850,_G141648),registration_satisfaction(r851,_G141653),registration_satisfaction(r852,h),registration_satisfaction(r853,h),registration_satisfaction(r854,_G141668),registration_satisfaction(r855,h),registration_satisfaction(r856,l)]) \ No newline at end of file diff --git a/packages/CLPBN/horus/benchmarks/school/missing5.yap b/packages/CLPBN/horus/benchmarks/school/missing5.yap new file mode 100644 index 000000000..704684aa0 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/school/missing5.yap @@ -0,0 +1 @@ +graph([professor_ability(p0,h),professor_ability(p1,_G131198),professor_ability(p2,m),professor_ability(p3,m),professor_ability(p4,h),professor_ability(p5,h),professor_ability(p6,l),professor_ability(p7,l),professor_ability(p8,m),professor_ability(p9,h),professor_ability(p10,m),professor_ability(p11,h),professor_ability(p12,h),professor_ability(p13,m),professor_ability(p14,m),professor_ability(p15,m),professor_ability(p16,m),professor_ability(p17,m),professor_ability(p18,_G131283),professor_ability(p19,h),professor_ability(p20,h),professor_ability(p21,h),professor_ability(p22,m),professor_ability(p23,m),professor_ability(p24,l),professor_ability(p25,m),professor_ability(p26,h),professor_ability(p27,h),professor_ability(p28,h),professor_ability(p29,m),professor_ability(p30,m),professor_ability(p31,h),professor_popularity(p0,h),professor_popularity(p1,h),professor_popularity(p2,l),professor_popularity(p3,h),professor_popularity(p4,h),professor_popularity(p5,h),professor_popularity(p6,l),professor_popularity(p7,l),professor_popularity(p8,m),professor_popularity(p9,h),professor_popularity(p10,l),professor_popularity(p11,_G131408),professor_popularity(p12,h),professor_popularity(p13,l),professor_popularity(p14,m),professor_popularity(p15,h),professor_popularity(p16,m),professor_popularity(p17,h),professor_popularity(p18,l),professor_popularity(p19,h),professor_popularity(p20,h),professor_popularity(p21,h),professor_popularity(p22,h),professor_popularity(p23,l),professor_popularity(p24,l),professor_popularity(p25,l),professor_popularity(p26,m),professor_popularity(p27,h),professor_popularity(p28,h),professor_popularity(p29,l),professor_popularity(p30,m),professor_popularity(p31,h),registration_grade(r0,_G131513),registration_grade(r1,c),registration_grade(r2,c),registration_grade(r3,c),registration_grade(r4,_G131533),registration_grade(r5,c),registration_grade(r6,a),registration_grade(r7,a),registration_grade(r8,b),registration_grade(r9,a),registration_grade(r10,a),registration_grade(r11,a),registration_grade(r12,a),registration_grade(r13,a),registration_grade(r14,b),registration_grade(r15,b),registration_grade(r16,a),registration_grade(r17,b),registration_grade(r18,c),registration_grade(r19,c),registration_grade(r20,c),registration_grade(r21,a),registration_grade(r22,a),registration_grade(r23,b),registration_grade(r24,b),registration_grade(r25,a),registration_grade(r26,a),registration_grade(r27,b),registration_grade(r28,c),registration_grade(r29,b),registration_grade(r30,c),registration_grade(r31,b),registration_grade(r32,c),registration_grade(r33,a),registration_grade(r34,c),registration_grade(r35,c),registration_grade(r36,a),registration_grade(r37,a),registration_grade(r38,_G131703),registration_grade(r39,a),registration_grade(r40,a),registration_grade(r41,c),registration_grade(r42,b),registration_grade(r43,a),registration_grade(r44,a),registration_grade(r45,_G131738),registration_grade(r46,a),registration_grade(r47,_G131748),registration_grade(r48,b),registration_grade(r49,b),registration_grade(r50,b),registration_grade(r51,b),registration_grade(r52,b),registration_grade(r53,a),registration_grade(r54,b),registration_grade(r55,a),registration_grade(r56,c),registration_grade(r57,c),registration_grade(r58,a),registration_grade(r59,c),registration_grade(r60,a),registration_grade(r61,a),registration_grade(r62,a),registration_grade(r63,b),registration_grade(r64,b),registration_grade(r65,b),registration_grade(r66,_G131843),registration_grade(r67,b),registration_grade(r68,a),registration_grade(r69,_G131858),registration_grade(r70,c),registration_grade(r71,b),registration_grade(r72,a),registration_grade(r73,b),registration_grade(r74,_G131883),registration_grade(r75,b),registration_grade(r76,c),registration_grade(r77,a),registration_grade(r78,b),registration_grade(r79,a),registration_grade(r80,b),registration_grade(r81,b),registration_grade(r82,a),registration_grade(r83,a),registration_grade(r84,c),registration_grade(r85,b),registration_grade(r86,b),registration_grade(r87,b),registration_grade(r88,c),registration_grade(r89,c),registration_grade(r90,c),registration_grade(r91,a),registration_grade(r92,d),registration_grade(r93,b),registration_grade(r94,c),registration_grade(r95,b),registration_grade(r96,a),registration_grade(r97,a),registration_grade(r98,b),registration_grade(r99,b),registration_grade(r100,a),registration_grade(r101,a),registration_grade(r102,a),registration_grade(r103,b),registration_grade(r104,_G132033),registration_grade(r105,c),registration_grade(r106,b),registration_grade(r107,b),registration_grade(r108,b),registration_grade(r109,b),registration_grade(r110,a),registration_grade(r111,a),registration_grade(r112,a),registration_grade(r113,c),registration_grade(r114,c),registration_grade(r115,d),registration_grade(r116,b),registration_grade(r117,c),registration_grade(r118,a),registration_grade(r119,b),registration_grade(r120,b),registration_grade(r121,c),registration_grade(r122,b),registration_grade(r123,a),registration_grade(r124,a),registration_grade(r125,b),registration_grade(r126,b),registration_grade(r127,b),registration_grade(r128,a),registration_grade(r129,c),registration_grade(r130,a),registration_grade(r131,a),registration_grade(r132,b),registration_grade(r133,a),registration_grade(r134,a),registration_grade(r135,b),registration_grade(r136,a),registration_grade(r137,b),registration_grade(r138,a),registration_grade(r139,a),registration_grade(r140,a),registration_grade(r141,b),registration_grade(r142,b),registration_grade(r143,b),registration_grade(r144,c),registration_grade(r145,b),registration_grade(r146,a),registration_grade(r147,a),registration_grade(r148,a),registration_grade(r149,a),registration_grade(r150,_G132263),registration_grade(r151,a),registration_grade(r152,a),registration_grade(r153,b),registration_grade(r154,a),registration_grade(r155,c),registration_grade(r156,b),registration_grade(r157,b),registration_grade(r158,c),registration_grade(r159,b),registration_grade(r160,_G132313),registration_grade(r161,a),registration_grade(r162,b),registration_grade(r163,a),registration_grade(r164,b),registration_grade(r165,b),registration_grade(r166,c),registration_grade(r167,a),registration_grade(r168,a),registration_grade(r169,a),registration_grade(r170,a),registration_grade(r171,_G132368),registration_grade(r172,c),registration_grade(r173,b),registration_grade(r174,a),registration_grade(r175,b),registration_grade(r176,b),registration_grade(r177,c),registration_grade(r178,b),registration_grade(r179,d),registration_grade(r180,c),registration_grade(r181,a),registration_grade(r182,b),registration_grade(r183,a),registration_grade(r184,a),registration_grade(r185,b),registration_grade(r186,c),registration_grade(r187,a),registration_grade(r188,a),registration_grade(r189,a),registration_grade(r190,a),registration_grade(r191,b),registration_grade(r192,b),registration_grade(r193,c),registration_grade(r194,b),registration_grade(r195,c),registration_grade(r196,b),registration_grade(r197,a),registration_grade(r198,a),registration_grade(r199,b),registration_grade(r200,b),registration_grade(r201,c),registration_grade(r202,a),registration_grade(r203,_G132528),registration_grade(r204,b),registration_grade(r205,a),registration_grade(r206,a),registration_grade(r207,_G132548),registration_grade(r208,c),registration_grade(r209,b),registration_grade(r210,a),registration_grade(r211,d),registration_grade(r212,b),registration_grade(r213,b),registration_grade(r214,a),registration_grade(r215,a),registration_grade(r216,b),registration_grade(r217,_G132598),registration_grade(r218,b),registration_grade(r219,a),registration_grade(r220,a),registration_grade(r221,b),registration_grade(r222,c),registration_grade(r223,a),registration_grade(r224,b),registration_grade(r225,b),registration_grade(r226,d),registration_grade(r227,b),registration_grade(r228,c),registration_grade(r229,b),registration_grade(r230,a),registration_grade(r231,c),registration_grade(r232,a),registration_grade(r233,b),registration_grade(r234,b),registration_grade(r235,c),registration_grade(r236,b),registration_grade(r237,c),registration_grade(r238,d),registration_grade(r239,b),registration_grade(r240,b),registration_grade(r241,a),registration_grade(r242,b),registration_grade(r243,a),registration_grade(r244,b),registration_grade(r245,a),registration_grade(r246,b),registration_grade(r247,c),registration_grade(r248,b),registration_grade(r249,a),registration_grade(r250,a),registration_grade(r251,a),registration_grade(r252,_G132773),registration_grade(r253,a),registration_grade(r254,b),registration_grade(r255,a),registration_grade(r256,a),registration_grade(r257,b),registration_grade(r258,a),registration_grade(r259,a),registration_grade(r260,b),registration_grade(r261,a),registration_grade(r262,a),registration_grade(r263,a),registration_grade(r264,c),registration_grade(r265,_G132838),registration_grade(r266,a),registration_grade(r267,a),registration_grade(r268,c),registration_grade(r269,a),registration_grade(r270,c),registration_grade(r271,b),registration_grade(r272,c),registration_grade(r273,b),registration_grade(r274,c),registration_grade(r275,a),registration_grade(r276,a),registration_grade(r277,a),registration_grade(r278,a),registration_grade(r279,a),registration_grade(r280,b),registration_grade(r281,b),registration_grade(r282,d),registration_grade(r283,a),registration_grade(r284,b),registration_grade(r285,b),registration_grade(r286,a),registration_grade(r287,b),registration_grade(r288,b),registration_grade(r289,d),registration_grade(r290,b),registration_grade(r291,c),registration_grade(r292,b),registration_grade(r293,a),registration_grade(r294,a),registration_grade(r295,a),registration_grade(r296,_G132993),registration_grade(r297,_G132998),registration_grade(r298,_G133003),registration_grade(r299,a),registration_grade(r300,b),registration_grade(r301,b),registration_grade(r302,b),registration_grade(r303,a),registration_grade(r304,a),registration_grade(r305,b),registration_grade(r306,b),registration_grade(r307,c),registration_grade(r308,_G133053),registration_grade(r309,c),registration_grade(r310,a),registration_grade(r311,a),registration_grade(r312,a),registration_grade(r313,a),registration_grade(r314,c),registration_grade(r315,c),registration_grade(r316,c),registration_grade(r317,c),registration_grade(r318,c),registration_grade(r319,c),registration_grade(r320,b),registration_grade(r321,b),registration_grade(r322,a),registration_grade(r323,c),registration_grade(r324,b),registration_grade(r325,b),registration_grade(r326,a),registration_grade(r327,c),registration_grade(r328,b),registration_grade(r329,a),registration_grade(r330,b),registration_grade(r331,a),registration_grade(r332,a),registration_grade(r333,a),registration_grade(r334,c),registration_grade(r335,_G133188),registration_grade(r336,b),registration_grade(r337,b),registration_grade(r338,b),registration_grade(r339,_G133208),registration_grade(r340,_G133213),registration_grade(r341,b),registration_grade(r342,b),registration_grade(r343,a),registration_grade(r344,c),registration_grade(r345,b),registration_grade(r346,b),registration_grade(r347,b),registration_grade(r348,a),registration_grade(r349,a),registration_grade(r350,b),registration_grade(r351,b),registration_grade(r352,d),registration_grade(r353,c),registration_grade(r354,c),registration_grade(r355,_G133288),registration_grade(r356,b),registration_grade(r357,b),registration_grade(r358,a),registration_grade(r359,a),registration_grade(r360,a),registration_grade(r361,b),registration_grade(r362,c),registration_grade(r363,c),registration_grade(r364,b),registration_grade(r365,b),registration_grade(r366,b),registration_grade(r367,b),registration_grade(r368,a),registration_grade(r369,c),registration_grade(r370,b),registration_grade(r371,a),registration_grade(r372,a),registration_grade(r373,a),registration_grade(r374,b),registration_grade(r375,b),registration_grade(r376,a),registration_grade(r377,a),registration_grade(r378,a),registration_grade(r379,c),registration_grade(r380,a),registration_grade(r381,c),registration_grade(r382,a),registration_grade(r383,a),registration_grade(r384,b),registration_grade(r385,b),registration_grade(r386,d),registration_grade(r387,a),registration_grade(r388,a),registration_grade(r389,a),registration_grade(r390,_G133463),registration_grade(r391,b),registration_grade(r392,b),registration_grade(r393,b),registration_grade(r394,c),registration_grade(r395,b),registration_grade(r396,b),registration_grade(r397,a),registration_grade(r398,b),registration_grade(r399,c),registration_grade(r400,a),registration_grade(r401,c),registration_grade(r402,_G133523),registration_grade(r403,a),registration_grade(r404,a),registration_grade(r405,a),registration_grade(r406,_G133543),registration_grade(r407,b),registration_grade(r408,a),registration_grade(r409,a),registration_grade(r410,b),registration_grade(r411,b),registration_grade(r412,a),registration_grade(r413,a),registration_grade(r414,a),registration_grade(r415,b),registration_grade(r416,b),registration_grade(r417,d),registration_grade(r418,a),registration_grade(r419,a),registration_grade(r420,a),registration_grade(r421,c),registration_grade(r422,b),registration_grade(r423,b),registration_grade(r424,a),registration_grade(r425,b),registration_grade(r426,c),registration_grade(r427,c),registration_grade(r428,c),registration_grade(r429,c),registration_grade(r430,b),registration_grade(r431,d),registration_grade(r432,c),registration_grade(r433,a),registration_grade(r434,a),registration_grade(r435,c),registration_grade(r436,a),registration_grade(r437,c),registration_grade(r438,b),registration_grade(r439,b),registration_grade(r440,c),registration_grade(r441,a),registration_grade(r442,c),registration_grade(r443,a),registration_grade(r444,a),registration_grade(r445,a),registration_grade(r446,a),registration_grade(r447,d),registration_grade(r448,c),registration_grade(r449,b),registration_grade(r450,a),registration_grade(r451,a),registration_grade(r452,b),registration_grade(r453,d),registration_grade(r454,d),registration_grade(r455,c),registration_grade(r456,c),registration_grade(r457,a),registration_grade(r458,b),registration_grade(r459,_G133808),registration_grade(r460,a),registration_grade(r461,b),registration_grade(r462,a),registration_grade(r463,d),registration_grade(r464,a),registration_grade(r465,a),registration_grade(r466,b),registration_grade(r467,b),registration_grade(r468,a),registration_grade(r469,a),registration_grade(r470,c),registration_grade(r471,b),registration_grade(r472,a),registration_grade(r473,c),registration_grade(r474,b),registration_grade(r475,a),registration_grade(r476,c),registration_grade(r477,b),registration_grade(r478,a),registration_grade(r479,b),registration_grade(r480,a),registration_grade(r481,b),registration_grade(r482,_G133923),registration_grade(r483,a),registration_grade(r484,a),registration_grade(r485,a),registration_grade(r486,a),registration_grade(r487,a),registration_grade(r488,a),registration_grade(r489,b),registration_grade(r490,c),registration_grade(r491,c),registration_grade(r492,b),registration_grade(r493,a),registration_grade(r494,_G133983),registration_grade(r495,b),registration_grade(r496,a),registration_grade(r497,c),registration_grade(r498,b),registration_grade(r499,c),registration_grade(r500,b),registration_grade(r501,a),registration_grade(r502,a),registration_grade(r503,c),registration_grade(r504,b),registration_grade(r505,c),registration_grade(r506,c),registration_grade(r507,a),registration_grade(r508,c),registration_grade(r509,b),registration_grade(r510,a),registration_grade(r511,c),registration_grade(r512,b),registration_grade(r513,b),registration_grade(r514,c),registration_grade(r515,c),registration_grade(r516,a),registration_grade(r517,b),registration_grade(r518,a),registration_grade(r519,a),registration_grade(r520,b),registration_grade(r521,a),registration_grade(r522,b),registration_grade(r523,a),registration_grade(r524,b),registration_grade(r525,c),registration_grade(r526,c),registration_grade(r527,c),registration_grade(r528,a),registration_grade(r529,b),registration_grade(r530,a),registration_grade(r531,b),registration_grade(r532,a),registration_grade(r533,a),registration_grade(r534,b),registration_grade(r535,c),registration_grade(r536,a),registration_grade(r537,a),registration_grade(r538,a),registration_grade(r539,b),registration_grade(r540,_G134213),registration_grade(r541,c),registration_grade(r542,a),registration_grade(r543,a),registration_grade(r544,b),registration_grade(r545,a),registration_grade(r546,b),registration_grade(r547,c),registration_grade(r548,c),registration_grade(r549,b),registration_grade(r550,a),registration_grade(r551,a),registration_grade(r552,c),registration_grade(r553,b),registration_grade(r554,b),registration_grade(r555,b),registration_grade(r556,a),registration_grade(r557,a),registration_grade(r558,a),registration_grade(r559,b),registration_grade(r560,b),registration_grade(r561,a),registration_grade(r562,a),registration_grade(r563,a),registration_grade(r564,b),registration_grade(r565,d),registration_grade(r566,c),registration_grade(r567,a),registration_grade(r568,a),registration_grade(r569,a),registration_grade(r570,c),registration_grade(r571,c),registration_grade(r572,b),registration_grade(r573,a),registration_grade(r574,c),registration_grade(r575,a),registration_grade(r576,a),registration_grade(r577,a),registration_grade(r578,b),registration_grade(r579,a),registration_grade(r580,b),registration_grade(r581,a),registration_grade(r582,a),registration_grade(r583,a),registration_grade(r584,a),registration_grade(r585,c),registration_grade(r586,b),registration_grade(r587,c),registration_grade(r588,c),registration_grade(r589,c),registration_grade(r590,b),registration_grade(r591,c),registration_grade(r592,b),registration_grade(r593,b),registration_grade(r594,c),registration_grade(r595,b),registration_grade(r596,a),registration_grade(r597,a),registration_grade(r598,a),registration_grade(r599,a),registration_grade(r600,a),registration_grade(r601,b),registration_grade(r602,a),registration_grade(r603,d),registration_grade(r604,c),registration_grade(r605,a),registration_grade(r606,a),registration_grade(r607,b),registration_grade(r608,a),registration_grade(r609,b),registration_grade(r610,_G134563),registration_grade(r611,a),registration_grade(r612,c),registration_grade(r613,a),registration_grade(r614,d),registration_grade(r615,b),registration_grade(r616,a),registration_grade(r617,a),registration_grade(r618,b),registration_grade(r619,a),registration_grade(r620,a),registration_grade(r621,a),registration_grade(r622,b),registration_grade(r623,b),registration_grade(r624,a),registration_grade(r625,c),registration_grade(r626,a),registration_grade(r627,b),registration_grade(r628,a),registration_grade(r629,b),registration_grade(r630,c),registration_grade(r631,a),registration_grade(r632,a),registration_grade(r633,b),registration_grade(r634,b),registration_grade(r635,b),registration_grade(r636,d),registration_grade(r637,c),registration_grade(r638,a),registration_grade(r639,b),registration_grade(r640,c),registration_grade(r641,c),registration_grade(r642,c),registration_grade(r643,_G134728),registration_grade(r644,a),registration_grade(r645,b),registration_grade(r646,b),registration_grade(r647,b),registration_grade(r648,a),registration_grade(r649,_G134758),registration_grade(r650,c),registration_grade(r651,b),registration_grade(r652,b),registration_grade(r653,b),registration_grade(r654,b),registration_grade(r655,a),registration_grade(r656,b),registration_grade(r657,a),registration_grade(r658,a),registration_grade(r659,a),registration_grade(r660,a),registration_grade(r661,c),registration_grade(r662,a),registration_grade(r663,a),registration_grade(r664,c),registration_grade(r665,a),registration_grade(r666,b),registration_grade(r667,b),registration_grade(r668,d),registration_grade(r669,b),registration_grade(r670,a),registration_grade(r671,c),registration_grade(r672,c),registration_grade(r673,_G134878),registration_grade(r674,a),registration_grade(r675,b),registration_grade(r676,a),registration_grade(r677,a),registration_grade(r678,a),registration_grade(r679,a),registration_grade(r680,c),registration_grade(r681,b),registration_grade(r682,a),registration_grade(r683,b),registration_grade(r684,b),registration_grade(r685,a),registration_grade(r686,b),registration_grade(r687,a),registration_grade(r688,c),registration_grade(r689,_G134958),registration_grade(r690,a),registration_grade(r691,c),registration_grade(r692,a),registration_grade(r693,b),registration_grade(r694,a),registration_grade(r695,a),registration_grade(r696,a),registration_grade(r697,c),registration_grade(r698,b),registration_grade(r699,a),registration_grade(r700,a),registration_grade(r701,a),registration_grade(r702,a),registration_grade(r703,c),registration_grade(r704,c),registration_grade(r705,b),registration_grade(r706,b),registration_grade(r707,a),registration_grade(r708,b),registration_grade(r709,b),registration_grade(r710,b),registration_grade(r711,b),registration_grade(r712,_G135073),registration_grade(r713,a),registration_grade(r714,b),registration_grade(r715,a),registration_grade(r716,a),registration_grade(r717,a),registration_grade(r718,a),registration_grade(r719,c),registration_grade(r720,a),registration_grade(r721,_G135118),registration_grade(r722,b),registration_grade(r723,b),registration_grade(r724,a),registration_grade(r725,_G135138),registration_grade(r726,a),registration_grade(r727,a),registration_grade(r728,b),registration_grade(r729,b),registration_grade(r730,c),registration_grade(r731,a),registration_grade(r732,a),registration_grade(r733,a),registration_grade(r734,b),registration_grade(r735,b),registration_grade(r736,a),registration_grade(r737,b),registration_grade(r738,b),registration_grade(r739,a),registration_grade(r740,a),registration_grade(r741,a),registration_grade(r742,d),registration_grade(r743,d),registration_grade(r744,a),registration_grade(r745,b),registration_grade(r746,a),registration_grade(r747,a),registration_grade(r748,_G135253),registration_grade(r749,c),registration_grade(r750,a),registration_grade(r751,c),registration_grade(r752,b),registration_grade(r753,c),registration_grade(r754,c),registration_grade(r755,c),registration_grade(r756,b),registration_grade(r757,c),registration_grade(r758,b),registration_grade(r759,b),registration_grade(r760,a),registration_grade(r761,a),registration_grade(r762,b),registration_grade(r763,a),registration_grade(r764,a),registration_grade(r765,a),registration_grade(r766,c),registration_grade(r767,c),registration_grade(r768,c),registration_grade(r769,c),registration_grade(r770,b),registration_grade(r771,b),registration_grade(r772,a),registration_grade(r773,b),registration_grade(r774,b),registration_grade(r775,a),registration_grade(r776,_G135393),registration_grade(r777,c),registration_grade(r778,c),registration_grade(r779,b),registration_grade(r780,a),registration_grade(r781,b),registration_grade(r782,a),registration_grade(r783,c),registration_grade(r784,c),registration_grade(r785,c),registration_grade(r786,c),registration_grade(r787,a),registration_grade(r788,a),registration_grade(r789,c),registration_grade(r790,b),registration_grade(r791,b),registration_grade(r792,a),registration_grade(r793,a),registration_grade(r794,b),registration_grade(r795,a),registration_grade(r796,a),registration_grade(r797,a),registration_grade(r798,b),registration_grade(r799,_G135508),registration_grade(r800,b),registration_grade(r801,b),registration_grade(r802,a),registration_grade(r803,b),registration_grade(r804,a),registration_grade(r805,b),registration_grade(r806,a),registration_grade(r807,a),registration_grade(r808,b),registration_grade(r809,c),registration_grade(r810,b),registration_grade(r811,d),registration_grade(r812,c),registration_grade(r813,c),registration_grade(r814,_G135583),registration_grade(r815,c),registration_grade(r816,b),registration_grade(r817,a),registration_grade(r818,b),registration_grade(r819,b),registration_grade(r820,d),registration_grade(r821,b),registration_grade(r822,a),registration_grade(r823,a),registration_grade(r824,c),registration_grade(r825,b),registration_grade(r826,b),registration_grade(r827,c),registration_grade(r828,b),registration_grade(r829,b),registration_grade(r830,a),registration_grade(r831,a),registration_grade(r832,_G135673),registration_grade(r833,b),registration_grade(r834,b),registration_grade(r835,a),registration_grade(r836,a),registration_grade(r837,c),registration_grade(r838,_G135703),registration_grade(r839,b),registration_grade(r840,b),registration_grade(r841,a),registration_grade(r842,a),registration_grade(r843,b),registration_grade(r844,a),registration_grade(r845,c),registration_grade(r846,b),registration_grade(r847,b),registration_grade(r848,c),registration_grade(r849,_G135758),registration_grade(r850,b),registration_grade(r851,b),registration_grade(r852,c),registration_grade(r853,b),registration_grade(r854,c),registration_grade(r855,d),registration_grade(r856,c),student_intelligence(s0,l),student_intelligence(s1,l),student_intelligence(s2,h),student_intelligence(s3,h),student_intelligence(s4,h),student_intelligence(s5,h),student_intelligence(s6,m),student_intelligence(s7,h),student_intelligence(s8,h),student_intelligence(s9,m),student_intelligence(s10,m),student_intelligence(s11,m),student_intelligence(s12,h),student_intelligence(s13,h),student_intelligence(s14,h),student_intelligence(s15,m),student_intelligence(s16,h),student_intelligence(s17,m),student_intelligence(s18,m),student_intelligence(s19,_G135893),student_intelligence(s20,m),student_intelligence(s21,h),student_intelligence(s22,h),student_intelligence(s23,h),student_intelligence(s24,m),student_intelligence(s25,h),student_intelligence(s26,m),student_intelligence(s27,_G135933),student_intelligence(s28,_G135938),student_intelligence(s29,m),student_intelligence(s30,h),student_intelligence(s31,m),student_intelligence(s32,m),student_intelligence(s33,h),student_intelligence(s34,l),student_intelligence(s35,m),student_intelligence(s36,l),student_intelligence(s37,_G135983),student_intelligence(s38,h),student_intelligence(s39,h),student_intelligence(s40,h),student_intelligence(s41,m),student_intelligence(s42,m),student_intelligence(s43,h),student_intelligence(s44,h),student_intelligence(s45,h),student_intelligence(s46,l),student_intelligence(s47,h),student_intelligence(s48,m),student_intelligence(s49,m),student_intelligence(s50,h),student_intelligence(s51,m),student_intelligence(s52,m),student_intelligence(s53,m),student_intelligence(s54,h),student_intelligence(s55,h),student_intelligence(s56,l),student_intelligence(s57,m),student_intelligence(s58,h),student_intelligence(s59,m),student_intelligence(s60,m),student_intelligence(s61,h),student_intelligence(s62,m),student_intelligence(s63,h),student_intelligence(s64,_G136118),student_intelligence(s65,m),student_intelligence(s66,h),student_intelligence(s67,m),student_intelligence(s68,_G136138),student_intelligence(s69,_G136143),student_intelligence(s70,l),student_intelligence(s71,m),student_intelligence(s72,h),student_intelligence(s73,m),student_intelligence(s74,h),student_intelligence(s75,h),student_intelligence(s76,h),student_intelligence(s77,h),student_intelligence(s78,h),student_intelligence(s79,m),student_intelligence(s80,m),student_intelligence(s81,l),student_intelligence(s82,h),student_intelligence(s83,h),student_intelligence(s84,m),student_intelligence(s85,h),student_intelligence(s86,m),student_intelligence(s87,h),student_intelligence(s88,h),student_intelligence(s89,m),student_intelligence(s90,h),student_intelligence(s91,m),student_intelligence(s92,_G136258),student_intelligence(s93,l),student_intelligence(s94,l),student_intelligence(s95,_G136273),student_intelligence(s96,m),student_intelligence(s97,h),student_intelligence(s98,h),student_intelligence(s99,l),student_intelligence(s100,h),student_intelligence(s101,h),student_intelligence(s102,_G136308),student_intelligence(s103,h),student_intelligence(s104,l),student_intelligence(s105,m),student_intelligence(s106,h),student_intelligence(s107,l),student_intelligence(s108,m),student_intelligence(s109,m),student_intelligence(s110,m),student_intelligence(s111,h),student_intelligence(s112,m),student_intelligence(s113,h),student_intelligence(s114,m),student_intelligence(s115,h),student_intelligence(s116,m),student_intelligence(s117,m),student_intelligence(s118,_G136388),student_intelligence(s119,h),student_intelligence(s120,h),student_intelligence(s121,h),student_intelligence(s122,m),student_intelligence(s123,m),student_intelligence(s124,h),student_intelligence(s125,m),student_intelligence(s126,m),student_intelligence(s127,m),student_intelligence(s128,m),student_intelligence(s129,h),student_intelligence(s130,m),student_intelligence(s131,h),student_intelligence(s132,h),student_intelligence(s133,h),student_intelligence(s134,h),student_intelligence(s135,h),student_intelligence(s136,m),student_intelligence(s137,m),student_intelligence(s138,l),student_intelligence(s139,h),student_intelligence(s140,h),student_intelligence(s141,m),student_intelligence(s142,m),student_intelligence(s143,h),student_intelligence(s144,h),student_intelligence(s145,h),student_intelligence(s146,m),student_intelligence(s147,m),student_intelligence(s148,m),student_intelligence(s149,h),student_intelligence(s150,l),student_intelligence(s151,h),student_intelligence(s152,h),student_intelligence(s153,m),student_intelligence(s154,m),student_intelligence(s155,h),student_intelligence(s156,m),student_intelligence(s157,m),student_intelligence(s158,h),student_intelligence(s159,_G136593),student_intelligence(s160,m),student_intelligence(s161,m),student_intelligence(s162,h),student_intelligence(s163,m),student_intelligence(s164,m),student_intelligence(s165,m),student_intelligence(s166,m),student_intelligence(s167,h),student_intelligence(s168,h),student_intelligence(s169,m),student_intelligence(s170,m),student_intelligence(s171,m),student_intelligence(s172,h),student_intelligence(s173,h),student_intelligence(s174,h),student_intelligence(s175,m),student_intelligence(s176,m),student_intelligence(s177,m),student_intelligence(s178,h),student_intelligence(s179,m),student_intelligence(s180,m),student_intelligence(s181,h),student_intelligence(s182,m),student_intelligence(s183,h),student_intelligence(s184,h),student_intelligence(s185,m),student_intelligence(s186,m),student_intelligence(s187,m),student_intelligence(s188,h),student_intelligence(s189,m),student_intelligence(s190,h),student_intelligence(s191,l),student_intelligence(s192,h),student_intelligence(s193,m),student_intelligence(s194,m),student_intelligence(s195,m),student_intelligence(s196,h),student_intelligence(s197,h),student_intelligence(s198,h),student_intelligence(s199,m),student_intelligence(s200,h),student_intelligence(s201,l),student_intelligence(s202,h),student_intelligence(s203,m),student_intelligence(s204,h),student_intelligence(s205,h),student_intelligence(s206,h),student_intelligence(s207,h),student_intelligence(s208,m),student_intelligence(s209,h),student_intelligence(s210,m),student_intelligence(s211,m),student_intelligence(s212,m),student_intelligence(s213,h),student_intelligence(s214,h),student_intelligence(s215,m),student_intelligence(s216,h),student_intelligence(s217,m),student_intelligence(s218,h),student_intelligence(s219,h),student_intelligence(s220,h),student_intelligence(s221,h),student_intelligence(s222,h),student_intelligence(s223,m),student_intelligence(s224,l),student_intelligence(s225,l),student_intelligence(s226,m),student_intelligence(s227,h),student_intelligence(s228,h),student_intelligence(s229,m),student_intelligence(s230,m),student_intelligence(s231,h),student_intelligence(s232,m),student_intelligence(s233,h),student_intelligence(s234,l),student_intelligence(s235,h),student_intelligence(s236,h),student_intelligence(s237,h),student_intelligence(s238,h),student_intelligence(s239,h),student_intelligence(s240,h),student_intelligence(s241,m),student_intelligence(s242,l),student_intelligence(s243,h),student_intelligence(s244,h),student_intelligence(s245,_G137023),student_intelligence(s246,m),student_intelligence(s247,h),student_intelligence(s248,m),student_intelligence(s249,h),student_intelligence(s250,m),student_intelligence(s251,h),student_intelligence(s252,_G137058),student_intelligence(s253,m),student_intelligence(s254,m),student_intelligence(s255,m),course_difficulty(c0,h),course_difficulty(c1,m),course_difficulty(c2,l),course_difficulty(c3,m),course_difficulty(c4,m),course_difficulty(c5,l),course_difficulty(c6,m),course_difficulty(c7,h),course_difficulty(c8,h),course_difficulty(c9,l),course_difficulty(c10,m),course_difficulty(c11,m),course_difficulty(c12,m),course_difficulty(c13,h),course_difficulty(c14,m),course_difficulty(c15,h),course_difficulty(c16,l),course_difficulty(c17,h),course_difficulty(c18,m),course_difficulty(c19,_G137173),course_difficulty(c20,m),course_difficulty(c21,h),course_difficulty(c22,m),course_difficulty(c23,m),course_difficulty(c24,h),course_difficulty(c25,m),course_difficulty(c26,l),course_difficulty(c27,h),course_difficulty(c28,m),course_difficulty(c29,m),course_difficulty(c30,m),course_difficulty(c31,m),course_difficulty(c32,l),course_difficulty(c33,m),course_difficulty(c34,l),course_difficulty(c35,h),course_difficulty(c36,h),course_difficulty(c37,m),course_difficulty(c38,m),course_difficulty(c39,m),course_difficulty(c40,h),course_difficulty(c41,m),course_difficulty(c42,h),course_difficulty(c43,m),course_difficulty(c44,m),course_difficulty(c45,m),course_difficulty(c46,m),course_difficulty(c47,m),course_difficulty(c48,m),course_difficulty(c49,l),course_difficulty(c50,m),course_difficulty(c51,h),course_difficulty(c52,h),course_difficulty(c53,h),course_difficulty(c54,m),course_difficulty(c55,h),course_difficulty(c56,m),course_difficulty(c57,m),course_difficulty(c58,h),course_difficulty(c59,m),course_difficulty(c60,h),course_difficulty(c61,m),course_difficulty(c62,_G137388),course_difficulty(c63,l),registration_satisfaction(r0,h),registration_satisfaction(r1,l),registration_satisfaction(r2,h),registration_satisfaction(r3,m),registration_satisfaction(r4,h),registration_satisfaction(r5,h),registration_satisfaction(r6,h),registration_satisfaction(r7,h),registration_satisfaction(r8,l),registration_satisfaction(r9,h),registration_satisfaction(r10,h),registration_satisfaction(r11,h),registration_satisfaction(r12,h),registration_satisfaction(r13,h),registration_satisfaction(r14,m),registration_satisfaction(r15,h),registration_satisfaction(r16,h),registration_satisfaction(r17,l),registration_satisfaction(r18,l),registration_satisfaction(r19,m),registration_satisfaction(r20,h),registration_satisfaction(r21,h),registration_satisfaction(r22,h),registration_satisfaction(r23,m),registration_satisfaction(r24,h),registration_satisfaction(r25,h),registration_satisfaction(r26,h),registration_satisfaction(r27,h),registration_satisfaction(r28,h),registration_satisfaction(r29,h),registration_satisfaction(r30,l),registration_satisfaction(r31,h),registration_satisfaction(r32,m),registration_satisfaction(r33,h),registration_satisfaction(r34,_G137568),registration_satisfaction(r35,h),registration_satisfaction(r36,m),registration_satisfaction(r37,h),registration_satisfaction(r38,h),registration_satisfaction(r39,h),registration_satisfaction(r40,h),registration_satisfaction(r41,h),registration_satisfaction(r42,l),registration_satisfaction(r43,h),registration_satisfaction(r44,h),registration_satisfaction(r45,h),registration_satisfaction(r46,_G137628),registration_satisfaction(r47,h),registration_satisfaction(r48,h),registration_satisfaction(r49,h),registration_satisfaction(r50,h),registration_satisfaction(r51,h),registration_satisfaction(r52,h),registration_satisfaction(r53,h),registration_satisfaction(r54,h),registration_satisfaction(r55,h),registration_satisfaction(r56,l),registration_satisfaction(r57,_G137683),registration_satisfaction(r58,h),registration_satisfaction(r59,l),registration_satisfaction(r60,h),registration_satisfaction(r61,h),registration_satisfaction(r62,h),registration_satisfaction(r63,_G137713),registration_satisfaction(r64,h),registration_satisfaction(r65,h),registration_satisfaction(r66,h),registration_satisfaction(r67,m),registration_satisfaction(r68,h),registration_satisfaction(r69,m),registration_satisfaction(r70,h),registration_satisfaction(r71,_G137753),registration_satisfaction(r72,l),registration_satisfaction(r73,h),registration_satisfaction(r74,h),registration_satisfaction(r75,h),registration_satisfaction(r76,h),registration_satisfaction(r77,h),registration_satisfaction(r78,m),registration_satisfaction(r79,h),registration_satisfaction(r80,h),registration_satisfaction(r81,h),registration_satisfaction(r82,l),registration_satisfaction(r83,m),registration_satisfaction(r84,m),registration_satisfaction(r85,h),registration_satisfaction(r86,m),registration_satisfaction(r87,m),registration_satisfaction(r88,h),registration_satisfaction(r89,_G137843),registration_satisfaction(r90,_G137848),registration_satisfaction(r91,h),registration_satisfaction(r92,l),registration_satisfaction(r93,h),registration_satisfaction(r94,l),registration_satisfaction(r95,h),registration_satisfaction(r96,h),registration_satisfaction(r97,h),registration_satisfaction(r98,h),registration_satisfaction(r99,h),registration_satisfaction(r100,h),registration_satisfaction(r101,h),registration_satisfaction(r102,_G137908),registration_satisfaction(r103,h),registration_satisfaction(r104,h),registration_satisfaction(r105,l),registration_satisfaction(r106,h),registration_satisfaction(r107,l),registration_satisfaction(r108,l),registration_satisfaction(r109,h),registration_satisfaction(r110,h),registration_satisfaction(r111,h),registration_satisfaction(r112,h),registration_satisfaction(r113,_G137963),registration_satisfaction(r114,m),registration_satisfaction(r115,l),registration_satisfaction(r116,h),registration_satisfaction(r117,h),registration_satisfaction(r118,h),registration_satisfaction(r119,h),registration_satisfaction(r120,l),registration_satisfaction(r121,h),registration_satisfaction(r122,h),registration_satisfaction(r123,l),registration_satisfaction(r124,h),registration_satisfaction(r125,m),registration_satisfaction(r126,h),registration_satisfaction(r127,_G138033),registration_satisfaction(r128,h),registration_satisfaction(r129,h),registration_satisfaction(r130,_G138048),registration_satisfaction(r131,h),registration_satisfaction(r132,m),registration_satisfaction(r133,_G138063),registration_satisfaction(r134,m),registration_satisfaction(r135,h),registration_satisfaction(r136,h),registration_satisfaction(r137,h),registration_satisfaction(r138,h),registration_satisfaction(r139,h),registration_satisfaction(r140,h),registration_satisfaction(r141,l),registration_satisfaction(r142,h),registration_satisfaction(r143,h),registration_satisfaction(r144,h),registration_satisfaction(r145,l),registration_satisfaction(r146,h),registration_satisfaction(r147,l),registration_satisfaction(r148,m),registration_satisfaction(r149,h),registration_satisfaction(r150,h),registration_satisfaction(r151,h),registration_satisfaction(r152,h),registration_satisfaction(r153,h),registration_satisfaction(r154,m),registration_satisfaction(r155,m),registration_satisfaction(r156,h),registration_satisfaction(r157,m),registration_satisfaction(r158,l),registration_satisfaction(r159,m),registration_satisfaction(r160,h),registration_satisfaction(r161,h),registration_satisfaction(r162,m),registration_satisfaction(r163,h),registration_satisfaction(r164,m),registration_satisfaction(r165,m),registration_satisfaction(r166,l),registration_satisfaction(r167,h),registration_satisfaction(r168,h),registration_satisfaction(r169,h),registration_satisfaction(r170,h),registration_satisfaction(r171,h),registration_satisfaction(r172,h),registration_satisfaction(r173,h),registration_satisfaction(r174,h),registration_satisfaction(r175,h),registration_satisfaction(r176,h),registration_satisfaction(r177,h),registration_satisfaction(r178,h),registration_satisfaction(r179,l),registration_satisfaction(r180,_G138298),registration_satisfaction(r181,m),registration_satisfaction(r182,h),registration_satisfaction(r183,l),registration_satisfaction(r184,h),registration_satisfaction(r185,h),registration_satisfaction(r186,h),registration_satisfaction(r187,h),registration_satisfaction(r188,m),registration_satisfaction(r189,h),registration_satisfaction(r190,h),registration_satisfaction(r191,h),registration_satisfaction(r192,m),registration_satisfaction(r193,h),registration_satisfaction(r194,h),registration_satisfaction(r195,h),registration_satisfaction(r196,h),registration_satisfaction(r197,h),registration_satisfaction(r198,h),registration_satisfaction(r199,h),registration_satisfaction(r200,m),registration_satisfaction(r201,h),registration_satisfaction(r202,h),registration_satisfaction(r203,h),registration_satisfaction(r204,h),registration_satisfaction(r205,h),registration_satisfaction(r206,h),registration_satisfaction(r207,h),registration_satisfaction(r208,h),registration_satisfaction(r209,h),registration_satisfaction(r210,h),registration_satisfaction(r211,m),registration_satisfaction(r212,_G138458),registration_satisfaction(r213,h),registration_satisfaction(r214,_G138468),registration_satisfaction(r215,h),registration_satisfaction(r216,h),registration_satisfaction(r217,_G138483),registration_satisfaction(r218,m),registration_satisfaction(r219,h),registration_satisfaction(r220,h),registration_satisfaction(r221,m),registration_satisfaction(r222,l),registration_satisfaction(r223,h),registration_satisfaction(r224,h),registration_satisfaction(r225,l),registration_satisfaction(r226,l),registration_satisfaction(r227,h),registration_satisfaction(r228,l),registration_satisfaction(r229,l),registration_satisfaction(r230,h),registration_satisfaction(r231,l),registration_satisfaction(r232,h),registration_satisfaction(r233,m),registration_satisfaction(r234,l),registration_satisfaction(r235,h),registration_satisfaction(r236,l),registration_satisfaction(r237,m),registration_satisfaction(r238,m),registration_satisfaction(r239,m),registration_satisfaction(r240,h),registration_satisfaction(r241,h),registration_satisfaction(r242,m),registration_satisfaction(r243,h),registration_satisfaction(r244,m),registration_satisfaction(r245,h),registration_satisfaction(r246,h),registration_satisfaction(r247,_G138633),registration_satisfaction(r248,l),registration_satisfaction(r249,h),registration_satisfaction(r250,h),registration_satisfaction(r251,h),registration_satisfaction(r252,h),registration_satisfaction(r253,h),registration_satisfaction(r254,h),registration_satisfaction(r255,h),registration_satisfaction(r256,h),registration_satisfaction(r257,m),registration_satisfaction(r258,h),registration_satisfaction(r259,h),registration_satisfaction(r260,h),registration_satisfaction(r261,h),registration_satisfaction(r262,h),registration_satisfaction(r263,m),registration_satisfaction(r264,h),registration_satisfaction(r265,h),registration_satisfaction(r266,l),registration_satisfaction(r267,h),registration_satisfaction(r268,l),registration_satisfaction(r269,h),registration_satisfaction(r270,l),registration_satisfaction(r271,h),registration_satisfaction(r272,l),registration_satisfaction(r273,h),registration_satisfaction(r274,h),registration_satisfaction(r275,_G138773),registration_satisfaction(r276,h),registration_satisfaction(r277,h),registration_satisfaction(r278,_G138788),registration_satisfaction(r279,h),registration_satisfaction(r280,h),registration_satisfaction(r281,m),registration_satisfaction(r282,h),registration_satisfaction(r283,h),registration_satisfaction(r284,m),registration_satisfaction(r285,m),registration_satisfaction(r286,h),registration_satisfaction(r287,h),registration_satisfaction(r288,h),registration_satisfaction(r289,_G138843),registration_satisfaction(r290,m),registration_satisfaction(r291,h),registration_satisfaction(r292,m),registration_satisfaction(r293,h),registration_satisfaction(r294,h),registration_satisfaction(r295,m),registration_satisfaction(r296,l),registration_satisfaction(r297,h),registration_satisfaction(r298,_G138888),registration_satisfaction(r299,h),registration_satisfaction(r300,l),registration_satisfaction(r301,h),registration_satisfaction(r302,m),registration_satisfaction(r303,_G138913),registration_satisfaction(r304,h),registration_satisfaction(r305,l),registration_satisfaction(r306,_G138928),registration_satisfaction(r307,l),registration_satisfaction(r308,l),registration_satisfaction(r309,m),registration_satisfaction(r310,h),registration_satisfaction(r311,l),registration_satisfaction(r312,h),registration_satisfaction(r313,h),registration_satisfaction(r314,h),registration_satisfaction(r315,h),registration_satisfaction(r316,l),registration_satisfaction(r317,l),registration_satisfaction(r318,h),registration_satisfaction(r319,m),registration_satisfaction(r320,h),registration_satisfaction(r321,l),registration_satisfaction(r322,h),registration_satisfaction(r323,l),registration_satisfaction(r324,h),registration_satisfaction(r325,h),registration_satisfaction(r326,h),registration_satisfaction(r327,m),registration_satisfaction(r328,h),registration_satisfaction(r329,h),registration_satisfaction(r330,l),registration_satisfaction(r331,h),registration_satisfaction(r332,l),registration_satisfaction(r333,h),registration_satisfaction(r334,h),registration_satisfaction(r335,h),registration_satisfaction(r336,m),registration_satisfaction(r337,h),registration_satisfaction(r338,h),registration_satisfaction(r339,h),registration_satisfaction(r340,h),registration_satisfaction(r341,l),registration_satisfaction(r342,h),registration_satisfaction(r343,h),registration_satisfaction(r344,h),registration_satisfaction(r345,m),registration_satisfaction(r346,h),registration_satisfaction(r347,m),registration_satisfaction(r348,m),registration_satisfaction(r349,h),registration_satisfaction(r350,m),registration_satisfaction(r351,h),registration_satisfaction(r352,l),registration_satisfaction(r353,h),registration_satisfaction(r354,h),registration_satisfaction(r355,h),registration_satisfaction(r356,m),registration_satisfaction(r357,m),registration_satisfaction(r358,h),registration_satisfaction(r359,l),registration_satisfaction(r360,h),registration_satisfaction(r361,_G139203),registration_satisfaction(r362,h),registration_satisfaction(r363,l),registration_satisfaction(r364,h),registration_satisfaction(r365,m),registration_satisfaction(r366,h),registration_satisfaction(r367,h),registration_satisfaction(r368,h),registration_satisfaction(r369,h),registration_satisfaction(r370,h),registration_satisfaction(r371,h),registration_satisfaction(r372,h),registration_satisfaction(r373,h),registration_satisfaction(r374,l),registration_satisfaction(r375,h),registration_satisfaction(r376,m),registration_satisfaction(r377,h),registration_satisfaction(r378,h),registration_satisfaction(r379,h),registration_satisfaction(r380,h),registration_satisfaction(r381,m),registration_satisfaction(r382,h),registration_satisfaction(r383,h),registration_satisfaction(r384,m),registration_satisfaction(r385,m),registration_satisfaction(r386,l),registration_satisfaction(r387,h),registration_satisfaction(r388,h),registration_satisfaction(r389,_G139343),registration_satisfaction(r390,h),registration_satisfaction(r391,l),registration_satisfaction(r392,_G139358),registration_satisfaction(r393,h),registration_satisfaction(r394,h),registration_satisfaction(r395,h),registration_satisfaction(r396,h),registration_satisfaction(r397,_G139383),registration_satisfaction(r398,l),registration_satisfaction(r399,h),registration_satisfaction(r400,h),registration_satisfaction(r401,l),registration_satisfaction(r402,h),registration_satisfaction(r403,h),registration_satisfaction(r404,h),registration_satisfaction(r405,_G139423),registration_satisfaction(r406,h),registration_satisfaction(r407,h),registration_satisfaction(r408,h),registration_satisfaction(r409,h),registration_satisfaction(r410,h),registration_satisfaction(r411,l),registration_satisfaction(r412,h),registration_satisfaction(r413,l),registration_satisfaction(r414,h),registration_satisfaction(r415,m),registration_satisfaction(r416,h),registration_satisfaction(r417,h),registration_satisfaction(r418,h),registration_satisfaction(r419,_G139493),registration_satisfaction(r420,h),registration_satisfaction(r421,h),registration_satisfaction(r422,m),registration_satisfaction(r423,h),registration_satisfaction(r424,_G139518),registration_satisfaction(r425,h),registration_satisfaction(r426,l),registration_satisfaction(r427,h),registration_satisfaction(r428,h),registration_satisfaction(r429,h),registration_satisfaction(r430,l),registration_satisfaction(r431,m),registration_satisfaction(r432,h),registration_satisfaction(r433,h),registration_satisfaction(r434,_G139568),registration_satisfaction(r435,m),registration_satisfaction(r436,h),registration_satisfaction(r437,h),registration_satisfaction(r438,l),registration_satisfaction(r439,h),registration_satisfaction(r440,h),registration_satisfaction(r441,h),registration_satisfaction(r442,m),registration_satisfaction(r443,_G139613),registration_satisfaction(r444,h),registration_satisfaction(r445,h),registration_satisfaction(r446,h),registration_satisfaction(r447,m),registration_satisfaction(r448,l),registration_satisfaction(r449,h),registration_satisfaction(r450,h),registration_satisfaction(r451,h),registration_satisfaction(r452,h),registration_satisfaction(r453,h),registration_satisfaction(r454,l),registration_satisfaction(r455,m),registration_satisfaction(r456,h),registration_satisfaction(r457,h),registration_satisfaction(r458,m),registration_satisfaction(r459,m),registration_satisfaction(r460,l),registration_satisfaction(r461,h),registration_satisfaction(r462,h),registration_satisfaction(r463,l),registration_satisfaction(r464,h),registration_satisfaction(r465,h),registration_satisfaction(r466,l),registration_satisfaction(r467,h),registration_satisfaction(r468,h),registration_satisfaction(r469,h),registration_satisfaction(r470,h),registration_satisfaction(r471,h),registration_satisfaction(r472,h),registration_satisfaction(r473,l),registration_satisfaction(r474,m),registration_satisfaction(r475,_G139773),registration_satisfaction(r476,l),registration_satisfaction(r477,m),registration_satisfaction(r478,h),registration_satisfaction(r479,_G139793),registration_satisfaction(r480,h),registration_satisfaction(r481,m),registration_satisfaction(r482,h),registration_satisfaction(r483,h),registration_satisfaction(r484,m),registration_satisfaction(r485,h),registration_satisfaction(r486,h),registration_satisfaction(r487,h),registration_satisfaction(r488,l),registration_satisfaction(r489,m),registration_satisfaction(r490,m),registration_satisfaction(r491,l),registration_satisfaction(r492,h),registration_satisfaction(r493,h),registration_satisfaction(r494,m),registration_satisfaction(r495,h),registration_satisfaction(r496,h),registration_satisfaction(r497,h),registration_satisfaction(r498,l),registration_satisfaction(r499,h),registration_satisfaction(r500,m),registration_satisfaction(r501,h),registration_satisfaction(r502,h),registration_satisfaction(r503,l),registration_satisfaction(r504,_G139918),registration_satisfaction(r505,h),registration_satisfaction(r506,h),registration_satisfaction(r507,h),registration_satisfaction(r508,l),registration_satisfaction(r509,m),registration_satisfaction(r510,h),registration_satisfaction(r511,l),registration_satisfaction(r512,h),registration_satisfaction(r513,h),registration_satisfaction(r514,h),registration_satisfaction(r515,l),registration_satisfaction(r516,h),registration_satisfaction(r517,m),registration_satisfaction(r518,h),registration_satisfaction(r519,h),registration_satisfaction(r520,h),registration_satisfaction(r521,h),registration_satisfaction(r522,h),registration_satisfaction(r523,h),registration_satisfaction(r524,h),registration_satisfaction(r525,l),registration_satisfaction(r526,h),registration_satisfaction(r527,l),registration_satisfaction(r528,h),registration_satisfaction(r529,h),registration_satisfaction(r530,_G140048),registration_satisfaction(r531,m),registration_satisfaction(r532,_G140058),registration_satisfaction(r533,h),registration_satisfaction(r534,l),registration_satisfaction(r535,m),registration_satisfaction(r536,h),registration_satisfaction(r537,h),registration_satisfaction(r538,h),registration_satisfaction(r539,h),registration_satisfaction(r540,m),registration_satisfaction(r541,h),registration_satisfaction(r542,h),registration_satisfaction(r543,h),registration_satisfaction(r544,h),registration_satisfaction(r545,h),registration_satisfaction(r546,h),registration_satisfaction(r547,l),registration_satisfaction(r548,h),registration_satisfaction(r549,h),registration_satisfaction(r550,h),registration_satisfaction(r551,h),registration_satisfaction(r552,m),registration_satisfaction(r553,m),registration_satisfaction(r554,l),registration_satisfaction(r555,m),registration_satisfaction(r556,_G140178),registration_satisfaction(r557,h),registration_satisfaction(r558,h),registration_satisfaction(r559,h),registration_satisfaction(r560,h),registration_satisfaction(r561,h),registration_satisfaction(r562,h),registration_satisfaction(r563,m),registration_satisfaction(r564,h),registration_satisfaction(r565,l),registration_satisfaction(r566,l),registration_satisfaction(r567,h),registration_satisfaction(r568,h),registration_satisfaction(r569,h),registration_satisfaction(r570,h),registration_satisfaction(r571,l),registration_satisfaction(r572,m),registration_satisfaction(r573,h),registration_satisfaction(r574,m),registration_satisfaction(r575,h),registration_satisfaction(r576,h),registration_satisfaction(r577,h),registration_satisfaction(r578,l),registration_satisfaction(r579,h),registration_satisfaction(r580,m),registration_satisfaction(r581,h),registration_satisfaction(r582,h),registration_satisfaction(r583,h),registration_satisfaction(r584,h),registration_satisfaction(r585,h),registration_satisfaction(r586,m),registration_satisfaction(r587,m),registration_satisfaction(r588,l),registration_satisfaction(r589,l),registration_satisfaction(r590,h),registration_satisfaction(r591,h),registration_satisfaction(r592,h),registration_satisfaction(r593,h),registration_satisfaction(r594,l),registration_satisfaction(r595,m),registration_satisfaction(r596,h),registration_satisfaction(r597,h),registration_satisfaction(r598,h),registration_satisfaction(r599,h),registration_satisfaction(r600,m),registration_satisfaction(r601,m),registration_satisfaction(r602,h),registration_satisfaction(r603,h),registration_satisfaction(r604,_G140418),registration_satisfaction(r605,h),registration_satisfaction(r606,h),registration_satisfaction(r607,l),registration_satisfaction(r608,h),registration_satisfaction(r609,h),registration_satisfaction(r610,h),registration_satisfaction(r611,h),registration_satisfaction(r612,l),registration_satisfaction(r613,h),registration_satisfaction(r614,m),registration_satisfaction(r615,l),registration_satisfaction(r616,h),registration_satisfaction(r617,h),registration_satisfaction(r618,h),registration_satisfaction(r619,h),registration_satisfaction(r620,h),registration_satisfaction(r621,h),registration_satisfaction(r622,h),registration_satisfaction(r623,l),registration_satisfaction(r624,m),registration_satisfaction(r625,l),registration_satisfaction(r626,h),registration_satisfaction(r627,h),registration_satisfaction(r628,h),registration_satisfaction(r629,h),registration_satisfaction(r630,h),registration_satisfaction(r631,h),registration_satisfaction(r632,h),registration_satisfaction(r633,h),registration_satisfaction(r634,h),registration_satisfaction(r635,m),registration_satisfaction(r636,l),registration_satisfaction(r637,m),registration_satisfaction(r638,h),registration_satisfaction(r639,h),registration_satisfaction(r640,h),registration_satisfaction(r641,h),registration_satisfaction(r642,h),registration_satisfaction(r643,h),registration_satisfaction(r644,h),registration_satisfaction(r645,h),registration_satisfaction(r646,_G140628),registration_satisfaction(r647,h),registration_satisfaction(r648,h),registration_satisfaction(r649,h),registration_satisfaction(r650,h),registration_satisfaction(r651,h),registration_satisfaction(r652,m),registration_satisfaction(r653,l),registration_satisfaction(r654,h),registration_satisfaction(r655,h),registration_satisfaction(r656,m),registration_satisfaction(r657,h),registration_satisfaction(r658,h),registration_satisfaction(r659,h),registration_satisfaction(r660,h),registration_satisfaction(r661,h),registration_satisfaction(r662,h),registration_satisfaction(r663,h),registration_satisfaction(r664,l),registration_satisfaction(r665,h),registration_satisfaction(r666,_G140728),registration_satisfaction(r667,h),registration_satisfaction(r668,l),registration_satisfaction(r669,h),registration_satisfaction(r670,h),registration_satisfaction(r671,h),registration_satisfaction(r672,l),registration_satisfaction(r673,l),registration_satisfaction(r674,h),registration_satisfaction(r675,l),registration_satisfaction(r676,h),registration_satisfaction(r677,h),registration_satisfaction(r678,h),registration_satisfaction(r679,h),registration_satisfaction(r680,m),registration_satisfaction(r681,h),registration_satisfaction(r682,h),registration_satisfaction(r683,h),registration_satisfaction(r684,m),registration_satisfaction(r685,h),registration_satisfaction(r686,h),registration_satisfaction(r687,l),registration_satisfaction(r688,h),registration_satisfaction(r689,m),registration_satisfaction(r690,h),registration_satisfaction(r691,h),registration_satisfaction(r692,_G140858),registration_satisfaction(r693,h),registration_satisfaction(r694,h),registration_satisfaction(r695,h),registration_satisfaction(r696,h),registration_satisfaction(r697,m),registration_satisfaction(r698,h),registration_satisfaction(r699,h),registration_satisfaction(r700,h),registration_satisfaction(r701,h),registration_satisfaction(r702,h),registration_satisfaction(r703,l),registration_satisfaction(r704,l),registration_satisfaction(r705,l),registration_satisfaction(r706,m),registration_satisfaction(r707,h),registration_satisfaction(r708,l),registration_satisfaction(r709,m),registration_satisfaction(r710,l),registration_satisfaction(r711,h),registration_satisfaction(r712,h),registration_satisfaction(r713,h),registration_satisfaction(r714,m),registration_satisfaction(r715,h),registration_satisfaction(r716,h),registration_satisfaction(r717,h),registration_satisfaction(r718,l),registration_satisfaction(r719,l),registration_satisfaction(r720,h),registration_satisfaction(r721,h),registration_satisfaction(r722,h),registration_satisfaction(r723,_G141013),registration_satisfaction(r724,h),registration_satisfaction(r725,h),registration_satisfaction(r726,h),registration_satisfaction(r727,h),registration_satisfaction(r728,m),registration_satisfaction(r729,h),registration_satisfaction(r730,h),registration_satisfaction(r731,h),registration_satisfaction(r732,h),registration_satisfaction(r733,h),registration_satisfaction(r734,h),registration_satisfaction(r735,h),registration_satisfaction(r736,h),registration_satisfaction(r737,h),registration_satisfaction(r738,h),registration_satisfaction(r739,h),registration_satisfaction(r740,h),registration_satisfaction(r741,h),registration_satisfaction(r742,h),registration_satisfaction(r743,_G141113),registration_satisfaction(r744,h),registration_satisfaction(r745,m),registration_satisfaction(r746,h),registration_satisfaction(r747,h),registration_satisfaction(r748,h),registration_satisfaction(r749,m),registration_satisfaction(r750,h),registration_satisfaction(r751,h),registration_satisfaction(r752,m),registration_satisfaction(r753,m),registration_satisfaction(r754,h),registration_satisfaction(r755,l),registration_satisfaction(r756,h),registration_satisfaction(r757,h),registration_satisfaction(r758,h),registration_satisfaction(r759,l),registration_satisfaction(r760,h),registration_satisfaction(r761,h),registration_satisfaction(r762,m),registration_satisfaction(r763,h),registration_satisfaction(r764,h),registration_satisfaction(r765,_G141223),registration_satisfaction(r766,h),registration_satisfaction(r767,h),registration_satisfaction(r768,l),registration_satisfaction(r769,l),registration_satisfaction(r770,m),registration_satisfaction(r771,m),registration_satisfaction(r772,h),registration_satisfaction(r773,m),registration_satisfaction(r774,h),registration_satisfaction(r775,h),registration_satisfaction(r776,h),registration_satisfaction(r777,l),registration_satisfaction(r778,h),registration_satisfaction(r779,h),registration_satisfaction(r780,h),registration_satisfaction(r781,m),registration_satisfaction(r782,m),registration_satisfaction(r783,m),registration_satisfaction(r784,l),registration_satisfaction(r785,l),registration_satisfaction(r786,h),registration_satisfaction(r787,_G141333),registration_satisfaction(r788,h),registration_satisfaction(r789,h),registration_satisfaction(r790,h),registration_satisfaction(r791,h),registration_satisfaction(r792,h),registration_satisfaction(r793,m),registration_satisfaction(r794,l),registration_satisfaction(r795,h),registration_satisfaction(r796,h),registration_satisfaction(r797,h),registration_satisfaction(r798,m),registration_satisfaction(r799,m),registration_satisfaction(r800,m),registration_satisfaction(r801,h),registration_satisfaction(r802,h),registration_satisfaction(r803,h),registration_satisfaction(r804,h),registration_satisfaction(r805,h),registration_satisfaction(r806,h),registration_satisfaction(r807,l),registration_satisfaction(r808,m),registration_satisfaction(r809,l),registration_satisfaction(r810,h),registration_satisfaction(r811,l),registration_satisfaction(r812,h),registration_satisfaction(r813,m),registration_satisfaction(r814,l),registration_satisfaction(r815,h),registration_satisfaction(r816,h),registration_satisfaction(r817,h),registration_satisfaction(r818,l),registration_satisfaction(r819,h),registration_satisfaction(r820,h),registration_satisfaction(r821,m),registration_satisfaction(r822,m),registration_satisfaction(r823,_G141513),registration_satisfaction(r824,m),registration_satisfaction(r825,l),registration_satisfaction(r826,l),registration_satisfaction(r827,l),registration_satisfaction(r828,m),registration_satisfaction(r829,l),registration_satisfaction(r830,h),registration_satisfaction(r831,h),registration_satisfaction(r832,m),registration_satisfaction(r833,h),registration_satisfaction(r834,h),registration_satisfaction(r835,h),registration_satisfaction(r836,h),registration_satisfaction(r837,h),registration_satisfaction(r838,l),registration_satisfaction(r839,_G141593),registration_satisfaction(r840,m),registration_satisfaction(r841,h),registration_satisfaction(r842,h),registration_satisfaction(r843,h),registration_satisfaction(r844,h),registration_satisfaction(r845,l),registration_satisfaction(r846,l),registration_satisfaction(r847,h),registration_satisfaction(r848,l),registration_satisfaction(r849,h),registration_satisfaction(r850,h),registration_satisfaction(r851,h),registration_satisfaction(r852,h),registration_satisfaction(r853,h),registration_satisfaction(r854,m),registration_satisfaction(r855,h),registration_satisfaction(r856,l)]) \ No newline at end of file diff --git a/packages/CLPBN/horus/benchmarks/school/missing50.yap b/packages/CLPBN/horus/benchmarks/school/missing50.yap new file mode 100644 index 000000000..b588d36e5 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/school/missing50.yap @@ -0,0 +1 @@ +graph([professor_ability(p0,_G131193),professor_ability(p1,h),professor_ability(p2,_G131203),professor_ability(p3,_G131208),professor_ability(p4,_G131213),professor_ability(p5,h),professor_ability(p6,l),professor_ability(p7,_G131228),professor_ability(p8,_G131233),professor_ability(p9,h),professor_ability(p10,_G131243),professor_ability(p11,h),professor_ability(p12,_G131253),professor_ability(p13,_G131258),professor_ability(p14,_G131263),professor_ability(p15,_G131268),professor_ability(p16,_G131273),professor_ability(p17,m),professor_ability(p18,l),professor_ability(p19,_G131288),professor_ability(p20,_G131293),professor_ability(p21,h),professor_ability(p22,m),professor_ability(p23,_G131308),professor_ability(p24,l),professor_ability(p25,_G131318),professor_ability(p26,_G131323),professor_ability(p27,h),professor_ability(p28,_G131333),professor_ability(p29,m),professor_ability(p30,_G131343),professor_ability(p31,h),professor_popularity(p0,h),professor_popularity(p1,_G131358),professor_popularity(p2,_G131363),professor_popularity(p3,h),professor_popularity(p4,_G131373),professor_popularity(p5,h),professor_popularity(p6,_G131383),professor_popularity(p7,l),professor_popularity(p8,_G131393),professor_popularity(p9,_G131398),professor_popularity(p10,_G131403),professor_popularity(p11,h),professor_popularity(p12,h),professor_popularity(p13,l),professor_popularity(p14,m),professor_popularity(p15,h),professor_popularity(p16,m),professor_popularity(p17,h),professor_popularity(p18,_G131443),professor_popularity(p19,h),professor_popularity(p20,_G131453),professor_popularity(p21,_G131458),professor_popularity(p22,h),professor_popularity(p23,_G131468),professor_popularity(p24,_G131473),professor_popularity(p25,_G131478),professor_popularity(p26,m),professor_popularity(p27,h),professor_popularity(p28,h),professor_popularity(p29,_G131498),professor_popularity(p30,_G131503),professor_popularity(p31,_G131508),registration_grade(r0,a),registration_grade(r1,_G131518),registration_grade(r2,_G131523),registration_grade(r3,c),registration_grade(r4,c),registration_grade(r5,c),registration_grade(r6,_G131543),registration_grade(r7,a),registration_grade(r8,b),registration_grade(r9,_G131558),registration_grade(r10,_G131563),registration_grade(r11,_G131568),registration_grade(r12,a),registration_grade(r13,_G131578),registration_grade(r14,_G131583),registration_grade(r15,_G131588),registration_grade(r16,a),registration_grade(r17,_G131598),registration_grade(r18,_G131603),registration_grade(r19,_G131608),registration_grade(r20,_G131613),registration_grade(r21,a),registration_grade(r22,_G131623),registration_grade(r23,b),registration_grade(r24,b),registration_grade(r25,_G131638),registration_grade(r26,_G131643),registration_grade(r27,_G131648),registration_grade(r28,c),registration_grade(r29,b),registration_grade(r30,c),registration_grade(r31,_G131668),registration_grade(r32,c),registration_grade(r33,_G131678),registration_grade(r34,c),registration_grade(r35,c),registration_grade(r36,a),registration_grade(r37,a),registration_grade(r38,c),registration_grade(r39,_G131708),registration_grade(r40,_G131713),registration_grade(r41,_G131718),registration_grade(r42,b),registration_grade(r43,_G131728),registration_grade(r44,_G131733),registration_grade(r45,_G131738),registration_grade(r46,a),registration_grade(r47,_G131748),registration_grade(r48,_G131753),registration_grade(r49,b),registration_grade(r50,_G131763),registration_grade(r51,b),registration_grade(r52,_G131773),registration_grade(r53,a),registration_grade(r54,b),registration_grade(r55,_G131788),registration_grade(r56,_G131793),registration_grade(r57,c),registration_grade(r58,a),registration_grade(r59,c),registration_grade(r60,a),registration_grade(r61,a),registration_grade(r62,a),registration_grade(r63,_G131828),registration_grade(r64,b),registration_grade(r65,_G131838),registration_grade(r66,_G131843),registration_grade(r67,b),registration_grade(r68,_G131853),registration_grade(r69,b),registration_grade(r70,_G131863),registration_grade(r71,b),registration_grade(r72,_G131873),registration_grade(r73,b),registration_grade(r74,a),registration_grade(r75,_G131888),registration_grade(r76,c),registration_grade(r77,_G131898),registration_grade(r78,b),registration_grade(r79,_G131908),registration_grade(r80,_G131913),registration_grade(r81,b),registration_grade(r82,_G131923),registration_grade(r83,a),registration_grade(r84,c),registration_grade(r85,b),registration_grade(r86,b),registration_grade(r87,b),registration_grade(r88,c),registration_grade(r89,_G131958),registration_grade(r90,_G131963),registration_grade(r91,_G131968),registration_grade(r92,d),registration_grade(r93,b),registration_grade(r94,c),registration_grade(r95,b),registration_grade(r96,_G131993),registration_grade(r97,_G131998),registration_grade(r98,_G132003),registration_grade(r99,b),registration_grade(r100,a),registration_grade(r101,a),registration_grade(r102,_G132023),registration_grade(r103,_G132028),registration_grade(r104,b),registration_grade(r105,_G132038),registration_grade(r106,b),registration_grade(r107,_G132048),registration_grade(r108,_G132053),registration_grade(r109,_G132058),registration_grade(r110,a),registration_grade(r111,a),registration_grade(r112,a),registration_grade(r113,_G132078),registration_grade(r114,_G132083),registration_grade(r115,_G132088),registration_grade(r116,b),registration_grade(r117,c),registration_grade(r118,_G132103),registration_grade(r119,b),registration_grade(r120,_G132113),registration_grade(r121,_G132118),registration_grade(r122,_G132123),registration_grade(r123,a),registration_grade(r124,_G132133),registration_grade(r125,b),registration_grade(r126,b),registration_grade(r127,b),registration_grade(r128,a),registration_grade(r129,c),registration_grade(r130,_G132163),registration_grade(r131,a),registration_grade(r132,_G132173),registration_grade(r133,a),registration_grade(r134,_G132183),registration_grade(r135,b),registration_grade(r136,a),registration_grade(r137,b),registration_grade(r138,_G132203),registration_grade(r139,_G132208),registration_grade(r140,a),registration_grade(r141,_G132218),registration_grade(r142,b),registration_grade(r143,_G132228),registration_grade(r144,_G132233),registration_grade(r145,b),registration_grade(r146,a),registration_grade(r147,_G132248),registration_grade(r148,a),registration_grade(r149,a),registration_grade(r150,b),registration_grade(r151,a),registration_grade(r152,_G132273),registration_grade(r153,b),registration_grade(r154,a),registration_grade(r155,c),registration_grade(r156,b),registration_grade(r157,_G132298),registration_grade(r158,_G132303),registration_grade(r159,b),registration_grade(r160,_G132313),registration_grade(r161,a),registration_grade(r162,b),registration_grade(r163,a),registration_grade(r164,_G132333),registration_grade(r165,b),registration_grade(r166,c),registration_grade(r167,_G132348),registration_grade(r168,_G132353),registration_grade(r169,_G132358),registration_grade(r170,a),registration_grade(r171,a),registration_grade(r172,_G132373),registration_grade(r173,_G132378),registration_grade(r174,_G132383),registration_grade(r175,b),registration_grade(r176,_G132393),registration_grade(r177,_G132398),registration_grade(r178,b),registration_grade(r179,_G132408),registration_grade(r180,_G132413),registration_grade(r181,a),registration_grade(r182,b),registration_grade(r183,_G132428),registration_grade(r184,_G132433),registration_grade(r185,b),registration_grade(r186,c),registration_grade(r187,_G132448),registration_grade(r188,a),registration_grade(r189,_G132458),registration_grade(r190,_G132463),registration_grade(r191,_G132468),registration_grade(r192,b),registration_grade(r193,c),registration_grade(r194,b),registration_grade(r195,_G132488),registration_grade(r196,_G132493),registration_grade(r197,_G132498),registration_grade(r198,a),registration_grade(r199,b),registration_grade(r200,_G132513),registration_grade(r201,_G132518),registration_grade(r202,_G132523),registration_grade(r203,a),registration_grade(r204,b),registration_grade(r205,a),registration_grade(r206,_G132543),registration_grade(r207,_G132548),registration_grade(r208,c),registration_grade(r209,_G132558),registration_grade(r210,_G132563),registration_grade(r211,_G132568),registration_grade(r212,b),registration_grade(r213,_G132578),registration_grade(r214,_G132583),registration_grade(r215,_G132588),registration_grade(r216,b),registration_grade(r217,_G132598),registration_grade(r218,_G132603),registration_grade(r219,a),registration_grade(r220,a),registration_grade(r221,_G132618),registration_grade(r222,c),registration_grade(r223,a),registration_grade(r224,_G132633),registration_grade(r225,b),registration_grade(r226,_G132643),registration_grade(r227,b),registration_grade(r228,c),registration_grade(r229,b),registration_grade(r230,_G132663),registration_grade(r231,_G132668),registration_grade(r232,a),registration_grade(r233,b),registration_grade(r234,b),registration_grade(r235,c),registration_grade(r236,_G132693),registration_grade(r237,_G132698),registration_grade(r238,d),registration_grade(r239,_G132708),registration_grade(r240,_G132713),registration_grade(r241,a),registration_grade(r242,_G132723),registration_grade(r243,a),registration_grade(r244,_G132733),registration_grade(r245,a),registration_grade(r246,b),registration_grade(r247,c),registration_grade(r248,_G132753),registration_grade(r249,_G132758),registration_grade(r250,a),registration_grade(r251,a),registration_grade(r252,b),registration_grade(r253,a),registration_grade(r254,_G132783),registration_grade(r255,_G132788),registration_grade(r256,_G132793),registration_grade(r257,_G132798),registration_grade(r258,a),registration_grade(r259,_G132808),registration_grade(r260,b),registration_grade(r261,a),registration_grade(r262,_G132823),registration_grade(r263,a),registration_grade(r264,c),registration_grade(r265,a),registration_grade(r266,_G132843),registration_grade(r267,a),registration_grade(r268,c),registration_grade(r269,_G132858),registration_grade(r270,_G132863),registration_grade(r271,_G132868),registration_grade(r272,c),registration_grade(r273,_G132878),registration_grade(r274,c),registration_grade(r275,_G132888),registration_grade(r276,_G132893),registration_grade(r277,a),registration_grade(r278,a),registration_grade(r279,_G132908),registration_grade(r280,_G132913),registration_grade(r281,b),registration_grade(r282,d),registration_grade(r283,_G132928),registration_grade(r284,_G132933),registration_grade(r285,_G132938),registration_grade(r286,_G132943),registration_grade(r287,_G132948),registration_grade(r288,b),registration_grade(r289,_G132958),registration_grade(r290,_G132963),registration_grade(r291,c),registration_grade(r292,b),registration_grade(r293,a),registration_grade(r294,a),registration_grade(r295,a),registration_grade(r296,b),registration_grade(r297,_G132998),registration_grade(r298,_G133003),registration_grade(r299,_G133008),registration_grade(r300,_G133013),registration_grade(r301,b),registration_grade(r302,b),registration_grade(r303,_G133028),registration_grade(r304,_G133033),registration_grade(r305,_G133038),registration_grade(r306,_G133043),registration_grade(r307,_G133048),registration_grade(r308,_G133053),registration_grade(r309,c),registration_grade(r310,a),registration_grade(r311,_G133068),registration_grade(r312,a),registration_grade(r313,a),registration_grade(r314,c),registration_grade(r315,c),registration_grade(r316,c),registration_grade(r317,c),registration_grade(r318,_G133103),registration_grade(r319,c),registration_grade(r320,b),registration_grade(r321,b),registration_grade(r322,_G133123),registration_grade(r323,c),registration_grade(r324,_G133133),registration_grade(r325,b),registration_grade(r326,_G133143),registration_grade(r327,c),registration_grade(r328,b),registration_grade(r329,a),registration_grade(r330,_G133163),registration_grade(r331,a),registration_grade(r332,a),registration_grade(r333,a),registration_grade(r334,c),registration_grade(r335,d),registration_grade(r336,_G133193),registration_grade(r337,b),registration_grade(r338,b),registration_grade(r339,_G133208),registration_grade(r340,b),registration_grade(r341,b),registration_grade(r342,b),registration_grade(r343,_G133228),registration_grade(r344,_G133233),registration_grade(r345,_G133238),registration_grade(r346,_G133243),registration_grade(r347,_G133248),registration_grade(r348,_G133253),registration_grade(r349,a),registration_grade(r350,b),registration_grade(r351,b),registration_grade(r352,d),registration_grade(r353,c),registration_grade(r354,c),registration_grade(r355,c),registration_grade(r356,b),registration_grade(r357,_G133298),registration_grade(r358,a),registration_grade(r359,_G133308),registration_grade(r360,a),registration_grade(r361,_G133318),registration_grade(r362,_G133323),registration_grade(r363,_G133328),registration_grade(r364,_G133333),registration_grade(r365,b),registration_grade(r366,_G133343),registration_grade(r367,_G133348),registration_grade(r368,a),registration_grade(r369,_G133358),registration_grade(r370,b),registration_grade(r371,a),registration_grade(r372,a),registration_grade(r373,_G133378),registration_grade(r374,_G133383),registration_grade(r375,b),registration_grade(r376,a),registration_grade(r377,a),registration_grade(r378,a),registration_grade(r379,c),registration_grade(r380,_G133413),registration_grade(r381,_G133418),registration_grade(r382,a),registration_grade(r383,a),registration_grade(r384,_G133433),registration_grade(r385,_G133438),registration_grade(r386,d),registration_grade(r387,a),registration_grade(r388,_G133453),registration_grade(r389,a),registration_grade(r390,_G133463),registration_grade(r391,_G133468),registration_grade(r392,b),registration_grade(r393,_G133478),registration_grade(r394,c),registration_grade(r395,b),registration_grade(r396,_G133493),registration_grade(r397,a),registration_grade(r398,_G133503),registration_grade(r399,c),registration_grade(r400,a),registration_grade(r401,c),registration_grade(r402,a),registration_grade(r403,_G133528),registration_grade(r404,_G133533),registration_grade(r405,a),registration_grade(r406,_G133543),registration_grade(r407,b),registration_grade(r408,_G133553),registration_grade(r409,a),registration_grade(r410,b),registration_grade(r411,b),registration_grade(r412,_G133573),registration_grade(r413,_G133578),registration_grade(r414,a),registration_grade(r415,b),registration_grade(r416,b),registration_grade(r417,_G133598),registration_grade(r418,_G133603),registration_grade(r419,a),registration_grade(r420,a),registration_grade(r421,c),registration_grade(r422,_G133623),registration_grade(r423,_G133628),registration_grade(r424,a),registration_grade(r425,b),registration_grade(r426,_G133643),registration_grade(r427,c),registration_grade(r428,_G133653),registration_grade(r429,_G133658),registration_grade(r430,b),registration_grade(r431,d),registration_grade(r432,c),registration_grade(r433,a),registration_grade(r434,_G133683),registration_grade(r435,_G133688),registration_grade(r436,_G133693),registration_grade(r437,_G133698),registration_grade(r438,_G133703),registration_grade(r439,b),registration_grade(r440,_G133713),registration_grade(r441,a),registration_grade(r442,_G133723),registration_grade(r443,_G133728),registration_grade(r444,a),registration_grade(r445,_G133738),registration_grade(r446,_G133743),registration_grade(r447,_G133748),registration_grade(r448,_G133753),registration_grade(r449,b),registration_grade(r450,_G133763),registration_grade(r451,a),registration_grade(r452,_G133773),registration_grade(r453,_G133778),registration_grade(r454,_G133783),registration_grade(r455,_G133788),registration_grade(r456,c),registration_grade(r457,a),registration_grade(r458,b),registration_grade(r459,_G133808),registration_grade(r460,a),registration_grade(r461,b),registration_grade(r462,_G133823),registration_grade(r463,d),registration_grade(r464,_G133833),registration_grade(r465,_G133838),registration_grade(r466,b),registration_grade(r467,b),registration_grade(r468,a),registration_grade(r469,a),registration_grade(r470,c),registration_grade(r471,b),registration_grade(r472,a),registration_grade(r473,_G133878),registration_grade(r474,_G133883),registration_grade(r475,_G133888),registration_grade(r476,_G133893),registration_grade(r477,_G133898),registration_grade(r478,a),registration_grade(r479,_G133908),registration_grade(r480,a),registration_grade(r481,b),registration_grade(r482,_G133923),registration_grade(r483,_G133928),registration_grade(r484,a),registration_grade(r485,a),registration_grade(r486,_G133943),registration_grade(r487,a),registration_grade(r488,_G133953),registration_grade(r489,_G133958),registration_grade(r490,_G133963),registration_grade(r491,_G133968),registration_grade(r492,b),registration_grade(r493,_G133978),registration_grade(r494,b),registration_grade(r495,_G133988),registration_grade(r496,_G133993),registration_grade(r497,c),registration_grade(r498,_G134003),registration_grade(r499,_G134008),registration_grade(r500,b),registration_grade(r501,a),registration_grade(r502,a),registration_grade(r503,_G134028),registration_grade(r504,b),registration_grade(r505,c),registration_grade(r506,c),registration_grade(r507,_G134048),registration_grade(r508,_G134053),registration_grade(r509,_G134058),registration_grade(r510,a),registration_grade(r511,_G134068),registration_grade(r512,b),registration_grade(r513,b),registration_grade(r514,_G134083),registration_grade(r515,c),registration_grade(r516,a),registration_grade(r517,_G134098),registration_grade(r518,a),registration_grade(r519,a),registration_grade(r520,_G134113),registration_grade(r521,a),registration_grade(r522,_G134123),registration_grade(r523,_G134128),registration_grade(r524,b),registration_grade(r525,c),registration_grade(r526,c),registration_grade(r527,_G134148),registration_grade(r528,a),registration_grade(r529,b),registration_grade(r530,_G134163),registration_grade(r531,_G134168),registration_grade(r532,a),registration_grade(r533,_G134178),registration_grade(r534,b),registration_grade(r535,c),registration_grade(r536,_G134193),registration_grade(r537,_G134198),registration_grade(r538,a),registration_grade(r539,_G134208),registration_grade(r540,_G134213),registration_grade(r541,_G134218),registration_grade(r542,_G134223),registration_grade(r543,_G134228),registration_grade(r544,_G134233),registration_grade(r545,a),registration_grade(r546,_G134243),registration_grade(r547,c),registration_grade(r548,c),registration_grade(r549,_G134258),registration_grade(r550,a),registration_grade(r551,_G134268),registration_grade(r552,c),registration_grade(r553,b),registration_grade(r554,b),registration_grade(r555,b),registration_grade(r556,a),registration_grade(r557,_G134298),registration_grade(r558,_G134303),registration_grade(r559,_G134308),registration_grade(r560,_G134313),registration_grade(r561,a),registration_grade(r562,a),registration_grade(r563,a),registration_grade(r564,b),registration_grade(r565,d),registration_grade(r566,c),registration_grade(r567,_G134348),registration_grade(r568,a),registration_grade(r569,_G134358),registration_grade(r570,_G134363),registration_grade(r571,_G134368),registration_grade(r572,b),registration_grade(r573,a),registration_grade(r574,_G134383),registration_grade(r575,a),registration_grade(r576,a),registration_grade(r577,a),registration_grade(r578,b),registration_grade(r579,a),registration_grade(r580,b),registration_grade(r581,a),registration_grade(r582,a),registration_grade(r583,a),registration_grade(r584,a),registration_grade(r585,c),registration_grade(r586,b),registration_grade(r587,_G134448),registration_grade(r588,c),registration_grade(r589,c),registration_grade(r590,b),registration_grade(r591,_G134468),registration_grade(r592,b),registration_grade(r593,b),registration_grade(r594,c),registration_grade(r595,_G134488),registration_grade(r596,_G134493),registration_grade(r597,a),registration_grade(r598,a),registration_grade(r599,_G134508),registration_grade(r600,a),registration_grade(r601,_G134518),registration_grade(r602,_G134523),registration_grade(r603,d),registration_grade(r604,c),registration_grade(r605,a),registration_grade(r606,a),registration_grade(r607,b),registration_grade(r608,_G134553),registration_grade(r609,b),registration_grade(r610,_G134563),registration_grade(r611,_G134568),registration_grade(r612,_G134573),registration_grade(r613,a),registration_grade(r614,_G134583),registration_grade(r615,b),registration_grade(r616,a),registration_grade(r617,a),registration_grade(r618,_G134603),registration_grade(r619,_G134608),registration_grade(r620,_G134613),registration_grade(r621,_G134618),registration_grade(r622,_G134623),registration_grade(r623,b),registration_grade(r624,_G134633),registration_grade(r625,_G134638),registration_grade(r626,_G134643),registration_grade(r627,_G134648),registration_grade(r628,a),registration_grade(r629,b),registration_grade(r630,_G134663),registration_grade(r631,a),registration_grade(r632,a),registration_grade(r633,b),registration_grade(r634,b),registration_grade(r635,b),registration_grade(r636,_G134693),registration_grade(r637,_G134698),registration_grade(r638,_G134703),registration_grade(r639,b),registration_grade(r640,c),registration_grade(r641,_G134718),registration_grade(r642,c),registration_grade(r643,_G134728),registration_grade(r644,_G134733),registration_grade(r645,b),registration_grade(r646,b),registration_grade(r647,_G134748),registration_grade(r648,_G134753),registration_grade(r649,_G134758),registration_grade(r650,_G134763),registration_grade(r651,b),registration_grade(r652,_G134773),registration_grade(r653,b),registration_grade(r654,b),registration_grade(r655,_G134788),registration_grade(r656,_G134793),registration_grade(r657,_G134798),registration_grade(r658,a),registration_grade(r659,_G134808),registration_grade(r660,a),registration_grade(r661,_G134818),registration_grade(r662,a),registration_grade(r663,a),registration_grade(r664,c),registration_grade(r665,_G134838),registration_grade(r666,b),registration_grade(r667,b),registration_grade(r668,d),registration_grade(r669,_G134858),registration_grade(r670,_G134863),registration_grade(r671,_G134868),registration_grade(r672,c),registration_grade(r673,_G134878),registration_grade(r674,_G134883),registration_grade(r675,_G134888),registration_grade(r676,_G134893),registration_grade(r677,_G134898),registration_grade(r678,_G134903),registration_grade(r679,a),registration_grade(r680,c),registration_grade(r681,b),registration_grade(r682,a),registration_grade(r683,_G134928),registration_grade(r684,b),registration_grade(r685,_G134938),registration_grade(r686,b),registration_grade(r687,a),registration_grade(r688,_G134953),registration_grade(r689,_G134958),registration_grade(r690,a),registration_grade(r691,_G134968),registration_grade(r692,_G134973),registration_grade(r693,b),registration_grade(r694,_G134983),registration_grade(r695,_G134988),registration_grade(r696,_G134993),registration_grade(r697,_G134998),registration_grade(r698,b),registration_grade(r699,a),registration_grade(r700,_G135013),registration_grade(r701,_G135018),registration_grade(r702,_G135023),registration_grade(r703,_G135028),registration_grade(r704,c),registration_grade(r705,b),registration_grade(r706,_G135043),registration_grade(r707,_G135048),registration_grade(r708,b),registration_grade(r709,_G135058),registration_grade(r710,b),registration_grade(r711,_G135068),registration_grade(r712,_G135073),registration_grade(r713,_G135078),registration_grade(r714,_G135083),registration_grade(r715,a),registration_grade(r716,a),registration_grade(r717,a),registration_grade(r718,_G135103),registration_grade(r719,_G135108),registration_grade(r720,_G135113),registration_grade(r721,_G135118),registration_grade(r722,b),registration_grade(r723,b),registration_grade(r724,_G135133),registration_grade(r725,c),registration_grade(r726,a),registration_grade(r727,_G135148),registration_grade(r728,_G135153),registration_grade(r729,b),registration_grade(r730,_G135163),registration_grade(r731,_G135168),registration_grade(r732,_G135173),registration_grade(r733,_G135178),registration_grade(r734,_G135183),registration_grade(r735,b),registration_grade(r736,a),registration_grade(r737,b),registration_grade(r738,b),registration_grade(r739,a),registration_grade(r740,_G135213),registration_grade(r741,a),registration_grade(r742,_G135223),registration_grade(r743,_G135228),registration_grade(r744,_G135233),registration_grade(r745,_G135238),registration_grade(r746,a),registration_grade(r747,a),registration_grade(r748,_G135253),registration_grade(r749,_G135258),registration_grade(r750,_G135263),registration_grade(r751,c),registration_grade(r752,b),registration_grade(r753,c),registration_grade(r754,_G135283),registration_grade(r755,c),registration_grade(r756,b),registration_grade(r757,_G135298),registration_grade(r758,b),registration_grade(r759,b),registration_grade(r760,a),registration_grade(r761,a),registration_grade(r762,_G135323),registration_grade(r763,a),registration_grade(r764,_G135333),registration_grade(r765,a),registration_grade(r766,c),registration_grade(r767,c),registration_grade(r768,_G135353),registration_grade(r769,c),registration_grade(r770,b),registration_grade(r771,_G135368),registration_grade(r772,_G135373),registration_grade(r773,b),registration_grade(r774,b),registration_grade(r775,a),registration_grade(r776,_G135393),registration_grade(r777,c),registration_grade(r778,_G135403),registration_grade(r779,b),registration_grade(r780,a),registration_grade(r781,b),registration_grade(r782,_G135423),registration_grade(r783,c),registration_grade(r784,_G135433),registration_grade(r785,c),registration_grade(r786,_G135443),registration_grade(r787,a),registration_grade(r788,a),registration_grade(r789,_G135458),registration_grade(r790,_G135463),registration_grade(r791,b),registration_grade(r792,_G135473),registration_grade(r793,a),registration_grade(r794,_G135483),registration_grade(r795,_G135488),registration_grade(r796,_G135493),registration_grade(r797,_G135498),registration_grade(r798,_G135503),registration_grade(r799,_G135508),registration_grade(r800,b),registration_grade(r801,b),registration_grade(r802,a),registration_grade(r803,_G135528),registration_grade(r804,a),registration_grade(r805,_G135538),registration_grade(r806,a),registration_grade(r807,a),registration_grade(r808,b),registration_grade(r809,_G135558),registration_grade(r810,_G135563),registration_grade(r811,d),registration_grade(r812,c),registration_grade(r813,_G135578),registration_grade(r814,c),registration_grade(r815,_G135588),registration_grade(r816,_G135593),registration_grade(r817,a),registration_grade(r818,b),registration_grade(r819,b),registration_grade(r820,d),registration_grade(r821,_G135618),registration_grade(r822,_G135623),registration_grade(r823,_G135628),registration_grade(r824,c),registration_grade(r825,b),registration_grade(r826,_G135643),registration_grade(r827,c),registration_grade(r828,_G135653),registration_grade(r829,b),registration_grade(r830,_G135663),registration_grade(r831,_G135668),registration_grade(r832,b),registration_grade(r833,b),registration_grade(r834,_G135683),registration_grade(r835,_G135688),registration_grade(r836,_G135693),registration_grade(r837,_G135698),registration_grade(r838,_G135703),registration_grade(r839,b),registration_grade(r840,_G135713),registration_grade(r841,_G135718),registration_grade(r842,a),registration_grade(r843,_G135728),registration_grade(r844,a),registration_grade(r845,_G135738),registration_grade(r846,_G135743),registration_grade(r847,_G135748),registration_grade(r848,_G135753),registration_grade(r849,_G135758),registration_grade(r850,b),registration_grade(r851,_G135768),registration_grade(r852,_G135773),registration_grade(r853,_G135778),registration_grade(r854,_G135783),registration_grade(r855,_G135788),registration_grade(r856,_G135793),student_intelligence(s0,l),student_intelligence(s1,_G135803),student_intelligence(s2,_G135808),student_intelligence(s3,_G135813),student_intelligence(s4,_G135818),student_intelligence(s5,_G135823),student_intelligence(s6,_G135828),student_intelligence(s7,h),student_intelligence(s8,h),student_intelligence(s9,m),student_intelligence(s10,m),student_intelligence(s11,m),student_intelligence(s12,h),student_intelligence(s13,h),student_intelligence(s14,_G135868),student_intelligence(s15,_G135873),student_intelligence(s16,h),student_intelligence(s17,_G135883),student_intelligence(s18,_G135888),student_intelligence(s19,_G135893),student_intelligence(s20,m),student_intelligence(s21,_G135903),student_intelligence(s22,_G135908),student_intelligence(s23,h),student_intelligence(s24,_G135918),student_intelligence(s25,_G135923),student_intelligence(s26,m),student_intelligence(s27,_G135933),student_intelligence(s28,m),student_intelligence(s29,_G135943),student_intelligence(s30,_G135948),student_intelligence(s31,_G135953),student_intelligence(s32,_G135958),student_intelligence(s33,h),student_intelligence(s34,l),student_intelligence(s35,_G135973),student_intelligence(s36,_G135978),student_intelligence(s37,m),student_intelligence(s38,_G135988),student_intelligence(s39,h),student_intelligence(s40,h),student_intelligence(s41,_G136003),student_intelligence(s42,_G136008),student_intelligence(s43,h),student_intelligence(s44,_G136018),student_intelligence(s45,h),student_intelligence(s46,l),student_intelligence(s47,h),student_intelligence(s48,m),student_intelligence(s49,_G136043),student_intelligence(s50,_G136048),student_intelligence(s51,_G136053),student_intelligence(s52,m),student_intelligence(s53,_G136063),student_intelligence(s54,_G136068),student_intelligence(s55,h),student_intelligence(s56,l),student_intelligence(s57,m),student_intelligence(s58,_G136088),student_intelligence(s59,m),student_intelligence(s60,_G136098),student_intelligence(s61,h),student_intelligence(s62,m),student_intelligence(s63,_G136113),student_intelligence(s64,_G136118),student_intelligence(s65,m),student_intelligence(s66,h),student_intelligence(s67,m),student_intelligence(s68,_G136138),student_intelligence(s69,h),student_intelligence(s70,_G136148),student_intelligence(s71,_G136153),student_intelligence(s72,_G136158),student_intelligence(s73,m),student_intelligence(s74,h),student_intelligence(s75,_G136173),student_intelligence(s76,_G136178),student_intelligence(s77,h),student_intelligence(s78,_G136188),student_intelligence(s79,_G136193),student_intelligence(s80,_G136198),student_intelligence(s81,_G136203),student_intelligence(s82,h),student_intelligence(s83,h),student_intelligence(s84,m),student_intelligence(s85,h),student_intelligence(s86,m),student_intelligence(s87,h),student_intelligence(s88,h),student_intelligence(s89,m),student_intelligence(s90,_G136248),student_intelligence(s91,m),student_intelligence(s92,h),student_intelligence(s93,_G136263),student_intelligence(s94,l),student_intelligence(s95,_G136273),student_intelligence(s96,m),student_intelligence(s97,_G136283),student_intelligence(s98,h),student_intelligence(s99,_G136293),student_intelligence(s100,_G136298),student_intelligence(s101,h),student_intelligence(s102,_G136308),student_intelligence(s103,h),student_intelligence(s104,_G136318),student_intelligence(s105,_G136323),student_intelligence(s106,h),student_intelligence(s107,l),student_intelligence(s108,m),student_intelligence(s109,_G136343),student_intelligence(s110,m),student_intelligence(s111,h),student_intelligence(s112,_G136358),student_intelligence(s113,_G136363),student_intelligence(s114,m),student_intelligence(s115,_G136373),student_intelligence(s116,m),student_intelligence(s117,_G136383),student_intelligence(s118,_G136388),student_intelligence(s119,h),student_intelligence(s120,_G136398),student_intelligence(s121,_G136403),student_intelligence(s122,_G136408),student_intelligence(s123,m),student_intelligence(s124,_G136418),student_intelligence(s125,m),student_intelligence(s126,m),student_intelligence(s127,m),student_intelligence(s128,_G136438),student_intelligence(s129,_G136443),student_intelligence(s130,_G136448),student_intelligence(s131,h),student_intelligence(s132,_G136458),student_intelligence(s133,_G136463),student_intelligence(s134,_G136468),student_intelligence(s135,_G136473),student_intelligence(s136,_G136478),student_intelligence(s137,_G136483),student_intelligence(s138,_G136488),student_intelligence(s139,_G136493),student_intelligence(s140,h),student_intelligence(s141,m),student_intelligence(s142,m),student_intelligence(s143,h),student_intelligence(s144,_G136518),student_intelligence(s145,h),student_intelligence(s146,_G136528),student_intelligence(s147,_G136533),student_intelligence(s148,m),student_intelligence(s149,_G136543),student_intelligence(s150,l),student_intelligence(s151,h),student_intelligence(s152,h),student_intelligence(s153,m),student_intelligence(s154,_G136568),student_intelligence(s155,h),student_intelligence(s156,m),student_intelligence(s157,_G136583),student_intelligence(s158,h),student_intelligence(s159,_G136593),student_intelligence(s160,m),student_intelligence(s161,m),student_intelligence(s162,h),student_intelligence(s163,m),student_intelligence(s164,_G136618),student_intelligence(s165,_G136623),student_intelligence(s166,_G136628),student_intelligence(s167,_G136633),student_intelligence(s168,h),student_intelligence(s169,_G136643),student_intelligence(s170,_G136648),student_intelligence(s171,_G136653),student_intelligence(s172,_G136658),student_intelligence(s173,_G136663),student_intelligence(s174,_G136668),student_intelligence(s175,_G136673),student_intelligence(s176,m),student_intelligence(s177,m),student_intelligence(s178,_G136688),student_intelligence(s179,m),student_intelligence(s180,m),student_intelligence(s181,h),student_intelligence(s182,m),student_intelligence(s183,_G136713),student_intelligence(s184,_G136718),student_intelligence(s185,m),student_intelligence(s186,_G136728),student_intelligence(s187,_G136733),student_intelligence(s188,_G136738),student_intelligence(s189,_G136743),student_intelligence(s190,_G136748),student_intelligence(s191,l),student_intelligence(s192,_G136758),student_intelligence(s193,m),student_intelligence(s194,m),student_intelligence(s195,_G136773),student_intelligence(s196,_G136778),student_intelligence(s197,h),student_intelligence(s198,h),student_intelligence(s199,_G136793),student_intelligence(s200,_G136798),student_intelligence(s201,_G136803),student_intelligence(s202,_G136808),student_intelligence(s203,_G136813),student_intelligence(s204,h),student_intelligence(s205,h),student_intelligence(s206,_G136828),student_intelligence(s207,h),student_intelligence(s208,_G136838),student_intelligence(s209,h),student_intelligence(s210,_G136848),student_intelligence(s211,m),student_intelligence(s212,_G136858),student_intelligence(s213,h),student_intelligence(s214,_G136868),student_intelligence(s215,m),student_intelligence(s216,h),student_intelligence(s217,m),student_intelligence(s218,h),student_intelligence(s219,h),student_intelligence(s220,h),student_intelligence(s221,h),student_intelligence(s222,h),student_intelligence(s223,m),student_intelligence(s224,l),student_intelligence(s225,_G136923),student_intelligence(s226,_G136928),student_intelligence(s227,_G136933),student_intelligence(s228,h),student_intelligence(s229,m),student_intelligence(s230,_G136948),student_intelligence(s231,_G136953),student_intelligence(s232,m),student_intelligence(s233,h),student_intelligence(s234,_G136968),student_intelligence(s235,_G136973),student_intelligence(s236,_G136978),student_intelligence(s237,_G136983),student_intelligence(s238,h),student_intelligence(s239,_G136993),student_intelligence(s240,h),student_intelligence(s241,_G137003),student_intelligence(s242,_G137008),student_intelligence(s243,_G137013),student_intelligence(s244,h),student_intelligence(s245,l),student_intelligence(s246,_G137028),student_intelligence(s247,_G137033),student_intelligence(s248,_G137038),student_intelligence(s249,h),student_intelligence(s250,_G137048),student_intelligence(s251,_G137053),student_intelligence(s252,m),student_intelligence(s253,m),student_intelligence(s254,m),student_intelligence(s255,m),course_difficulty(c0,_G137078),course_difficulty(c1,_G137083),course_difficulty(c2,_G137088),course_difficulty(c3,_G137093),course_difficulty(c4,m),course_difficulty(c5,_G137103),course_difficulty(c6,_G137108),course_difficulty(c7,_G137113),course_difficulty(c8,_G137118),course_difficulty(c9,_G137123),course_difficulty(c10,m),course_difficulty(c11,_G137133),course_difficulty(c12,m),course_difficulty(c13,_G137143),course_difficulty(c14,m),course_difficulty(c15,h),course_difficulty(c16,l),course_difficulty(c17,_G137163),course_difficulty(c18,m),course_difficulty(c19,_G137173),course_difficulty(c20,_G137178),course_difficulty(c21,_G137183),course_difficulty(c22,m),course_difficulty(c23,_G137193),course_difficulty(c24,h),course_difficulty(c25,m),course_difficulty(c26,l),course_difficulty(c27,h),course_difficulty(c28,m),course_difficulty(c29,m),course_difficulty(c30,_G137228),course_difficulty(c31,_G137233),course_difficulty(c32,l),course_difficulty(c33,_G137243),course_difficulty(c34,_G137248),course_difficulty(c35,_G137253),course_difficulty(c36,h),course_difficulty(c37,_G137263),course_difficulty(c38,m),course_difficulty(c39,m),course_difficulty(c40,h),course_difficulty(c41,_G137283),course_difficulty(c42,_G137288),course_difficulty(c43,_G137293),course_difficulty(c44,m),course_difficulty(c45,_G137303),course_difficulty(c46,m),course_difficulty(c47,_G137313),course_difficulty(c48,m),course_difficulty(c49,l),course_difficulty(c50,m),course_difficulty(c51,h),course_difficulty(c52,h),course_difficulty(c53,_G137343),course_difficulty(c54,_G137348),course_difficulty(c55,h),course_difficulty(c56,_G137358),course_difficulty(c57,m),course_difficulty(c58,h),course_difficulty(c59,_G137373),course_difficulty(c60,h),course_difficulty(c61,m),course_difficulty(c62,_G137388),course_difficulty(c63,_G137393),registration_satisfaction(r0,_G137398),registration_satisfaction(r1,_G137403),registration_satisfaction(r2,_G137408),registration_satisfaction(r3,_G137413),registration_satisfaction(r4,h),registration_satisfaction(r5,_G137423),registration_satisfaction(r6,_G137428),registration_satisfaction(r7,_G137433),registration_satisfaction(r8,l),registration_satisfaction(r9,h),registration_satisfaction(r10,h),registration_satisfaction(r11,_G137453),registration_satisfaction(r12,_G137458),registration_satisfaction(r13,h),registration_satisfaction(r14,m),registration_satisfaction(r15,h),registration_satisfaction(r16,h),registration_satisfaction(r17,_G137483),registration_satisfaction(r18,l),registration_satisfaction(r19,m),registration_satisfaction(r20,h),registration_satisfaction(r21,_G137503),registration_satisfaction(r22,_G137508),registration_satisfaction(r23,_G137513),registration_satisfaction(r24,_G137518),registration_satisfaction(r25,h),registration_satisfaction(r26,_G137528),registration_satisfaction(r27,h),registration_satisfaction(r28,h),registration_satisfaction(r29,h),registration_satisfaction(r30,l),registration_satisfaction(r31,_G137553),registration_satisfaction(r32,_G137558),registration_satisfaction(r33,_G137563),registration_satisfaction(r34,h),registration_satisfaction(r35,h),registration_satisfaction(r36,_G137578),registration_satisfaction(r37,h),registration_satisfaction(r38,_G137588),registration_satisfaction(r39,h),registration_satisfaction(r40,h),registration_satisfaction(r41,h),registration_satisfaction(r42,_G137608),registration_satisfaction(r43,h),registration_satisfaction(r44,h),registration_satisfaction(r45,_G137623),registration_satisfaction(r46,m),registration_satisfaction(r47,_G137633),registration_satisfaction(r48,h),registration_satisfaction(r49,h),registration_satisfaction(r50,h),registration_satisfaction(r51,_G137653),registration_satisfaction(r52,h),registration_satisfaction(r53,_G137663),registration_satisfaction(r54,h),registration_satisfaction(r55,_G137673),registration_satisfaction(r56,_G137678),registration_satisfaction(r57,h),registration_satisfaction(r58,h),registration_satisfaction(r59,_G137693),registration_satisfaction(r60,h),registration_satisfaction(r61,h),registration_satisfaction(r62,h),registration_satisfaction(r63,h),registration_satisfaction(r64,h),registration_satisfaction(r65,_G137723),registration_satisfaction(r66,h),registration_satisfaction(r67,_G137733),registration_satisfaction(r68,_G137738),registration_satisfaction(r69,_G137743),registration_satisfaction(r70,_G137748),registration_satisfaction(r71,h),registration_satisfaction(r72,_G137758),registration_satisfaction(r73,_G137763),registration_satisfaction(r74,h),registration_satisfaction(r75,h),registration_satisfaction(r76,h),registration_satisfaction(r77,h),registration_satisfaction(r78,m),registration_satisfaction(r79,_G137793),registration_satisfaction(r80,h),registration_satisfaction(r81,h),registration_satisfaction(r82,l),registration_satisfaction(r83,m),registration_satisfaction(r84,m),registration_satisfaction(r85,_G137823),registration_satisfaction(r86,m),registration_satisfaction(r87,m),registration_satisfaction(r88,_G137838),registration_satisfaction(r89,_G137843),registration_satisfaction(r90,_G137848),registration_satisfaction(r91,h),registration_satisfaction(r92,_G137858),registration_satisfaction(r93,h),registration_satisfaction(r94,l),registration_satisfaction(r95,h),registration_satisfaction(r96,h),registration_satisfaction(r97,_G137883),registration_satisfaction(r98,_G137888),registration_satisfaction(r99,_G137893),registration_satisfaction(r100,_G137898),registration_satisfaction(r101,_G137903),registration_satisfaction(r102,_G137908),registration_satisfaction(r103,h),registration_satisfaction(r104,h),registration_satisfaction(r105,l),registration_satisfaction(r106,_G137928),registration_satisfaction(r107,_G137933),registration_satisfaction(r108,l),registration_satisfaction(r109,_G137943),registration_satisfaction(r110,_G137948),registration_satisfaction(r111,_G137953),registration_satisfaction(r112,h),registration_satisfaction(r113,h),registration_satisfaction(r114,m),registration_satisfaction(r115,_G137973),registration_satisfaction(r116,h),registration_satisfaction(r117,_G137983),registration_satisfaction(r118,_G137988),registration_satisfaction(r119,h),registration_satisfaction(r120,l),registration_satisfaction(r121,h),registration_satisfaction(r122,h),registration_satisfaction(r123,l),registration_satisfaction(r124,_G138018),registration_satisfaction(r125,_G138023),registration_satisfaction(r126,h),registration_satisfaction(r127,_G138033),registration_satisfaction(r128,_G138038),registration_satisfaction(r129,h),registration_satisfaction(r130,_G138048),registration_satisfaction(r131,h),registration_satisfaction(r132,_G138058),registration_satisfaction(r133,_G138063),registration_satisfaction(r134,_G138068),registration_satisfaction(r135,h),registration_satisfaction(r136,_G138078),registration_satisfaction(r137,_G138083),registration_satisfaction(r138,h),registration_satisfaction(r139,_G138093),registration_satisfaction(r140,h),registration_satisfaction(r141,l),registration_satisfaction(r142,_G138108),registration_satisfaction(r143,_G138113),registration_satisfaction(r144,h),registration_satisfaction(r145,_G138123),registration_satisfaction(r146,h),registration_satisfaction(r147,l),registration_satisfaction(r148,m),registration_satisfaction(r149,_G138143),registration_satisfaction(r150,_G138148),registration_satisfaction(r151,_G138153),registration_satisfaction(r152,h),registration_satisfaction(r153,_G138163),registration_satisfaction(r154,_G138168),registration_satisfaction(r155,m),registration_satisfaction(r156,_G138178),registration_satisfaction(r157,_G138183),registration_satisfaction(r158,_G138188),registration_satisfaction(r159,m),registration_satisfaction(r160,_G138198),registration_satisfaction(r161,_G138203),registration_satisfaction(r162,_G138208),registration_satisfaction(r163,_G138213),registration_satisfaction(r164,m),registration_satisfaction(r165,m),registration_satisfaction(r166,_G138228),registration_satisfaction(r167,_G138233),registration_satisfaction(r168,_G138238),registration_satisfaction(r169,h),registration_satisfaction(r170,_G138248),registration_satisfaction(r171,h),registration_satisfaction(r172,h),registration_satisfaction(r173,h),registration_satisfaction(r174,h),registration_satisfaction(r175,h),registration_satisfaction(r176,_G138278),registration_satisfaction(r177,h),registration_satisfaction(r178,_G138288),registration_satisfaction(r179,l),registration_satisfaction(r180,h),registration_satisfaction(r181,m),registration_satisfaction(r182,_G138308),registration_satisfaction(r183,_G138313),registration_satisfaction(r184,h),registration_satisfaction(r185,_G138323),registration_satisfaction(r186,_G138328),registration_satisfaction(r187,h),registration_satisfaction(r188,m),registration_satisfaction(r189,_G138343),registration_satisfaction(r190,_G138348),registration_satisfaction(r191,h),registration_satisfaction(r192,m),registration_satisfaction(r193,h),registration_satisfaction(r194,_G138368),registration_satisfaction(r195,_G138373),registration_satisfaction(r196,_G138378),registration_satisfaction(r197,_G138383),registration_satisfaction(r198,h),registration_satisfaction(r199,h),registration_satisfaction(r200,_G138398),registration_satisfaction(r201,h),registration_satisfaction(r202,_G138408),registration_satisfaction(r203,_G138413),registration_satisfaction(r204,h),registration_satisfaction(r205,_G138423),registration_satisfaction(r206,h),registration_satisfaction(r207,h),registration_satisfaction(r208,h),registration_satisfaction(r209,h),registration_satisfaction(r210,_G138448),registration_satisfaction(r211,m),registration_satisfaction(r212,h),registration_satisfaction(r213,_G138463),registration_satisfaction(r214,h),registration_satisfaction(r215,_G138473),registration_satisfaction(r216,h),registration_satisfaction(r217,_G138483),registration_satisfaction(r218,_G138488),registration_satisfaction(r219,h),registration_satisfaction(r220,h),registration_satisfaction(r221,m),registration_satisfaction(r222,l),registration_satisfaction(r223,_G138513),registration_satisfaction(r224,_G138518),registration_satisfaction(r225,_G138523),registration_satisfaction(r226,l),registration_satisfaction(r227,h),registration_satisfaction(r228,l),registration_satisfaction(r229,_G138543),registration_satisfaction(r230,h),registration_satisfaction(r231,l),registration_satisfaction(r232,_G138558),registration_satisfaction(r233,m),registration_satisfaction(r234,_G138568),registration_satisfaction(r235,h),registration_satisfaction(r236,_G138578),registration_satisfaction(r237,m),registration_satisfaction(r238,m),registration_satisfaction(r239,m),registration_satisfaction(r240,h),registration_satisfaction(r241,_G138603),registration_satisfaction(r242,m),registration_satisfaction(r243,h),registration_satisfaction(r244,_G138618),registration_satisfaction(r245,h),registration_satisfaction(r246,h),registration_satisfaction(r247,_G138633),registration_satisfaction(r248,l),registration_satisfaction(r249,_G138643),registration_satisfaction(r250,_G138648),registration_satisfaction(r251,_G138653),registration_satisfaction(r252,h),registration_satisfaction(r253,h),registration_satisfaction(r254,h),registration_satisfaction(r255,_G138673),registration_satisfaction(r256,h),registration_satisfaction(r257,_G138683),registration_satisfaction(r258,h),registration_satisfaction(r259,h),registration_satisfaction(r260,_G138698),registration_satisfaction(r261,h),registration_satisfaction(r262,h),registration_satisfaction(r263,_G138713),registration_satisfaction(r264,_G138718),registration_satisfaction(r265,h),registration_satisfaction(r266,_G138728),registration_satisfaction(r267,_G138733),registration_satisfaction(r268,l),registration_satisfaction(r269,h),registration_satisfaction(r270,_G138748),registration_satisfaction(r271,h),registration_satisfaction(r272,l),registration_satisfaction(r273,h),registration_satisfaction(r274,_G138768),registration_satisfaction(r275,_G138773),registration_satisfaction(r276,_G138778),registration_satisfaction(r277,h),registration_satisfaction(r278,h),registration_satisfaction(r279,_G138793),registration_satisfaction(r280,h),registration_satisfaction(r281,_G138803),registration_satisfaction(r282,_G138808),registration_satisfaction(r283,h),registration_satisfaction(r284,m),registration_satisfaction(r285,m),registration_satisfaction(r286,h),registration_satisfaction(r287,h),registration_satisfaction(r288,_G138838),registration_satisfaction(r289,l),registration_satisfaction(r290,_G138848),registration_satisfaction(r291,_G138853),registration_satisfaction(r292,_G138858),registration_satisfaction(r293,h),registration_satisfaction(r294,h),registration_satisfaction(r295,m),registration_satisfaction(r296,l),registration_satisfaction(r297,h),registration_satisfaction(r298,h),registration_satisfaction(r299,_G138893),registration_satisfaction(r300,l),registration_satisfaction(r301,_G138903),registration_satisfaction(r302,m),registration_satisfaction(r303,h),registration_satisfaction(r304,_G138918),registration_satisfaction(r305,_G138923),registration_satisfaction(r306,h),registration_satisfaction(r307,_G138933),registration_satisfaction(r308,_G138938),registration_satisfaction(r309,m),registration_satisfaction(r310,_G138948),registration_satisfaction(r311,_G138953),registration_satisfaction(r312,h),registration_satisfaction(r313,h),registration_satisfaction(r314,h),registration_satisfaction(r315,h),registration_satisfaction(r316,l),registration_satisfaction(r317,_G138983),registration_satisfaction(r318,h),registration_satisfaction(r319,m),registration_satisfaction(r320,_G138998),registration_satisfaction(r321,l),registration_satisfaction(r322,_G139008),registration_satisfaction(r323,_G139013),registration_satisfaction(r324,h),registration_satisfaction(r325,h),registration_satisfaction(r326,h),registration_satisfaction(r327,m),registration_satisfaction(r328,_G139038),registration_satisfaction(r329,h),registration_satisfaction(r330,l),registration_satisfaction(r331,_G139053),registration_satisfaction(r332,l),registration_satisfaction(r333,h),registration_satisfaction(r334,h),registration_satisfaction(r335,_G139073),registration_satisfaction(r336,m),registration_satisfaction(r337,h),registration_satisfaction(r338,_G139088),registration_satisfaction(r339,h),registration_satisfaction(r340,_G139098),registration_satisfaction(r341,l),registration_satisfaction(r342,h),registration_satisfaction(r343,_G139113),registration_satisfaction(r344,h),registration_satisfaction(r345,m),registration_satisfaction(r346,h),registration_satisfaction(r347,_G139133),registration_satisfaction(r348,_G139138),registration_satisfaction(r349,_G139143),registration_satisfaction(r350,_G139148),registration_satisfaction(r351,_G139153),registration_satisfaction(r352,_G139158),registration_satisfaction(r353,_G139163),registration_satisfaction(r354,h),registration_satisfaction(r355,_G139173),registration_satisfaction(r356,_G139178),registration_satisfaction(r357,_G139183),registration_satisfaction(r358,h),registration_satisfaction(r359,l),registration_satisfaction(r360,_G139198),registration_satisfaction(r361,m),registration_satisfaction(r362,h),registration_satisfaction(r363,_G139213),registration_satisfaction(r364,_G139218),registration_satisfaction(r365,_G139223),registration_satisfaction(r366,_G139228),registration_satisfaction(r367,_G139233),registration_satisfaction(r368,h),registration_satisfaction(r369,_G139243),registration_satisfaction(r370,_G139248),registration_satisfaction(r371,_G139253),registration_satisfaction(r372,_G139258),registration_satisfaction(r373,_G139263),registration_satisfaction(r374,_G139268),registration_satisfaction(r375,h),registration_satisfaction(r376,m),registration_satisfaction(r377,_G139283),registration_satisfaction(r378,_G139288),registration_satisfaction(r379,_G139293),registration_satisfaction(r380,h),registration_satisfaction(r381,m),registration_satisfaction(r382,_G139308),registration_satisfaction(r383,h),registration_satisfaction(r384,m),registration_satisfaction(r385,m),registration_satisfaction(r386,_G139328),registration_satisfaction(r387,h),registration_satisfaction(r388,_G139338),registration_satisfaction(r389,h),registration_satisfaction(r390,_G139348),registration_satisfaction(r391,_G139353),registration_satisfaction(r392,h),registration_satisfaction(r393,_G139363),registration_satisfaction(r394,_G139368),registration_satisfaction(r395,_G139373),registration_satisfaction(r396,_G139378),registration_satisfaction(r397,h),registration_satisfaction(r398,l),registration_satisfaction(r399,_G139393),registration_satisfaction(r400,_G139398),registration_satisfaction(r401,l),registration_satisfaction(r402,h),registration_satisfaction(r403,_G139413),registration_satisfaction(r404,_G139418),registration_satisfaction(r405,_G139423),registration_satisfaction(r406,_G139428),registration_satisfaction(r407,_G139433),registration_satisfaction(r408,_G139438),registration_satisfaction(r409,h),registration_satisfaction(r410,_G139448),registration_satisfaction(r411,l),registration_satisfaction(r412,_G139458),registration_satisfaction(r413,_G139463),registration_satisfaction(r414,h),registration_satisfaction(r415,m),registration_satisfaction(r416,_G139478),registration_satisfaction(r417,h),registration_satisfaction(r418,h),registration_satisfaction(r419,_G139493),registration_satisfaction(r420,h),registration_satisfaction(r421,_G139503),registration_satisfaction(r422,m),registration_satisfaction(r423,h),registration_satisfaction(r424,_G139518),registration_satisfaction(r425,_G139523),registration_satisfaction(r426,l),registration_satisfaction(r427,h),registration_satisfaction(r428,h),registration_satisfaction(r429,_G139543),registration_satisfaction(r430,_G139548),registration_satisfaction(r431,m),registration_satisfaction(r432,h),registration_satisfaction(r433,h),registration_satisfaction(r434,_G139568),registration_satisfaction(r435,_G139573),registration_satisfaction(r436,h),registration_satisfaction(r437,_G139583),registration_satisfaction(r438,_G139588),registration_satisfaction(r439,_G139593),registration_satisfaction(r440,h),registration_satisfaction(r441,_G139603),registration_satisfaction(r442,_G139608),registration_satisfaction(r443,h),registration_satisfaction(r444,h),registration_satisfaction(r445,h),registration_satisfaction(r446,h),registration_satisfaction(r447,_G139633),registration_satisfaction(r448,l),registration_satisfaction(r449,h),registration_satisfaction(r450,_G139648),registration_satisfaction(r451,h),registration_satisfaction(r452,_G139658),registration_satisfaction(r453,_G139663),registration_satisfaction(r454,_G139668),registration_satisfaction(r455,m),registration_satisfaction(r456,_G139678),registration_satisfaction(r457,h),registration_satisfaction(r458,_G139688),registration_satisfaction(r459,m),registration_satisfaction(r460,_G139698),registration_satisfaction(r461,_G139703),registration_satisfaction(r462,h),registration_satisfaction(r463,l),registration_satisfaction(r464,_G139718),registration_satisfaction(r465,h),registration_satisfaction(r466,_G139728),registration_satisfaction(r467,_G139733),registration_satisfaction(r468,_G139738),registration_satisfaction(r469,_G139743),registration_satisfaction(r470,_G139748),registration_satisfaction(r471,h),registration_satisfaction(r472,h),registration_satisfaction(r473,_G139763),registration_satisfaction(r474,m),registration_satisfaction(r475,h),registration_satisfaction(r476,_G139778),registration_satisfaction(r477,m),registration_satisfaction(r478,h),registration_satisfaction(r479,_G139793),registration_satisfaction(r480,h),registration_satisfaction(r481,_G139803),registration_satisfaction(r482,h),registration_satisfaction(r483,h),registration_satisfaction(r484,_G139818),registration_satisfaction(r485,h),registration_satisfaction(r486,_G139828),registration_satisfaction(r487,h),registration_satisfaction(r488,l),registration_satisfaction(r489,m),registration_satisfaction(r490,_G139848),registration_satisfaction(r491,l),registration_satisfaction(r492,_G139858),registration_satisfaction(r493,h),registration_satisfaction(r494,m),registration_satisfaction(r495,_G139873),registration_satisfaction(r496,h),registration_satisfaction(r497,h),registration_satisfaction(r498,_G139888),registration_satisfaction(r499,h),registration_satisfaction(r500,_G139898),registration_satisfaction(r501,h),registration_satisfaction(r502,h),registration_satisfaction(r503,_G139913),registration_satisfaction(r504,m),registration_satisfaction(r505,h),registration_satisfaction(r506,h),registration_satisfaction(r507,_G139933),registration_satisfaction(r508,_G139938),registration_satisfaction(r509,_G139943),registration_satisfaction(r510,_G139948),registration_satisfaction(r511,_G139953),registration_satisfaction(r512,h),registration_satisfaction(r513,h),registration_satisfaction(r514,_G139968),registration_satisfaction(r515,l),registration_satisfaction(r516,h),registration_satisfaction(r517,m),registration_satisfaction(r518,h),registration_satisfaction(r519,h),registration_satisfaction(r520,_G139998),registration_satisfaction(r521,h),registration_satisfaction(r522,h),registration_satisfaction(r523,_G140013),registration_satisfaction(r524,h),registration_satisfaction(r525,_G140023),registration_satisfaction(r526,h),registration_satisfaction(r527,l),registration_satisfaction(r528,_G140038),registration_satisfaction(r529,h),registration_satisfaction(r530,_G140048),registration_satisfaction(r531,m),registration_satisfaction(r532,h),registration_satisfaction(r533,h),registration_satisfaction(r534,l),registration_satisfaction(r535,m),registration_satisfaction(r536,_G140078),registration_satisfaction(r537,_G140083),registration_satisfaction(r538,h),registration_satisfaction(r539,h),registration_satisfaction(r540,m),registration_satisfaction(r541,_G140103),registration_satisfaction(r542,h),registration_satisfaction(r543,h),registration_satisfaction(r544,_G140118),registration_satisfaction(r545,_G140123),registration_satisfaction(r546,h),registration_satisfaction(r547,l),registration_satisfaction(r548,h),registration_satisfaction(r549,_G140143),registration_satisfaction(r550,h),registration_satisfaction(r551,h),registration_satisfaction(r552,m),registration_satisfaction(r553,_G140163),registration_satisfaction(r554,_G140168),registration_satisfaction(r555,m),registration_satisfaction(r556,h),registration_satisfaction(r557,h),registration_satisfaction(r558,_G140188),registration_satisfaction(r559,h),registration_satisfaction(r560,h),registration_satisfaction(r561,h),registration_satisfaction(r562,_G140208),registration_satisfaction(r563,_G140213),registration_satisfaction(r564,_G140218),registration_satisfaction(r565,_G140223),registration_satisfaction(r566,l),registration_satisfaction(r567,h),registration_satisfaction(r568,h),registration_satisfaction(r569,h),registration_satisfaction(r570,h),registration_satisfaction(r571,_G140253),registration_satisfaction(r572,m),registration_satisfaction(r573,h),registration_satisfaction(r574,m),registration_satisfaction(r575,h),registration_satisfaction(r576,h),registration_satisfaction(r577,_G140283),registration_satisfaction(r578,l),registration_satisfaction(r579,_G140293),registration_satisfaction(r580,m),registration_satisfaction(r581,_G140303),registration_satisfaction(r582,_G140308),registration_satisfaction(r583,_G140313),registration_satisfaction(r584,h),registration_satisfaction(r585,_G140323),registration_satisfaction(r586,_G140328),registration_satisfaction(r587,_G140333),registration_satisfaction(r588,_G140338),registration_satisfaction(r589,l),registration_satisfaction(r590,_G140348),registration_satisfaction(r591,h),registration_satisfaction(r592,_G140358),registration_satisfaction(r593,h),registration_satisfaction(r594,l),registration_satisfaction(r595,m),registration_satisfaction(r596,h),registration_satisfaction(r597,h),registration_satisfaction(r598,_G140388),registration_satisfaction(r599,_G140393),registration_satisfaction(r600,_G140398),registration_satisfaction(r601,_G140403),registration_satisfaction(r602,h),registration_satisfaction(r603,_G140413),registration_satisfaction(r604,l),registration_satisfaction(r605,h),registration_satisfaction(r606,h),registration_satisfaction(r607,_G140433),registration_satisfaction(r608,_G140438),registration_satisfaction(r609,_G140443),registration_satisfaction(r610,h),registration_satisfaction(r611,h),registration_satisfaction(r612,l),registration_satisfaction(r613,h),registration_satisfaction(r614,_G140468),registration_satisfaction(r615,_G140473),registration_satisfaction(r616,_G140478),registration_satisfaction(r617,_G140483),registration_satisfaction(r618,h),registration_satisfaction(r619,_G140493),registration_satisfaction(r620,_G140498),registration_satisfaction(r621,h),registration_satisfaction(r622,h),registration_satisfaction(r623,_G140513),registration_satisfaction(r624,_G140518),registration_satisfaction(r625,l),registration_satisfaction(r626,h),registration_satisfaction(r627,h),registration_satisfaction(r628,h),registration_satisfaction(r629,_G140543),registration_satisfaction(r630,_G140548),registration_satisfaction(r631,_G140553),registration_satisfaction(r632,_G140558),registration_satisfaction(r633,h),registration_satisfaction(r634,_G140568),registration_satisfaction(r635,_G140573),registration_satisfaction(r636,_G140578),registration_satisfaction(r637,m),registration_satisfaction(r638,h),registration_satisfaction(r639,_G140593),registration_satisfaction(r640,_G140598),registration_satisfaction(r641,_G140603),registration_satisfaction(r642,h),registration_satisfaction(r643,_G140613),registration_satisfaction(r644,_G140618),registration_satisfaction(r645,h),registration_satisfaction(r646,h),registration_satisfaction(r647,_G140633),registration_satisfaction(r648,_G140638),registration_satisfaction(r649,_G140643),registration_satisfaction(r650,h),registration_satisfaction(r651,_G140653),registration_satisfaction(r652,m),registration_satisfaction(r653,l),registration_satisfaction(r654,h),registration_satisfaction(r655,h),registration_satisfaction(r656,_G140678),registration_satisfaction(r657,_G140683),registration_satisfaction(r658,h),registration_satisfaction(r659,_G140693),registration_satisfaction(r660,h),registration_satisfaction(r661,h),registration_satisfaction(r662,_G140708),registration_satisfaction(r663,_G140713),registration_satisfaction(r664,_G140718),registration_satisfaction(r665,_G140723),registration_satisfaction(r666,_G140728),registration_satisfaction(r667,_G140733),registration_satisfaction(r668,_G140738),registration_satisfaction(r669,h),registration_satisfaction(r670,h),registration_satisfaction(r671,h),registration_satisfaction(r672,_G140758),registration_satisfaction(r673,l),registration_satisfaction(r674,h),registration_satisfaction(r675,l),registration_satisfaction(r676,h),registration_satisfaction(r677,_G140783),registration_satisfaction(r678,h),registration_satisfaction(r679,_G140793),registration_satisfaction(r680,_G140798),registration_satisfaction(r681,h),registration_satisfaction(r682,_G140808),registration_satisfaction(r683,h),registration_satisfaction(r684,_G140818),registration_satisfaction(r685,h),registration_satisfaction(r686,h),registration_satisfaction(r687,_G140833),registration_satisfaction(r688,_G140838),registration_satisfaction(r689,_G140843),registration_satisfaction(r690,h),registration_satisfaction(r691,_G140853),registration_satisfaction(r692,h),registration_satisfaction(r693,h),registration_satisfaction(r694,_G140868),registration_satisfaction(r695,h),registration_satisfaction(r696,h),registration_satisfaction(r697,m),registration_satisfaction(r698,_G140888),registration_satisfaction(r699,_G140893),registration_satisfaction(r700,h),registration_satisfaction(r701,_G140903),registration_satisfaction(r702,h),registration_satisfaction(r703,_G140913),registration_satisfaction(r704,l),registration_satisfaction(r705,_G140923),registration_satisfaction(r706,m),registration_satisfaction(r707,h),registration_satisfaction(r708,l),registration_satisfaction(r709,m),registration_satisfaction(r710,l),registration_satisfaction(r711,h),registration_satisfaction(r712,_G140958),registration_satisfaction(r713,h),registration_satisfaction(r714,m),registration_satisfaction(r715,_G140973),registration_satisfaction(r716,h),registration_satisfaction(r717,_G140983),registration_satisfaction(r718,l),registration_satisfaction(r719,_G140993),registration_satisfaction(r720,_G140998),registration_satisfaction(r721,_G141003),registration_satisfaction(r722,h),registration_satisfaction(r723,_G141013),registration_satisfaction(r724,h),registration_satisfaction(r725,_G141023),registration_satisfaction(r726,_G141028),registration_satisfaction(r727,h),registration_satisfaction(r728,m),registration_satisfaction(r729,h),registration_satisfaction(r730,h),registration_satisfaction(r731,h),registration_satisfaction(r732,h),registration_satisfaction(r733,_G141063),registration_satisfaction(r734,h),registration_satisfaction(r735,h),registration_satisfaction(r736,h),registration_satisfaction(r737,_G141083),registration_satisfaction(r738,_G141088),registration_satisfaction(r739,_G141093),registration_satisfaction(r740,h),registration_satisfaction(r741,h),registration_satisfaction(r742,_G141108),registration_satisfaction(r743,h),registration_satisfaction(r744,h),registration_satisfaction(r745,m),registration_satisfaction(r746,h),registration_satisfaction(r747,h),registration_satisfaction(r748,_G141138),registration_satisfaction(r749,m),registration_satisfaction(r750,h),registration_satisfaction(r751,h),registration_satisfaction(r752,m),registration_satisfaction(r753,m),registration_satisfaction(r754,h),registration_satisfaction(r755,_G141173),registration_satisfaction(r756,h),registration_satisfaction(r757,_G141183),registration_satisfaction(r758,h),registration_satisfaction(r759,_G141193),registration_satisfaction(r760,h),registration_satisfaction(r761,h),registration_satisfaction(r762,_G141208),registration_satisfaction(r763,_G141213),registration_satisfaction(r764,h),registration_satisfaction(r765,h),registration_satisfaction(r766,h),registration_satisfaction(r767,h),registration_satisfaction(r768,l),registration_satisfaction(r769,_G141243),registration_satisfaction(r770,_G141248),registration_satisfaction(r771,m),registration_satisfaction(r772,h),registration_satisfaction(r773,_G141263),registration_satisfaction(r774,h),registration_satisfaction(r775,_G141273),registration_satisfaction(r776,_G141278),registration_satisfaction(r777,l),registration_satisfaction(r778,h),registration_satisfaction(r779,_G141293),registration_satisfaction(r780,_G141298),registration_satisfaction(r781,m),registration_satisfaction(r782,_G141308),registration_satisfaction(r783,m),registration_satisfaction(r784,_G141318),registration_satisfaction(r785,l),registration_satisfaction(r786,h),registration_satisfaction(r787,_G141333),registration_satisfaction(r788,_G141338),registration_satisfaction(r789,h),registration_satisfaction(r790,_G141348),registration_satisfaction(r791,h),registration_satisfaction(r792,_G141358),registration_satisfaction(r793,m),registration_satisfaction(r794,l),registration_satisfaction(r795,_G141373),registration_satisfaction(r796,_G141378),registration_satisfaction(r797,h),registration_satisfaction(r798,_G141388),registration_satisfaction(r799,_G141393),registration_satisfaction(r800,m),registration_satisfaction(r801,_G141403),registration_satisfaction(r802,_G141408),registration_satisfaction(r803,h),registration_satisfaction(r804,_G141418),registration_satisfaction(r805,h),registration_satisfaction(r806,h),registration_satisfaction(r807,_G141433),registration_satisfaction(r808,_G141438),registration_satisfaction(r809,l),registration_satisfaction(r810,h),registration_satisfaction(r811,_G141453),registration_satisfaction(r812,h),registration_satisfaction(r813,m),registration_satisfaction(r814,_G141468),registration_satisfaction(r815,_G141473),registration_satisfaction(r816,h),registration_satisfaction(r817,_G141483),registration_satisfaction(r818,_G141488),registration_satisfaction(r819,h),registration_satisfaction(r820,h),registration_satisfaction(r821,m),registration_satisfaction(r822,_G141508),registration_satisfaction(r823,_G141513),registration_satisfaction(r824,_G141518),registration_satisfaction(r825,_G141523),registration_satisfaction(r826,l),registration_satisfaction(r827,_G141533),registration_satisfaction(r828,_G141538),registration_satisfaction(r829,l),registration_satisfaction(r830,h),registration_satisfaction(r831,_G141553),registration_satisfaction(r832,_G141558),registration_satisfaction(r833,h),registration_satisfaction(r834,h),registration_satisfaction(r835,_G141573),registration_satisfaction(r836,_G141578),registration_satisfaction(r837,h),registration_satisfaction(r838,l),registration_satisfaction(r839,m),registration_satisfaction(r840,_G141598),registration_satisfaction(r841,_G141603),registration_satisfaction(r842,h),registration_satisfaction(r843,h),registration_satisfaction(r844,_G141618),registration_satisfaction(r845,_G141623),registration_satisfaction(r846,l),registration_satisfaction(r847,h),registration_satisfaction(r848,_G141638),registration_satisfaction(r849,h),registration_satisfaction(r850,h),registration_satisfaction(r851,_G141653),registration_satisfaction(r852,_G141658),registration_satisfaction(r853,_G141663),registration_satisfaction(r854,m),registration_satisfaction(r855,h),registration_satisfaction(r856,_G141678)]) \ No newline at end of file diff --git a/packages/CLPBN/horus/benchmarks/school/run_school_tests.sh b/packages/CLPBN/horus/benchmarks/school/run_school_tests.sh new file mode 100755 index 000000000..716c03a34 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/school/run_school_tests.sh @@ -0,0 +1,95 @@ +#!/bin/bash + +#cp ~/bin/yap ~/bin/school_all +#YAP=~/bin/school_all +YAP=~/bin/yap + +#OUT_FILE_NAME=results`date "+ %H:%M:%S %d-%m-%Y"`.log +OUT_FILE_NAME=results.log +rm -f $OUT_FILE_NAME +rm -f ignore.$OUT_FILE_NAME + +# yap -g "['../../../../examples/School/sch32'], [missing5], use_module(library(clpbn/learning/em)), graph(L), clpbn:set_clpbn_flag(em_solver,bp), clpbn_horus:set_horus_flag(inf_alg, bp), statistics(runtime, _), em(L,0.01,10,_,Lik), statistics(runtime, [T,_])." + +function run_solver +{ +if [ $2 = bp ] +then + if [ $4 = ve ] + then + extra_flag1=clpbn_horus:set_horus_flag\(inf_alg,$4\) + extra_flag2=clpbn_horus:set_horus_flag\(elim_heuristic,$5\) + else + extra_flag1=clpbn_horus:set_horus_flag\(inf_alg,$4\) + extra_flag2=clpbn_horus:set_horus_flag\(schedule,$5\) + fi +else + extra_flag1=true + extra_flag2=true +fi +/usr/bin/time -o "$OUT_FILE_NAME" -a -f "real:%E\tuser:%U\tsys:%S" $YAP << EOF &>> "ignore.$OUT_FILE_NAME" +:- [pos:train]. +:- ['../../../../examples/School/sch32']. +:- use_module(library(clpbn/learning/em)). +:- use_module(library(clpbn/bp)). +[$1]. +graph(L), + clpbn:set_clpbn_flag(em_solver,$2), + $extra_flag1, $extra_flag2, + em(L,0.01,10,_,Lik), + open("$OUT_FILE_NAME", 'append',S), + format(S, '$3: ~11+ Lik = ~3f, ',[Lik]), + close(S). +EOF +} + + +function run_all_graphs +{ + echo "************************************************************************" >> "$OUT_FILE_NAME" + echo "results for solver $2" >> "$OUT_FILE_NAME" + echo "************************************************************************" >> "$OUT_FILE_NAME" + run_solver missing5 $1 missing5 $3 $4 $5 + run_solver missing10 $1 missing10 $3 $4 $5 + #run_solver missing20 $1 missing20 $3 $4 $5 + #run_solver missing30 $1 missing30 $3 $4 $5 + #run_solver missing40 $1 missing40 $3 $4 $5 + #run_solver missing50 $1 missing50 $3 $4 $5 +} + + +#run_all_graphs bp "hve(min_neighbors) " ve min_neighbors +#run_all_graphs bp "bp(seq_fixed) " bp seq_fixed +#run_all_graphs bp "cbp(seq_fixed) " cbp seq_fixed +exit + + +run_all_graphs bp "hve(min_neighbors) " ve min_neighbors +run_all_graphs bp "hve(min_weight) " ve min_weight +run_all_graphs bp "hve(min_fill) " ve min_fill +run_all_graphs bp "hve(w_min_fill) " ve weighted_min_fill +run_all_graphs bp "bp(seq_fixed) " bp seq_fixed +run_all_graphs bp "bp(max_residual) " bp max_residual +run_all_graphs bp "cbp(seq_fixed) " cbp seq_fixed +run_all_graphs bp "cbp(max_residual) " cbp max_residual +run_all_graphs gibbs "gibbs " +echo "************************************************************************" >> "$OUT_FILE_NAME" +echo "results for solver ve" >> "$OUT_FILE_NAME" +echo "************************************************************************" >> "$OUT_FILE_NAME" +run_solver missing5 ve missing5 $3 $4 $5 +run_solver missing10 ve missing10 $3 $4 $5 +run_solver missing20 ve missing20 $3 $4 $5 +run_solver missing30 ve missing30 $3 $4 $5 +run_solver missing40 ve missing40 $3 $4 $5 +#run_solver missing50 ve missing50 $3 $4 $5 #+24h! +echo "************************************************************************" >> "$OUT_FILE_NAME" +echo "results for solver jt" >> "$OUT_FILE_NAME" +echo "************************************************************************" >> "$OUT_FILE_NAME" +run_solver missing5 jt missing5 $3 $4 $5 +run_solver missing10 jt missing10 $3 $4 $5 +run_solver missing20 jt missing20 $3 $4 $5 +#run_solver missing30 jt missing30 $3 $4 $5 #+24h! +#run_solver missing40 jt missing40 $3 $4 $5 #+24h! +#run_solver missing50 jt missing50 $3 $4 $5 #+24h! +exit + diff --git a/packages/CLPBN/horus/benchmarks/smokers/bp_tests.sh b/packages/CLPBN/horus/benchmarks/smokers/bp_tests.sh new file mode 100755 index 000000000..65891401e --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/smokers/bp_tests.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source sm.sh +source ../benchs.sh + +SOLVER="bp" + +function run_all_graphs +{ + write_header $1 + run_solver pop100 $2 + run_solver pop200 $2 + run_solver pop300 $2 + run_solver pop400 $2 + run_solver pop500 $2 + run_solver pop600 $2 + run_solver pop700 $2 + run_solver pop800 $2 + run_solver pop900 $2 + run_solver pop1000 $2 + run_solver pop1100 $2 + run_solver pop1200 $2 + run_solver pop1300 $2 + run_solver pop1400 $2 + run_solver pop1500 $2 +} + +prepare_new_run +run_all_graphs "bp(shedule=seq_fixed) " seq_fixed + diff --git a/packages/CLPBN/horus/benchmarks/smokers/cbp_tests.sh b/packages/CLPBN/horus/benchmarks/smokers/cbp_tests.sh new file mode 100755 index 000000000..169a90bf6 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/smokers/cbp_tests.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source sm.sh +source ../benchs.sh + +SOLVER="cbp" + +function run_all_graphs +{ + write_header $1 + run_solver pop100 $2 + run_solver pop200 $2 + run_solver pop300 $2 + run_solver pop400 $2 + run_solver pop500 $2 + run_solver pop600 $2 + run_solver pop700 $2 + run_solver pop800 $2 + run_solver pop900 $2 + run_solver pop1000 $2 + run_solver pop1100 $2 + run_solver pop1200 $2 + run_solver pop1300 $2 + run_solver pop1400 $2 + run_solver pop1500 $2 +} + +prepare_new_run +run_all_graphs "cbp(shedule=seq_fixed) " seq_fixed + diff --git a/packages/CLPBN/horus/benchmarks/smokers/fove_tests.sh b/packages/CLPBN/horus/benchmarks/smokers/fove_tests.sh new file mode 100755 index 000000000..d36f9fd46 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/smokers/fove_tests.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +source sm.sh +source ../benchs.sh + +SOLVER="fove" + +function run_all_graphs +{ + write_header $1 + run_solver pop100 $2 + run_solver pop200 $2 + run_solver pop300 $2 + run_solver pop400 $2 + run_solver pop500 $2 + run_solver pop600 $2 + run_solver pop700 $2 + run_solver pop800 $2 + run_solver pop900 $2 + run_solver pop1000 $2 + run_solver pop1100 $2 + run_solver pop1200 $2 + run_solver pop1300 $2 + run_solver pop1400 $2 + run_solver pop1500 $2 +} + +prepare_new_run +run_all_graphs "fove " + + diff --git a/packages/CLPBN/horus/benchmarks/smokers/gen_people.sh b/packages/CLPBN/horus/benchmarks/smokers/gen_people.sh new file mode 100755 index 000000000..b8eebbfa1 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/smokers/gen_people.sh @@ -0,0 +1,23 @@ +#!/home/tgomes/bin/yap -L -- + + +:- initialization(main). + + +main :- + unix(argv([N])), + atomic_concat(['pop', N, '.yap'], FileName), + open(FileName, 'write', S), + atom_number(N, N2), + generate_people(S, N2, 4), + write(S, '\n'), + close(S). + + +generate_people(S, N, Counting) :- + Counting > N, !. +generate_people(S, N, Counting) :- + format(S, 'people(p~w).~n', [Counting]), + Counting1 is Counting + 1, + generate_people(S, N, Counting1). + diff --git a/packages/CLPBN/horus/benchmarks/smokers/hve_tests.sh b/packages/CLPBN/horus/benchmarks/smokers/hve_tests.sh new file mode 100755 index 000000000..14e7c6daf --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/smokers/hve_tests.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +source sm.sh +source ../benchs.sh + +SOLVER="hve" + +function run_all_graphs +{ + write_header $1 + run_solver pop100 $2 + #run_solver pop200 $2 + #run_solver pop300 $2 + #run_solver pop400 $2 + #run_solver pop500 $2 + #run_solver pop600 $2 + #run_solver pop700 $2 + #run_solver pop800 $2 + #run_solver pop900 $2 + #run_solver pop1000 $2 + #run_solver pop1100 $2 + #run_solver pop1200 $2 + #run_solver pop1300 $2 + #run_solver pop1400 $2 + #run_solver pop1500 $2 +} + +prepare_new_run +run_all_graphs "hve(elim_heuristic=min_neighbors) " min_neighbors +#run_all_graphs "hve(elim_heuristic=min_weight) " min_weight +#run_all_graphs "hve(elim_heuristic=min_fill) " min_fill +#run_all_graphs "hve(elim_heuristic=weighted_min_fill) " weighted_min_fill + diff --git a/packages/CLPBN/horus/benchmarks/smokers/sm.sh b/packages/CLPBN/horus/benchmarks/smokers/sm.sh new file mode 100755 index 000000000..17136dd93 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/smokers/sm.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +NETWORK="'../../examples/smokers2'" +SHORTNAME="sm" +QUERY="smokes(p1,t), smokes(p2,t), friends(p1,p2,X)" + diff --git a/packages/CLPBN/horus/benchmarks/workshop_attrs/bp_tests.sh b/packages/CLPBN/horus/benchmarks/workshop_attrs/bp_tests.sh new file mode 100755 index 000000000..0b265de7e --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/workshop_attrs/bp_tests.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +source wa.sh +source ../benchs.sh + +SOLVER="bp" + +function run_all_graphs +{ + write_header $1 + run_solver p1000attrs$N_ATTRS $2 + run_solver p5000attrs$N_ATTRS $2 + run_solver p10000attrs$N_ATTRS $2 + run_solver p15000attrs$N_ATTRS $2 + run_solver p20000attrs$N_ATTRS $2 + run_solver p25000attrs$N_ATTRS $2 + run_solver p30000attrs$N_ATTRS $2 + run_solver p35000attrs$N_ATTRS $2 + return + run_solver p40000attrs$N_ATTRS $2 + run_solver p45000attrs$N_ATTRS $2 + run_solver p50000attrs$N_ATTRS $2 + run_solver p55000attrs$N_ATTRS $2 + run_solver p60000attrs$N_ATTRS $2 + run_solver p65000attrs$N_ATTRS $2 + run_solver p70000attrs$N_ATTRS $2 + run_solver p75000attrs$N_ATTRS $2 + run_solver p80000attrs$N_ATTRS $2 + run_solver p85000attrs$N_ATTRS $2 + run_solver p90000attrs$N_ATTRS $2 + run_solver p95000attrs$N_ATTRS $2 + run_solver p100000attrs$N_ATTRS $2 +} + +prepare_new_run +run_all_graphs "bp(shedule=seq_fixed) " seq_fixed + diff --git a/packages/CLPBN/horus/benchmarks/workshop_attrs/cbp_tests.sh b/packages/CLPBN/horus/benchmarks/workshop_attrs/cbp_tests.sh new file mode 100755 index 000000000..7b649584f --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/workshop_attrs/cbp_tests.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +source wa.sh +source ../benchs.sh + +SOLVER="cbp" + +function run_all_graphs +{ + write_header $1 + run_solver p1000attrs$N_ATTRS $2 + run_solver p5000attrs$N_ATTRS $2 + run_solver p10000attrs$N_ATTRS $2 + run_solver p15000attrs$N_ATTRS $2 + run_solver p20000attrs$N_ATTRS $2 + run_solver p25000attrs$N_ATTRS $2 + run_solver p30000attrs$N_ATTRS $2 + run_solver p35000attrs$N_ATTRS $2 + run_solver p40000attrs$N_ATTRS $2 + run_solver p45000attrs$N_ATTRS $2 + run_solver p50000attrs$N_ATTRS $2 + run_solver p55000attrs$N_ATTRS $2 + run_solver p60000attrs$N_ATTRS $2 + run_solver p65000attrs$N_ATTRS $2 + run_solver p70000attrs$N_ATTRS $2 + run_solver p75000attrs$N_ATTRS $2 + run_solver p80000attrs$N_ATTRS $2 + run_solver p85000attrs$N_ATTRS $2 + run_solver p90000attrs$N_ATTRS $2 + run_solver p95000attrs$N_ATTRS $2 + run_solver p100000attrs$N_ATTRS $2 +} + +prepare_new_run +run_all_graphs "cbp(shedule=seq_fixed) " seq_fixed + diff --git a/packages/CLPBN/horus/benchmarks/workshop_attrs/fove_tests.sh b/packages/CLPBN/horus/benchmarks/workshop_attrs/fove_tests.sh new file mode 100755 index 000000000..2edc90919 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/workshop_attrs/fove_tests.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +source wa.sh +source ../benchs.sh + +SOLVER="fove" + +function run_all_graphs +{ + write_header $1 + run_solver p1000attrs$N_ATTRS $2 + run_solver p5000attrs$N_ATTRS $2 + run_solver p10000attrs$N_ATTRS $2 + run_solver p15000attrs$N_ATTRS $2 + run_solver p20000attrs$N_ATTRS $2 + run_solver p25000attrs$N_ATTRS $2 + run_solver p30000attrs$N_ATTRS $2 + run_solver p35000attrs$N_ATTRS $2 + run_solver p40000attrs$N_ATTRS $2 + run_solver p45000attrs$N_ATTRS $2 + run_solver p50000attrs$N_ATTRS $2 + run_solver p55000attrs$N_ATTRS $2 + run_solver p60000attrs$N_ATTRS $2 + run_solver p65000attrs$N_ATTRS $2 + run_solver p70000attrs$N_ATTRS $2 + run_solver p75000attrs$N_ATTRS $2 + run_solver p80000attrs$N_ATTRS $2 + run_solver p85000attrs$N_ATTRS $2 + run_solver p90000attrs$N_ATTRS $2 + run_solver p95000attrs$N_ATTRS $2 + run_solver p100000attrs$N_ATTRS $2 +} + +prepare_new_run +run_all_graphs "fove " + + diff --git a/packages/CLPBN/horus/benchmarks/workshop_attrs/gen_attrs.sh b/packages/CLPBN/horus/benchmarks/workshop_attrs/gen_attrs.sh new file mode 100755 index 000000000..f3e7a5212 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/workshop_attrs/gen_attrs.sh @@ -0,0 +1,39 @@ +#!/home/tgomes/bin/yap -L -- + +:- use_module(library(lists)). + +:- initialization(main). + + +main :- + unix(argv(Args)), + nth(1, Args, NP), % number of invitees + nth(2, Args, NA), % number of attributes + atomic_concat(['p', NP , 'attrs', NA, '.yap'], FileName), + open(FileName, 'write', S), + atom_number(NP, NP2), + atom_number(NA, NA2), + generate_people(S, NP2, 1), + write(S, '\n'), + generate_attrs(S, NA2, 7), + write(S, '\n'), + close(S). + + +generate_people(S, N, Counting) :- + Counting > N, !. +generate_people(S, N, Counting) :- + format(S, 'people(p~w).~n', [Counting]), + Counting1 is Counting + 1, + generate_people(S, N, Counting1). + + +generate_attrs(S, N, Counting) :- + Counting > N, !. +generate_attrs(S, N, Counting) :- + %format(S, 'people(p~w).~n', [Counting]), + format(S, 'markov attends(P)::[t,f], attr~w::[t,f]', [Counting]), + format(S, '; [0.7, 0.3, 0.3, 0.3] ; [people(P)].~n',[]), + Counting1 is Counting + 1, + generate_attrs(S, N, Counting1). + diff --git a/packages/CLPBN/horus/benchmarks/workshop_attrs/hve_tests.sh b/packages/CLPBN/horus/benchmarks/workshop_attrs/hve_tests.sh new file mode 100755 index 000000000..aaabfe08e --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/workshop_attrs/hve_tests.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +source wa.sh +source ../benchs.sh + +SOLVER="hve" + +function run_all_graphs +{ + write_header $1 + run_solver p1000attrs$N_ATTRS $2 + run_solver p5000attrs$N_ATTRS $2 + run_solver p10000attrs$N_ATTRS $2 + run_solver p15000attrs$N_ATTRS $2 + run_solver p20000attrs$N_ATTRS $2 + run_solver p25000attrs$N_ATTRS $2 + run_solver p30000attrs$N_ATTRS $2 + run_solver p35000attrs$N_ATTRS $2 + run_solver p40000attrs$N_ATTRS $2 + run_solver p45000attrs$N_ATTRS $2 + run_solver p50000attrs$N_ATTRS $2 + run_solver p55000attrs$N_ATTRS $2 + run_solver p60000attrs$N_ATTRS $2 + run_solver p65000attrs$N_ATTRS $2 + run_solver p70000attrs$N_ATTRS $2 + run_solver p75000attrs$N_ATTRS $2 + run_solver p80000attrs$N_ATTRS $2 + run_solver p85000attrs$N_ATTRS $2 + run_solver p90000attrs$N_ATTRS $2 + run_solver p95000attrs$N_ATTRS $2 + run_solver p100000attrs$N_ATTRS $2 +} + +prepare_new_run +run_all_graphs "hve(elim_heuristic=min_neighbors) " min_neighbors + diff --git a/packages/CLPBN/horus/benchmarks/workshop_attrs/wa.sh b/packages/CLPBN/horus/benchmarks/workshop_attrs/wa.sh new file mode 100755 index 000000000..2f9cc94a2 --- /dev/null +++ b/packages/CLPBN/horus/benchmarks/workshop_attrs/wa.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +NETWORK="'../../examples/workshop_attrs'" +SHORTNAME="wa" +QUERY="series(X)" + +N_ATTRS=6 + + diff --git a/packages/CLPBN/horus/examples/burglary-alarm.fg b/packages/CLPBN/horus/examples/burglary-alarm.fg new file mode 100644 index 000000000..badcd80c3 --- /dev/null +++ b/packages/CLPBN/horus/examples/burglary-alarm.fg @@ -0,0 +1,47 @@ +5 + +1 +0 +2 +2 +0 0.001 +1 0.999 + +1 +1 +2 +2 +0 0.002 +1 0.998 + +3 +1 0 2 +2 2 2 +8 +0 0.95 +1 0.94 +2 0.29 +3 0.001 +4 0.05 +5 0.06 +6 0.71 +7 0.999 + +2 +2 3 +2 2 +4 +0 0.9 +1 0.05 +2 0.1 +3 0.95 + +2 +2 4 +2 2 +4 +0 0.7 +1 0.01 +2 0.3 +3 0.99 + diff --git a/packages/CLPBN/horus/examples/burglary-alarm.uai b/packages/CLPBN/horus/examples/burglary-alarm.uai new file mode 100644 index 000000000..4e950cd9f --- /dev/null +++ b/packages/CLPBN/horus/examples/burglary-alarm.uai @@ -0,0 +1,28 @@ +MARKOV +5 +2 2 2 2 2 +5 +1 0 +1 1 +3 2 0 1 +2 3 2 +2 4 2 + +2 + .001 .999 + +2 + .002 .998 + +8 + .95 .94 .29 .001 + .05 .06 .71 .999 + +4 + .9 .05 + .1 .95 + +4 + .7 .01 + .3 .99 + diff --git a/packages/CLPBN/horus/examples/burglary-alarm.yap b/packages/CLPBN/horus/examples/burglary-alarm.yap new file mode 100644 index 000000000..52f9800ec --- /dev/null +++ b/packages/CLPBN/horus/examples/burglary-alarm.yap @@ -0,0 +1,41 @@ + +:- use_module(library(pfl)). + +%:- set_pfl_flag(solver,ve). +:- set_pfl_flag(solver,bp), clpbn_horus:set_horus_flag(inf_alg,ve). +%:- set_pfl_flag(solver,bp), clpbn_horus:set_horus_flag(inf_alg,bp). +%:- set_pfl_flag(solver,fove). + +% :- yap_flag(write_strings, off). + + +bayes burglary::[b1,b3] ; [0.001, 0.999] ; []. + +bayes earthquake::[e1,e2] ; [0.002, 0.998]; []. + +bayes alarm::[a1,a2] , burglary, earthquake ; [0.95, 0.94, 0.29, 0.001, 0.05, 0.06, 0.71, 0.999] ; []. + +bayes john_calls::[j1,j2] , alarm ; [0.9, 0.05, 0.1, 0.95] ; []. + +bayes mary_calls::[m1,m2] , alarm ; [0.7, 0.01, 0.3, 0.99] ; []. + + +b_cpt([0.001, 0.999]). + +e_cpt([0.002, 0.998]). + +a_cpt([0.95, 0.94, 0.29, 0.001, + 0.05, 0.06, 0.71, 0.999]). + +jc_cpt([0.9, 0.05, + 0.1, 0.95]). + +mc_cpt([0.7, 0.01, + 0.3, 0.99]). + +% ?- alarm(A). +?- john_calls(J), mary_calls(m1). +%?- john_calls(J), mary_calls(m1), alarm(a1). +%?- john_calls(J), alarm(a1). + + diff --git a/packages/CLPBN/horus/examples/cbp_example.uai b/packages/CLPBN/horus/examples/cbp_example.uai new file mode 100644 index 000000000..7c8f130fa --- /dev/null +++ b/packages/CLPBN/horus/examples/cbp_example.uai @@ -0,0 +1,15 @@ +# example in counting belief propagation paper + +MARKOV +3 +2 2 2 +2 +2 0 1 +2 2 1 + +4 + 1.2 1.4 2.0 0.4 + +4 + 1.2 1.4 2.0 0.4 + diff --git a/packages/CLPBN/horus/examples/city.yap b/packages/CLPBN/horus/examples/city.yap new file mode 100644 index 000000000..5cad29586 --- /dev/null +++ b/packages/CLPBN/horus/examples/city.yap @@ -0,0 +1,105 @@ +:- use_module(library(pfl)). + +%:- set_solver(fove). +%:- set_solver(hve). +%:- set_solver(bp). +%:- set_solver(cbp). + +:- multifile people/2. +:- multifile ev/1. + +people(joe,nyc). +people(p2, nyc). +people(p3, nyc). +people(p4, nyc). +people(p5, nyc). + +ev(descn(p2, t)). +ev(descn(p3, t)). +ev(descn(p4, t)). +ev(descn(p5, t)). + +bayes city_conservativeness(C)::[y,n] ; cons_table(C) ; [people(_,C)]. + +bayes gender(P)::[m,f] ; gender_table(P) ; [people(P,_)]. + +bayes hair_color(P)::[t,f], city_conservativeness(C) ; hair_color_table(P) ; [people(P,C)]. + +bayes car_color(P)::[t,f], hair_color(P) ; car_color_table(P); [people(P,_)]. + +bayes height(P)::[t,f], gender(P) ; height_table(P) ; [people(P,_)]. + +bayes shoe_size(P):[t,f], height(P) ; shoe_size_table(P); [people(P,_)]. + +bayes guilty(P)::[y,n] ; guilty_table(P) ; [people(P,_)]. + +bayes descn(P)::[t,f], car_color(P), hair_color(P), height(P), guilty(P) ; descn_table(P) ; [people(P,_)]. + +bayes witness(C)::[t,f], descn(Joe), descn(P2) ; wit_table ; [people(_,C), Joe=joe, P2=p2]. + +% FIXME +%cons_table(amsterdam, [0.2, 0.8]) :- !. +cons_table(_, [0.8, 0.2]). + + +gender_table(_, [0.55, 0.45]). + + +hair_color_table(_, + /* conservative_city */ + /* y n */ + [ 0.05, 0.1, + 0.95, 0.9 ]). + + +car_color_table(_, + /* t f */ + [ 0.9, 0.2, + 0.1, 0.8 ]). + + +height_table(_, + /* m f */ + [ 0.6, 0.4, + 0.4, 0.6 ]). + + +shoe_size_table(_, + /* t f */ + [ 0.9, 0.1, + 0.1, 0.9 ]). + + +guilty_table(_, [0.23, 0.77]). + + +descn_table(_, + /* color, hair, height, guilt */ + /* ttttt tttf ttft ttff tfttt tftf tfft tfff ttttt fttf ftft ftff ffttt fftf ffft ffff */ + [ 0.99, 0.5, 0.23, 0.88, 0.41, 0.3, 0.76, 0.87, 0.44, 0.43, 0.29, 0.72, 0.23, 0.91, 0.95, 0.92, + 0.01, 0.5, 0.77, 0.12, 0.59, 0.7, 0.24, 0.13, 0.56, 0.57, 0.71, 0.28, 0.77, 0.09, 0.05, 0.08]). + + +wit_table([0.2, 0.45, 0.24, 0.34, + 0.8, 0.55, 0.76, 0.66]). + + +runall(G, Wrapper) :- + findall(G, Wrapper, L), + execute_all(L). + + +execute_all([]). +execute_all(G.L) :- + call(G), + execute_all(L). + + +is_joe_guilty(Guilty) :- + witness(nyc, t), + runall(X, ev(X)), + guilty(joe, Guilty). + + +% ?- is_joe_guilty(Guilty) + diff --git a/packages/CLPBN/horus/examples/comp_workshops.yap b/packages/CLPBN/horus/examples/comp_workshops.yap new file mode 100644 index 000000000..39a14d8bd --- /dev/null +++ b/packages/CLPBN/horus/examples/comp_workshops.yap @@ -0,0 +1,33 @@ +:- use_module(library(pfl)). + +%:- set_solver(fove). +%:- set_solver(hve). +%:- set_solver(bp). +%:- set_solver(cbp). + +:- yap_flag(write_strings, off). + +:- multifile c/2. + +c(p1,w1). +c(p1,w2). +c(p1,w3). +c(p2,w1). +c(p2,w2). +c(p2,w3). +c(p3,w1). +c(p3,w2). +c(p3,w3). +c(p4,w1). +c(p4,w2). +c(p4,w3). +c(p5,w1). +c(p5,w2). +c(p5,w3). + +markov attends(P)::[t,f], hot(W)::[t,f] ; [0.2, 0.8, 0.8, 0.8] ; [c(P,W)]. + +markov attends(P)::[t,f], series::[t,f] ; [0.501, 0.499, 0.499, 0.499] ; [c(P,_)]. + +% ?- series(X). + diff --git a/packages/CLPBN/horus/examples/fail1.yap b/packages/CLPBN/horus/examples/fail1.yap new file mode 100644 index 000000000..aa5cfc5db --- /dev/null +++ b/packages/CLPBN/horus/examples/fail1.yap @@ -0,0 +1,21 @@ + +:- use_module(library(pfl)). + +:- set_pfl_flag(solver,fove). +%:- set_pfl_flag(solver,bp), clpbn_horus:set_horus_flag(inf_alg,ve). +%:- set_pfl_flag(solver,bp), clpbn_horus:set_horus_flag(inf_alg,bp). +%:- set_pfl_flag(solver,bp), clpbn_horus:set_horus_flag(inf_alg,cbp). + + +t(ann). +t(dave). + +% p(ann,t). + +markov p(X)::[t,f] ; [0.1, 0.3] ; [t(X)]. + +% use standard Prolog queries: provide evidence first. + +?- p(ann,t), p(ann,X). +% ?- p(ann,X). + diff --git a/packages/CLPBN/horus/examples/fail2.yap b/packages/CLPBN/horus/examples/fail2.yap new file mode 100644 index 000000000..7e62ea42c --- /dev/null +++ b/packages/CLPBN/horus/examples/fail2.yap @@ -0,0 +1,21 @@ +:- use_module(library(pfl)). + +:- set_solver(fove). +%:- set_solver(hve). +%:- set_solver(bp). +%:- set_solver(cbp). + +:- yap_flag(write_strings, off). + +:- clpbn_horus:set_horus_flag(verbosity,5). + +people(p1,p1). +people(p1,p2). +people(p2,p1). +people(p2,p2). + +markov p(A,A)::[t,f] ; [1.0,4.5] ; [people(A,_)]. + +markov p(A,B)::[t,f] ; [1.0,4.5] ; [people(A,B)]. + +?- p(p1,p1,X). diff --git a/packages/CLPBN/horus/examples/smokers1.yap b/packages/CLPBN/horus/examples/smokers1.yap new file mode 100644 index 000000000..ba5b095d1 --- /dev/null +++ b/packages/CLPBN/horus/examples/smokers1.yap @@ -0,0 +1,31 @@ +:- use_module(library(pfl)). + +%:- set_solver(fove). +%:- set_solver(hve). +%:- set_solver(bp). +%:- set_solver(cbp). + +:- yap_flag(write_strings, off). + +:- multifile people/1. + +people @ 5. + +people(X,Y) :- + people(X), + people(Y), + X \== Y. + +markov smokes(X)::[t,f]; [1.0, 4.0552]; [people(X)]. + +markov cancer(X)::[t,f]; [1.0, 9.9742]; [people(X)]. + +markov friends(X,Y)::[t,f] ; [1.0, 99.48432] ; [people(X,Y)]. + +markov smokes(X)::[t,f], cancer(X)::[t,f] ; [4.48169, 4.48169, 1.0, 4.48169] ; [people(X)]. + +markov friends(X,Y)::[t,f], smokes(X)::[t,f], smokes(Y)::[t,f] ; + [3.004166, 3.004166, 3.004166, 3.004166, 3.004166, 1.0, 1.0, 3.004166] ; [people(X,Y)]. + +% ?- friends(p1,p2,X). + diff --git a/packages/CLPBN/horus/examples/smokers2.yap b/packages/CLPBN/horus/examples/smokers2.yap new file mode 100644 index 000000000..af0327e8f --- /dev/null +++ b/packages/CLPBN/horus/examples/smokers2.yap @@ -0,0 +1,31 @@ +:- use_module(library(pfl)). + +%:- set_solver(fove). +%:- set_solver(hve). +%:- set_solver(bp). +%:- set_solver(cbp). + +:- yap_flag(write_strings, off). + +:- multifile people/1. + +people @ 5. + +people(X,Y) :- + people(X), + people(Y). +% X \== Y. + +markov smokes(X)::[t,f]; [1.0, 4.0552]; [people(X)]. + +markov asthma(X)::[t,f]; [1.0, 9.9742] ; [people(X)]. + +markov friends(X,Y)::[t,f]; [1.0, 99.48432] ; [people(X,Y)]. + +markov asthma(X)::[t,f], smokes(X)::[t,f]; [4.48169, 4.48169, 1.0, 4.48169] ; [people(X)]. + +markov asthma(X)::[t,f], friends(X,Y)::[t,f], smokes(Y)::[t,f]; + [3.004166, 3.004166, 3.004166, 3.004166, 3.004166, 1.0, 1.0, 3.004166] ; [people(X,Y)]. + +% ?- smokes(p1,t), smokes(p2,t), friends(p1,p2,X) + diff --git a/packages/CLPBN/horus/examples/smokers27.fg b/packages/CLPBN/horus/examples/smokers27.fg new file mode 100644 index 000000000..990fadb98 --- /dev/null +++ b/packages/CLPBN/horus/examples/smokers27.fg @@ -0,0 +1,239 @@ +27 + +1 +12 +2 +2 +0 9.974182 +1 1.000000 + +1 +13 +2 +2 +0 9.974182 +1 1.000000 + +1 +14 +2 +2 +0 9.974182 +1 1.000000 + +1 +9 +2 +2 +0 4.055200 +1 1.000000 + +1 +10 +2 +2 +0 4.055200 +1 1.000000 + +1 +11 +2 +2 +0 4.055200 +1 1.000000 + +1 +0 +2 +2 +0 7.389056 +1 1.000000 + +1 +3 +2 +2 +0 7.389056 +1 1.000000 + +1 +6 +2 +2 +0 7.389056 +1 1.000000 + +1 +1 +2 +2 +0 7.389056 +1 1.000000 + +1 +4 +2 +2 +0 7.389056 +1 1.000000 + +1 +7 +2 +2 +0 7.389056 +1 1.000000 + +1 +2 +2 +2 +0 7.389056 +1 1.000000 + +1 +5 +2 +2 +0 7.389056 +1 1.000000 + +1 +8 +2 +2 +0 7.389056 +1 1.000000 + +2 +9 12 +2 2 +4 +0 4.481689 +1 1.000000 +2 4.481689 +3 4.481689 + +2 +10 13 +2 2 +4 +0 4.481689 +1 1.000000 +2 4.481689 +3 4.481689 + +2 +11 14 +2 2 +4 +0 4.481689 +1 1.000000 +2 4.481689 +3 4.481689 + +2 +0 9 +2 2 +4 +0 3.004166 +1 3.004166 +2 3.004166 +3 3.004166 + +3 +3 10 9 +2 2 2 +8 +0 3.004166 +1 3.004166 +2 3.004166 +3 1.000000 +4 3.004166 +5 1.000000 +6 3.004166 +7 3.004166 + +3 +6 11 9 +2 2 2 +8 +0 3.004166 +1 3.004166 +2 3.004166 +3 1.000000 +4 3.004166 +5 1.000000 +6 3.004166 +7 3.004166 + +3 +1 9 10 +2 2 2 +8 +0 3.004166 +1 3.004166 +2 3.004166 +3 1.000000 +4 3.004166 +5 1.000000 +6 3.004166 +7 3.004166 + +2 +4 10 +2 2 +4 +0 3.004166 +1 3.004166 +2 3.004166 +3 3.004166 + +3 +7 11 10 +2 2 2 +8 +0 3.004166 +1 3.004166 +2 3.004166 +3 1.000000 +4 3.004166 +5 1.000000 +6 3.004166 +7 3.004166 + +3 +2 9 11 +2 2 2 +8 +0 3.004166 +1 3.004166 +2 3.004166 +3 1.000000 +4 3.004166 +5 1.000000 +6 3.004166 +7 3.004166 + +3 +5 10 11 +2 2 2 +8 +0 3.004166 +1 3.004166 +2 3.004166 +3 1.000000 +4 3.004166 +5 1.000000 +6 3.004166 +7 3.004166 + +2 +8 11 +2 2 +4 +0 3.004166 +1 3.004166 +2 3.004166 +3 3.004166 + diff --git a/packages/CLPBN/horus/examples/test_city.yap b/packages/CLPBN/horus/examples/test_city.yap new file mode 100644 index 000000000..bbac6558a --- /dev/null +++ b/packages/CLPBN/horus/examples/test_city.yap @@ -0,0 +1,110 @@ +:- use_module(library(pfl)). + +:- set_solver(fove). +%:- set_solver(hve). +%:- set_solver(bp). +%:- set_solver(cbp). + +:- multifile people/2. +:- multifile ev/1. + +:- clpbn_horus:set_horus_flag(verbosity,5). + +people(joe,nyc). +people(p2, nyc). +people(p3, nyc). +people(p4, nyc). +people(p5, nyc). +people(p6, nyc). +people(p7, nyc). +people(p8, nyc). + +%ev(descn(p2, t)). +%ev(descn(p3, t)). +%ev(descn(p4, t)). +%ev(descn(p5, t)). + +bayes city_conservativeness(C)::[y,n] ; cons_table(C) ; [people(_,C)]. + +bayes gender(P)::[m,f] ; gender_table(P) ; [people(P,_)]. + +bayes hair_color(P)::[t,f], city_conservativeness(C) ; hair_color_table(P) ; [people(P,C)]. + +bayes car_color(P)::[t,f], hair_color(P) ; car_color_table(P); [people(P,_)]. + +bayes height(P)::[t,f], gender(P) ; height_table(P) ; [people(P,_)]. + +bayes shoe_size(P):[t,f], height(P) ; shoe_size_table(P); [people(P,_)]. + +bayes guilty(P)::[y,n] ; guilty_table(P) ; [people(P,_)]. + +bayes descn(P)::[t,f], car_color(P), hair_color(P), height(P), guilty(P) ; descn_table(P) ; [people(P,_)]. + +bayes witness(C)::[t,f], descn(Joe), descn(P2) ; wit_table ; [people(_,C), Joe=joe, P2=p2]. + +% FIXME +%cons_table(amsterdam, [0.2, 0.8]) :- !. +cons_table(_, [0.8, 0.2]). + + +gender_table(_, [0.55, 0.45]). + + +hair_color_table(_, + /* conservative_city */ + /* y n */ + [ 0.05, 0.1, + 0.95, 0.9 ]). + + +car_color_table(_, + /* t f */ + [ 0.9, 0.2, + 0.1, 0.8 ]). + + +height_table(_, + /* m f */ + [ 0.6, 0.4, + 0.4, 0.6 ]). + + +shoe_size_table(_, + /* t f */ + [ 0.9, 0.1, + 0.1, 0.9 ]). + + +guilty_table(_, [0.23, 0.77]). + + +descn_table(_, + /* color, hair, height, guilt */ + /* ttttt tttf ttft ttff tfttt tftf tfft tfff ttttt fttf ftft ftff ffttt fftf ffft ffff */ + [ 0.99, 0.5, 0.23, 0.88, 0.41, 0.3, 0.76, 0.87, 0.44, 0.43, 0.29, 0.72, 0.23, 0.91, 0.95, 0.92, + 0.01, 0.5, 0.77, 0.12, 0.59, 0.7, 0.24, 0.13, 0.56, 0.57, 0.71, 0.28, 0.77, 0.09, 0.05, 0.08]). + + +wit_table([0.2, 0.45, 0.24, 0.34, + 0.8, 0.55, 0.76, 0.66]). + + +runall(G, Wrapper) :- + findall(G, Wrapper, L), + execute_all(L). + + +execute_all([]). +execute_all(G.L) :- + call(G), + execute_all(L). + + +is_joe_guilty(Guilty) :- + witness(nyc, t), + runall(X, ev(X)), + guilty(joe, Guilty). + + +?- is_joe_guilty(Guilty). + diff --git a/packages/CLPBN/horus/examples/test_smokers1.yap b/packages/CLPBN/horus/examples/test_smokers1.yap new file mode 100644 index 000000000..15a4bce92 --- /dev/null +++ b/packages/CLPBN/horus/examples/test_smokers1.yap @@ -0,0 +1,33 @@ +:- use_module(library(pfl)). + +:- set_solver(fove). +%:- set_solver(hve). +%:- set_solver(bp). +%:- set_solver(cbp). + +:- yap_flag(write_strings, off). + +:- multifile people/1. + +:- clpbn_horus:set_horus_flag(verbosity,5). + +people @ 5. + +people(X,Y) :- + people(X), + people(Y), + X \== Y. + +markov smokes(X)::[t,f]; [1.0, 4.0552]; [people(X)]. + +markov cancer(X)::[t,f]; [1.0, 9.9742]; [people(X)]. + +markov friends(X,Y)::[t,f] ; [1.0, 99.48432] ; [people(X,Y)]. + +markov smokes(X)::[t,f], cancer(X)::[t,f] ; [4.48169, 4.48169, 1.0, 4.48169] ; [people(X)]. + +markov friends(X,Y)::[t,f], smokes(X)::[t,f], smokes(Y)::[t,f] ; + [3.004166, 3.004166, 3.004166, 3.004166, 3.004166, 1.0, 1.0, 3.004166] ; [people(X,Y)]. + +?- friends(p1,p2,X). + diff --git a/packages/CLPBN/horus/examples/test_smokers2.yap b/packages/CLPBN/horus/examples/test_smokers2.yap new file mode 100644 index 000000000..887d1d957 --- /dev/null +++ b/packages/CLPBN/horus/examples/test_smokers2.yap @@ -0,0 +1,33 @@ +:- use_module(library(pfl)). + +:- set_solver(fove). +%:- set_solver(hve). +%:- set_solver(bp). +%:- set_solver(cbp). + +:- yap_flag(write_strings, off). + +:- clpbn_horus:set_horus_flag(verbosity,5). +:- clpbn_horus:set_horus_flag(use_logarithms,true). + +:- multifile people/1. + +people @ 12. + +people(X,Y) :- + people(X), + people(Y). + +markov smokes(X)::[t,f]; [1.0, 4.0]; [people(X)]. + +markov asthma(X)::[t,f]; [2.5, 9.0] ; [people(X)]. + +markov friends(X,Y)::[t,f]; [1.0, 14.0] ; [people(X,Y)]. + +markov asthma(X)::[t,f], smokes(X)::[t,f]; [4.5, 4.3, 2.0, 1.45] ; [people(X)]. + +markov asthma(X)::[t,f], friends(X,Y)::[t,f], smokes(Y)::[t,f]; + [2.1, 3.3, 7.4, 3.9, 1.6, 5.0, 4.0, 3.0] ; [people(X,Y)]. + +?- friends(p1,p2,X). + diff --git a/packages/CLPBN/horus/examples/workshop_attrs.yap b/packages/CLPBN/horus/examples/workshop_attrs.yap new file mode 100644 index 000000000..880adcae5 --- /dev/null +++ b/packages/CLPBN/horus/examples/workshop_attrs.yap @@ -0,0 +1,29 @@ +:- use_module(library(pfl)). + +%:- set_solver(fove). +%:- set_solver(hve). +%:- set_solver(bp). +%:- set_solver(cbp). + +:- yap_flag(write_strings, off). + +:- multifile people/1. + +people @ 5. + +markov attends(P)::[t,f], attr1::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. + +markov attends(P)::[t,f], attr2::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. + +markov attends(P)::[t,f], attr3::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. + +markov attends(P)::[t,f], attr4::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. + +markov attends(P)::[t,f], attr5::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. + +markov attends(P)::[t,f], attr6::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. + +markov attends(P)::[t,f], series::[t,f] ; [0.501, 0.499, 0.499, 0.499] ; [people(P)]. + +% ?- series(X). + diff --git a/packages/CLPBN/horus/fove.log b/packages/CLPBN/horus/fove.log new file mode 100644 index 000000000..b183351b9 --- /dev/null +++ b/packages/CLPBN/horus/fove.log @@ -0,0 +1,4236 @@ +parfactors:[pf(1,[smokes(_142583)],[2],[1.0,4.0552],[(p1),(p10),(p11),(p12),(p13),(p2),(p3),(p4),(p5),(p6),(p7),(p8),(p9)]),pf(2,[asthma(_142661)],[2],[1.0,9.9742],[(p1),(p10),(p11),(p12),(p13),(p2),(p3),(p4),(p5),(p6),(p7),(p8),(p9)]),pf(3,[friends(_142739,_142740)],[2],[1.0,99.48432],[(p1,p1),(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p2),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9),(p10,p1),(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p2),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p1),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p2),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p1),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p2),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p1),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p2),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p2,p1),(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p2),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9),(p3,p1),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p2),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p1),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p2),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p1),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p2),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p1),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p2),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p1),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p2),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p1),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p2),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p1),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p2),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)]),pf(4,[asthma(_143611),smokes(_143611)],[2,2],[4.48169,4.48169,1.0,4.48169],[(p1),(p10),(p11),(p12),(p13),(p2),(p3),(p4),(p5),(p6),(p7),(p8),(p9)]),pf(5,[asthma(_143707),friends(_143707,_143712),smokes(_143712)],[2,2,2],[3.004166,3.004166,3.004166,3.004166,3.004166,1.0,1.0,3.004166],[(p1,p1),(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p2),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9),(p10,p1),(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p2),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p1),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p2),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p1),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p2),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p1),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p2),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p2,p1),(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p2),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9),(p3,p1),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p2),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p1),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p2),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p1),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p2),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p1),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p2),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p1),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p2),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p1),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p2),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p1),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p2),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)])]: + +**************************************************************** +INITIAL PARFACTORS +**************************************************************** +Formulas: smokes(A)::2 +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p1),(p10),(p11),(p12),(p13),(p2),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2 +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p1),(p10),(p11),(p12),(p13),(p2),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2 +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1),(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p2),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9),(p10,p1),(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p2),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p1),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p2),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p1),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p2),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p1),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p2),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p2,p1),(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p2),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9),(p3,p1),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p2),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p1),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p2),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p1),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p2),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p1),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p2),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p1),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p2),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p1),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p2),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p1),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p2),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p1),(p10),(p11),(p12),(p13),(p2),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p1),(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p2),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9),(p10,p1),(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p2),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p1),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p2),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p1),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p2),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p1),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p2),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p2,p1),(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p2),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9),(p3,p1),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p2),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p1),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p2),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p1),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p2),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p1),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p2),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p1),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p2),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p1),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p2),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p1),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p2),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +**************************************************************** +SHATTERED PARFACTORS +**************************************************************** +Formulas: smokes(A)::2 +Groups: [g1] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p1),(p10),(p11),(p12),(p13),(p2),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2 +Groups: [g2] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p1),(p10),(p11),(p12),(p13),(p2),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2 +Groups: [g3] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1),(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p2),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9),(p10,p1),(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p2),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p1),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p2),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p1),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p2),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p1),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p2),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p2,p1),(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p2),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9),(p3,p1),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p2),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p1),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p2),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p1),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p2),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p1),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p2),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p1),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p2),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p1),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p2),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p1),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p2),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g2, g1] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p1),(p10),(p11),(p12),(p13),(p2),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g2, g3, g1] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p1),(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p2),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9),(p10,p1),(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p2),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p1),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p2),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p1),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p2),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p1),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p2),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p2,p1),(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p2),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9),(p3,p1),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p2),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p1),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p2),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p1),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p2),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p1),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p2),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p1),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p2),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p1),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p2),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p1),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p2),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +fove [log_domain=true] + +**************************************************************** +SHATTERED AGAINST THE QUERY + -> friends(p1, p2) +**************************************************************** +Formulas: smokes(A)::2 +Groups: [g13] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p2)} + +Formulas: smokes(A)::2 +Groups: [g19] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p1)} + +Formulas: smokes(A)::2 +Groups: [g23] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2 +Groups: [g11] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p1)} + +Formulas: asthma(A)::2 +Groups: [g24] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p2)} + +Formulas: asthma(A)::2 +Groups: [g26] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2 +Groups: [g45] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: friends(A,B)::2 +Groups: [g9] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g26, g23] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g24, g13] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g42, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g9, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p2)} + +---------------------------------------------------------------- +Formulas: smokes(A)::2 +Groups: [g13] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p2)} + +Formulas: smokes(A)::2 +Groups: [g19] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p1)} + +Formulas: smokes(A)::2 +Groups: [g23] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2 +Groups: [g11] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p1)} + +Formulas: asthma(A)::2 +Groups: [g24] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p2)} + +Formulas: asthma(A)::2 +Groups: [g26] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2 +Groups: [g45] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: friends(A,B)::2 +Groups: [g9] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g26, g23] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g24, g13] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g42, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g9, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p2)} + +-> just multiplicate [9] x [11, 9, 13] [cost=0] +-> just multiplicate [13] x [24, 13] [cost=0] +-> just multiplicate [11] x [11, 19] [cost=0] +-> just multiplicate [19] x [11, 42, 19] [cost=0] +-> just multiplicate [23] x [26, 23] [cost=0] +-> just multiplicate [24] x [24, 56, 13] [cost=0] +-> just multiplicate [26] x [26, 59, 13] [cost=0] +-> just multiplicate [11, 45, 23] x [45] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=8] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=8] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(smokes(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert A in phi(asthma(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert B in phi(friends(A,B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1738] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +best operation: just multiplicate [9] x [11, 9, 13] [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(A)::2 +Groups: [g19] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p1)} + +Formulas: smokes(A)::2 +Groups: [g23] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: smokes(A)::2 +Groups: [g13] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p2)} + +Formulas: asthma(A)::2 +Groups: [g11] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p1)} + +Formulas: asthma(A)::2 +Groups: [g24] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p2)} + +Formulas: asthma(A)::2 +Groups: [g26] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g45] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g26, g23] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g24, g13] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g42, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p1)} + +-> just multiplicate [13] x [24, 13] [cost=0] +-> just multiplicate [11] x [11, 19] [cost=0] +-> just multiplicate [19] x [11, 42, 19] [cost=0] +-> just multiplicate [23] x [26, 23] [cost=0] +-> just multiplicate [24] x [24, 56, 13] [cost=0] +-> just multiplicate [26] x [26, 59, 13] [cost=0] +-> just multiplicate [11, 45, 23] x [45] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=8] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=8] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(smokes(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert A in phi(asthma(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert B in phi(friends(A,B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1738] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +best operation: just multiplicate [13] x [24, 13] [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(A)::2 +Groups: [g19] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p1)} + +Formulas: smokes(A)::2 +Groups: [g23] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2 +Groups: [g11] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p1)} + +Formulas: asthma(A)::2 +Groups: [g24] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p2)} + +Formulas: asthma(A)::2 +Groups: [g26] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2 +Groups: [g45] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g26, g23] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g42, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p1)} + +-> just multiplicate [11] x [11, 19] [cost=0] +-> just multiplicate [19] x [11, 42, 19] [cost=0] +-> just multiplicate [23] x [26, 23] [cost=0] +-> just multiplicate [24] x [24, 56, 13] [cost=0] +-> just multiplicate [26] x [26, 59, 13] [cost=0] +-> just multiplicate [11, 45, 23] x [45] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=8] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=8] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(smokes(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert A in phi(asthma(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert B in phi(friends(A,B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1738] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +best operation: just multiplicate [11] x [11, 19] [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(A)::2 +Groups: [g23] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: smokes(A)::2 +Groups: [g19] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p1)} + +Formulas: asthma(A)::2 +Groups: [g24] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p2)} + +Formulas: asthma(A)::2 +Groups: [g26] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2 +Groups: [g45] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g26, g23] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g42, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p1)} + +-> just multiplicate [19] x [11, 42, 19] [cost=0] +-> just multiplicate [23] x [26, 23] [cost=0] +-> just multiplicate [24] x [24, 56, 13] [cost=0] +-> just multiplicate [26] x [26, 59, 13] [cost=0] +-> just multiplicate [11, 45, 23] x [45] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=8] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=8] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(smokes(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert A in phi(asthma(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert B in phi(friends(A,B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1738] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +best operation: just multiplicate [19] x [11, 42, 19] [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(A)::2 +Groups: [g23] +LogVars: {A} +Ranges: [2] +Params: [0, 1.400000008] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2 +Groups: [g24] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p2)} + +Formulas: asthma(A)::2 +Groups: [g26] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2 +Groups: [g45] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g26, g23] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 0, 1.500000207] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: smokes(A)::2, asthma(B)::2, friends(B,A)::2 +Groups: [g19, g11, g42] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 2.5, 2.5, 1.400000008, 2.5] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +-> just multiplicate [23] x [26, 23] [cost=0] +-> just multiplicate [24] x [24, 56, 13] [cost=0] +-> just multiplicate [26] x [26, 59, 13] [cost=0] +-> just multiplicate [11, 45, 23] x [45] [cost=0] +-> just multiplicate [42] x [19, 11, 42] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=8] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=8] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(smokes(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert A in phi(asthma(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert B in phi(friends(A,B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1738] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1738] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1738] +best operation: just multiplicate [23] x [26, 23] [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2 +Groups: [g26] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2 +Groups: [g24] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p2)} + +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2 +Groups: [g45] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: smokes(A)::2, asthma(B)::2, friends(B,A)::2 +Groups: [g19, g11, g42] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 2.5, 2.5, 1.400000008, 2.5] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +-> just multiplicate [24] x [24, 56, 13] [cost=0] +-> just multiplicate [26] x [26, 59, 13] [cost=0] +-> just multiplicate [11, 45, 23] x [45] [cost=0] +-> just multiplicate [42] x [19, 11, 42] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=8] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=8] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(asthma(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert B in phi(friends(A,B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1716] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1716] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1716] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1716] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1716] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1716] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1716] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1716] +best operation: just multiplicate [24] x [24, 56, 13] [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2 +Groups: [g26] +LogVars: {A} +Ranges: [2] +Params: [0, 2.300001759] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2 +Groups: [g45] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: smokes(A)::2, asthma(B)::2, friends(B,A)::2 +Groups: [g19, g11, g42] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 2.5, 2.5, 1.400000008, 2.5] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p2,p2)} + +-> just multiplicate [26] x [26, 59, 13] [cost=0] +-> just multiplicate [11, 45, 23] x [45] [cost=0] +-> just multiplicate [42] x [19, 11, 42] [cost=0] +-> just multiplicate [56] x [24, 56, 13] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=8] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=8] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(asthma(A)::2)|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} [cost=360000] +-> count convert B in phi(friends(A,B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1716] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1716] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1716] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1716] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1716] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1716] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1716] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1716] +best operation: just multiplicate [26] x [26, 59, 13] [cost=0] + +---------------------------------------------------------------- +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2 +Groups: [g45] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: smokes(A)::2, asthma(B)::2, friends(B,A)::2 +Groups: [g19, g11, g42] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 2.5, 2.5, 1.400000008, 2.5] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +-> just multiplicate [11, 45, 23] x [45] [cost=0] +-> just multiplicate [42] x [19, 11, 42] [cost=0] +-> just multiplicate [56] x [24, 56, 13] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> just multiplicate [59] x [26, 59, 13] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=8] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=8] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert B in phi(friends(A,B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1694] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1694] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1694] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1694] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1694] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1694] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1694] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1694] +best operation: just multiplicate [11, 45, 23] x [45] [cost=0] + +---------------------------------------------------------------- +Formulas: friends(A,B)::2 +Groups: [g42] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: smokes(A)::2, asthma(B)::2, friends(B,A)::2 +Groups: [g19, g11, g42] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 2.5, 2.5, 1.400000008, 2.5] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +-> just multiplicate [42] x [19, 11, 42] [cost=0] +-> just multiplicate [56] x [24, 56, 13] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> just multiplicate [59] x [26, 59, 13] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=8] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1672] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1672] +best operation: just multiplicate [42] x [19, 11, 42] [cost=0] + +---------------------------------------------------------------- +Formulas: friends(A,B)::2 +Groups: [g56] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g56, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2, smokes(B)::2, asthma(A)::2 +Groups: [g42, g19, g11] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 2.5, 1.400000008, 5.700000036, 4.600000044, 7.100000044, 7.100000044] +Tuples: {(p1,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +-> just multiplicate [56] x [24, 56, 13] [cost=0] +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> just multiplicate [59] x [26, 59, 13] [cost=0] +-> just multiplicate [11, 19] x [42, 19, 11] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=8] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1672] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1672] +best operation: just multiplicate [56] x [24, 56, 13] [cost=0] + +---------------------------------------------------------------- +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g70] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p1)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2, smokes(B)::2, asthma(A)::2 +Groups: [g42, g19, g11] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 2.5, 1.400000008, 5.700000036, 4.600000044, 7.100000044, 7.100000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g56, g24, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +-> just multiplicate [24, 70, 19] x [70] [cost=0] +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> just multiplicate [59] x [26, 59, 13] [cost=0] +-> just multiplicate [13, 24] x [56, 24, 13] [cost=0] +-> just multiplicate [11, 19] x [42, 19, 11] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=8] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1672] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1672] +best operation: just multiplicate [24, 70, 19] x [70] [cost=0] + +---------------------------------------------------------------- +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g73] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2, smokes(B)::2, asthma(A)::2 +Groups: [g42, g19, g11] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 2.5, 1.400000008, 5.700000036, 4.600000044, 7.100000044, 7.100000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g56, g24, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +-> just multiplicate [26, 73, 19] x [73] [cost=0] +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> just multiplicate [59] x [26, 59, 13] [cost=0] +-> just multiplicate [13, 24] x [56, 24, 13] [cost=0] +-> just multiplicate [11, 19] x [42, 19, 11] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=8] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1672] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1672] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1672] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1672] +best operation: just multiplicate [26, 73, 19] x [73] [cost=0] + +---------------------------------------------------------------- +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g76] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2, smokes(B)::2, asthma(A)::2 +Groups: [g42, g19, g11] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 2.5, 1.400000008, 5.700000036, 4.600000044, 7.100000044, 7.100000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g56, g24, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +-> just multiplicate [24, 76, 23] x [76] [cost=0] +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> just multiplicate [59] x [26, 59, 13] [cost=0] +-> just multiplicate [13, 24] x [56, 24, 13] [cost=0] +-> just multiplicate [11, 19] x [42, 19, 11] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=8] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1650] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1650] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1650] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1650] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1650] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1650] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1650] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1650] +best operation: just multiplicate [24, 76, 23] x [76] [cost=0] + +---------------------------------------------------------------- +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2 +Groups: [g79] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 1.099999992, 0, 0, 1.099999992] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2, smokes(B)::2, asthma(A)::2 +Groups: [g42, g19, g11] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 2.5, 1.400000008, 5.700000036, 4.600000044, 7.100000044, 7.100000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g56, g24, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +-> just multiplicate [26, 79, 23] x [79] [cost=0] +-> just multiplicate [59] x [26, 59, 13] [cost=0] +-> just multiplicate [13, 24] x [56, 24, 13] [cost=0] +-> just multiplicate [11, 19] x [42, 19, 11] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=8] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> count convert A in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> count convert B in phi(friends(A,B)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=360] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1628] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1628] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1628] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1628] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1628] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1628] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1628] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1628] +best operation: just multiplicate [26, 79, 23] x [79] [cost=0] + +---------------------------------------------------------------- +Formulas: friends(A,B)::2 +Groups: [g59] +LogVars: {A,B} +Ranges: [2] +Params: [0, 4.600000044] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g59, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 1.099999992, 3.400001751, 2.300001759, 2.300001759, 3.400001751] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: friends(A,B)::2, smokes(B)::2, asthma(A)::2 +Groups: [g42, g19, g11] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 2.5, 1.400000008, 5.700000036, 4.600000044, 7.100000044, 7.100000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g56, g24, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> just multiplicate [59] x [26, 59, 13] [cost=0] +-> just multiplicate [13, 24] x [56, 24, 13] [cost=0] +-> just multiplicate [11, 19] x [42, 19, 11] [cost=0] +-> just multiplicate [23, 26] x [26, 79, 23] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=8] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> count convert A in phi(friends(A,B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=360] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1386] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1386] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1386] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1386] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1386] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1386] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1386] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1386] +best operation: just multiplicate [59] x [26, 59, 13] [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: friends(A,B)::2, smokes(B)::2, asthma(A)::2 +Groups: [g42, g19, g11] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 2.5, 1.400000008, 5.700000036, 4.600000044, 7.100000044, 7.100000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g56, g24, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p2,p2)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g59, g26, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> just multiplicate [13, 24] x [56, 24, 13] [cost=0] +-> just multiplicate [11, 19] x [42, 19, 11] [cost=0] +-> just multiplicate [23, 26] x [26, 79, 23] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=0] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1364] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1364] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1364] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1364] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1364] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1364] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1364] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1364] +best operation: just multiplicate [13, 24] x [56, 24, 13] [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 1.500000207, 2.300001759, 3.800001966] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: friends(A,B)::2, smokes(B)::2, asthma(A)::2 +Groups: [g42, g19, g11] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 2.5, 1.400000008, 5.700000036, 4.600000044, 7.100000044, 7.100000044] +Tuples: {(p1,p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g59, g26, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2 +Groups: [g13, g24, g56] +LogVars: {A,C} +Ranges: [2, 2, 2] +Params: [2.600000199, 7.200000243, 3.400001751, 6.900001803, 4.000000208, 8.600000251, 5.200001975, 10.90000201] +Tuples: {(p2,p2)} + +-> just multiplicate [11, 19] x [42, 19, 11] [cost=0] +-> just multiplicate [23, 26] x [26, 79, 23] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=0] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1364] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1364] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1364] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1364] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1364] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1364] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1364] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1364] +best operation: just multiplicate [11, 19] x [42, 19, 11] [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g23, g26] +LogVars: {A} +Ranges: [2, 2] +Params: [1.500000207, 0, 2.900000216, 2.900000216] +Tuples: {(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g59, g26, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g79, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2 +Groups: [g13, g24, g56] +LogVars: {A,C} +Ranges: [2, 2, 2] +Params: [2.600000199, 7.200000243, 3.400001751, 6.900001803, 4.000000208, 8.600000251, 5.200001975, 10.90000201] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, smokes(A)::2, friends(A,C)::2 +Groups: [g11, g19, g42] +LogVars: {A,C} +Ranges: [2, 2, 2] +Params: [2.600000199, 7.200000243, 4.000000208, 8.600000251, 3.400001751, 6.900001803, 5.200001975, 10.90000201] +Tuples: {(p1,p1)} + +-> just multiplicate [23, 26] x [26, 79, 23] [cost=0] +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=0] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1364] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=1364] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=1364] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=1364] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=1364] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1364] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=1364] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=1364] +best operation: just multiplicate [23, 26] x [26, 79, 23] [cost=0] + +---------------------------------------------------------------- +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g59, g26, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2 +Groups: [g13, g24, g56] +LogVars: {A,C} +Ranges: [2, 2, 2] +Params: [2.600000199, 7.200000243, 3.400001751, 6.900001803, 4.000000208, 8.600000251, 5.200001975, 10.90000201] +Tuples: {(p2,p2)} + +Formulas: asthma(A)::2, smokes(A)::2, friends(A,C)::2 +Groups: [g11, g19, g42] +LogVars: {A,C} +Ranges: [2, 2, 2] +Params: [2.600000199, 7.200000243, 4.000000208, 8.600000251, 3.400001751, 6.900001803, 5.200001975, 10.90000201] +Tuples: {(p1,p1)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2, smokes(C)::2 +Groups: [g23, g26, g79, g23] +LogVars: {A,C} +Ranges: [2, 2, 2, 2] +Params: [1.236363647, 1.236363647, 5.836363691, 5.836363691, 1.099999992, 0, 4.600000044, 5.700000036, 1.363636375, 1.363636375, 5.963636419, 5.963636419, 1.363636375, 0.2636363832, 4.863636427, 5.963636419] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> sum out friends/2|{(p1,p1)} (group 42) [cost=0] +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=0] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=528] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=528] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=528] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=528] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=528] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=528] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=528] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=2288] +best operation: sum out friends/2|{(p1,p1)} (group 42) [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g59, g26, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g11, g45, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2 +Groups: [g13, g24, g56] +LogVars: {A,C} +Ranges: [2, 2, 2] +Params: [2.600000199, 7.200000243, 3.400001751, 6.900001803, 4.000000208, 8.600000251, 5.200001975, 10.90000201] +Tuples: {(p2,p2)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2, smokes(C)::2 +Groups: [g23, g26, g79, g23] +LogVars: {A,C} +Ranges: [2, 2, 2, 2] +Params: [1.236363647, 1.236363647, 5.836363691, 5.836363691, 1.099999992, 0, 4.600000044, 5.700000036, 1.363636375, 1.363636375, 5.963636419, 5.963636419, 1.363636375, 0.2636363832, 4.863636427, 5.963636419] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=0] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 45) [cost=528] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=528] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=528] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=528] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=528] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=528] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=528] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=2288] +best operation: sum out friends/2|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} (group 45) [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g59, g26, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2 +Groups: [g13, g24, g56] +LogVars: {A,C} +Ranges: [2, 2, 2] +Params: [2.600000199, 7.200000243, 3.400001751, 6.900001803, 4.000000208, 8.600000251, 5.200001975, 10.90000201] +Tuples: {(p2,p2)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2, smokes(C)::2 +Groups: [g23, g26, g79, g23] +LogVars: {A,C} +Ranges: [2, 2, 2, 2] +Params: [1.236363647, 1.236363647, 5.836363691, 5.836363691, 1.099999992, 0, 4.600000044, 5.700000036, 1.363636375, 1.363636375, 5.963636419, 5.963636419, 1.363636375, 0.2636363832, 4.863636427, 5.963636419] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> sum out friends/2|{(p2,p2)} (group 56) [cost=0] +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=0] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=2400] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=484] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=484] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=484] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=484] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=484] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=484] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=2244] +best operation: sum out friends/2|{(p2,p2)} (group 56) [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g59, g26, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 3.400001751, 2.300001759, 5.700000036, 5.700000036, 6.900001803, 8.000001795] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2, smokes(C)::2 +Groups: [g23, g26, g79, g23] +LogVars: {A,C} +Ranges: [2, 2, 2, 2] +Params: [1.236363647, 1.236363647, 5.836363691, 5.836363691, 1.099999992, 0, 4.600000044, 5.700000036, 1.363636375, 1.363636375, 5.963636419, 5.963636419, 1.363636375, 0.2636363832, 4.863636427, 5.963636419] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=0] +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=2400] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=484] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=484] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=484] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=484] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 59) [cost=484] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=484] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=2244] +best operation: sum out friends/2|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} (group 59) [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g13] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 6.92975222, 8.003342175] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g70, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2, smokes(C)::2 +Groups: [g23, g26, g79, g23] +LogVars: {A,C} +Ranges: [2, 2, 2, 2] +Params: [1.236363647, 1.236363647, 5.836363691, 5.836363691, 1.099999992, 0, 4.600000044, 5.700000036, 1.363636375, 1.363636375, 5.963636419, 5.963636419, 1.363636375, 0.2636363832, 4.863636427, 5.963636419] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> sum out friends/2|{(p2,p1)} (group 70) [cost=0] +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=2400] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=2400] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=440] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=440] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=440] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=440] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=440] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=2200] +best operation: sum out friends/2|{(p2,p1)} (group 70) [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g13] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 6.92975222, 8.003342175] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g26, g73, g19] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2, smokes(C)::2 +Groups: [g23, g26, g79, g23] +LogVars: {A,C} +Ranges: [2, 2, 2, 2] +Params: [1.236363647, 1.236363647, 5.836363691, 5.836363691, 1.099999992, 0, 4.600000044, 5.700000036, 1.363636375, 1.363636375, 5.963636419, 5.963636419, 1.363636375, 0.2636363832, 4.863636427, 5.963636419] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=2400] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=2400] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=440] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 73) [cost=440] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=440] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=440] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=440] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=2200] +best operation: sum out friends/2|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} (group 73) [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g13] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 6.92975222, 8.003342175] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, friends(A,B)::2, smokes(B)::2 +Groups: [g24, g76, g23] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 5.700000036, 5.700000036, 1.099999992, 0, 4.600000044, 5.700000036] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2, smokes(C)::2 +Groups: [g23, g26, g79, g23] +LogVars: {A,C} +Ranges: [2, 2, 2, 2] +Params: [1.236363647, 1.236363647, 5.836363691, 5.836363691, 1.099999992, 0, 4.600000044, 5.700000036, 1.363636375, 1.363636375, 5.963636419, 5.963636419, 1.363636375, 0.2636363832, 4.863636427, 5.963636419] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=2400] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=240] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=240] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 76) [cost=396] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=396] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=396] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=396] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=2156] +best operation: sum out friends/2|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} (group 76) [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g13] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 6.92975222, 8.003342175] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: smokes(A)::2, asthma(A)::2, friends(A,C)::2, smokes(C)::2 +Groups: [g23, g26, g79, g23] +LogVars: {A,C} +Ranges: [2, 2, 2, 2] +Params: [1.236363647, 1.236363647, 5.836363691, 5.836363691, 1.099999992, 0, 4.600000044, 5.700000036, 1.363636375, 1.363636375, 5.963636419, 5.963636419, 1.363636375, 0.2636363832, 4.863636427, 5.963636419] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=240] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=240] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=240] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=240] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=352] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=352] +-> grounding 1st log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=352] +-> grounding 2nd log var in friends/2|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 79) [cost=2112] +best operation: sum out friends/2|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} (group 79) [cost=0] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g13] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 6.92975222, 8.003342175] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: smokes(A)::2, asthma(A)::2, smokes(C)::2 +Groups: [g23, g26, g23] +LogVars: {A,C} +Ranges: [2, 2, 2] +Params: [5.846365343, 5.846365343, 4.629750461, 5.703340416, 5.973638071, 5.973638071, 4.893386844, 5.966976799] +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=240] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=240] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=240] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=240] +-> count convert C in phi(smokes(A)::2,asthma(A)::2,smokes(C)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=48] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=264] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=264] +best operation: count convert C in phi(smokes(A)::2,asthma(A)::2,smokes(C)::2)|{(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} [cost=48] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g26, g13] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 6.92975222, 8.003342175] +Tuples: {(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: smokes(A)::2, asthma(A)::2, smokes(#C)::2 +Groups: [g23, g26, g23] +LogVars: {A,C} +Ranges: [2, 2, 12] +Params: |48| +Tuples: {(p10,p10),(p10,p11),(p10,p12),(p10,p13),(p10,p3),(p10,p4),(p10,p5),(p10,p6),(p10,p7),(p10,p8),(p10,p9),(p11,p10),(p11,p11),(p11,p12),(p11,p13),(p11,p3),(p11,p4),(p11,p5),(p11,p6),(p11,p7),(p11,p8),(p11,p9),(p12,p10),(p12,p11),(p12,p12),(p12,p13),(p12,p3),(p12,p4),(p12,p5),(p12,p6),(p12,p7),(p12,p8),(p12,p9),(p13,p10),(p13,p11),(p13,p12),(p13,p13),(p13,p3),(p13,p4),(p13,p5),(p13,p6),(p13,p7),(p13,p8),(p13,p9),(p3,p10),(p3,p11),(p3,p12),(p3,p13),(p3,p3),(p3,p4),(p3,p5),(p3,p6),(p3,p7),(p3,p8),(p3,p9),(p4,p10),(p4,p11),(p4,p12),(p4,p13),(p4,p3),(p4,p4),(p4,p5),(p4,p6),(p4,p7),(p4,p8),(p4,p9),(p5,p10),(p5,p11),(p5,p12),(p5,p13),(p5,p3),(p5,p4),(p5,p5),(p5,p6),(p5,p7),(p5,p8),(p5,p9),(p6,p10),(p6,p11),(p6,p12),(p6,p13),(p6,p3),(p6,p4),(p6,p5),(p6,p6),(p6,p7),(p6,p8),(p6,p9),(p7,p10),(p7,p11),(p7,p12),(p7,p13),(p7,p3),(p7,p4),(p7,p5),(p7,p6),(p7,p7),(p7,p8),(p7,p9),(p8,p10),(p8,p11),(p8,p12),(p8,p13),(p8,p3),(p8,p4),(p8,p5),(p8,p6),(p8,p7),(p8,p8),(p8,p9),(p9,p10),(p9,p11),(p9,p12),(p9,p13),(p9,p3),(p9,p4),(p9,p5),(p9,p6),(p9,p7),(p9,p8),(p9,p9)} + +-> sum out asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=16] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=240] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p2),(p11,p2),(p12,p2),(p13,p2),(p3,p2),(p4,p2),(p5,p2),(p6,p2),(p7,p2),(p8,p2),(p9,p2)} [cost=240] +-> count convert A in phi(asthma(A)::2,smokes(B)::2)|{(p10,p1),(p11,p1),(p12,p1),(p13,p1),(p3,p1),(p4,p1),(p5,p1),(p6,p1),(p7,p1),(p8,p1),(p9,p1)} [cost=240] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=240] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=704] +-> grounding 1st log var in asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=704] +best operation: sum out asthma/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 26) [cost=16] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: smokes(B)::2, smokes(C)::2, smokes(A)::2, smokes(#D)::2 +Groups: [g13, g19, g23, g23] +LogVars: {A,B,C,D} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} + +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=24] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=24] +-> count convert A in phi(smokes(B)::2,smokes(C)::2,smokes(A)::2,smokes(#D)::2)|{(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} [cost=576] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=1144] +best operation: count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} [cost=24] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(A)::2 +Groups: [g11, g19] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 8.610001903, 6.92975222, 10.90334239] +Tuples: {(p1)} + +Formulas: friends(A,B)::2, asthma(A)::2, smokes(B)::2 +Groups: [g9, g11, g13] +LogVars: {A,B} +Ranges: [2, 2, 2] +Params: [1.099999992, 1.099999992, 1.099999992, 0, 5.700000036, 5.700000036, 4.600000044, 5.700000036] +Tuples: {(p1,p2)} + +Formulas: asthma(A)::2, smokes(#B)::2 +Groups: [g11, g23] +LogVars: {A,B} +Ranges: [2, 12] +Params: [62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 50.92725507, 52.00084502, 53.07443498, 54.14802493, 55.22161489, 56.29520484, 57.3687948, 58.44238475, 59.51597471, 60.58956466, 61.66315462, 62.73674457] +Tuples: {(p1,p10),(p1,p11),(p1,p12),(p1,p13),(p1,p3),(p1,p4),(p1,p5),(p1,p6),(p1,p7),(p1,p8),(p1,p9)} + +Formulas: smokes(B)::2, smokes(C)::2, smokes(A)::2, smokes(#D)::2 +Groups: [g13, g19, g23, g23] +LogVars: {A,B,C,D} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} + +-> sum out asthma/1|{(p1)} (group 11) [cost=192] +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=240] +-> count convert A in phi(smokes(B)::2,smokes(C)::2,smokes(A)::2,smokes(#D)::2)|{(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} [cost=5760] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=5196] +best operation: sum out asthma/1|{(p1)} (group 11) [cost=192] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p1)} + +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g23] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: friends(A,B)::2, smokes(B)::2, smokes(A)::2, smokes(#C)::2 +Groups: [g9, g13, g19, g23] +LogVars: {A,B,C} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p1,p2,p10),(p1,p2,p11),(p1,p2,p12),(p1,p2,p13),(p1,p2,p3),(p1,p2,p4),(p1,p2,p5),(p1,p2,p6),(p1,p2,p7),(p1,p2,p8),(p1,p2,p9)} + +Formulas: smokes(B)::2, smokes(C)::2, smokes(A)::2, smokes(#D)::2 +Groups: [g13, g19, g23, g23] +LogVars: {A,B,C,D} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} + +-> count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=240] +-> count convert A in phi(smokes(B)::2,smokes(C)::2,smokes(A)::2,smokes(#D)::2)|{(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} [cost=5760] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=17484] +best operation: count convert B in phi(asthma(A)::2,smokes(B)::2)|{(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} [cost=240] + +---------------------------------------------------------------- +Formulas: asthma(A)::2, smokes(B)::2 +Groups: [g24, g19] +LogVars: {A,B} +Ranges: [2, 2] +Params: [5.710001687, 5.710001687, 4.629750461, 5.703340416] +Tuples: {(p2,p1)} + +Formulas: smokes(A)::2, asthma(A)::2 +Groups: [g13, g24] +LogVars: {A} +Ranges: [2, 2] +Params: [7.210001895, 6.92975222, 8.610001903, 10.90334239] +Tuples: {(p2)} + +Formulas: asthma(A)::2, smokes(#B)::2 +Groups: [g24, g23] +LogVars: {A,B} +Ranges: [2, 12] +Params: [62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 62.81001856, 50.92725507, 52.00084502, 53.07443498, 54.14802493, 55.22161489, 56.29520484, 57.3687948, 58.44238475, 59.51597471, 60.58956466, 61.66315462, 62.73674457] +Tuples: {(p2,p10),(p2,p11),(p2,p12),(p2,p13),(p2,p3),(p2,p4),(p2,p5),(p2,p6),(p2,p7),(p2,p8),(p2,p9)} + +Formulas: friends(A,B)::2, smokes(B)::2, smokes(A)::2, smokes(#C)::2 +Groups: [g9, g13, g19, g23] +LogVars: {A,B,C} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p1,p2,p10),(p1,p2,p11),(p1,p2,p12),(p1,p2,p13),(p1,p2,p3),(p1,p2,p4),(p1,p2,p5),(p1,p2,p6),(p1,p2,p7),(p1,p2,p8),(p1,p2,p9)} + +Formulas: smokes(B)::2, smokes(C)::2, smokes(A)::2, smokes(#D)::2 +Groups: [g13, g19, g23, g23] +LogVars: {A,B,C,D} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} + +-> sum out asthma/1|{(p2)} (group 24) [cost=96] +-> count convert A in phi(smokes(B)::2,smokes(C)::2,smokes(A)::2,smokes(#D)::2)|{(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} [cost=57600] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=21536] +best operation: sum out asthma/1|{(p2)} (group 24) [cost=96] + +---------------------------------------------------------------- +Formulas: smokes(A)::2, smokes(B)::2, smokes(#C)::2 +Groups: [g13, g19, g23] +LogVars: {A,B,C} +Ranges: [2, 2, 12] +Params: |48| +Tuples: {(p2,p1,p10),(p2,p1,p11),(p2,p1,p12),(p2,p1,p13),(p2,p1,p3),(p2,p1,p4),(p2,p1,p5),(p2,p1,p6),(p2,p1,p7),(p2,p1,p8),(p2,p1,p9)} + +Formulas: friends(A,B)::2, smokes(B)::2, smokes(A)::2, smokes(#C)::2 +Groups: [g9, g13, g19, g23] +LogVars: {A,B,C} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p1,p2,p10),(p1,p2,p11),(p1,p2,p12),(p1,p2,p13),(p1,p2,p3),(p1,p2,p4),(p1,p2,p5),(p1,p2,p6),(p1,p2,p7),(p1,p2,p8),(p1,p2,p9)} + +Formulas: smokes(B)::2, smokes(C)::2, smokes(A)::2, smokes(#D)::2 +Groups: [g13, g19, g23, g23] +LogVars: {A,B,C,D} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} + +-> just multiplicate [9, 13, 19, 23] x [13, 19, 23] [cost=0] +-> count convert A in phi(smokes(B)::2,smokes(C)::2,smokes(A)::2,smokes(#D)::2)|{(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} [cost=57600] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=25632] +best operation: just multiplicate [9, 13, 19, 23] x [13, 19, 23] [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(B)::2, smokes(C)::2, smokes(A)::2, smokes(#D)::2 +Groups: [g13, g19, g23, g23] +LogVars: {A,B,C,D} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} + +Formulas: friends(B,A)::2, smokes(A)::2, smokes(B)::2, smokes(#C)::2 +Groups: [g9, g13, g19, g23] +LogVars: {A,B,C} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p2,p1,p10),(p2,p1,p11),(p2,p1,p12),(p2,p1,p13),(p2,p1,p3),(p2,p1,p4),(p2,p1,p5),(p2,p1,p6),(p2,p1,p7),(p2,p1,p8),(p2,p1,p9)} + +-> count convert A in phi(smokes(B)::2,smokes(C)::2,smokes(A)::2,smokes(#D)::2)|{(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} [cost=5760] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=17440] +best operation: count convert A in phi(smokes(B)::2,smokes(C)::2,smokes(A)::2,smokes(#D)::2)|{(p10,p2,p1,p10),(p10,p2,p1,p11),(p10,p2,p1,p12),(p10,p2,p1,p13),(p10,p2,p1,p3),(p10,p2,p1,p4),(p10,p2,p1,p5),(p10,p2,p1,p6),(p10,p2,p1,p7),(p10,p2,p1,p8),(p10,p2,p1,p9),(p11,p2,p1,p10),(p11,p2,p1,p11),(p11,p2,p1,p12),(p11,p2,p1,p13),(p11,p2,p1,p3),(p11,p2,p1,p4),(p11,p2,p1,p5),(p11,p2,p1,p6),(p11,p2,p1,p7),(p11,p2,p1,p8),(p11,p2,p1,p9),(p12,p2,p1,p10),(p12,p2,p1,p11),(p12,p2,p1,p12),(p12,p2,p1,p13),(p12,p2,p1,p3),(p12,p2,p1,p4),(p12,p2,p1,p5),(p12,p2,p1,p6),(p12,p2,p1,p7),(p12,p2,p1,p8),(p12,p2,p1,p9),(p13,p2,p1,p10),(p13,p2,p1,p11),(p13,p2,p1,p12),(p13,p2,p1,p13),(p13,p2,p1,p3),(p13,p2,p1,p4),(p13,p2,p1,p5),(p13,p2,p1,p6),(p13,p2,p1,p7),(p13,p2,p1,p8),(p13,p2,p1,p9),(p3,p2,p1,p10),(p3,p2,p1,p11),(p3,p2,p1,p12),(p3,p2,p1,p13),(p3,p2,p1,p3),(p3,p2,p1,p4),(p3,p2,p1,p5),(p3,p2,p1,p6),(p3,p2,p1,p7),(p3,p2,p1,p8),(p3,p2,p1,p9),(p4,p2,p1,p10),(p4,p2,p1,p11),(p4,p2,p1,p12),(p4,p2,p1,p13),(p4,p2,p1,p3),(p4,p2,p1,p4),(p4,p2,p1,p5),(p4,p2,p1,p6),(p4,p2,p1,p7),(p4,p2,p1,p8),(p4,p2,p1,p9),(p5,p2,p1,p10),(p5,p2,p1,p11),(p5,p2,p1,p12),(p5,p2,p1,p13),(p5,p2,p1,p3),(p5,p2,p1,p4),(p5,p2,p1,p5),(p5,p2,p1,p6),(p5,p2,p1,p7),(p5,p2,p1,p8),(p5,p2,p1,p9),(p6,p2,p1,p10),(p6,p2,p1,p11),(p6,p2,p1,p12),(p6,p2,p1,p13),(p6,p2,p1,p3),(p6,p2,p1,p4),(p6,p2,p1,p5),(p6,p2,p1,p6),(p6,p2,p1,p7),(p6,p2,p1,p8),(p6,p2,p1,p9),(p7,p2,p1,p10),(p7,p2,p1,p11),(p7,p2,p1,p12),(p7,p2,p1,p13),(p7,p2,p1,p3),(p7,p2,p1,p4),(p7,p2,p1,p5),(p7,p2,p1,p6),(p7,p2,p1,p7),(p7,p2,p1,p8),(p7,p2,p1,p9),(p8,p2,p1,p10),(p8,p2,p1,p11),(p8,p2,p1,p12),(p8,p2,p1,p13),(p8,p2,p1,p3),(p8,p2,p1,p4),(p8,p2,p1,p5),(p8,p2,p1,p6),(p8,p2,p1,p7),(p8,p2,p1,p8),(p8,p2,p1,p9),(p9,p2,p1,p10),(p9,p2,p1,p11),(p9,p2,p1,p12),(p9,p2,p1,p13),(p9,p2,p1,p3),(p9,p2,p1,p4),(p9,p2,p1,p5),(p9,p2,p1,p6),(p9,p2,p1,p7),(p9,p2,p1,p8),(p9,p2,p1,p9)} [cost=5760] + +---------------------------------------------------------------- +Formulas: smokes(B)::2, smokes(C)::2, smokes(#A)::2 +Groups: [g13, g19, g23] +LogVars: {A,B,C} +Ranges: [2, 2, 12] +Params: |48| +Tuples: {(p10,p2,p1),(p11,p2,p1),(p12,p2,p1),(p13,p2,p1),(p3,p2,p1),(p4,p2,p1),(p5,p2,p1),(p6,p2,p1),(p7,p2,p1),(p8,p2,p1),(p9,p2,p1)} + +Formulas: friends(B,A)::2, smokes(A)::2, smokes(B)::2, smokes(#C)::2 +Groups: [g9, g13, g19, g23] +LogVars: {A,B,C} +Ranges: [2, 2, 2, 12] +Params: |96| +Tuples: {(p2,p1,p10),(p2,p1,p11),(p2,p1,p12),(p2,p1,p13),(p2,p1,p3),(p2,p1,p4),(p2,p1,p5),(p2,p1,p6),(p2,p1,p7),(p2,p1,p8),(p2,p1,p9)} + +-> just multiplicate [13, 19, 23] x [9, 13, 19, 23] [cost=0] +-> sum out smokes/1|{(p2)} (group 13) [cost=96] +-> sum out smokes/1|{(p1)} (group 19) [cost=96] +-> sum out smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=96] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=24576] +best operation: just multiplicate [13, 19, 23] x [9, 13, 19, 23] [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(A)::2, smokes(B)::2, smokes(#C)::2, friends(B,A)::2 +Groups: [g13, g19, g23, g9] +LogVars: {A,B,C} +Ranges: [2, 2, 12, 2] +Params: |96| +Tuples: {(p2,p1,p10),(p2,p1,p11),(p2,p1,p12),(p2,p1,p13),(p2,p1,p3),(p2,p1,p4),(p2,p1,p5),(p2,p1,p6),(p2,p1,p7),(p2,p1,p8),(p2,p1,p9)} + +-> sum out smokes/1|{(p2)} (group 13) [cost=0] +-> sum out smokes/1|{(p1)} (group 19) [cost=0] +-> sum out smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=0] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=16384] +best operation: sum out smokes/1|{(p2)} (group 13) [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(B)::2, smokes(#C)::2, friends(B,A)::2 +Groups: [g19, g23, g9] +LogVars: {A,B,C} +Ranges: [2, 12, 2] +Params: |48| +Tuples: {(p2,p1,p10),(p2,p1,p11),(p2,p1,p12),(p2,p1,p13),(p2,p1,p3),(p2,p1,p4),(p2,p1,p5),(p2,p1,p6),(p2,p1,p7),(p2,p1,p8),(p2,p1,p9)} + +-> sum out smokes/1|{(p1)} (group 19) [cost=0] +-> sum out smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=0] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=8192] +best operation: sum out smokes/1|{(p1)} (group 19) [cost=0] + +---------------------------------------------------------------- +Formulas: smokes(#C)::2, friends(B,A)::2 +Groups: [g23, g9] +LogVars: {A,B,C} +Ranges: [12, 2] +Params: [983.1213216, 987.7213442, 984.5218249, 989.1218909, 985.9235225, 990.5237159, 987.329149, 991.9297161, 988.7475473, 993.3492207, 990.2071194, 994.8121497, 991.7989515, 996.4148367, 993.814596, 998.4690557, 997.1078208, 1001.887026, 1003.287913, 1008.309377, 1013.517185, 1018.822831, 1027.288634, 1032.809367] +Tuples: {(p2,p1,p10),(p2,p1,p11),(p2,p1,p12),(p2,p1,p13),(p2,p1,p3),(p2,p1,p4),(p2,p1,p5),(p2,p1,p6),(p2,p1,p7),(p2,p1,p8),(p2,p1,p9)} + +-> sum out smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=0] +-> grounding 1st log var in smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=4096] +best operation: sum out smokes/1|{(p10),(p11),(p12),(p13),(p3),(p4),(p5),(p6),(p7),(p8),(p9)} (group 23) [cost=0] + +---------------------------------------------------------------- +Formulas: friends(B,A)::2 +Groups: [g9] +LogVars: {A,B} +Ranges: [2] +Params: [1027.288645, 1032.809376] +Tuples: {(p2,p1)} + +largest cost = 5760 + +?- \ No newline at end of file diff --git a/packages/CLPBN/horus/hcli b/packages/CLPBN/horus/hcli new file mode 100755 index 000000000..3bdbd0349 Binary files /dev/null and b/packages/CLPBN/horus/hcli differ