1 #ifndef __DIADES__AUTOMATA__DIAGNOSIS__HH__
2 #define __DIADES__AUTOMATA__DIAGNOSIS__HH__
16 #include <boost/serialization/set.hpp>
17 #include <boost/archive/text_oarchive.hpp>
18 #include <boost/archive/text_iarchive.hpp>
46 static string typeName() {
return "Automata::Diagnosis"; }
68 list< vector<Candidate::StateId> >
_bs;
82 Diagnosis(
const Diagnosis & diagnosis):_candidates(diagnosis._candidates),_bs(diagnosis._bs),_faults(diagnosis._faults){}
84 typedef vector < unordered_map<StateId,unordered_set<StateId> > >
Dict;
92 const Dict & dict)
throw(Exception);
99 void addCandidate(
const Candidate & candidate);
109 void deleteCandidate(
const Candidate & candidate);
125 CandidateIterator
begin()
const {
return _candidates.begin(); }
133 CandidateIterator
end()
const {
return _candidates.end(); }
141 SizeType
bsSize()
const {
return _bs.size(); }
149 StateIdIterator
bsBegin()
const {
return _bs.begin(); }
158 StateIdIterator
bsEnd()
const {
return _bs.end(); }
167 FaultCandidateIterator
fcBegin()
const {
return _faults.begin(); }
175 FaultCandidateIterator
fcEnd()
const {
return _faults.end(); }
220 friend class boost::serialization::access;
230 template<
class Archive>
231 void serialize(Archive & ar,
const unsigned int version)
278 faults1.insert(it->begin(),it->end());
286 faults2.insert(it->begin(),it->end());
289 return orderedHamming(faults1.begin(),faults1.end(),faults2.begin(),faults2.end());
311 for(
unsigned i = 0; i < it->size(); ++i)
313 stream << (*it)[i] <<
'_';
315 bs1.insert(stream.str());
323 for(
unsigned i = 0; i < it->size(); ++i)
325 stream << (*it)[i] <<
'_';
327 bs2.insert(stream.str());
329 return orderedHamming(bs1.begin(),bs1.end(),bs2.begin(),bs2.end());
349 faults1.insert(it->begin(),it->end());
357 faults2.insert(it->begin(),it->end());
360 return intersectionSize(faults1.begin(),faults1.end(),faults2.begin(),faults2.end());
380 faults1.insert(it->begin(),it->end());
388 faults2.insert(it->begin(),it->end());
391 return differenceSize(faults1.begin(),faults1.end(),faults2.begin(),faults2.end());
403 return intersection / unionSize;
422 for(
unsigned i = 0; i < it->size(); ++i)
424 stream << (*it)[i] <<
'_';
426 bs1.insert(stream.str());
434 for(
unsigned i = 0; i < it->size(); ++i)
436 stream << (*it)[i] <<
'_';
438 bs2.insert(stream.str());
440 double intersection =
intersectionSize(bs1.begin(),bs1.end(),bs2.begin(),bs2.end());
441 double unionSize = bs1.size() + bs2.size() - intersection;
442 return intersection / unionSize;
457 faults1.insert(it->begin(),it->end());
465 faults2.insert(it->begin(),it->end());
467 double intersection =
intersectionSize(faults1.begin(),faults1.end(),faults2.begin(),faults2.end());
468 double unionSize = faults1.size() + faults2.size() - intersection;
469 return intersection / unionSize;
497 for(
unsigned i = 0; i < it->size(); ++i)
499 stream << (*it)[i] <<
'_';
501 bs1.insert(stream.str());
509 for(
unsigned i = 0; i < it->size(); ++i)
511 stream << (*it)[i] <<
'_';
513 bs2.insert(stream.str());
515 return min( (
double) bs1.size() / (double) bs2.size(), (double) bs2.size() / (double) bs1.size());
531 faults1.insert(it->begin(),it->end());
539 faults2.insert(it->begin(),it->end());
541 return min( (
double) faults1.size() / (double) faults2.size(), (double) faults2.size() / (double) faults1.size());
set< set< Event > > _faults
list< vector< Candidate::StateId > >::const_iterator StateIdIterator
bool operator==(const Diagnosis &diag) const
int intersectionSize(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
CandidateIterator end() const
list< vector< Candidate::StateId > > _bs
StateIdIterator bsBegin() const
FaultCandidateIterator fcBegin() const
ReturnedType::ValueType operator()(const Diagnosis &diag1, const Diagnosis &diag2)
int differenceSize(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
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
StateIdIterator bsEnd() const
ReturnedType::ValueType operator()(const Diagnosis &diag1, const Diagnosis &diag2)
ReturnedType::ValueType operator()(const Diagnosis &diag1, const Diagnosis &diag2)
CandidateIterator begin() const
set< Candidate > _candidates
Namespace of the Diades project.
SizeType numberOfCandidates() const
int orderedHamming(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2)
std::ostream & operator<<(std::ostream &os, const Identifier &identifier)
Candidate::StateId StateId
void serialize(Archive &ar, const unsigned int version)
bool operator!=(const Diagnosis &diag) const
vector< unordered_map< StateId, unordered_set< StateId > > > Dict
FaultCandidateIterator fcEnd() const
Diades::Graph::Node::NodeId StateId
set< Candidate >::const_iterator CandidateIterator
set< Candidate >::size_type SizeType
some tools for measurements