Introduce new ways to split an automaton
The explicit way of splitting suffers if there are too many input APs, two new ways of splitting are introduced as well as a heuristic to chose between them. * NEWS: update * spot/twaalgos/synthesis.cc, spot/twaalgos/synthesis.hh: New fonctions * bin/ltlsynt.cc: Add corresponding option * tests/core/gamehoa.test, tests/core/ltlsynt.test, tests/python/_partitioned_relabel.ipynb, tests/python/_synthesis.ipynb, tests/python/game.py, tests/python/split.py, tests/python/synthesis.py: Adjusting and adding test
This commit is contained in:
parent
2274308cad
commit
5ddac258e1
11 changed files with 1372 additions and 138 deletions
|
|
@ -63,6 +63,7 @@ enum
|
|||
OPT_PRINT_HOA,
|
||||
OPT_REAL,
|
||||
OPT_SIMPLIFY,
|
||||
OPT_SPLITTYPE,
|
||||
OPT_TLSF,
|
||||
OPT_VERBOSE,
|
||||
OPT_VERIFY
|
||||
|
|
@ -118,6 +119,9 @@ static const argp_option options[] =
|
|||
"reduction with output assignment, (sat) SAT-based minimization, "
|
||||
"(bisim-sat) SAT after bisim, (bwoa-sat) SAT after bwoa. Defaults "
|
||||
"to 'bwoa'.", 0 },
|
||||
{ "splittype", OPT_SPLITTYPE, "expl|semisym|fullysym|auto", 0,
|
||||
"Selects the algorithm to use to transform the automaton into "
|
||||
"a game graph. Defaults to 'auto'.", 0},
|
||||
/**************************************************/
|
||||
{ nullptr, 0, nullptr, 0, "Output options:", 20 },
|
||||
{ "print-pg", OPT_PRINT, nullptr, 0,
|
||||
|
|
@ -295,6 +299,23 @@ static unsigned simplify_values[] =
|
|||
};
|
||||
ARGMATCH_VERIFY(simplify_args, simplify_values);
|
||||
|
||||
static const char* const splittype_args[] =
|
||||
{
|
||||
"expl",
|
||||
"semisym",
|
||||
"fullysym",
|
||||
"auto",
|
||||
nullptr
|
||||
};
|
||||
static spot::synthesis_info::splittype splittype_values[] =
|
||||
{
|
||||
spot::synthesis_info::splittype::EXPL,
|
||||
spot::synthesis_info::splittype::SEMISYM,
|
||||
spot::synthesis_info::splittype::FULLYSYM,
|
||||
spot::synthesis_info::splittype::AUTO,
|
||||
};
|
||||
ARGMATCH_VERIFY(splittype_args, splittype_values);
|
||||
|
||||
namespace
|
||||
{
|
||||
static bool want_game()
|
||||
|
|
@ -909,7 +930,7 @@ namespace
|
|||
return 2;
|
||||
}
|
||||
if (!arena->get_named_prop<std::vector<bool>>("state-player"))
|
||||
arena = spot::split_2step(arena, true);
|
||||
arena = spot::split_2step(arena, gi);
|
||||
else
|
||||
{
|
||||
// Check if the game is alternating and fix trivial cases
|
||||
|
|
@ -1127,6 +1148,10 @@ parse_opt(int key, char *arg, struct argp_state *)
|
|||
gi->minimize_lvl = XARGMATCH("--simplify", arg,
|
||||
simplify_args, simplify_values);
|
||||
break;
|
||||
case OPT_SPLITTYPE:
|
||||
gi->sp = XARGMATCH("--splittype", arg,
|
||||
splittype_args, splittype_values);
|
||||
break;
|
||||
case OPT_TLSF:
|
||||
jobs.emplace_back(arg, job_type::TLSF_FILENAME);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue