Release Notes for MiniSat 2.2.0 =============================== Changes since version 2.0: * Started using a more standard release numbering. * Includes some now well-known heuristics: phase-saving and luby restarts. The old heuristics are still present and can be activated if needed. * Detection/Handling of out-of-memory and vector capacity overflow. This is fairly new and relatively untested. * Simple resource controls: CPU-time, memory, number of conflicts/decisions. * CPU-time limiting is implemented by a more general, but simple, asynchronous interruption feature. This means that the solving procedure can be interrupted from another thread or in a signal handler. * Improved portability with respect to building on Solaris and with Visual Studio. This is not regularly tested and chances are that this have been broken since, but should be fairly easy to fix if so. * Changed C++ file-extention to the less problematic ".cc". * Source code is now namespace-protected * Introducing a new Clause Memory Allocator that brings reduced memory consumption on 64-bit architechtures and improved performance (to some extent). The allocator uses a region-based approach were all references to clauses are represented as a 32-bit index into a global memory region that contains all clauses. To free up and compact memory it uses a simple copying garbage collector. * Improved unit-propagation by Blocking Literals. For each entry in the watcher lists, pair the pointer to a clause with some (arbitrary) literal from the clause. The idea is that if the literal is currently true (i.e. the clause is satisfied) the watchers of the clause does not need to be altered. This can thus be detected without touching the clause's memory at all. As often as can be done cheaply, the blocking literal for entries to the watcher list of a literal 'p' is set to the other literal watched in the corresponding clause. * Basic command-line/option handling system. Makes it easy to specify options in the class that they affect, and whenever that class is used in an executable, parsing of options and help messages are brought in automatically. * General clean-up and various minor bug-fixes. * Changed implementation of variable-elimination/model-extension: - The interface is changed so that arbitrary remembering is no longer possible. If you need to mention some variable again in the future, this variable has to be frozen. - When eliminating a variable, only clauses that contain the variable with one sign is necessary to store. Thereby making the other sign a "default" value when extending models. - The memory consumption for eliminated clauses is further improved by storing all eliminated clauses in a single contiguous vector. * Some common utility code (I/O, Parsing, CPU-time, etc) is ripped out and placed in a separate "utils" directory. * The DIMACS parse is refactored so that it can be reused in other applications (not very elegant, but at least possible). * Some simple improvements to scalability of preprocessing, using more lazy clause removal from data-structures and a couple of ad-hoc limits (the longest clause that can be produced in variable elimination, and the longest clause used in backward subsumption).