3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-25 20:46:01 +00:00

update notes

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2025-08-17 15:50:53 -07:00
parent 19bc9aa132
commit 97d7723c44

View file

@ -272,15 +272,23 @@ threads-4-cube-shareconflicts
</pre> </pre>
Ideas for other knobs that can be added: Ideas for other knobs that can be tested
<il> <il>
<li> Only cube on literals that exist in initial formula. Don't cube on literals created during search (such as by theory lemmas). <li> Only cube on literals that exist in initial formula. Don't cube on literals created during search (such as by theory lemmas).
<li> Only share units for literals that exist in the initial formula. <li> Only share units for literals that exist in the initial formula.
<li> Vary the backoff scheme for <b>max_conflict_mul</b> from 1.5 to lower and higher.
<li> Vary <b>smt.threads.max_conflicts</b>
<li> Replace backoff scheme by a geometric scheme: add <b>conflict_inc</b> (a new parameter) every time and increment <b>conflict_inc</b>
</il> </il>
This requires collecting sub-expressions from the solver state at initialization time. It can be programmed by adding an expr_mark <pre>
structure and marking all expressions used in bool_vars after initialization as initial. cube_initial_only (bool) (default: false) only useful when never_cube=false
Then only initial bool_vars are shared as units. frugal_cube_only (bool) (default: false) only useful when never_cube=false
A simpler approach is just to remember the initial number of bool_vars. max_conflict_mul (double) (default: 1.5)
Fresh atoms are allocated with higher ordinals anyway. never_cube (bool) (default: false)
relevant_units_only (bool) (default: true) only useful when share_units=true
share_conflicts (bool) (default: true) only useful when never_cube=false
share_units (bool) (default: true)
share_units_initial_only (bool) (default: false) only useful when share_units=true
</pre>