|
Go to the documentation of this file.
45 std::vector< Polyhedron > Inv;
47 for( int i=0; i< szi; ++i) {
48 for( int j=0; j< szj; ++j) {
49 std::stringstream name;
50 name << "Inv_" << j+1 << "_" << i+1;
53 Bij. At(0, -1* (mesh*j - 2*overlap));
54 Bij. At(1, (mesh*(j+1) + 2*overlap));
55 Bij. At(2, -1* (mesh*i - 2*overlap));
56 Bij. At(3, (mesh*(i+1) + 2*overlap));
59 Invij. Name(name.str());
66 BAll. At(0, -1* (mesh*0 - 2*overlap));
67 BAll. At(1, (mesh*szj + 2*overlap));
68 BAll. At(2, -1* (mesh*0 - 2*overlap));
69 BAll. At(3, (mesh*szi + 2*overlap));
73 std::vector< Polyhedron > Rate;
74 std::vector< std::string > Direction;
75 EventSet::Iterator uit=uevents. Begin();
76 EventSet::Iterator uit_end=uevents. End();
77 for(;uit!=uit_end;++uit) {
81 Direction.push_back( "n");
86 Direction.push_back( "ne");
91 Direction.push_back( "e");
96 Direction.push_back( "se");
101 Direction.push_back( "s");
106 Direction.push_back( "sw");
111 Direction.push_back( "w");
116 Direction.push_back( "nw");
122 Bd. At(0, -1* (F. At(0) - disturbance));
123 Bd. At(1, (F. At(0) + disturbance));
124 Bd. At(2, -1* (F. At(1) - disturbance));
125 Bd. At(3, (F. At(1) + disturbance));
127 Rated. Name(Direction.back());
129 Rate.push_back(Rated);
136 BNone. At(2, -1* (1));
139 RateNone. AB(A42,BNone);
143 for( int j=0; j< szj; ++j) {
144 for( int i=0; i< szi; ++i) {
145 for( int d=0; d<Direction.size(); ++d) {
146 std::stringstream name;
147 name << "q_" << j+1 << "_" << i+1 << "_" << Direction.at(d);
150 harobot. Rate(q,Rate.at(d));
157 for( int j=0; j< szj; ++j) {
158 for( int i=0; i< szi; ++i) {
159 std::stringstream name;
160 name << "q_" << j+1 << "_" << i+1 << "_?";
163 harobot. Rate(q,RateNone);
176 for( int j=0; j< szj; ++j) {
177 for( int i=0; i< szi; ++i) {
178 std::stringstream name1;
179 name1 << "q_" << j+1 << "_" << i+1 << "_?";
182 std::stringstream name2;
184 name2 << "q_" << j+1 << "_" << i+1 << "_n";
190 name2 << "q_" << j+1 << "_" << i+1 << "_ne";
196 name2 << "q_" << j+1 << "_" << i+1 << "_e";
202 name2 << "q_" << j+1 << "_" << i+1 << "_s";
208 name2 << "q_" << j+1 << "_" << i+1 << "_s";
214 name2 << "q_" << j+1 << "_" << i+1 << "_sw";
220 name2 << "q_" << j+1 << "_" << i+1 << "_w";
226 name2 << "q_" << j+1 << "_" << i+1 << "_nw";
234 for( int j=0; j< szj; ++j) {
235 for( int i=0; i< szi; ++i) {
236 std::stringstream nameev;
237 if((j+1==szj) && (i+1 ==szi))
239 else if((j+1==1) && (i+1 ==1))
242 nameev << "y_" << j+1 << "_" << i+1;
256 for( int j=0; j< szj; ++j) {
257 for( int i=0; i< szi; ++i) {
258 for( int d=0; d<Direction.size(); ++d) {
259 std::stringstream name1;
260 name1 << "q_" << j+1 << "_" << i+1 << "_" << Direction.at(d);
263 std::stringstream name2;
264 std::stringstream nameev;
269 name2 << "q_" << j+1 << "_" << i+1+1 << "_?";
273 nameev << "y_" << j+1 << "_" << i+1+1;
277 if((j+1==1) && (i+1+1 ==1)) {
281 if((j+1==szj) && (i+1+1==szi)) {
286 if((q2!=0) && (ev!=0)) {
291 Bgrd. At(0, -1* (mesh*j - 2*overlap));
292 Bgrd. At(1, (mesh*(j+1) + 2*overlap));
293 Bgrd. At(2, -1* (mesh*(i+1) + 1*overlap));
294 Bgrd. At(3, (mesh*(i+1) + 2*overlap));
300 name2 << "q_" << j+1+1 << "_" << i+1 << "_?";
304 nameev << "y_" << j+1+1 << "_" << i+1;
308 if((j+1+1==1) && (i+1==1)) {
312 if((j+1+1==szj) && (i+1==szi)) {
317 if((q2!=0) && (ev!=0)) {
322 Bgrd. At(0, -1* (mesh*(j+1) + 1*overlap));
323 Bgrd. At(1, (mesh*(j+1) + 2*overlap));
324 Bgrd. At(2, -1* (mesh*(i) - 2*overlap));
325 Bgrd. At(3, (mesh*(i+1) + 2*overlap));
331 name2 << "q_" << j+1 << "_" << i+1-1 << "_?";
335 nameev << "y_" << j+1 << "_" << i+1-1;
339 if((j+1==1) && (i+1-1 ==1)) {
343 if((j+1==szj) && (i+1-1==szi)) {
348 if((q2!=0) && (ev!=0)) {
353 Bgrd. At(0, -1* (mesh*j - 2*overlap));
354 Bgrd. At(1, (mesh*(j+1) + 2*overlap));
355 Bgrd. At(2, -1* (mesh*(i) - 2*overlap));
356 Bgrd. At(3, (mesh*(i) - 1*overlap));
362 name2 << "q_" << j+1-1 << "_" << i+1 << "_?";
366 nameev << "y_" << j+1-1 << "_" << i+1;
370 if((j+1-1==1) && (i+1 ==1)) {
374 if((j+1-1==szj) && (i+1==szi)) {
379 if((q2!=0) && (ev!=0)) {
384 Bgrd. At(0, -1* (mesh*(j) - 2*overlap));
385 Bgrd. At(1, (mesh*(j) - 1*overlap));
386 Bgrd. At(2, -1* (mesh*(i) - 2*overlap));
387 Bgrd. At(3, (mesh*(i+1) + 2*overlap));
396 StateSet::Iterator sit_end= harobot. StatesEnd();
397 for(;sit!=sit_end;++sit) {
408 uevents. Insert( "u_northeast");
409 uevents. Insert( "u_southeast");
410 uevents. Insert( "u_southwest");
411 uevents. Insert( "u_northwest");
430 std::vector< Polyhedron > Rate;
431 std::vector< std::string > Direction;
432 EventSet::Iterator uit=uevents. Begin();
433 EventSet::Iterator uit_end=uevents. End();
434 for(;uit!=uit_end;++uit) {
438 Direction.push_back( "n");
443 Direction.push_back( "ne");
448 Direction.push_back( "e");
453 Direction.push_back( "se");
458 Direction.push_back( "s");
463 Direction.push_back( "sw");
468 Direction.push_back( "w");
473 Direction.push_back( "nw");
479 Bd. At(0, -1* (F. At(0) - disturbance));
480 Bd. At(1, (F. At(0) + disturbance));
481 Bd. At(2, -1* (F. At(1) - disturbance));
482 Bd. At(3, (F. At(1) + disturbance));
484 Rated. Name(Direction.back());
486 Rate.push_back(Rated);
493 BNone. At(2, -1* (1));
496 RateNone. AB(A42,BNone);
500 for( int d=0; d<Direction.size(); ++d) {
501 std::stringstream name;
502 name << "q_" << Direction.at(d);
505 hamarine. Rate(q,Rate.at(d));
510 std::string nameqq= "q_?";
512 hamarine. Rate(qq,RateNone);
516 uit_end=uevents. End();
517 for(;uit!=uit_end;++uit) {
530 std::cout << "Setting up model: INTERNAL ERRROR A\n";
540 for( int d=0; d<Direction.size(); ++d) {
541 std::string namen = "q_" + Direction.at(d);
548 if((Direction.at(d)== "ne") || (Direction.at(d)== "nw")) {
554 Bgrd. At(0, -1* (0 ));
555 Bgrd. At(1, (width ));
556 Bgrd. At(2, -1* (height - overlap));
557 Bgrd. At(3, (height ));
562 if((Direction.at(d)== "se") || (Direction.at(d)== "sw")) {
568 Bgrd. At(0, -1* (0 ));
569 Bgrd. At(1, (width ));
570 Bgrd. At(2, -1* (0 ));
571 Bgrd. At(3, (overlap ));
576 if((Direction.at(d)== "nw") || (Direction.at(d)== "sw")) {
582 Bgrd. At(0, -1* (0 ));
583 Bgrd. At(1, (overlap ));
584 Bgrd. At(2, -1* (0 ));
585 Bgrd. At(3, (height ));
590 if((Direction.at(d)== "ne") || (Direction.at(d)== "se")) {
596 Bgrd. At(0, -1* (width-overlap ));
597 Bgrd. At(1, (width ));
598 Bgrd. At(2, -1* (0 ));
599 Bgrd. At(3, (height ));
612 std::map< Idx, HybridStateSet* > sstatespe;
616 std::cout << "################################\n";
617 std::cout << "# current state set \n";
619 std::cout << "################################\n";
622 std::cout << "################################\n";
623 std::cout << "# mode transitions \n";
626 for(;qit!=qit_end;++qit){
629 for(;tit!=tit_end;++tit)
630 std::cout << plant. TStr(*tit) << "\n";
632 std::cout << "################################\n";
636 std::cout << "################################\n";
637 std::cout << "# successor events \n";
638 std::map< Idx, HybridStateSet* >::iterator sit=sstatespe.begin();
639 std::map< Idx, HybridStateSet* >::iterator sit_end=sstatespe.end();
641 for(;sit!=sit_end;++sit) {
642 enabled. Insert(sit->first);
643 std::cout << plant. EStr(sit->first) << " ";
647 std::cout << "\n################################\n";
655 std::cout << "choose event (or 'x' for exit): ";
658 if(choice== "x") return 0;
660 if(enabled. Exists(ev)) break;
662 if(enabled. Exists(ev)) break;
664 sit=sstatespe.find(ev);
667 std::cout << "################################\n";
668 std::cout << "# successor states for " << plant. EStr(sit->first) << "\n";
669 sit->second->DWrite(plant);
670 std::cout << "################################\n";
673 std::cout << "accept ('n' for no, other for yes): ";
676 if(choice!= "n") break;
681 cstates. Assign(*sit->second);
694 robot(3 , 5 , 10 , 1 , 1 , lioha, uevents);
710 for(;qit!=qit_end;++qit){
714 istates. Insert(*qit,poly);
739 std::cout << "################################\n";
740 std::cout << "# compute l-complete approximation, time variant \n";
741 std::cout << "################################\n";
751 std::cout << "################################\n";
752 std::cout << "# compute l-complete approximation, time invariant \n";
753 std::cout << "################################\n";
766 std::cout << "################################\n";
767 std::cout << "# compose abstraction \n";
768 std::cout << "################################\n";
785 std::cout << "################################\n";
786 std::cout << "# target control synthesis \n";
787 std::cout << "# ctrl evs " << uevents. ToString() << "\n";
788 std::cout << "################################\n";
798 sfloop. Erase( "y_target");
845 aProduct(abst,spec,cmap_abst_spec,loop);
849 std::cout << "target control: #" << gsz << " / #" << loop. Size() << "\n";
851 StateSet::Iterator sit_end=loop. StatesEnd();
852 for(;sit!=sit_end;++sit) {
853 if(good. Exists(*sit)) continue;
857 for(;tit!=tit_end;++tit) {
858 if(good. Exists(tit->X2)) {ok= true; continue;}
859 if(uevents. Exists(tit->Ev)) continue;
865 if(good. Size()==gsz) break;
867 std::cout << "target control: #" << good. Size() << " / #" << loop. Size() << "\n";
870 std::cout << "target control: success (init state #" << loop. InitState() << " found to be good)\n";
872 std::cout << "target control: FAIL\n";
881 StateSet::Iterator sit_end=loop. StatesEnd();
882 for(;sit!=sit_end;++sit) {
884 if(good. Exists(*sit)) continue;
894 for(;tit!=tit_end;++tit) {
895 if(good. Exists(tit->X2)) break;
898 for(;tit2!=tit2_end;++tit2) {
899 if(good. Exists(tit2->X2)) break;
901 if(tit2!=tit2_end) break;
903 if(tit==tit_end) continue;
908 std::cout << "################################\n";
909 std::cout << "# diagnosis\n";
910 std::cout << "# tv-leaves to refine #" << tvleaves. Size() << "/" << tvabs. Experiment().Leaves().Size() << "\n";
911 std::cout << "# tiv-leaves to refine #" << tivleaves. Size() << "/" << tivabs. Experiment().Leaves().Size() << "\n";
912 std::cout << "################################\n";
916 std::cout << "################################\n";
917 std::cout << "# refine\n";
918 std::cout << "################################\n";
919 sit=tvleaves. Begin();
920 sit_end=tvleaves. End();
921 for(;sit!=sit_end;++sit) {
924 sit=tivleaves. Begin();
925 sit_end=tivleaves. End();
926 for(;sit!=sit_end;++sit) {
945 robot(3 , 5 , 10 , 1 , 1 , lioha, uevents);
961 for(;qit!=qit_end;++qit){
965 istates. Insert(*qit,poly);
990 std::cout << "################################\n";
991 std::cout << "# compute l-complete approximation, time invariant \n";
992 std::cout << "################################\n";
1008 abst. Name( "overall abstraction");
1012 abst. Write( "tmp_abs2.gen");
1014 std::cout << "################################\n";
1015 std::cout << "# cycle control synthesis \n";
1016 std::cout << "# ctrl evs " << uevents. ToString() << "\n";
1017 std::cout << "################################\n";
1037 EventSet::Iterator eit=other. Begin();
1038 for(;eit!=other. End();++eit) {
1049 aProduct(abst,spec,cmap_abst_spec,loop);
1056 int csz=constraint. Size();
1057 int tsz=target. Size();
1058 std::cout << "target control: constraint #" << csz << " target #" << tsz << "\n";
1062 int wsz=winning. Size();
1063 std::cout << "target control: #" << wsz << " / #" << loop. Size() << "\n";
1066 StateSet::Iterator sit_end=loop. StatesEnd();
1067 for(;sit!=sit_end;++sit) {
1068 if(winning. Exists(*sit)) continue;
1072 for(;tit!=tit_end;++tit) {
1073 if(winning. Exists(tit->X2)) {ok= true; continue;}
1074 if(target. Exists(tit->X2)) {ok= true; continue;}
1075 if(uevents. Exists(tit->Ev)) continue;
1079 if(ok) ctrlreach. Insert(*sit);
1081 if(ctrlreach <= winning) break;
1086 if(csz==constraint. Size()) break;
1089 std::cout << "target control: #" << winning. Size() << " / #" << loop. Size() << "\n";
1092 std::cout << "target control: success (init state #" << loop. InitState() << " found to be winning)\n";
1094 std::cout << "target control: FAIL\n";
1103 StateSet::Iterator sit_end=loop. StatesEnd();
1104 for(;sit!=sit_end;++sit) {
1106 if(winning. Exists(*sit)) continue;
1114 for(;tit!=tit_end;++tit) {
1115 if(winning. Exists(tit->X2)) break;
1118 for(;tit2!=tit2_end;++tit2) {
1119 if(winning. Exists(tit2->X2)) break;
1121 if(tit2!=tit2_end) break;
1123 if(tit==tit_end) continue;
1127 std::cout << "################################\n";
1128 std::cout << "# diagnosis\n";
1129 std::cout << "# tiv-leaves to refine #" << tivleaves. Size() << "/" << tivabs. Experiment().Leaves().Size() << "\n";
1130 std::cout << "################################\n";
1134 std::cout << "################################\n";
1135 std::cout << "# refine\n";
1136 std::cout << "################################\n";
1137 sit=tivleaves. Begin();
1138 sit_end=tivleaves. End();
1139 for(;sit!=sit_end;++sit) {
1158 marine(30 , 10 , 1 , 10 , 1 , lioha, uevents);
1163 std::cout << "################################\n";
1164 std::cout << "# linear hybrid automaton: \n";
1166 std::cout << "################################\n";
1167 std::cout << "# Valid() returns " << lioha. Valid() << "\n";
1168 std::cout << "################################\n";
1174 for(;qit!=qit_end;++qit){
1178 istates. Insert(*qit,poly);
1195 std::cout << "################################\n";
1196 std::cout << "# compute l-complete approximation, time invariant \n";
1197 std::cout << "################################\n";
1215 abst. Name( "overall abstraction");
1219 abst. Write( "tmp_abs2.gen");
1221 std::cout << "################################\n";
1222 std::cout << "# cycle control synthesis \n";
1223 std::cout << "# ctrl evs " << uevents. ToString() << "\n";
1224 std::cout << "################################\n";
1235 sfloop. Erase( "y_w");
1258 EventSet::Iterator eit=uevents. Begin();
1259 EventSet::Iterator eit_end=uevents. End();
1262 for(;eit!=eit_end;++eit)
1265 eit=uevents. Begin();
1266 eit_end=uevents. End();
1267 for(;eit!=eit_end;++eit) {
1269 EventSet::Iterator eit2=uevents. Begin();
1270 EventSet::Iterator eit2_end=uevents. End();
1271 for(;eit2!=eit2_end;++eit2)
1311 aProduct(abst,spec,cmap_abst_spec,loop);
1319 int csz=constraint. Size();
1320 int tsz=target. Size();
1321 std::cout << "target control: constraint #" << csz << " target #" << tsz << "\n";
1325 int wsz=winning. Size();
1326 std::cout << "target control: #" << wsz << " / #" << loop. Size() << "\n";
1329 StateSet::Iterator sit_end=loop. StatesEnd();
1330 for(;sit!=sit_end;++sit) {
1331 if(winning. Exists(*sit)) continue;
1335 for(;tit!=tit_end;++tit) {
1336 if(winning. Exists(tit->X2)) {ok= true; continue;}
1337 if(target. Exists(tit->X2)) {ok= true; continue;}
1338 if(uevents. Exists(tit->Ev)) continue;
1342 if(ok) ctrlreach. Insert(*sit);
1345 if(winning. Size()==wsz) break;
1349 if(csz==constraint. Size()) break;
1352 std::cout << "target control: #" << winning. Size() << " / #" << loop. Size() << "\n";
1355 std::cout << "target control: success (init state #" << loop. InitState() << " found to be winning)\n";
1357 std::cout << "target control: FAIL\n";
1359 std::cout << "target control: preparing ctrl\n";
1361 StateSet::Iterator sit_end=loop. StatesEnd();
1362 for(;sit!=sit_end;++sit) {
1363 if(!winning. Exists(*sit)) continue;
1367 for(;tit!=tit_end;++tit) {
1369 if(winning. Exists(tit->X2)) { continue;}
1370 if(target. Exists(tit->X2)) { continue;}
1371 if(uevents. Exists(tit->Ev)) { tremove. Insert(*tit); continue; }
1372 std::cout << "synthesis: INTERNAL ERROR C";
1375 tit=tremove. Begin();
1376 tit_end=tremove. End();
1377 for(;tit!=tit_end;++tit)
1380 loop. Write( "tmp_sup.gen");
1388 StateSet::Iterator sit_end=loop. StatesEnd();
1389 for(;sit!=sit_end;++sit) {
1391 if(winning. Exists(*sit)) continue;
1399 for(;tit!=tit_end;++tit) {
1400 if(winning. Exists(tit->X2)) break;
1403 for(;tit2!=tit2_end;++tit2) {
1404 if(winning. Exists(tit2->X2)) break;
1406 if(tit2!=tit2_end) break;
1408 if(tit==tit_end) continue;
1409 if(tivabs. Experiment().IsLeave(qtivabs)) tivleaves_goodchance. Insert(qtivabs);
1411 std::cout << "################################\n";
1412 std::cout << "# diagnosis\n";
1413 std::cout << "# tiv-leaves to refine #" << tivleaves. Size() << "/" << tivabs. Experiment().Leaves().Size() << "\n";
1414 std::cout << "# candidates with better chance #" << tivleaves_goodchance. Size() << "/" << tivabs. Experiment().Leaves().Size() << "\n";
1415 std::cout << "################################\n";
1418 std::cout << "################################\n";
1419 std::cout << "# refine\n";
1420 std::cout << "################################\n";
1421 sit=tivleaves_goodchance. Begin();
1422 sit_end=tivleaves_goodchance. End();
1424 for(;sit!=sit_end;++sit) {
1429 sit=tivleaves. Begin();
1430 sit_end=tivleaves. End();
1431 for(;sit!=sit_end;++sit) {
Finite fragment of a computation tree.
void InitialStates(CompatibleStates *istates)
Set of states in an hybrid automata.
void DWrite(const LinearHybridAutomaton &lha) inspect
IndexSet::Iterator LocationsBegin(void) const
void Assign(const HybridStateSet &rOther) assignment
void Insert(Idx q) insert / erase (we take owvership of polyhedra)
IndexSet::Iterator LocationsEnd(void) const
Idx Insert(void) Insert new index to set.
void RefineUniformly(unsigned int depth)
const Generator & TivAbstraction(void)
const Generator & TvAbstraction(void)
void Experiment(faudes::Experiment *exp)
virtual void InitialiseFull()
virtual void InitialiseConstraint()
const Scalar::Type & At(int i, int j) const Get entry.
void Zero(int rc=-1, int cc=-1) Set to zero matrix.
Set of indices with symbolic names.
bool Exists(const Idx &rIndex) const Test existence of index.
void SymbolicName(Idx index, const std::string &rName) Set new name for existing index.
bool Insert(const Idx &rIndex) Add an element by index.
void EraseSet(const NameSet &rOtherSet) Erase elements specified by rOtherSet.
virtual bool Erase(const Idx &rIndex) Delete element by index.
void AB(const Matrix &rA, const Vector &rB) Set A matrix and B vector.
virtual const std::string & Name(void) const Object name.
Rti-wrapper for composition maps.
Idx Arg1State(Idx s12) const
Idx Arg2State(Idx s12) const
Iterator Begin(void) const Iterator to begin of set.
Iterator End(void) const Iterator to end of set.
bool Insert(const Transition &rTransition) Add a Transition.
TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator Iterator on transition.
Idx InsState(void) Add new anonymous state to generator.
bool InsEvent(Idx index) Add an existing event to alphabet by index.
const TaEventSet< EventAttr > & Alphabet(void) const Return const reference to alphabet.
bool SetTransition(Idx x1, Idx ev, Idx x2) Add a transition to generator by indices.
Generator with linear hybrid automata extensions.
virtual bool Valid(void) const Check if generator is valid.
const Polyhedron & Rate(Idx idx) const Get rate of state by index.
const Polyhedron & InitialConstraint(Idx idx) const Get initial constraint of state by index.
const Polyhedron & StateSpace(void) const Get continuous statespace.
const Polyhedron & Guard(const Transition &rTrans) const Get guard of a transition.
const Polyhedron & Invariant(Idx idx) const Get invariant of state by index.
Triple (X1,Ev,X2) to represent current state, event and next state.
std::string ToString(const std::string &rLabel="", const Type *pContext=0) const Write configuration data to a string.
void Write(const Type *pContext=0) const Write configuration data to console.
void SWrite(TokenWriter &rTw) const Write statistics comment to TokenWriter.
const Scalar::Type & At(int i) const Get entry.
void Zero(int dim=-1) Set to zero vector.
Base class of all FAUDES generators.
StateSet::Iterator StatesBegin(void) const Iterator to Begin() of state set.
StateSet::Iterator InitStatesBegin(void) const Iterator to Begin() of mInitStates.
bool SetTransition(Idx x1, Idx ev, Idx x2) Add a transition to generator by indices.
const StateSet & MarkedStates(void) const Return const ref of marked states.
Idx InsMarkedState(void) Create new anonymous state and set as marked state.
TransSet::Iterator TransRelBegin(void) const Iterator to Begin() of transition relation.
void ClrTransition(Idx x1, Idx ev, Idx x2) Remove a transition by indices.
Idx StateIndex(const std::string &rName) const State index lookup.
void InsEvents(const EventSet &events) Add new named events to generator.
Idx EventIndex(const std::string &rName) const Event index lookup.
std::string TStr(const Transition &rTrans) const Return pretty printable transition (eg for debugging)
void Name(const std::string &rName) Set the generator's name.
StateSet::Iterator StatesEnd(void) const Iterator to End() of state set.
TransSet::Iterator TransRelEnd(void) const Iterator to End() of transition relation.
bool ExistsEvent(Idx index) const Test existence of event in alphabet.
std::string EStr(Idx index) const Pretty printable event name for index (eg for debugging).
Idx InsState(void) Add new anonymous state to generator.
Idx InitState(void) const Return initial state.
Idx InsInitState(void) Create new anonymous state and set as initial state.
bool StateNamesEnabled(void) const Whether libFAUEDS functions are requested to generate state names.
StateSet::Iterator InitStatesEnd(void) const Iterator to End() of mInitStates.
void GraphWrite(const std::string &rFileName, const std::string &rOutFormat="", const std::string &rDotExec="dot") const Produce graphical representation of this generator.
Idx Size(void) const Get generator size (number of states)
const StateSet & States(void) const Return reference to state set.
void InjectAlphabet(const EventSet &rNewalphabet) Set mpAlphabet without consistency check.
bool Exists(const T &rElem) const Test existence of element.
virtual void Clear(void) Clear all set.
Iterator End(void) const Iterator to the end of set.
virtual void RestrictSet(const TBaseSet &rOtherSet) Restrict elements given by other set.
virtual void InsertSet(const TBaseSet &rOtherSet) Insert elements given by rOtherSet.
Iterator Begin(void) const Iterator to the begin of set.
Idx Size(void) const Get Size of TBaseSet.
void SelfLoop(Generator &rGen, const EventSet &rAlphabet) Self-loop all states.
void aProduct(const Generator &rGen1, const Generator &rGen2, Generator &rResGen) Product composition.
void MarkAllStates(vGenerator &rGen) RTI wrapper function.
void Parallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen) Parallel composition.
void PolyFinalise(const Polyhedron &fpoly) convert PPL polyhedron back to faudes data structures; this is required if we manipulate a polyhedron...
void PolyIntersection(const Polyhedron &poly, Polyhedron &res) intersection
int execute(LinearHybridAutomaton &plant, HybridStateSet &cstates)
void robot(int szi, int szj, int mesh, int overlap, int disturbance, LinearHybridAutomaton &harobot, EventSet &uevents)
int robot2018ti() Run the tutorial: time invariant robot.
int marine2018() Run the tutorial: time invariant marine.
int robot2017() Run the tutorial: time variant robot, target control.
void marine(int width, int height, int overlap, int velocity, int disturbance, LinearHybridAutomaton &hamarine, EventSet &uevents)
Includes all libFAUDES headers, incl plugings
libFAUDES resides within the namespace faudes.
uint32_t Idx Type definition for index type (allways 32bit)
Idx ToIdx(const std::string &rString) Convert a string to Idx.
void LhaReach(const LinearHybridAutomaton &lha, const HybridStateSet &states, std::map< Idx, HybridStateSet * > &ostates, int *pCnt) compute sets of reachable state per successor event
libFAUDES 2.32b
--- 2024.03.01
--- c++ api documentaion by doxygen
|