public final class TernaryClausesDatabase extends AbstractClausesDatabase
It does not work with watched literals. All literals are watching and if any of them changes then clause is being checked for unit propagation.
Pros : no need to change watches. Cons : need to check the clause every time any literal changes.
TODO, check if this the efficient way of dealing with ternary clauses.
CLAUSE_RATE_AVERAGE, CLAUSE_RATE_I_WANT_THIS_CLAUSE, CLAUSE_RATE_LOW, CLAUSE_RATE_UNSUPPORTED, CLAUSE_RATE_WELL_SUPPORTED, core, databaseIndex, dbStore, MINIMUM_VAR_WATCH_SIZE, pool, trail, watchLists
Constructor and Description |
---|
TernaryClausesDatabase() |
Modifier and Type | Method and Description |
---|---|
int |
addClause(int[] clause,
boolean isModel)
It adds a clause to the database.
|
void |
assertLiteral(int literal)
It informs the ClausesDatabase that this literal is set, so that it
can perform unit propagation.
|
void |
backjump(int level)
Do everything needed to return to the given level.
|
boolean |
canRemove(int clauseId)
It tells if the implementation of ClausesDatabase can remove clauses or not
|
int |
rateThisClause(int[] clause)
Indicates how much this database is optimized for this clause.
|
void |
removeClause(int clauseId)
It removes the clause which unique ID is @param clauseId.
|
MapClause |
resolutionWith(int clauseId,
MapClause clause)
It returns the clause obtained by resolution between clauseIndex and clause.
|
int |
size()
number of clauses in the database
|
void |
toCNF(BufferedWriter output)
It creates a CNF description of the clauses stored in this database.
|
addWatch, doesWatch, ensureWatch, getDatabaseIndex, indexToUniqueId, initialize, removeWatch, setDatabaseIndex, swap, toString, toString, uniqueIdToIndex
public int addClause(int[] clause, boolean isModel)
ClauseDatabaseInterface
clause
- the clause to addisModel
- defined if the clause is model clausepublic void assertLiteral(int literal)
ClauseDatabaseInterface
literal
- the literal that is setpublic void removeClause(int clauseId)
ClauseDatabaseInterface
clauseId
- clause idpublic boolean canRemove(int clauseId)
ClauseDatabaseInterface
clauseId
- the unique Id of the clausepublic MapClause resolutionWith(int clauseId, MapClause clause)
ClauseDatabaseInterface
clauseId
- the unique id of the clauseclause
- an explanation clause that is modified by resolutionpublic void backjump(int level)
ClauseDatabaseInterface
level
- the level to return to. Must be < solver.getCurrentLevel().public int rateThisClause(int[] clause)
AbstractClausesDatabase
rateThisClause
in class AbstractClausesDatabase
clause
- a clause to ratepublic int size()
AbstractClausesDatabase
size
in interface ClauseDatabaseInterface
size
in class AbstractClausesDatabase
public void toCNF(BufferedWriter output) throws IOException
AbstractClausesDatabase
toCNF
in interface ClauseDatabaseInterface
toCNF
in class AbstractClausesDatabase
output
- it specifies the target to which the description will be written.IOException
- execption from java.io packageCopyright © 2022. All rights reserved.