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:
Alexandre GBAGUIDI AISSE 2016-12-20 12:08:32 +01:00
parent 67e3a4f28e
commit ef2355a542
7 changed files with 365 additions and 376 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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;