summaryrefslogtreecommitdiff
path: root/src/theory/arith/simplex.cpp
AgeCommit message (Collapse)Author
2012-05-22This commit merges in the branch arithmetic/cprop.Tim King
2012-05-04- This fixes a problem where simplex produced the same conflict in the ↵Tim King
single check call. - This increases the number of substitutions that ppAssert can solve on integer equations.
2012-04-27This merges in the branch cvc4/branches/arithmetic/matrix into trunk.Tim King
- Splits the functionality of having a sparse matrix of Ts and a solved matrix of rationals in tableau. - Splits ArithVarSet into DenseMap and CDDenseSet and simplifies the code. - No performance loss!
2012-04-17A dummy decision engine. Expected performance impact: none.Kshitij Bansal
Adds DecisionEngine and an abstract class DecisionStrategy which other strategies will derive from eventually. Full revision summary of merged commits: r3241 merge from trunk r3240 fix r3239 WIP r3238 JH, CVC3 code: 5% done -- 5% translated r3237 JH groundwork r3236 make make regrss pass r3234 hueristic->heuristic r3229 JustificationHeuristic: EOD-WIP r3228 DecisionEngine: hookup assetions r3227 move ITE outside simplifyAssertions r3226 DecisionStrategy abstract class r3222 DecisionEngine: begin
2012-04-17Merges branches/arithmetic/atom-database r2979 through 3247 into trunk. ↵Tim King
Below is a highlight of the changes: - This introduces a new normal form to arithmetic. -- Equalities and disequalities are in solved form. Roughly speaking this means: (= x (+ y z)) is in normal form. (See the comments in normal_form.h for what this formally requires.) -- The normal form for inequality atoms always uses GEQ and GT instead of GEQ and LEQ. Integer atoms always use GEQ. - Constraint was added to TheoryArith. -- A constraint is a triple of (k x v) where: --- k is the type of the constraint (either LowerBound, UpperBound, Equality or Disequality), --- x is an ArithVar, and --- v is a DeltaRational value. -- Constraints are always attached to a ConstraintDatabase. -- A Constraint has its negation in the ConstraintDatabase [at least for now]. -- Every constraint belongs to a set of constraints for each ArithVar sorted by the delta rational values. -- This set can be iterated over and provides efficient access to other constraints for this variable. -- A literal may be attached to a constraint. -- Constraints with attached literals may be marked as being asserted to the theory (sat context dependent). -- Constraints can be propagated. -- Every constraint has a proof (sat context dependent). -- Proofs can be explained for either conflicts or propagations (if the node was propagated). (These proofs may be different.) -- Equalities and disequalities can be marked as being split (user context dependent) - This removes and replaces: -- src/theory/arith/arith_prop_manager.* -- src/theory/arith/atom_database.* -- src/theory/arith/ordered_set.h - Added isZero(), isOne() and isNegativeOne() to Rational and Integer. - Added operator+ to CDList::const_iterator. - Added const_iterator to CDQueue. - Changes to regression tests.
2012-02-28This commit merges in branches/arithmetic/internalbb up to revision 2831. ↵Tim King
This is a significant refactoring of code. - r2820 -- Refactors Simplex so that it does significantly fewer functions. -- Adds the LinearEqualityModule for handling update and pivotAndUpdate and other utility functions that require access to both the tableau and partial model. -- Some of the code for propagation has moved to TheoryArith. -r2826 -- Small changes to documentation and removes the no longer implemented deduceLowerBound() and deduceUpperBound(). - r2827 -- Adds isZero() to Rational. Adds cmp to DeltaRational. - r2831 -- Refactored comparison to upper and lower in the partial model to use DeltaRational::cmp. -- Refactored AssertUpper and AssertLower in TheoryArith to include functionality that has weaseled into TheoryArith::assertionCases.
2012-02-22Fixes to documentation / fixes for MacOSMorgan Deters
2012-02-20portfolio mergeMorgan Deters
2011-11-29Merging the branch branches/arithmetic/shared-terms into trunk. Arithmetic ↵Tim King
now supports propagating equalities when a slack variable corresponding to a difference of shared terms must be 0. Similarly disequalities are propagated when these variables cannot be zero.
2011-09-02Merge from my post-smtcomp branch. Includes:Morgan Deters
Dumping infrastructure. Can dump preprocessed queries and clauses. Can also dump queries (for testing with another solver) to see if any conflicts are missed, T-propagations are missed, all lemmas are T-valid, etc. For a full list of options see --dump=help. CUDD building much cleaner. Documentation and assertion fixes. Printer improvements, printing of commands in language-defined way, etc. Typechecker stuff in expr package now autogenerated, no need to manually edit the expr package when adding a new theory. CVC3 compatibility layer (builds as libcompat). SWIG detection and language binding support (infrastructure). Support for some Z3 extended commands (like datatypes) in SMT-LIBv2 mode (when not in compliance mode). Copyright and file headers regenerated.
2011-06-30Merging the playground branch upto r1957 into trunk.Tim King
2011-04-18Removing dead code that came in on commit r1740.Tim King
2011-04-18This commit merges the branch arithmetic/propagation-again into trunk.Tim King
- This adds code for bounds refinement, and conflict weakening. - This adds util/boolean_simplification.h. - This adds a propagation manager to theory of arithmetic. - Propagation is disabled by default. - Propagation can be enabled by the command line flag "--enable-arithmetic-propagation" - Propagation interacts *heavily* with rewriting equalities, and will work best if the command line flag "--rewrite-arithmetic-equalities" is enabled.
2011-03-30Merged the branch sparse-tableau into trunk.Tim King
2011-03-22Merges the small changes on the queue-period branch into trunk. This branch ↵Tim King
importantly removes an unintentional line of code that had it pivoting more times than intended before rechecking the queue. Importantly, it does this without losing any examples with rewrite-equality enabled. This adds a parameter NUM_CHECKS which determines how many times the queue chould be checked during difference mode. A value of 10 for NUM_CHECKS has been empirically determined to be good in practice. See jobs 1815, 1824, 1825, 1821, 1814.
2011-03-17SimplexDecisionProcedure no longer takes an OutputChannel as a parameter.Tim King
2011-03-17- Removes arith_constants.hTim King
- Adds ArithStaticLearner. Consolidates and cleans up the code for static learning in arithmetic. Static learning is now associated with a small amount of state between calls. This is used to track the data for the miplib trick. The goal is to make this inference work without relying on the fact that all of the miplib problem is asserted under the same AND node. - This commit contains miscellaneous other arithmetic cleanup.
2011-03-08- Merges queue-interrogation branch into the trunk. This branch adds extra ↵Tim King
phases of looking for additional conflicts during and after the heuristic pivoting stage. (For the expected performance gain, comparing jobs 1676 and 1643 gives a rough idea.)
2011-03-05- Adds PermissiveBackArithVarSet. This is very similar to ArithVarSet. The ↵Tim King
difference is that set.isMember(x) for an ArithVar x s.t. x > set.allocated() returns false for PermissiveBackArithVarSet and is an assertion failure for ArithVarSet. This cuts down on the memory usage of the ColumnMatrix slightly.
2011-03-05Enables the PreferenceFunction minBoundAndRowCount.Tim King
2011-03-05- Adds "PreferenceFunction" to SimplexDecisionProcedure. A ↵Tim King
PreferenceFunction allows for specifying how to choose between two nonbasic variables for which should become basic during the selectSlack(...) function. This partially addresses a point brought up by Dejan during the Code Review. (Unfortunately, function pointers are involved in the implementation. Because of this, I have had Morgan review this code before check-in.)
2011-03-03- Creates a queue for lemmas discovered during the simplex procedure. Lemmas ↵Tim King
are sent to the sat solver during theory propagation. The lemmas currently come from additional conflicts that are discovered by findConflictOnTheQueue(...).
2011-02-27- Makes VarCoeffPair a class instead of a typedef of pair<ArithVar, ↵Tim King
Rational>. This addresses a point Dejan brought up in the code review.
2011-02-26- Merged RowVector and ReducedRowVector.Tim King
- Renamed NonZeroIterator to const_iterator. - Both of these changes are in response to the code review.
2011-02-25- This commit adds some debugging information to ArithPriorityQueue.Tim King
- There was a missing break statement in ArithPriorityQueue. This addresses the bug discovered in the debug regression (http://goedel.cims.nyu.edu/regress-results/compare_jobs.php?job_id=1566&reference_id=1548&category=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,29&p=10).
2011-02-24- Adds an additional round of checks for a conflict after the difference ↵Tim King
heuristic round has been completed. This happens immediately before switching to the variable order round.
2011-02-24- Adds an additional mode to ArithPriorityQueue, Collection. Collection is a ↵Tim King
mode where the heap structure is not maintained. There is just a list of variables that may be inconsistent. This is used up until the simplex procedure is invoked. - Misc. cleanup and renaming in ArithPriorityQueue.
2011-02-24- Changes ArithPriorityQueue to use stl::vector<>'s plus stl's heap ↵Tim King
algorithms instead of stl's priority queue (which is really an stl vector plus the stl heap algorithms). This offers more control of the underlying data structure.
2011-02-22- Adds column based iterators.Tim King
2011-02-21- Adds the ArithPriorityQueue class. The ArithPriorityQueue class provides ↵Tim King
an abstraction to the previous priority queues representing the 2 different pivoting rules.
2011-02-21- Adds the statistic d_avgNumRowsNotContainingOnPivot.Tim King
- Removed a bug in row counting in row counting.
2011-02-19Changes:Tim King
- The Tableau is now in charge of managing what variables are basic in a unified manner. Specifically, TheoryArith::d_basicManager was merged into Tableau::d_basicVariables.
2011-02-17This commit is the promised clean up after removing row ejection.Tim King
2011-02-17Removed ActivityMonitor from arithmetic. This was only used for row ↵Tim King
ejection, and is now superfluous.
2011-02-17Row ejection is now completely disabled. Another commit cleaning this one up ↵Tim King
will follow shortly.
2011-02-16Overview of the changes:Tim King
- Preparing to remove row ejection from the code base! - Checks for conflicts immediately after a pivot to avoid potentially wasteful search. - Added arithvar_set.h. This replaces ArithVarSet that was previously in the Tableau, and ArithVarDenseSet. - Removes variables that have no preregistered bounds during presolve(). - Theory::isLeafOf() currently returns true for atoms. (I was unaware.) I modified Variable::isMember() to account for this exclude atoms. - Added statistics all over the place. This commit effects both boolean search and simplex search so expect running times to go all over the place. The time differences should be roughly as follows: http://goedel.cims.nyu.edu/regress-results/compare_jobs.php?job_id=1486&reference_id=1447&p=10&category=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,29
2011-02-133 heuristics were added to arithmetic. A heuristic for detecting an encoding ↵Tim King
of min added to static learning in LRA. A heuristic added for when the true branch and false branch are both constants (also in static learning). A heuristic for checking whether any variables begin in conflict before pivoting.
2010-11-04This commit adds the ejected and un-ejected statistics.Tim King
2010-10-30Adds a hueristic from Alberto's thesis. For a fixed window the row count is ↵Tim King
used to select which non-basic variable is a row in made basic.
2010-10-29Fix for a problem caused by using a != instead of == in ↵Tim King
generateConflictBelow(). Resolves a bug introduced in -r1063.
2010-10-29Factors out the QF_LRA decision procedure from TheoryArith and puts this ↵Tim King
into its own class SimplexDecisionProcedure. Implements about 1/2 of the pivoting rule from Alberto's thesis (section2.5.3).
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback