This should help getting accurate statistics (on both the
formula automaton and the synchronized product) from LBTT. Idea from Jean-Michel Couvreur. * src/tgbaalgos/lbtt.cc (nonacceptant_lbtt_bfs): New class. (nonacceptant_lbtt_reachable): New function. * src/tgbaalgos/lbtt.hh (nonacceptant_lbtt_reachable): New function. * src/tgbatest/ltl2tgba.cc (main): Call nonacceptant_lbtt_reachable if the -T option is used. * src/tgbatest/spotlbtt.test: Setup the -T variants, disabled by default.
This commit is contained in:
parent
0816a4505f
commit
7069d5406b
5 changed files with 121 additions and 2 deletions
15
ChangeLog
15
ChangeLog
|
|
@ -1,3 +1,18 @@
|
||||||
|
2004-02-08 Alexandre Duret-Lutz <adl@gnu.org>
|
||||||
|
|
||||||
|
This should help getting accurate statistics (on both the
|
||||||
|
formula automaton and the synchronized product) from LBTT.
|
||||||
|
Idea from Jean-Michel Couvreur.
|
||||||
|
|
||||||
|
* src/tgbaalgos/lbtt.cc (nonacceptant_lbtt_bfs): New class.
|
||||||
|
(nonacceptant_lbtt_reachable): New function.
|
||||||
|
* src/tgbaalgos/lbtt.hh (nonacceptant_lbtt_reachable): New
|
||||||
|
function.
|
||||||
|
* src/tgbatest/ltl2tgba.cc (main): Call nonacceptant_lbtt_reachable
|
||||||
|
if the -T option is used.
|
||||||
|
* src/tgbatest/spotlbtt.test: Setup the -T variants, disabled by
|
||||||
|
default.
|
||||||
|
|
||||||
2004-02-05 Alexandre Duret-Lutz <adl@src.lip6.fr>
|
2004-02-05 Alexandre Duret-Lutz <adl@src.lip6.fr>
|
||||||
|
|
||||||
* src/tgbaalgos/lbtt.hh: Typos.
|
* src/tgbaalgos/lbtt.hh: Typos.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
|
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
|
||||||
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
|
||||||
// et Marie Curie.
|
// et Marie Curie.
|
||||||
//
|
//
|
||||||
|
|
@ -19,17 +19,18 @@
|
||||||
// Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
// Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
// 02111-1307, USA.
|
// 02111-1307, USA.
|
||||||
|
|
||||||
|
#include "lbtt.hh"
|
||||||
#include "misc/hash.hh"
|
#include "misc/hash.hh"
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include "tgba/tgba.hh"
|
|
||||||
#include "save.hh"
|
#include "save.hh"
|
||||||
#include "tgba/bddprint.hh"
|
#include "tgba/bddprint.hh"
|
||||||
#include "ltlvisit/tostring.hh"
|
#include "ltlvisit/tostring.hh"
|
||||||
#include "tgba/bddprint.hh"
|
#include "tgba/bddprint.hh"
|
||||||
|
#include "reachiter.hh"
|
||||||
#include "misc/bddlt.hh"
|
#include "misc/bddlt.hh"
|
||||||
|
|
||||||
namespace spot
|
namespace spot
|
||||||
|
|
@ -277,4 +278,64 @@ namespace spot
|
||||||
}
|
}
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class nonacceptant_lbtt_bfs : public tgba_reachable_iterator_breadth_first
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
nonacceptant_lbtt_bfs(const tgba* a, std::ostream& os)
|
||||||
|
: tgba_reachable_iterator_breadth_first(a), os_(os), acc_count_(0)
|
||||||
|
{
|
||||||
|
// Count the number of acceptance_conditions.
|
||||||
|
bdd all = a->all_acceptance_conditions();
|
||||||
|
while (all != bddfalse)
|
||||||
|
{
|
||||||
|
bdd one = bdd_satone(all);
|
||||||
|
all -= one;
|
||||||
|
++acc_count_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
process_state(const state*, int n, tgba_succ_iterator*)
|
||||||
|
{
|
||||||
|
--n;
|
||||||
|
if (n == 0)
|
||||||
|
body_ << "0 1 -1" << std::endl;
|
||||||
|
else
|
||||||
|
body_ << "-1" << std::endl << n << " 0 -1" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
process_link(int, int out, const tgba_succ_iterator* si)
|
||||||
|
{
|
||||||
|
--out;
|
||||||
|
std::string s =
|
||||||
|
bdd_to_lbtt(si->current_condition(), automata_->get_dict());
|
||||||
|
body_ << out << " " << s << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
end()
|
||||||
|
{
|
||||||
|
os_ << seen.size() << " " << acc_count_ << std::endl
|
||||||
|
<< body_.str() << "-1" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::ostream& os_;
|
||||||
|
std::ostringstream body_;
|
||||||
|
unsigned acc_count_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
std::ostream&
|
||||||
|
nonacceptant_lbtt_reachable(std::ostream& os, const tgba* g)
|
||||||
|
{
|
||||||
|
nonacceptant_lbtt_bfs b(g, os);
|
||||||
|
b.run();
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,23 @@ namespace spot
|
||||||
/// \param g The automata to print.
|
/// \param g The automata to print.
|
||||||
/// \param os Where to print.
|
/// \param os Where to print.
|
||||||
std::ostream& lbtt_reachable(std::ostream& os, const tgba* g);
|
std::ostream& lbtt_reachable(std::ostream& os, const tgba* g);
|
||||||
|
|
||||||
|
/// \brief Print an LBTT automaton for statistics.
|
||||||
|
///
|
||||||
|
/// Output \a g in LBTT's format but ignoring the acceptance
|
||||||
|
/// conditions, of all its transitions. This produces an automaton
|
||||||
|
/// that has the same size as \a g, and whose synchronized product
|
||||||
|
/// with another automaton also has the same size. This will also
|
||||||
|
/// declare as much acceptance conditions has there is in \a g (they
|
||||||
|
/// will just be never used).
|
||||||
|
///
|
||||||
|
/// The produced automaton will not recognize any word (unless \a g
|
||||||
|
/// has no acceptance condition, in which case this function is a
|
||||||
|
/// no-op).
|
||||||
|
///
|
||||||
|
/// The produced automaton is useful to obtain accurate statistics
|
||||||
|
/// from LBTT, without any size blow up of the automata.
|
||||||
|
std::ostream& nonacceptant_lbtt_reachable(std::ostream& os, const tgba* g);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // SPOT_TGBAALGOS_LBTT_HH
|
#endif // SPOT_TGBAALGOS_LBTT_HH
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,8 @@ syntax(char* prog)
|
||||||
<< " -S convert to explicit automata, and number states "
|
<< " -S convert to explicit automata, and number states "
|
||||||
<< "in BFS order" << std::endl
|
<< "in BFS order" << std::endl
|
||||||
<< " -t display reachable states in LBTT's format" << std::endl
|
<< " -t display reachable states in LBTT's format" << std::endl
|
||||||
|
<< " -T display reachable states in LBTT's format w/o "
|
||||||
|
<< "acceptance conditions" << std::endl
|
||||||
<< " -v display the BDD variables used by the automaton"
|
<< " -v display the BDD variables used by the automaton"
|
||||||
<< std::endl
|
<< std::endl
|
||||||
<< " -X do not compute an automaton, read it from a file"
|
<< " -X do not compute an automaton, read it from a file"
|
||||||
|
|
@ -197,6 +199,10 @@ main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
output = 6;
|
output = 6;
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(argv[formula_index], "-T"))
|
||||||
|
{
|
||||||
|
output = 7;
|
||||||
|
}
|
||||||
else if (!strcmp(argv[formula_index], "-v"))
|
else if (!strcmp(argv[formula_index], "-v"))
|
||||||
{
|
{
|
||||||
output = 5;
|
output = 5;
|
||||||
|
|
@ -318,6 +324,9 @@ main(int argc, char** argv)
|
||||||
case 6:
|
case 6:
|
||||||
spot::lbtt_reachable(std::cout, a);
|
spot::lbtt_reachable(std::cout, a);
|
||||||
break;
|
break;
|
||||||
|
case 7:
|
||||||
|
spot::nonacceptant_lbtt_reachable(std::cout, a);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
assert(!"unknown output option");
|
assert(!"unknown output option");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,13 @@ Algorithm
|
||||||
Enabled = yes
|
Enabled = yes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Algorithm
|
||||||
|
{
|
||||||
|
Name = "Spot (Couvreur -- LaCIM), fake"
|
||||||
|
Path = "${LBTT_TRANSLATE} --spot './ltl2tgba -F -T'"
|
||||||
|
Enabled = no
|
||||||
|
}
|
||||||
|
|
||||||
Algorithm
|
Algorithm
|
||||||
{
|
{
|
||||||
Name = "Spot (Couvreur -- FM)"
|
Name = "Spot (Couvreur -- FM)"
|
||||||
|
|
@ -56,11 +63,21 @@ Algorithm
|
||||||
Enabled = yes
|
Enabled = yes
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Algorithm
|
||||||
|
{
|
||||||
|
Name = "Spot (Couvreur -- FM), fake"
|
||||||
|
Path = "${LBTT_TRANSLATE} --spot './ltl2tgba -F -f -T'"
|
||||||
|
Enabled = no
|
||||||
|
}
|
||||||
|
|
||||||
GlobalOptions
|
GlobalOptions
|
||||||
{
|
{
|
||||||
Rounds = 100
|
Rounds = 100
|
||||||
Interactive = Never
|
Interactive = Never
|
||||||
# Verbosity = 5
|
# Verbosity = 5
|
||||||
|
# ComparisonCheck = no
|
||||||
|
# ConsistencyCheck = no
|
||||||
|
# IntersectionCheck = no
|
||||||
}
|
}
|
||||||
|
|
||||||
FormulaOptions
|
FormulaOptions
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue