|
|
||||||
|
cfl_bisimcta.cpp
Go to the documentation of this file.
46 std::ostringstream cfl_line; cfl_line << msg << std::endl; faudes::ConsoleOut::G()->Write(cfl_line.str(),0,0,0);} }
49 std::ostringstream cfl_line; cfl_line << msg << std::endl; faudes::ConsoleOut::G()->Write(cfl_line.str(),0,0,0);} }
52 std::ostringstream cfl_line; cfl_line << msg << std::endl; faudes::ConsoleOut::G()->Write(cfl_line.str(),0,0,0);} }
57 // ****************************************************************************************************************************
58 // ****************************************************************************************************************************
60 // ****************************************************************************************************************************
61 // ****************************************************************************************************************************
66 * The following class implements a basic normal bisimulation partition algorithms and derives a class
67 * for partitioning w.r.t. delayed bisimulation and weak bisimulation . All these algorithms are introduced
70 * from Stefan Blom and Simona Orzan (see ref. of cited paper). Besides, the current paper uses topological
71 * sorted states to avoid computing saturated transitions explicitly when computing delayed and weak bisimulation.
73 * IMPORTANT NOTE: both algorithms for delayed and weak bisimulation requires tau-loop free automaton. This shall
79 BisimulationCTA(const Generator &rGen, const std::vector<StateSet> &rPrePartition) : mGen(&rGen), mPrePartition(rPrePartition){}
95 std::vector< std::set<Idx> > cafter; // cafter by event (the std::set<Idx> is the set of c-values)
96 std::vector< Idx > evs; // active event set, only for pre-partition. (indicates "delayed" active ev in case of daleyd- or weak-bisim)
103 std::vector<State> mStates; // vector of all states [starting with 1 -- use min-index for debugging]
143 /*! state prepartition with original state idx (the same as state label as in cited paper). Empty for trivial prepartition. */
184 * Derived from Bisimulation class. We implement the "two-pass change-tracking" algorithm from the cited paper.
188 AbstractBisimulationCTA (const Generator& rGen, const Idx& rSilent, const Idx& rTaskFlag, const std::vector<StateSet>& rPrePartition)
296 // ****************************************************************************************************************************
297 // ****************************************************************************************************************************
299 // ****************************************************************************************************************************
300 // ****************************************************************************************************************************
342 else if (rFlag == 2){ // in case for observed transition (flag == 2), add non-silent transition to silent successor
468 // initialize c value. c = 1 if no prepartition; c = (index of prepartion) + 1 if prepartition defined
476 throw Exception("EncodeData:: ", "invalide prepartition. State "+ ToStringInteger(*sit) + "is not allocated.", 100);
581 // sort affected nodes by cafter (line 27. Note in cited paper line 27, it says sort "NOT" affected nodes.
582 // this shall be a typo since all unaffected nodes in this class shall have the same cafter, as their
588 eqclass.splice(eqclass.begin(),eqclass_aff);// hook the sorted eqclass_aff again to the front of eqclass
590 // delete the largest set of states with the same cafter (line 28). c_value of these states are preserved
592 std::vector<std::set<Idx>> maxCafter; // cafter corresponding to most states in the current class
677 mAlphSize = mGen->Alphabet().Size(); // Note the difference with BisimulationCTA::EncodeData(). Index 0 is for silent event
702 throw Exception("DelayedBisimulationCTA::EncodeData(): ", "input automaton shall not have tau loop. Please factor"
729 std::vector<Idx>::const_iterator eit = mStates[smap[tit->X2]].evs.begin(); // the state smap[tit->X2] must have been encoded
739 // initialize c value. c = 1 if no prepartition; c = (index of prepartion) + 1 if prepartition defined
747 throw Exception("EncodeData:: ", "invalide prepartition. State "+ ToStringInteger(*sit) + "is not allocated.", 100);
786 void AbstractBisimulationCTA::MarkTauStarAffected(std::vector<bool> &rAffected, const Idx& rState){
828 std::vector<Idx>::const_iterator suctauit = mStates[stateit].suc[0].begin(); // iterate over tau successors
859 mAffected[affectedit] = 1; // no need to mark all taupred of affectedit as they are all in taustarpred
873 mStates[stateit].cafter[0].insert(mStates[*tausucit].cafter[0].begin(),mStates[*tausucit].cafter[0].end());
885 mStates[stateit].cafter[sucevit].insert(mStates[*sucstateit].cafter[0].begin(),mStates[*sucstateit].cafter[0].end());
891 std::vector<Idx>::const_iterator sucstateit = mStates[stateit].suc[0].begin(); // iterate over tau-succesor states
893 mStates[stateit].cafter[sucsucevit].insert(mStates[*sucstateit].cafter[sucsucevit].begin(),mStates[*sucstateit].cafter[sucsucevit].end());
933 void ComputeBisimulationCTA(const Generator& rGen, std::list<StateSet>& rResult, const std::vector<StateSet>& rPrePartition){
938 void ComputeDelayedBisimulationCTA(const Generator& rGen, const EventSet &rSilent, std::list<StateSet>& rResult){
947 else throw Exception("ComputeDelayedBisimulationCTA:","silent alphabet can contain at most one event", 100);
951 void ComputeBisimulationCTA(const Generator& rGen, const EventSet &rSilent, std::list<StateSet>& rResult, const std::vector<StateSet>& rPrePartition){
959 else throw Exception("ComputeDelayedBisimulationCTA:","silent alphabet can contain at most one event", 100);
963 void ComputeWeakBisimulationCTA(const Generator& rGen, const EventSet &rSilent, std::list<StateSet>& rResult){
972 else throw Exception("ComputeWeakBisimulation::","silent alphabet can contain at most one event", 100);
975 void ComputeWeakBisimulation(const Generator& rGen, const EventSet &rSilent, std::list<StateSet>& rResult, const std::vector<StateSet>& rPrePartition){
983 else throw Exception("ComputeWeakBisimulationCTA::","silent alphabet can contain at most one event", 100);
987 const Generator& rGen, const EventSet& rSilent, std::list<StateSet>& rResult, const Idx& rFlag, const std::vector<StateSet>& rPrePartition){
998 else throw Exception("ComputeAbstractBisimulationSatCTA::","silent alphabet can contain at most one event", 100);
1002 void ComputeDelayedBisimulationSatCTA(const Generator& rGen, const EventSet& rSilent, std::list<StateSet>& rResult){
1007 void ComputeWeakBisimulationSatCTA(const Generator& rGen, const EventSet& rSilent, std::list<StateSet>& rResult){
1012 void ComputeDelayedBisimulationSatCTA(const Generator& rGen, const EventSet& rSilent, std::list<StateSet>& rResult, const std::vector<StateSet>& rPrePartition){
1016 void ComputeWeakBisimulationSatCTA(const Generator& rGen, const EventSet& rSilent, std::list<StateSet>& rResult, const std::vector<StateSet>& rPrePartition){
The DelayedBisimulation class Derived from Bisimulation class. We implement the "two-pass change-trac... Definition: cfl_bisimcta.cpp:186 void ComputeChangedDelayedAfters(void) ComputeChangedDelayedAfters see Fig. 10 of cited paper. Definition: cfl_bisimcta.cpp:796 virtual void ComputePartition(std::list< StateSet > &rResult) BisimulationPartition wrapper. Definition: cfl_bisimcta.cpp:919 void ComputeChangedObservedAfters(void) ComputeChangedObservedAfters see Fig. 12 of cited paper. Definition: cfl_bisimcta.cpp:841 const Idx mTaskFlag mTaskFlag flag for task: mTaskFlag == 1: delayed bisimulation mTaskFlag == 2: weak bisimulation Definition: cfl_bisimcta.cpp:206 void ComputeAbstractBisimulation() ComputeDelayedBisimulation perform the overall iteration based on different task flag value,... Definition: cfl_bisimcta.cpp:900 void MarkTauStarAffected(std::vector< bool > &rAffected, const Idx &rState) MarkTauAffected perform a recursive Depth-First-Search to mark all tau* predecessors as affected base... Definition: cfl_bisimcta.cpp:786 AbstractBisimulationCTA(const Generator &rGen, const Idx &rSilent, const Idx &rTaskFlag, const std::vector< StateSet > &rPrePartition) Definition: cfl_bisimcta.cpp:188 virtual void EncodeData(void) EncodeData basic preparation for bisimulation NOTE: this function is virtual since derived classes,... Definition: cfl_bisimcta.cpp:675 The Bisimulation class The following class implements a basic normal bisimulation partition algorithm... Definition: cfl_bisimcta.cpp:77 virtual ~BisimulationCTA()=default const std::vector< StateSet > mPrePartition Definition: cfl_bisimcta.cpp:144 void RefineChanged(void) RefineChanged refine equivalence classes contained affected nodes in the last iteration (see Fig.... Definition: cfl_bisimcta.cpp:554 virtual void ComputePartition(std::list< StateSet > &rResult) BisimulationPartition wrapper. Definition: cfl_bisimcta.cpp:664 virtual void EncodeData(void) EncodeData encode source generator into vector-form data structures to accelerate the iteration. Definition: cfl_bisimcta.cpp:435 void FirstStepApproximation(void) FirstStepApproximation (see Fig. 2 (b) in cited paper) Prepartition states according to their active ... Definition: cfl_bisimcta.cpp:505 void GenerateResult(std::list< StateSet > &rResult) GenerateResult generate partition result w.r.t. original state indices (without trivial classes) Definition: cfl_bisimcta.cpp:647 void ComputeBisimulation(void) ComputeBisimulation perform the overall iteration. Definition: cfl_bisimcta.cpp:634 BisimulationCTA(const Generator &rGen, const std::vector< StateSet > &rPrePartition) Definition: cfl_bisimcta.cpp:79 void ComputeChangedAfters(void) ComputeChangedAfters Compute changed afters of each affected state. (see Fig 5. in cited paper) Affec... Definition: cfl_bisimcta.cpp:528 Definition: cfl_exception.h:118 Definition: cfl_indexset.h:78 Definition: cfl_nameset.h:70 TBaseSet< Transition, TransSort::X1EvX2 >::Iterator Iterator Definition: cfl_transset.h:273 The TopoSort class perform a topological sort on states of a given automaton. if s1 is before s2 in t... Definition: cfl_bisimcta.cpp:265 TopoSort(const Generator &rGen, const EventSet &rEvs) Definition: cfl_bisimcta.cpp:377 Definition: cfl_generator.h:213 StateSet::Iterator StatesBegin(void) const Definition: cfl_generator.cpp:1054 bool SetTransition(Idx x1, Idx ev, Idx x2) Definition: cfl_generator.cpp:1623 EventSet ActiveEventSet(Idx x1) const Definition: cfl_generator.cpp:1935 TransSet::Iterator TransRelBegin(void) const Definition: cfl_generator.cpp:1064 EventSet::Iterator AlphabetBegin(void) const Definition: cfl_generator.cpp:1044 StateSet::Iterator StatesEnd(void) const Definition: cfl_generator.cpp:1059 TransSet::Iterator TransRelEnd(void) const Definition: cfl_generator.cpp:1069 void InjectTransRel(const TransSet &rNewtransrel) Definition: cfl_generator.cpp:1585 EventSet::Iterator AlphabetEnd(void) const Definition: cfl_generator.cpp:1049 virtual void InsertSet(const TBaseSet &rOtherSet) Definition: cfl_baseset.h:2194 Definition: cfl_agenerator.h:43 void ExtendTransRel(Generator &rGen, const EventSet &rSilent, const Idx &rFlag) ExtendTransRel perform transition saturation w.r.t. silent evs. Two different saturation modes are se... Definition: cfl_bisimcta.cpp:311 void InstallSelfloops(Generator &rGen, const EventSet &rEvs) InstallSelfloops install selfloops on all states of given event set. intended to install silent event... Definition: cfl_bisimcta.cpp:360 void ComputeAbstractBisimulationSatCTA(const Generator &rGen, const EventSet &rSilent, std::list< StateSet > &rResult, const Idx &rFlag, const std::vector< StateSet > &rPrePartition) ComputeAbstractBisimulationSatCTA saturation and change-tracking based partition algorithm for either... Definition: cfl_bisimcta.cpp:986 void ComputeWeakBisimulation(const Generator &rGen, const EventSet &rSilent, std::list< StateSet > &rResult, const std::vector< StateSet > &rPrePartition) Definition: cfl_bisimcta.cpp:975 bool topoSort(const Generator &rGen, const EventSet &rEvs, std::list< Idx > &result) topoSort wrapper for topological sortation rEvs is the set of events which will be considered while s... Definition: cfl_bisimcta.cpp:422 void ComputeBisimulationCTA(const Generator &rGen, std::list< StateSet > &rResult) ComputeBisimulationCTA basic bisimulation partition algorithm based on change-tracking algorithm. Definition: cfl_bisimcta.cpp:927 void ComputeWeakBisimulationCTA(const Generator &rGen, const EventSet &rSilent, std::list< StateSet > &rResult) ComputeWeakBisimulationCTA weak bisimulation (aka observation eq) partition based on change-tracking ... Definition: cfl_bisimcta.cpp:963 void ComputeDelayedBisimulationCTA(const Generator &rGen, const EventSet &rSilent, std::list< StateSet > &rResult) Definition: cfl_bisimcta.cpp:938 void ComputeWeakBisimulationSatCTA(const Generator &rGen, const EventSet &rSilent, std::list< StateSet > &rResult) ComputeWeakBisimulationSatCTA weak bisimulation (aka observation eq) partition based on change-tracki... Definition: cfl_bisimcta.cpp:1007 void ComputeDelayedBisimulationSatCTA(const Generator &rGen, const EventSet &rSilent, std::list< StateSet > &rResult) ComputeDelayedBisimulationSatCTA delayed bisimulation partition based on change-tracking algorithm an... Definition: cfl_bisimcta.cpp:1002 std::vector< std::set< Idx > > cafter Definition: cfl_bisimcta.cpp:95 std::vector< std::vector< Idx > > suc Definition: cfl_bisimcta.cpp:93 Definition: cfl_bisimcta.cpp:267 libFAUDES 2.33l --- 2025.09.16 --- c++ api documentaion by doxygen |