initial support for weighted model countign

This commit is contained in:
Tiago Gomes
2012-10-25 12:22:52 +01:00
parent eac6b954a8
commit 68ef63207f
4 changed files with 266 additions and 96 deletions

View File

@@ -24,7 +24,9 @@ class CircuitNode
CircuitNode (const Clauses& clauses, string explanation = "")
: clauses_(clauses), explanation_(explanation) { }
const Clauses& clauses (void) { return clauses_; }
const Clauses& clauses (void) const { return clauses_; }
Clauses clauses (void) { return clauses_; }
virtual double weight (void) const { return 0; }
@@ -43,6 +45,8 @@ class OrNode : public CircuitNode
OrNode (const Clauses& clauses, string explanation = "")
: CircuitNode (clauses, explanation),
leftBranch_(0), rightBranch_(0) { }
double weight (void) const;
CircuitNode** leftBranch (void) { return &leftBranch_; }
CircuitNode** rightBranch (void) { return &rightBranch_; }
@@ -74,6 +78,8 @@ class AndNode : public CircuitNode
string explanation = "")
: CircuitNode ({}, explanation),
leftBranch_(leftBranch), rightBranch_(rightBranch) { }
double weight (void) const;
CircuitNode** leftBranch (void) { return &leftBranch_; }
CircuitNode** rightBranch (void) { return &rightBranch_; }
@@ -117,6 +123,8 @@ class LeafNode : public CircuitNode
{
public:
LeafNode (const Clause& clause) : CircuitNode ({clause}) { }
double weight (void) const;
};
@@ -125,6 +133,8 @@ class SmoothNode : public CircuitNode
{
public:
SmoothNode (const Clauses& clauses) : CircuitNode (clauses) { }
double weight (void) const;
};
@@ -133,6 +143,8 @@ class TrueNode : public CircuitNode
{
public:
TrueNode () : CircuitNode ({}) { }
double weight (void) const;
};
@@ -153,8 +165,10 @@ class LiftedCircuit
void smoothCircuit (void);
double getWeightedModelCount (void) const;
void exportToGraphViz (const char*);
private:
void compile (CircuitNode** follow, const Clauses& clauses);