X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2FBackend%2Fsatencoder.h;h=78e797ff4f73d28f854cc1084166fff47a890c39;hp=4cfe4c2fc6ca5121448a099424b70f2218760b01;hb=dc9528ed1aa556265c68d9f456d00524d74c9e0b;hpb=db18e3357fda778cdf03b6338a0301b4bd9525c2 diff --git a/src/Backend/satencoder.h b/src/Backend/satencoder.h index 4cfe4c2..78e797f 100644 --- a/src/Backend/satencoder.h +++ b/src/Backend/satencoder.h @@ -6,21 +6,23 @@ #include "inc_solver.h" #include "constraint.h" -typedef HashTable BooleanToEdgeMap; +typedef Hashtable BooleanToEdgeMap; class SATEncoder { - public: +public: int solve(); SATEncoder(CSolver *solver); ~SATEncoder(); + void resetSATEncoder(); void encodeAllSATEncoder(CSolver *csolver); - Edge encodeConstraintSATEncoder(Boolean *constraint); - CNF * getCNF() { return cnf;} + Edge encodeConstraintSATEncoder(BooleanEdge constraint); + CNF *getCNF() { return cnf;} long long getSolveTime() { return cnf->solveTime; } long long getEncodeTime() { return cnf->encodeTime; } - - MEMALLOC; - private: + + CMEMALLOC; +private: + void shouldMemoize(Element *elem, uint64_t val, bool &memo); Edge getNewVarSATEncoder(); void getArrayNewVarsSATEncoder(uint num, Edge *carray); Edge encodeVarSATEncoder(BooleanVar *constraint); @@ -30,11 +32,11 @@ class SATEncoder { void encodeElementSATEncoder(Element *element); void encodeElementFunctionSATEncoder(ElementFunction *function); void encodeTableElementFunctionSATEncoder(ElementFunction *This); - Edge getElementValueOneHotConstraint(Element *elem, uint64_t value); - Edge getElementValueUnaryConstraint(Element *elem, uint64_t value); - Edge getElementValueBinaryIndexConstraint(Element *element, uint64_t value); - Edge getElementValueBinaryValueConstraint(Element *element, uint64_t value); - Edge getElementValueConstraint(Element *element, uint64_t value); + Edge getElementValueOneHotConstraint(Element *elem, Polarity p, uint64_t value); + Edge getElementValueUnaryConstraint(Element *elem, Polarity p, uint64_t value); + Edge getElementValueBinaryIndexConstraint(Element *element, Polarity p, uint64_t value); + Edge getElementValueBinaryValueConstraint(Element *element, Polarity p, uint64_t value); + Edge getElementValueConstraint(Element *element, Polarity p, uint64_t value); void generateOneHotEncodingVars(ElementEncoding *encoding); void generateUnaryEncodingVars(ElementEncoding *encoding); void generateBinaryIndexEncodingVars(ElementEncoding *encoding); @@ -42,27 +44,31 @@ class SATEncoder { void generateElementEncoding(Element *element); Edge encodeOperatorPredicateSATEncoder(BooleanPredicate *constraint); Edge encodeEnumOperatorPredicateSATEncoder(BooleanPredicate *constraint); + Edge encodeEnumEqualsPredicateSATEncoder(BooleanPredicate *constraint); void encodeOperatorElementFunctionSATEncoder(ElementFunction *This); Edge encodeCircuitOperatorPredicateEncoder(BooleanPredicate *constraint); Edge encodeOrderSATEncoder(BooleanOrder *constraint); Edge inferOrderConstraintFromGraph(Order *order, uint64_t _first, uint64_t _second); Edge getPairConstraint(Order *order, OrderPair *pair); + Edge getPartialPairConstraint(Order *order, OrderPair *pair); Edge encodeTotalOrderSATEncoder(BooleanOrder *constraint); Edge encodePartialOrderSATEncoder(BooleanOrder *constraint); void createAllTotalOrderConstraintsSATEncoder(Order *order); - Edge getOrderConstraint(HashTableOrderPair *table, OrderPair *pair); + void createAllPartialOrderConstraintsSATEncoder(Order *order); + Edge getOrderConstraint(HashtableOrderPair *table, OrderPair *pair); Edge generateTransOrderConstraintSATEncoder(Edge constIJ, Edge constJK, Edge constIK); + Edge generatePartialOrderConstraintsSATEncoder(Edge ij,Edge ji, Edge jk, Edge kj,Edge ik, Edge ki); Edge encodeEnumEntriesTablePredicateSATEncoder(BooleanPredicate *constraint); Edge encodeEnumTablePredicateSATEncoder(BooleanPredicate *constraint); void encodeEnumTableElemFunctionSATEncoder(ElementFunction *This); void encodeEnumEntriesTableElemFuncSATEncoder(ElementFunction *This); - + void generateAnyValueBinaryIndexEncoding(ElementEncoding *encoding); + void generateAnyValueBinaryValueEncoding(ElementEncoding *encoding); CNF *cnf; CSolver *solver; BooleanToEdgeMap booledgeMap; - + VectorEdge *vector; }; void allocElementConstraintVariables(ElementEncoding *ee, uint numVars); -Edge getOrderConstraint(HashTableOrderPair *table, OrderPair *pair); #endif