mirror of
https://github.com/Z3Prover/z3
synced 2025-04-11 03:33:35 +00:00
95 lines
9.9 KiB
Plaintext
95 lines
9.9 KiB
Plaintext
def_module_params('sat',
|
|
export=True,
|
|
description='propositional SAT solver',
|
|
params=(max_memory_param(),
|
|
('phase', SYMBOL, 'caching', 'phase selection strategy: always_false, always_true, caching, random'),
|
|
('phase.caching.on', UINT, 400, 'phase caching on period (in number of conflicts)'),
|
|
('phase.caching.off', UINT, 100, 'phase caching off period (in number of conflicts)'),
|
|
('phase.sticky', BOOL, False, 'use sticky phase caching for local search'),
|
|
('propagate.prefetch', BOOL, True, 'prefetch watch lists for assigned literals'),
|
|
('restart', SYMBOL, 'ema', 'restart strategy: static, luby, ema or geometric'),
|
|
('restart.initial', UINT, 2, 'initial restart (number of conflicts)'),
|
|
('restart.max', UINT, UINT_MAX, 'maximal number of restarts.'),
|
|
('restart.fast', BOOL, True, 'use fast restart approach only removing less active literals.'),
|
|
('restart.factor', DOUBLE, 1.5, 'restart increment factor for geometric strategy'),
|
|
('restart.margin', DOUBLE, 1.1, 'margin between fast and slow restart factors. For ema'),
|
|
('restart.emafastglue', DOUBLE, 3e-2, 'ema alpha factor for fast moving average'),
|
|
('restart.emaslowglue', DOUBLE, 1e-5, 'ema alpha factor for slow moving average'),
|
|
('variable_decay', UINT, 110, 'multiplier (divided by 100) for the VSIDS activity increment'),
|
|
('inprocess.max', UINT, UINT_MAX, 'maximal number of inprocessing passes'),
|
|
('branching.heuristic', SYMBOL, 'vsids', 'branching heuristic vsids, lrb or chb'),
|
|
('branching.anti_exploration', BOOL, False, 'apply anti-exploration heuristic for branch selection'),
|
|
('random_freq', DOUBLE, 0.01, 'frequency of random case splits'),
|
|
('random_seed', UINT, 0, 'random seed'),
|
|
('burst_search', UINT, 100, 'number of conflicts before first global simplification'),
|
|
('max_conflicts', UINT, UINT_MAX, 'maximum number of conflicts'),
|
|
('gc', SYMBOL, 'glue_psm', 'garbage collection strategy: psm, glue, glue_psm, dyn_psm'),
|
|
('gc.initial', UINT, 20000, 'learned clauses garbage collection frequency'),
|
|
('gc.increment', UINT, 500, 'increment to the garbage collection threshold'),
|
|
('gc.small_lbd', UINT, 3, 'learned clauses with small LBD are never deleted (only used in dyn_psm)'),
|
|
('gc.k', UINT, 7, 'learned clauses that are inactive for k gc rounds are permanently deleted (only used in dyn_psm)'),
|
|
('gc.burst', BOOL, False, 'perform eager garbage collection during initialization'),
|
|
('gc.defrag', BOOL, True, 'defragment clauses when garbage collecting'),
|
|
('simplify.delay', UINT, 0, 'set initial delay of simplification by a conflict count'),
|
|
('force_cleanup', BOOL, False, 'force cleanup to remove tautologies and simplify clauses'),
|
|
('minimize_lemmas', BOOL, True, 'minimize learned clauses'),
|
|
('dyn_sub_res', BOOL, True, 'dynamic subsumption resolution for minimizing learned clauses'),
|
|
('core.minimize', BOOL, False, 'minimize computed core'),
|
|
('core.minimize_partial', BOOL, False, 'apply partial (cheap) core minimization'),
|
|
('threads', UINT, 1, 'number of parallel threads to use'),
|
|
('dimacs.core', BOOL, False, 'extract core from DIMACS benchmarks'),
|
|
('drat.file', SYMBOL, '', 'file to dump DRAT proofs'),
|
|
('drat.binary', BOOL, False, 'use Binary DRAT output format'),
|
|
('drat.check_unsat', BOOL, False, 'build up internal proof and check'),
|
|
('drat.check_sat', BOOL, False, 'build up internal trace, check satisfying model'),
|
|
('cardinality.solver', BOOL, True, 'use cardinality solver'),
|
|
('pb.solver', SYMBOL, 'solver', 'method for handling Pseudo-Boolean constraints: circuit (arithmetical circuit), sorting (sorting circuit), totalizer (use totalizer encoding), solver (use native solver)'),
|
|
('xor.solver', BOOL, False, 'use xor solver'),
|
|
('cardinality.encoding', SYMBOL, 'grouped', 'encoding used for at-most-k constraints: grouped, bimander, ordered, unate, circuit'),
|
|
('pb.resolve', SYMBOL, 'cardinality', 'resolution strategy for boolean algebra solver: cardinality, rounding'),
|
|
('pb.lemma_format', SYMBOL, 'cardinality', 'generate either cardinality or pb lemmas'),
|
|
('local_search', BOOL, False, 'use local search instead of CDCL'),
|
|
('local_search_threads', UINT, 0, 'number of local search threads to find satisfiable solution'),
|
|
('local_search_mode', SYMBOL, 'wsat', 'local search algorithm, either default wsat or qsat'),
|
|
('local_search_dbg_flips', BOOL, False, 'write debug information for number of flips'),
|
|
('unit_walk', BOOL, False, 'use unit-walk search instead of CDCL'),
|
|
('unit_walk_threads', UINT, 0, 'number of unit-walk search threads to find satisfiable solution'),
|
|
('lookahead.cube.cutoff', SYMBOL, 'depth', 'cutoff type used to create lookahead cubes: depth, freevars, psat, adaptive_freevars, adaptive_psat'),
|
|
# - depth: the maximal cutoff is fixed to the value of lookahead.cube.depth.
|
|
# So if the value is 10, at most 1024 cubes will be generated of length 10.
|
|
# - freevars: cutoff based on a variable fraction of lookahead.cube.freevars.
|
|
# Cut if the number of current unassigned variables drops below a fraction of number of initial variables.
|
|
# - psat: Let psat_heur := (Sum_{clause C} (psat.clause_base ^ {-|C|+1})) / |freevars|^psat.var_exp
|
|
# Cut if the value of psat_heur exceeds psat.trigger
|
|
# - adaptive_freevars: Cut if the number of current unassigned variables drops below a fraction of free variables
|
|
# at the time of the last conflict. The fraction is increased every time the cutoff is created.
|
|
# - adative_psat: Cut based on psat_heur in an adaptive way.
|
|
('lookahead.cube.fraction', DOUBLE, 0.4, 'adaptive fraction to create lookahead cubes. Used when lookahead.cube.cutoff is adaptive_freevars or adaptive_psat'),
|
|
('lookahead.cube.depth', UINT, 1, 'cut-off depth to create cubes. Used when lookahead.cube.cutoff is depth.'),
|
|
('lookahead.cube.freevars', DOUBLE, 0.8, 'cube free variable fraction. Used when lookahead.cube.cutoff is freevars'),
|
|
('lookahead.cube.psat.var_exp', DOUBLE, 1, 'free variable exponent for PSAT cutoff'),
|
|
('lookahead.cube.psat.clause_base', DOUBLE, 2, 'clause base for PSAT cutoff'),
|
|
('lookahead.cube.psat.trigger', DOUBLE, 5, 'trigger value to create lookahead cubes for PSAT cutoff. Used when lookahead.cube.cutoff is psat'),
|
|
('lookahead.preselect', BOOL, False, 'use pre-selection of subset of variables for branching'),
|
|
('lookahead_simplify', BOOL, False, 'use lookahead solver during simplification'),
|
|
('lookahead.use_learned', BOOL, False, 'use learned clauses when selecting lookahead literal'),
|
|
('lookahead_simplify.bca', BOOL, True, 'add learned binary clauses as part of lookahead simplification'),
|
|
('lookahead.global_autarky', BOOL, False, 'prefer to branch on variables that occur in clauses that are reduced'),
|
|
('lookahead.delta_fraction', DOUBLE, 1.0, 'number between 0 and 1, the smaller the more literals are selected for double lookahead'),
|
|
('lookahead.reward', SYMBOL, 'march_cu', 'select lookahead heuristic: ternary, heule_schur (Heule Schur), heuleu (Heule Unit), unit, or march_cu'))
|
|
# reward function used to determine which literal to cube on.
|
|
# - ternary: reward function useful for random 3-SAT instances. Used by Heule and Knuth in March.
|
|
# - heule_schur: reward function based on "Schur Number 5", Heule, AAAI 2018
|
|
# The score of a literal lit is:
|
|
# Sum_{C in Clauses | lit in C} 2 ^ (- |C|+1)
|
|
# * Sum_{lit' in C | lit' != lit} lit_occs(~lit')
|
|
# / | C |
|
|
# where lit_occs(lit) is the number of clauses containing lit.
|
|
# - heuleu: The score of a literal lit is: Sum_{C in Clauses | lit in C} 2 ^ (-|C| + 1)
|
|
# - unit: heule_schur + also counts number of unit clauses.
|
|
# - march_cu: default reward function used in a version of March
|
|
# Each reward function also comes with its own variant of "mix_diff", which
|
|
# is the function for combining reward metrics for the positive and negative variant of a literal.
|
|
)
|
|
|