twaalgos: Set 'dicho' algo as default for SAT-based minimization
* python/spot/__init__.py: Handle options. * spot/twaalgos/dtwasat.cc: Handle options. * spot/twaalgos/postproc.cc: Handle options. * spot/twaalgos/postproc.hh: Handle options. * tests/core/satmin.test: Update tests. Now use 'sat-minimize=4' to use the naive algo. * tests/core/satmin2.test: Update tests. Now use --sat-minimize='naive' to use the naive algo. * tests/python/satmin.py: Update tests. Now use 'naive=True' to use the naive algo.
This commit is contained in:
parent
67e3a4f28e
commit
ef2355a542
7 changed files with 365 additions and 376 deletions
|
|
@ -1391,17 +1391,23 @@ namespace spot
|
|||
throw std::runtime_error
|
||||
("SAT-based minimization only works with deterministic automata");
|
||||
|
||||
bool incr = om.get("incr", 0);
|
||||
bool assume = om.get("assume", 0);
|
||||
int param = om.get("param", 0);
|
||||
bool dicho = om.get("dicho", 0);
|
||||
bool dicho_langmap = om.get("langmap", 0);
|
||||
int sat_incr = om.get("sat-incr", 0);
|
||||
int sat_incr_steps = om.get("sat-incr-steps", 0);
|
||||
bool sat_naive = om.get("sat-naive", 0);
|
||||
bool sat_langmap = om.get("sat-langmap", 0);
|
||||
int states = om.get("states", -1);
|
||||
int max_states = om.get("max-states", -1);
|
||||
auto accstr = om.get_str("acc");
|
||||
bool colored = om.get("colored", 0);
|
||||
int preproc = om.get("preproc", 3);
|
||||
|
||||
|
||||
// Set default sat-incr-steps value if not provided and used.
|
||||
if (sat_incr == 1 && !sat_incr_steps) // Assume
|
||||
sat_incr_steps = 6;
|
||||
else if (sat_incr == 2 && !sat_incr_steps) // Incremental
|
||||
sat_incr_steps = 2;
|
||||
|
||||
// No more om.get() below this.
|
||||
om.report_unused_options();
|
||||
|
||||
|
|
@ -1494,36 +1500,39 @@ namespace spot
|
|||
auto orig = a;
|
||||
if (!target_is_buchi || !a->acc().is_buchi() || colored)
|
||||
{
|
||||
if (incr)
|
||||
a = dtwa_sat_minimize_incr(a, nacc, target_acc, state_based,
|
||||
max_states, colored, param);
|
||||
|
||||
else if (assume)
|
||||
a = dtwa_sat_minimize_assume(a, nacc, target_acc, state_based,
|
||||
max_states, colored, param);
|
||||
|
||||
else if (dicho)
|
||||
a = dtwa_sat_minimize_dichotomy
|
||||
(a, nacc, target_acc, state_based, dicho_langmap, max_states,
|
||||
colored);
|
||||
else
|
||||
if (sat_naive)
|
||||
a = dtwa_sat_minimize
|
||||
(a, nacc, target_acc, state_based, max_states, colored);
|
||||
|
||||
else if (sat_incr == 1)
|
||||
a = dtwa_sat_minimize_assume(a, nacc, target_acc, state_based,
|
||||
max_states, colored, sat_incr_steps);
|
||||
|
||||
else if (sat_incr == 2)
|
||||
a = dtwa_sat_minimize_incr(a, nacc, target_acc, state_based,
|
||||
max_states, colored, sat_incr_steps);
|
||||
|
||||
else
|
||||
a = dtwa_sat_minimize_dichotomy
|
||||
(a, nacc, target_acc, state_based, sat_langmap, max_states,
|
||||
colored);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (incr)
|
||||
a = dtba_sat_minimize_incr(a, state_based, max_states, param);
|
||||
if (sat_naive)
|
||||
a = dtba_sat_minimize(a, state_based, max_states);
|
||||
|
||||
else if (assume)
|
||||
a = dtba_sat_minimize_assume(a, state_based, max_states, assume);
|
||||
else if (sat_incr == 1)
|
||||
a = dtba_sat_minimize_assume(a, state_based, max_states,
|
||||
sat_incr_steps);
|
||||
|
||||
else if (dicho)
|
||||
a = dtba_sat_minimize_dichotomy
|
||||
(a, state_based, dicho_langmap, max_states);
|
||||
else if (sat_incr == 2)
|
||||
a = dtba_sat_minimize_incr(a, state_based, max_states,
|
||||
sat_incr_steps);
|
||||
|
||||
else
|
||||
a = dtba_sat_minimize(a, state_based, max_states);
|
||||
a = dtba_sat_minimize_dichotomy
|
||||
(a, state_based, sat_langmap, max_states);
|
||||
}
|
||||
|
||||
if (!a && !user_supplied_acc)
|
||||
|
|
|
|||
|
|
@ -70,15 +70,15 @@ namespace spot
|
|||
ba_simul_ = opt->get("ba-simul", -1);
|
||||
tba_determinisation_ = opt->get("tba-det", 0);
|
||||
sat_minimize_ = opt->get("sat-minimize", 0);
|
||||
param_ = opt->get("param", 0);
|
||||
dicho_langmap_ = opt->get("langmap", 0);
|
||||
sat_incr_steps_ = opt->get("sat-incr-steps", -2); // -2 or any num < -1
|
||||
sat_langmap_ = opt->get("sat-langmap", 0);
|
||||
sat_acc_ = opt->get("sat-acc", 0);
|
||||
sat_states_ = opt->get("sat-states", 0);
|
||||
state_based_ = opt->get("state-based", 0);
|
||||
wdba_minimize_ = opt->get("wdba-minimize", 1);
|
||||
|
||||
if (sat_acc_ && sat_minimize_ == 0)
|
||||
sat_minimize_ = 1; // 2?
|
||||
sat_minimize_ = 1; // Dicho.
|
||||
if (sat_states_ && sat_minimize_ == 0)
|
||||
sat_minimize_ = 1;
|
||||
if (sat_minimize_)
|
||||
|
|
@ -89,6 +89,12 @@ namespace spot
|
|||
if (sat_states_ <= 0)
|
||||
sat_states_ = -1;
|
||||
}
|
||||
|
||||
// Set default param value if not provided and used.
|
||||
if (sat_minimize_ == 2 && sat_incr_steps_ < 0) // Assume algorithm.
|
||||
sat_incr_steps_ = 6;
|
||||
else if (sat_minimize_ == 3 && sat_incr_steps_ < -1) // Incr algorithm.
|
||||
sat_incr_steps_ = 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -427,15 +433,17 @@ namespace spot
|
|||
{
|
||||
if (sat_states_ != -1)
|
||||
res = dtba_sat_synthetize(res, sat_states_, state_based_);
|
||||
else if (sat_minimize_ == 1 || sat_minimize_ == -1)
|
||||
res = dtba_sat_minimize(res, state_based_);
|
||||
else if (sat_minimize_ == 2)
|
||||
else if (sat_minimize_ == 1)
|
||||
res = dtba_sat_minimize_dichotomy
|
||||
(res, state_based_, dicho_langmap_);
|
||||
(res, state_based_, sat_langmap_);
|
||||
else if (sat_minimize_ == 2)
|
||||
res = dtba_sat_minimize_assume(res, state_based_, -1,
|
||||
sat_incr_steps_);
|
||||
else if (sat_minimize_ == 3)
|
||||
res = dtba_sat_minimize_incr(res, state_based_, -1, param_);
|
||||
else // if (sat_minimize == 4)
|
||||
res = dtba_sat_minimize_assume(res, state_based_, -1, param_);
|
||||
res = dtba_sat_minimize_incr(res, state_based_, -1,
|
||||
sat_incr_steps_);
|
||||
else // if (sat_minimize == 4 || sat_minimize == -1)
|
||||
res = dtba_sat_minimize(res, state_based_);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -444,26 +452,26 @@ namespace spot
|
|||
(res, target_acc,
|
||||
acc_cond::acc_code::generalized_buchi(target_acc),
|
||||
sat_states_, state_based_);
|
||||
else if (sat_minimize_ == 1 || sat_minimize_ == -1)
|
||||
res = dtwa_sat_minimize
|
||||
(res, target_acc,
|
||||
acc_cond::acc_code::generalized_buchi(target_acc),
|
||||
state_based_);
|
||||
else if (sat_minimize_ == 2)
|
||||
else if (sat_minimize_ == 1)
|
||||
res = dtwa_sat_minimize_dichotomy
|
||||
(res, target_acc,
|
||||
acc_cond::acc_code::generalized_buchi(target_acc),
|
||||
state_based_, dicho_langmap_);
|
||||
state_based_, sat_langmap_);
|
||||
else if (sat_minimize_ == 2)
|
||||
res = dtwa_sat_minimize_assume
|
||||
(res, target_acc,
|
||||
acc_cond::acc_code::generalized_buchi(target_acc),
|
||||
state_based_, -1, false, sat_incr_steps_);
|
||||
else if (sat_minimize_ == 3)
|
||||
res = dtwa_sat_minimize_incr
|
||||
(res, target_acc,
|
||||
acc_cond::acc_code::generalized_buchi(target_acc),
|
||||
state_based_, -1, false, param_);
|
||||
else // if (sat_minimize_ == 4)
|
||||
res = dtwa_sat_minimize_assume
|
||||
state_based_, -1, false, sat_incr_steps_);
|
||||
else // if (sat_minimize_ == 4 || sat_minimize_ == -1)
|
||||
res = dtwa_sat_minimize
|
||||
(res, target_acc,
|
||||
acc_cond::acc_code::generalized_buchi(target_acc),
|
||||
state_based_, -1, false, param_);
|
||||
state_based_);
|
||||
}
|
||||
|
||||
if (res)
|
||||
|
|
|
|||
|
|
@ -189,8 +189,8 @@ namespace spot
|
|||
int ba_simul_ = -1;
|
||||
bool tba_determinisation_ = false;
|
||||
int sat_minimize_ = 0;
|
||||
int param_ = 0;
|
||||
bool dicho_langmap_ = false;
|
||||
int sat_incr_steps_ = 0;
|
||||
bool sat_langmap_ = false;
|
||||
int sat_acc_ = 0;
|
||||
int sat_states_ = 0;
|
||||
bool state_based_ = false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue