hyb_3_abstraction.cpp
Go to the documentation of this file.
1/** @file hyb_2_abstraction.cpp
2
3Tutorial, hybrid systems plugin.
4This tutorial demonstrates how to compute a finite abstraction.
5
6@ingroup Tutorials
7
8@include hyb_3_abstraction.cpp
9
10*/
11
12#include "libfaudes.h"
13
14// make the faudes namespace available to our program
15using namespace faudes;
16
17
18/** Run the tutorial */
19int main() {
20
21
22
23 /** load from file */
24 LinearHybridAutomaton lha("data/hyb_lhautomaton.gen");
25
26 // Report to console
27 std::cout << "################################\n";
28 std::cout << "# linear hybrid automaton from file: \n";
29 lha.Write();
30 std::cout << "################################\n";
31 std::cout << "# Valid() returns " << lha.Valid() << "\n";
32 std::cout << "################################\n";
33
34
35 // CompatibleStates
38
39 // Experiment
40 Experiment* exp = new Experiment(lha.Alphabet());
41 exp->InitialStates(comp);
42
43 // Do some refinements by node
44 exp->RefineAt(exp->Root());
45 exp->RefineAt(2);
46 exp->DWrite();
47
48 // Do some refinements by event sequence
49 std::deque< Idx > seq;
50 seq.push_back(lha.EventIndex("north"));
51 seq.push_back(lha.EventIndex("south"));
52 seq.push_back(lha.EventIndex("north"));
53 seq.push_back(lha.EventIndex("south"));
54 seq.push_back(lha.EventIndex("north"));
55 seq.push_back(lha.EventIndex("south"));
56 seq.push_back(lha.EventIndex("north"));
57 seq.push_back(lha.EventIndex("south"));
58 exp->RefineSequence(seq);
59 exp->DWrite();
60
61 // Do l-complete abstraction from scratch (time variant)
62 comp = new LhaCompatibleStates(lha);
64 exp = new Experiment(lha.Alphabet());
65 exp->InitialStates(comp);
66 LbdAbstraction tvabs;
67 tvabs.Experiment(exp);
68 tvabs.RefineUniformly(7);
69 tvabs.TvAbstraction().GraphWrite("tmp_abs3tv.png");
70
71 // Do l-complete abstraction from scratch (time invariant)
72 comp = new LhaCompatibleStates(lha);
73 comp->InitialiseFull();
74 exp = new Experiment(lha.Alphabet());
75 exp->InitialStates(comp);
76 LbdAbstraction tivabs;
77 tivabs.Experiment(exp);
78 tivabs.RefineUniformly(7);
79 tivabs.TivAbstraction().GraphWrite("tmp_abs3tiv.png");
80
81 // compose both for finest result
82 Generator result;
83 result.StateNamesEnabled(false);
84 Product(tvabs.TvAbstraction(),tivabs.TivAbstraction(),result);
85 StateMin(result,result);
86 result.GraphWrite("tmp_abs3.png");
87
88 // done
89 return 0;
90}
91
92
93
Idx RefineSequence(const std::deque< Idx > &seq)
void DWrite(void) const
Idx Root(void) const
void InitialStates(CompatibleStates *istates)
void RefineUniformly(unsigned int depth)
const Generator & TivAbstraction(void)
const Generator & TvAbstraction(void)
void Experiment(faudes::Experiment *exp)
const TaEventSet< EventAttr > & Alphabet(void) const
virtual bool Valid(void) const
void Write(const Type *pContext=0) const
Idx EventIndex(const std::string &rName) const
bool StateNamesEnabled(void) const
void GraphWrite(const std::string &rFileName, const std::string &rOutFormat="", const std::string &rDotExec="dot") const
void StateMin(const Generator &rGen, Generator &rResGen)
void Product(const Generator &rGen1, const Generator &rGen2, Generator &rResGen)
int main()

libFAUDES 2.34d --- 2026.03.11 --- c++ api documentaion by doxygen