1 #ifndef __DIADES__AUTOMATA__DIAGNOSIS__HH__ 2 #define __DIADES__AUTOMATA__DIAGNOSIS__HH__ 16 #include <boost/archive/text_oarchive.hpp> 17 #include <boost/archive/text_iarchive.hpp> 45 static string typeName() {
return "Automata::Diagnosis"; }
67 list< vector<Candidate::StateId> >
_bs;
81 Diagnosis(
const Diagnosis & diagnosis):_candidates(diagnosis._candidates),_bs(diagnosis._bs),_faults(diagnosis._faults){}
83 typedef vector < unordered_map<StateId,unordered_set<StateId> > >
Dict;
98 void addCandidate(
const Candidate & candidate);
108 void deleteCandidate(
const Candidate & candidate);
124 CandidateIterator
begin()
const {
return _candidates.begin(); }
132 CandidateIterator
end()
const {
return _candidates.end(); }
140 SizeType
bsSize()
const {
return _bs.size(); }
148 StateIdIterator
bsBegin()
const {
return _bs.begin(); }
157 StateIdIterator
bsEnd()
const {
return _bs.end(); }
166 FaultCandidateIterator
fcBegin()
const {
return _faults.begin(); }
174 FaultCandidateIterator
fcEnd()
const {
return _faults.end(); }
219 friend class boost::serialization::access;
229 template<
class Archive>
230 void serialize(Archive & ar,
const unsigned int version)
277 faults1.insert(it->begin(),it->end());
285 faults2.insert(it->begin(),it->end());
288 return orderedHamming(faults1.begin(),faults1.end(),faults2.begin(),faults2.end());
310 for(
unsigned i = 0; i < it->size(); ++i)
312 stream << (*it)[i] <<
'_';
314 bs1.insert(stream.str());
322 for(
unsigned i = 0; i < it->size(); ++i)
324 stream << (*it)[i] <<
'_';
326 bs2.insert(stream.str());
328 return orderedHamming(bs1.begin(),bs1.end(),bs2.begin(),bs2.end());
348 faults1.insert(it->begin(),it->end());
356 faults2.insert(it->begin(),it->end());
359 return intersectionSize(faults1.begin(),faults1.end(),faults2.begin(),faults2.end());
379 faults1.insert(it->begin(),it->end());
387 faults2.insert(it->begin(),it->end());
390 return differenceSize(faults1.begin(),faults1.end(),faults2.begin(),faults2.end());
402 return intersection / unionSize;
421 for(
unsigned i = 0; i < it->size(); ++i)
423 stream << (*it)[i] <<
'_';
425 bs1.insert(stream.str());
433 for(
unsigned i = 0; i < it->size(); ++i)
435 stream << (*it)[i] <<
'_';
437 bs2.insert(stream.str());
439 double intersection =
intersectionSize(bs1.begin(),bs1.end(),bs2.begin(),bs2.end());
440 double unionSize = bs1.size() + bs2.size() - intersection;
441 return intersection / unionSize;
456 faults1.insert(it->begin(),it->end());
464 faults2.insert(it->begin(),it->end());
466 double intersection =
intersectionSize(faults1.begin(),faults1.end(),faults2.begin(),faults2.end());
467 double unionSize = faults1.size() + faults2.size() - intersection;
468 return intersection / unionSize;
496 for(
unsigned i = 0; i < it->size(); ++i)
498 stream << (*it)[i] <<
'_';
500 bs1.insert(stream.str());
508 for(
unsigned i = 0; i < it->size(); ++i)
510 stream << (*it)[i] <<
'_';
512 bs2.insert(stream.str());
514 return min( (
double) bs1.size() / (double) bs2.size(), (double) bs2.size() / (double) bs1.size());
530 faults1.insert(it->begin(),it->end());
538 faults2.insert(it->begin(),it->end());
540 return min( (
double) faults1.size() / (double) faults2.size(), (double) faults2.size() / (double) faults1.size());
CandidateIterator begin() const
set< set< Event > > _faults
SizeType numberOfCandidates() const
list< vector< Candidate::StateId > >::const_iterator StateIdIterator
int intersectionSize(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
FaultCandidateIterator fcBegin() const
list< vector< Candidate::StateId > > _bs
ReturnedType::ValueType operator()(const Diagnosis &diag1, const Diagnosis &diag2)
int differenceSize(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
FaultCandidateIterator fcEnd() const
CandidateIterator end() const
ReturnedType::ValueType operator()(const Diagnosis &diag1, const Diagnosis &diag2)
ReturnedType::ValueType operator()(const Diagnosis &diag1, const Diagnosis &diag2)
Diagnosis(const Diagnosis &diagnosis)
set< set< Event > >::const_iterator FaultCandidateIterator
Diades::Utils::Exception< Diagnosis > Exception
ReturnedType::ValueType operator()(const Diagnosis &diag1, const Diagnosis &diag2)
ReturnedType::ValueType operator()(const Diagnosis &diag1, const Diagnosis &diag2)
bool operator==(const Diagnosis &diag) const
StateIdIterator bsBegin() const
set< Candidate > _candidates
Namespace of the Diades project.
int orderedHamming(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
bool operator!=(const Diagnosis &diag) const
std::ostream & operator<<(std::ostream &os, const Identifier &identifier)
Candidate::StateId StateId
void serialize(Archive &ar, const unsigned int version)
vector< unordered_map< StateId, unordered_set< StateId > > > Dict
Diades::Graph::Node::NodeId StateId
set< Candidate >::const_iterator CandidateIterator
StateIdIterator bsEnd() const
set< Candidate >::size_type SizeType
some tools for measurements