add flag to lifted knowledge compilation and s/fove/lve

This commit is contained in:
Tiago Gomes
2012-11-08 15:05:48 +00:00
parent a8c4f4fc52
commit 0ed89d3eeb
22 changed files with 43 additions and 38 deletions

View File

@@ -30,8 +30,9 @@ typedef unsigned long long ullong;
enum LiftedSolver
{
FOVE, // first order variable elimination
LBP, // lifted belief propagation
LVE, // generalized counting first-order variable elimination (GC-FOVE)
LBP, // lifted first-order belief propagation
LKC // lifted first-order knowledge compilation
};

View File

@@ -647,7 +647,7 @@ void
LiftedVe::printSolverFlags (void) const
{
stringstream ss;
ss << "fove [" ;
ss << "lve [" ;
ss << "log_domain=" << Util::toString (Globals::logDomain);
ss << "]" ;
cout << ss.str() << endl;

View File

@@ -215,7 +215,7 @@ bool
Clause::isIpgLogVar (LogVar X) const
{
assert (constr_.logVarSet().contains (X));
return ipgLogVars_.contains (X);
return ipgLvs_.contains (X);
}
@@ -237,7 +237,7 @@ Clause::ipgCandidates (void) const
{
LogVarSet candidates;
LogVarSet allLvs = constr_.logVarSet();
allLvs -= ipgLogVars_;
allLvs -= ipgLvs_;
allLvs -= posCountedLvs_;
allLvs -= negCountedLvs_;
for (size_t i = 0; i < allLvs.size(); i++) {
@@ -281,7 +281,7 @@ Clause::removeLiteral (size_t litIdx)
{
LogVarSet lvsToRemove = literals_[litIdx].logVarSet()
- getLogVarSetExcluding (litIdx);
ipgLogVars_ -= lvsToRemove;
ipgLvs_ -= lvsToRemove;
posCountedLvs_ -= lvsToRemove;
negCountedLvs_ -= lvsToRemove;
constr_.remove (lvsToRemove);
@@ -322,7 +322,7 @@ std::ostream& operator<< (ostream &os, const Clause& clause)
{
for (unsigned i = 0; i < clause.literals_.size(); i++) {
if (i != 0) os << " v " ;
os << clause.literals_[i].toString (clause.ipgLogVars_,
os << clause.literals_[i].toString (clause.ipgLvs_,
clause.posCountedLvs_, clause.negCountedLvs_);
}
if (clause.constr_.empty() == false) {

View File

@@ -81,9 +81,9 @@ class Clause
bool isUnit (void) const { return literals_.size() == 1; }
LogVarSet ipgLogVars (void) const { return ipgLogVars_; }
LogVarSet ipgLogVars (void) const { return ipgLvs_; }
void addIpgLogVar (LogVar X) { ipgLogVars_.insert (X); }
void addIpgLogVar (LogVar X) { ipgLvs_.insert (X); }
void addPosCountedLogVar (LogVar X) { posCountedLvs_.insert (X); }
@@ -137,7 +137,7 @@ class Clause
LogVarSet getLogVarSetExcluding (size_t idx) const;
Literals literals_;
LogVarSet ipgLogVars_;
LogVarSet ipgLvs_;
LogVarSet posCountedLvs_;
LogVarSet negCountedLvs_;
ConstraintTree constr_;

View File

@@ -13,7 +13,7 @@ bool logDomain = false;
unsigned verbosity = 0;
LiftedSolver liftedSolver = LiftedSolver::FOVE;
LiftedSolver liftedSolver = LiftedSolver::LVE;
GroundSolver groundSolver = GroundSolver::VE;
@@ -210,10 +210,12 @@ setHorusFlag (string key, string value)
ss << value;
ss >> Globals::verbosity;
} else if (key == "lifted_solver") {
if ( value == "fove") {
Globals::liftedSolver = LiftedSolver::FOVE;
if ( value == "lve") {
Globals::liftedSolver = LiftedSolver::LVE;
} else if (value == "lbp") {
Globals::liftedSolver = LiftedSolver::LBP;
} else if (value == "lkc") {
Globals::liftedSolver = LiftedSolver::LKC;
} else {
cerr << "warning: invalid value `" << value << "' " ;
cerr << "for `" << key << "'" << endl;