|
diag_eventdiagnosis.cpp
Go to the documentation of this file.
2Functions to check a system's event-diagnosability and computation of an event-diagnoser. Covers diagnosability with respect to failure events (diagnosability, I-diagnosability).
13bool IsEventDiagnosable(const System& rGen, const AttributeFailureTypeMap& rFailureTypeMap, string& rReportString) {
28 for (ftIt = rFailureTypeMap.mFailureTypeMap.Begin(); ftIt != rFailureTypeMap.mFailureTypeMap.End(); ftIt++) {
30 FD_DD("IsEventDiagnosable(): Warning: Existing indicator events are ignored! If you want to check for I-diagnosability use IsIdiagnosable() instead.");
31 rReportString.append("IsEventDiagnosable(): Warning: Existing indicator events are ignored! If you want to check for I-diagnosability use IsIdiagnosable() instead.\n");
43 for (ftIt = rFailureTypeMap.mFailureTypeMap.Begin(); ftIt != rFailureTypeMap.mFailureTypeMap.End(); ftIt++) {
45 + " with failures " + rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mFailureEvents.ToString());
50 ComputeGobs(rGen, rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt), rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mFailureEvents, genGobs);
52 //genGobs.GraphWrite("tmp_Gobs_" + rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) + ".png");
64 if(ExistsViolatingCyclesInGd(genGd, genGobs, reverseCompositionMap, rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt), rReportString)) {
66 //genGd.GraphWrite("tmp_Gd_pruned_" + rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) + ".png");
85bool IsIndicatorEventDiagnosable(const System& rGen, const AttributeFailureTypeMap& rFailureTypeMap, string& rReportString) {
97 for (ftIt = rFailureTypeMap.mFailureTypeMap.Begin(); ftIt != rFailureTypeMap.mFailureTypeMap.End(); ftIt++) {
99 FD_DD("IsIndicatorEventDiagnosable(): Warning: There are no indicator events for failure type " << rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) << "!");
100 rReportString.append("IsIndicatorEventDiagnosable(): Warning: There are no indicator events for failure type " + rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) + "!\n");
110 for (ftIt = rFailureTypeMap.mFailureTypeMap.Begin(); ftIt != rFailureTypeMap.mFailureTypeMap.End(); ftIt++) {
117 ComputeGobs(rGen, rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt), rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mFailureEvents, genGobs);
119 //genGobs.GraphWrite("tmp_I_Gobs_" + rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) + ".png");
129 // Additionally for I-diagnosability: Remove all traces which do not contain a failure event followed by an indicator event
130 FD_DD("Removing all traces not containing an indicator event " + rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mIndicatorEvents.ToString());
131 TrimNonIndicatorTracesOfGd(genGd, genGobs, *ftIt, rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mIndicatorEvents, reverseCompositionMap);
132 //genGd.Write("tmp_I_Gd_iTraces_" + rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) + ".gen");
133 //genGd.GraphWrite("tmp_I_Gd_iTraces_" + rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) + ".png");
137 if(ExistsViolatingCyclesInGd(genGd, genGobs, reverseCompositionMap, rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt), rReportString)) {
138 //genGd.Write("tmp_I_Gd_pruned_" + rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) + ".gen");
139 //genGd.GraphWrite("tmp_I_Gd_pruned_" + rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) + ".png");
142 //genGd.Write("tmp_I_Gd_pruned_" + rFailureTypeMap.mFailureTypeMap.SymbolicName(*ftIt) + ".gen");
153bool IsIndicatorEventDiagnosable(const System& rGen, const AttributeFailureTypeMap& rFailureTypeMap) {
160bool MeetsDiagnosabilityAssumptions(const System& rGen, const AttributeFailureTypeMap& rFailureTypeMap, string& rReportString) {
165 for (ftIt = rFailureTypeMap.mFailureTypeMap.Begin(); ftIt != rFailureTypeMap.mFailureTypeMap.End(); ftIt++) {
167 for (evIt = rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mFailureEvents.Begin(); evIt != rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mFailureEvents.End(); evIt++) {
170 errstr << "Failure " << rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mFailureEvents.SymbolicName(*evIt) << " is not in alphabet of generator!" << endl;
175 for (evIt = rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mIndicatorEvents.Begin(); evIt != rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mIndicatorEvents.End(); evIt++) {
178 errstr << "Indicator " << rFailureTypeMap.mFailureTypeMap.Attribute(*ftIt).mIndicatorEvents.SymbolicName(*evIt) << " is not in alphabet of generator!" << endl;
265bool FailuresUnobservable(const System& rGen, const AttributeFailureTypeMap& rFailureTypeMap, string& rReport) {
274 FD_DD("FailuresUnobservable(): Failure event \"" << failures.SymbolicName(*evIt) << "\" is not unobservable in generator!");
275 rReport.append("Failure event \"" + failures.SymbolicName(*evIt) + "\" is observable in generator --> ");
380bool ExistsViolatingCyclesInGd(System& rGd, const Diagnoser& rGobs, map<pair<Idx,Idx>,Idx>& rReverseCompositionMap, const string& rFailureType, string& rReportString) {
390 FD_DD("state " << rcmIt->second << " (" << rcmIt->first.first << "," << rcmIt->first.second << ")");
391 // if both states in G_o are equal or just contain the same failure label: delete corresponding state in G_d
423void ComputeGobs(const System& rOrigGen, const string& rFailureType, const EventSet& rFailureEvents, Diagnoser& rGobs) {
431void ComputeGobs(const System& rOrigGen, const AttributeFailureTypeMap& rAttrFTMap, Diagnoser& rGobs) {
479 map<Idx,multimap<Idx,DiagLabelSet> > reachMap; // maps executable events to all reachable states and occuring relative failure types
506 for(currDStateMapIt = currDStateMap.Begin(); currDStateMapIt != currDStateMap.End(); ++ currDStateMapIt){
510 ComputeReachability(rOrigGen, gUnobservableEvents, failureEvents, gStateEstimate, rAttrFTMap, reachMap);
528 FD_DD(endl << "_" << rOrigGen.EventName(it->first) << " ("<< it->second.size() << " state estimates)");
550 // if newAttr equals any existing state attribute than we create a transition to this very state
614 TrimNonIndicatorTracesOfGdRecursive(rGd, rGobs, rFailureType, rIndicatorEvents, CompositionMap, rGd.InitState(), statesDone);
618void TrimNonIndicatorTracesOfGdRecursive(System& rGd, const Diagnoser& rGobs, const Idx rFailureType,
645 // If there exists a self-loop of an indicator event (after the occurrence of a failure event), return.
646 // This needs to be checked because otherwise the following for-loop could cut parts of the future traces before noticing the self-loop.
670 // (we use the _next_ label (and not the last one) to make sure not to miss out failures that occur immediately before the indicator event)
683 // if transition event is not an indicator event or there did not occur a failure _before_ the indicator
693 // if there do not exist any further transitions form other states into the next state: continue trimming at next state
696 TrimNonIndicatorTracesOfGdRecursive(rGd, rGobs, rFailureType, rIndicatorEvents, rCompositionMap, nextState, rStatesDone);
703void ComputeReachability(const System& rGen, const EventSet& rUnobsEvents, const EventSet& rFailures, Idx State,
704 const AttributeFailureTypeMap& rAttrFTMap, map<Idx,multimap<Idx,DiagLabelSet> >& rReachabilityMap) {
710 ComputeReachabilityRecursive(rGen, rUnobsEvents, rFailures, State, rAttrFTMap, rReachabilityMap, FTonPath);
736 multimap<Idx,DiagLabelSet> stateFailureTypeMap; // maps generator states onto occurred failure types (=labels), part of rReachabilityMap
748 FD_DD(tIt->X1 << "--" << rGen.EventName(tIt->Ev) << "-->" << tIt->X2 << " for " << FToccurred.ToString());
764 ComputeReachabilityRecursive(rGen, rUnobsEvents, rFailures, tIt->X2, rAttrFTMap, rReachabilityMap, newFT);
768 FD_DD(rGen.EventName(tIt->Ev) << " is observable: add it to rReachabilityMap " << FToccurred.ToString());
775 for (mmLabelIt = stateFailureTypeMap.begin(); mmLabelIt != stateFailureTypeMap.end(); mmLabelIt++) {
816void EventDiagnoser(const System& rOrigGen, const map<string,EventSet>& rFailureTypeMap, Diagnoser& rDiagGen) {
824void EventDiagnoser(const System& rOrigGen, const AttributeFailureTypeMap& rAttrFTMap, Diagnoser& rDiagGen) {
881 map<Idx,multimap<Idx,DiagLabelSet> > reachMap; // maps executable events to all reachable states and occuring relative failure types
882 map<Idx,multimap<Idx,DiagLabelSet> > reachMapWholeState; // map for whole diagnoser state, contains propagated absolute failure type labels
916 for(currDStateMapIt = currDStateMap.Begin(); currDStateMapIt != currDStateMap.End(); ++ currDStateMapIt){
919 ComputeReachability(rOrigGen, gUnobservableEvents, failureEvents, gStateEstimate, rAttrFTMap, reachMap);
926 // parse through state failure type mappings of state failure type map (for current event in reachMap)
933 for (mmit2 = tmpPropagatedLabels.lower_bound(newState); mmit2 != tmpPropagatedLabels.upper_bound(newState); mmit2++) {
1020void LabelPropagation(const DiagLabelSet& lastLabel, const DiagLabelSet& failureTypes, DiagLabelSet& newLabel) {
1058 // if there is only one label for a particular state: no correction is needed and the label is copied to diagnoser state attribute
const TaIndexSet< DiagLabelSet > & DiagnoserStateMap(void) const Definition diag_attrdiagstate.cpp:43 void AddStateLabelMap(Idx gstate, const DiagLabelSet &labels) Definition diag_attrdiagstate.cpp:71 EventSet AllFailureEvents(void) const Definition diag_attrfailuretypes.cpp:132 TaNameSet< AttributeFailureEvents > mFailureTypeMap Definition diag_attrfailuretypes.h:36 void AddFailureTypeMap(const std::map< std::string, EventSet > &rFailureMap) Definition diag_attrfailuretypes.cpp:110 Idx AddFailureTypeMapping(const std::string &failureType, const EventSet &rfailureEvents) Definition diag_attrfailuretypes.cpp:85 Idx FailureType(Idx failureEvent) const Definition diag_attrfailuretypes.cpp:120 Definition diag_attrlabelset.h:19 static Idx IndexOfLabelN(void) Definition diag_attrlabelset.cpp:114 void InsertSet(const DiagLabelSet &rSet) Definition diag_attrlabelset.cpp:99 static Idx IndexOfLabelA(void) Definition diag_attrlabelset.cpp:119 static Idx IndexOfLabelRelN(void) Definition diag_attrlabelset.cpp:124 Definition cfl_exception.h:118 Definition cfl_indexset.h:78 Definition cfl_nameset.h:70 void SymbolicName(Idx index, const std::string &rName) Definition cfl_nameset.cpp:406 Definition cfl_baseset.h:410 const TaStateSet< StateAttr > & States(void) const Definition cfl_agenerator.h:1363 const TaEventSet< EventAttr > & Alphabet(void) const Definition cfl_agenerator.h:1358 bool SetTransition(Idx x1, Idx ev, Idx x2) Definition cfl_agenerator.h:1197 void GlobalAttribute(const GlobalAttr &rAttr) Definition cfl_agenerator.h:746 void StateAttribute(Idx index, const StateAttr &rAttr) Definition cfl_agenerator.h:1327 StateAttr * StateAttributep(Idx index) Definition cfl_agenerator.h:1353 Definition cfl_indexset.h:342 const Attr & Attribute(const Idx &rElem) const Definition cfl_indexset.h:559 Definition cfl_cgenerator.h:76 EventSet UnobservableEvents(void) const Definition cfl_cgenerator.h:1057 EventSet ObservableEvents(void) const Definition cfl_cgenerator.h:1045 Definition diag_generator.h:26 EventSet GetAllFailureEvents(void) const Definition diag_generator.h:294 std::string SAStr(Idx dStateIndex) const Definition diag_generator.h:316 void InsStateLabelMapping(Idx dStateIndex, Idx gStateIndex, Idx labelIndex) Definition diag_generator.h:299 std::string ToString(const std::string &rLabel="", const Type *pContext=0) const Definition cfl_types.cpp:175 StateSet::Iterator InitStatesBegin(void) const Definition cfl_generator.cpp:1147 EventSet ActiveEventSet(Idx x1) const Definition cfl_generator.cpp:1935 TransSet::Iterator TransRelBegin(void) const Definition cfl_generator.cpp:1064 void ClrTransition(Idx x1, Idx ev, Idx x2) Definition cfl_generator.cpp:1657 TransSet ActiveTransSet(Idx x1) const Definition cfl_generator.cpp:1945 TransSet::Iterator TransRelEnd(void) const Definition cfl_generator.cpp:1069 StateSet::Iterator InitStatesEnd(void) const Definition cfl_generator.cpp:1152 virtual void ClearAttributes(void) Definition cfl_generator.cpp:612 StateSet SuccessorStates(Idx x1) const Definition cfl_generator.cpp:1966 virtual void InsertSet(const TBaseSet &rOtherSet) Definition cfl_baseset.h:2194 void Parallel(const Generator &rGen1, const Generator &rGen2, Generator &rResGen) Definition cfl_parallel.cpp:33 Definition cfl_agenerator.h:43 void ConvertParallelCompositionMap(const map< pair< Idx, Idx >, Idx > &rReverseCompositionMap, map< Idx, pair< Idx, Idx > > &rCompositionMap) Definition diag_eventdiagnosis.cpp:210 bool ExistsViolatingCyclesInGd(System &rGd, const Diagnoser &rGobs, map< pair< Idx, Idx >, Idx > &rReverseCompositionMap, const string &rFailureType, string &rReportString) Definition diag_eventdiagnosis.cpp:380 bool FailuresUnobservable(const System &rGen, const AttributeFailureTypeMap &rFailureTypeMap, string &rReport) Definition diag_eventdiagnosis.cpp:265 void ComputeGd(const Diagnoser &rGobs, map< pair< Idx, Idx >, Idx > &rReverseCompositionMap, System &rGd) Definition diag_eventdiagnosis.cpp:588 TransSet ActiveBackwardTransSet(const System &rGen, Idx state) Definition diag_eventdiagnosis.cpp:802 bool ExistsCycleSearch(const System &rGen, StateSet &rTodo, Idx currState, StateSet statesOnPath, string &rReport) Definition diag_eventdiagnosis.cpp:306 bool IsIndicatorEventDiagnosable(const System &rGen, const AttributeFailureTypeMap &rFailureTypeMap, string &rReportString) Definition diag_eventdiagnosis.cpp:85 bool ExistsCycle(const System &rGen, string &rReport) Definition diag_eventdiagnosis.cpp:283 void CycleStartStatesSearch(const System &rGen, StateSet &rTodo, Idx currState, StateSet statesOnPath, StateSet &rCycleOriginStates) Definition diag_eventdiagnosis.cpp:354 void CycleStartStates(const System &rGen, StateSet &rCycleOrigins) Definition diag_eventdiagnosis.cpp:334 void TrimNonIndicatorTracesOfGd(System &rGd, const Diagnoser &rGobs, const Idx rFailureType, const EventSet &rIndicatorEvents, const map< pair< Idx, Idx >, Idx > &rReverseCompositionMap) Definition diag_eventdiagnosis.cpp:606 bool IsLive(const System &rGen, string &rReport) Definition diag_eventdiagnosis.cpp:225 bool IsEventDiagnosable(const System &rGen, const AttributeFailureTypeMap &rFailureTypeMap, string &rReportString) Definition diag_eventdiagnosis.cpp:13 void ComputeReachability(const System &rGen, const EventSet &rUnobsEvents, const EventSet &rFailures, Idx State, const AttributeFailureTypeMap &rAttrFTMap, map< Idx, multimap< Idx, DiagLabelSet > > &rReachabilityMap) Definition diag_eventdiagnosis.cpp:703 void EventDiagnoser(const System &rOrigGen, const map< string, EventSet > &rFailureTypeMap, Diagnoser &rDiagGen) Definition diag_eventdiagnosis.cpp:816 void LabelPropagation(const DiagLabelSet &lastLabel, const DiagLabelSet &failureTypes, DiagLabelSet &newLabel) Definition diag_eventdiagnosis.cpp:1020 void ComputeReachabilityRecursive(const System &rGen, const EventSet &rUnobsEvents, const EventSet &rFailures, Idx State, const AttributeFailureTypeMap &rAttrFTMap, map< Idx, multimap< Idx, DiagLabelSet > > &rReachabilityMap, const DiagLabelSet FToccurred) Definition diag_eventdiagnosis.cpp:729 bool CycleOfUnobsEvents(const System &rGen, string &rReport) Definition diag_eventdiagnosis.cpp:241 bool MeetsDiagnosabilityAssumptions(const System &rGen, const AttributeFailureTypeMap &rFailureTypeMap, string &rReportString) Definition diag_eventdiagnosis.cpp:160 void TrimNonIndicatorTracesOfGdRecursive(System &rGd, const Diagnoser &rGobs, const Idx rFailureType, const EventSet &rIndicatorEvents, map< Idx, pair< Idx, Idx > > &rCompositionMap, Idx state, StateSet &rStatesDone) Definition diag_eventdiagnosis.cpp:618 void LabelCorrection(const multimap< Idx, DiagLabelSet > &mm, AttributeDiagnoserState &attr) Definition diag_eventdiagnosis.cpp:1047 void ComputeGobs(const System &rOrigGen, const string &rFailureType, const EventSet &rFailureEvents, Diagnoser &rGobs) Definition diag_eventdiagnosis.cpp:423 libFAUDES 2.33k --- 2025.09.16 --- c++ api documentaion by doxygen |