← Documentation
ADS-IDAC Engine 5.0.0
Operator.h
Go to the documentation of this file.
1
12
13#include <iostream>
14#include <type_traits>
15#include <typeinfo>
16#pragma once
17
18#include "KB.h"
19#include "InfoChunk.h"
20#include "ShortTermMemory.h"
21#include "EventSymptomMatrix.h"
22#include <boost/serialization/export.hpp>
23//#include "PIFRelap.h"
24#include "KBScannedParameters.h"
25#include "ManeuverAction.h"
26#include "SPDS.h"
30
31#include "../Branch/BranchExpectedParameterValue.h"
32#include "../Branch/BranchExpectedComponentState.h"
33#include "../Branch/BranchExpectedAlarmState.h"
34#include "../ReasonMachine/ReasonMachine.h" // Added by ClassView
35#include "../ReasonMachine/RMSerialization.h"
37
38#include <boost/serialization/access.hpp>
39#include <boost/serialization/base_object.hpp>
40#include <boost/archive/text_oarchive.hpp>
41#include <boost/archive/text_iarchive.hpp>
42#include <boost/archive/binary_oarchive.hpp>
43#include <boost/archive/binary_iarchive.hpp>
44#include <boost/serialization/unique_ptr.hpp>
45#include <fstream>
46#include <sstream>
47#include <string>
48
49class Operator {
50 public:
51 void PrintMessage(std::string);
52 void ActiveFetchAlarmStateInfo(std::string, int);
53 void ActiveFetchComponentStateInfo(std::string, int);
54 void ActiveFetchSupportSystemStateInfo(std::string, int);
55 std::unique_ptr<ReasonMachine> m_RM;
56 void ActiveFetchParameterValueInfo(std::string, int);
57 Operator();
58 virtual ~Operator();
59 void setTypeOfOperator(int);
63 void biasFilter();
66 void seedKnowledgeBaseFromMaster(); // copy the per-role KB master before the state overlay is applied
67 void seedDiagnosisMatrixFromMaster(); // same, for the event-symptom matrix
68 void setPauseActivity(bool);
69 bool getPauseActivity();
70 void setNewBranchGenerated(bool);
72 void setPauseMentalProcedure(bool);
76 void setBlockTroubleshooting(bool);
78 void setBlockProcedureUse(bool);
80 void setAbnormalSignalThreshold(double);
82 void setSkipProcedureStep(bool);
86 void setScanQueueLimit(int);
93 void clearOperatorFinal();
97 void setSkipActionThreshold(double);
99 void setSkipNonResponseThreshold(double);
101 void setNominalCommunicationTime(double);
105 void setProcedureUseProbability(double);
107 void setActionTimeMultiplier(double);
111 void setUseOfOldInfoProbability(double);
115 void saveOperatorToFile(std::ofstream &);
116 void retrieveOperatorFromFile(std::ifstream &);
118 bool performAMentalProcedure(int, std::string, std::string);
124 double checkItemRelevanceToCurrentDiagnosis(std::string);
130 //PIFRelap Relap_PIFs;
137
138 // Grant serialization access
140 template<class Archive>
141 void serialize(Archive & ar, const unsigned int version)
142 {
143// std::cout << "Serializing class: " << typeid(*this).name() << std::endl;
144 ar & type_of_operator;
146 ar & scan_queue_limit;
147 ar & pause_activity;
165 // Serialize complex types
166 ar & memory;
167 // The KB travels state-only on binary archives. type_of_operator,
168 // deserialized above, selects the per-role master to seed from.
169 if constexpr (std::is_same_v<Archive, boost::archive::binary_oarchive>) {
171 } else if constexpr (std::is_same_v<Archive, boost::archive::binary_iarchive>) {
174 } else {
175 ar & knowledge_base;
176 }
178 // The event-symptom matrix travels state-only on binary archives
179 // (confidences); its structure is re-seeded from the per-role master.
180 if constexpr (std::is_same_v<Archive, boost::archive::binary_oarchive>) {
182 } else if constexpr (std::is_same_v<Archive, boost::archive::binary_iarchive>) {
185 } else {
186 ar & diagnosis_matrix;
187 }
190 ar & information_load;
191 ar & event_actions;
192 ar & maneuver_action;
193 ar & hfe_bbn;
194 // Size gauge: prints the serialized byte count of each member of the
195 // operator snapshot to stderr. Enabled by setting the environment
196 // variable ADSIDAC_OPERATOR_PROFILE (binary saves only).
197 if constexpr (std::is_same_v<Archive, boost::archive::binary_oarchive>) {
198 static const bool op_prof = getenv("ADSIDAC_OPERATOR_PROFILE") != nullptr;
199 if (op_prof) {
200 auto blob_bytes = [](const auto& obj) {
201 std::ostringstream oss(std::ios::binary);
202 boost::archive::binary_oarchive oa(oss);
203 oa << obj;
204 return oss.str().size();
205 };
206 std::ostringstream kb_oss(std::ios::binary);
207 { boost::archive::binary_oarchive kb_oa(kb_oss); knowledge_base.state_save(kb_oa); }
208 size_t rm_bytes = 0;
209 if (m_RM != nullptr) {
210 std::ostringstream rm_oss(std::ios::binary);
211 boost::archive::binary_oarchive rm_oa(rm_oss);
212 rm_oa << *m_RM;
213 rm_bytes = rm_oss.str().size();
214 }
215 fprintf(stderr,
216 "[OP-PROF] op=%d memory=%zu kb_state=%zu scanned=%zu diag=%zu safety=%zu "
217 "events=%zu maneuver=%zu hfe=%zu rm=%zu\n",
218 type_of_operator, blob_bytes(memory), kb_oss.str().size(),
219 blob_bytes(scanned_indicators), blob_bytes(diagnosis_matrix),
220 blob_bytes(safety_parameters), blob_bytes(event_actions),
221 blob_bytes(maneuver_action), blob_bytes(hfe_bbn), rm_bytes);
222 }
223 }
224 // Serialize m_RM as an isolated binary buffer
225 {
226 bool has_rm = (m_RM != nullptr);
227 ar & has_rm;
228 if (has_rm) {
229 std::string rm_data;
230 if constexpr (Archive::is_saving::value) {
231 std::ostringstream rm_oss(std::ios::binary);
232 boost::archive::binary_oarchive rm_oa(rm_oss);
233 rm_oa << *m_RM;
234 rm_data = rm_oss.str();
235 }
236 ar & rm_data;
237 if constexpr (Archive::is_loading::value) {
238 m_RM = std::make_unique<ReasonMachine>();
239 std::istringstream rm_iss(rm_data, std::ios::binary);
240 boost::archive::binary_iarchive rm_ia(rm_iss);
241 rm_ia >> *m_RM;
242 }
243 } else if constexpr (Archive::is_loading::value) {
244 m_RM.reset();
245 }
246 }
247 }
248 private:
249 int type_of_operator;//sim::Operator::OAT; sim::Operator::ODM, and sim::Operator::OAT
261 double threshold_value_for_HWKB_confidence; //(0.0 <= x <= 100)
269};
270
271BOOST_CLASS_EXPORT_KEY(Operator)
Knowledge Base — long-term knowledge about plant systems, components, and procedures.
void state_save(boost::archive::binary_oarchive &ar) const
void state_load(boost::archive::binary_iarchive &ar)
Definition: KB.h:46
void state_load(boost::archive::binary_iarchive &ar)
Definition: KB.cpp:543
void state_save(boost::archive::binary_oarchive &ar) const
Definition: KB.cpp:535
int getMentalProcedurePriorityThreshold()
Definition: Operator.cpp:61
void setInfoGatherModeBranchGenerated(bool)
Definition: Operator.cpp:912
bool skip_procedure_step
Definition: Operator.h:254
bool getSkipInstinctiveResponseStep()
Definition: Operator.cpp:594
void setProcedureUseProbability(double)
Definition: Operator.cpp:793
double use_of_old_info_probability
Definition: Operator.h:268
void setSkipProcedureStep(bool)
Definition: Operator.cpp:591
int generateInfoGatherModeBranch()
Definition: Operator.cpp:917
void updateEvidenceForAllPSFs()
Definition: Operator.cpp:1517
void retrieveOperatorFromFile(std::ifstream &)
Definition: Operator.cpp:1020
std::unique_ptr< ReasonMachine > m_RM
Definition: Operator.h:55
void interruptLowPriorityMentalProcedures()
Definition: Operator.cpp:1421
void serialize(Archive &ar, const unsigned int version)
Definition: Operator.h:141
virtual ~Operator()
Definition: Operator.cpp:55
bool getBlockTroubleshooting()
Definition: Operator.cpp:909
bool getSkipProcedureStep()
Definition: Operator.cpp:592
void setPauseActivity(bool)
Definition: Operator.cpp:577
void setAbnormalSignalThreshold(double)
Definition: Operator.cpp:589
bool getInfoGatherModeBranchGenerated()
Definition: Operator.cpp:913
void checkAndExecuteManeuverAction()
Definition: Operator.cpp:1315
void setTypeOfOperator(int)
Definition: Operator.cpp:58
void copyOperatorFromRestartInfo(Operator &)
Definition: Operator.cpp:647
double nominal_communication_time
Definition: Operator.h:266
int mental_procedure_priority_threshold
Definition: Operator.h:250
void quantificationFilter()
Definition: Operator.cpp:421
double getSkipActionThreshold()
Definition: Operator.cpp:786
void clearOperatorFromRestartNodeInfoMultiProcessors()
Definition: Operator.cpp:771
void clearOperatorFinal()
Definition: Operator.cpp:759
void clearOperatorForRestart()
Definition: Operator.cpp:734
DiagnosisActionModule event_actions
Definition: Operator.h:134
bool new_branch_generated
Definition: Operator.h:259
void setSkipActionThreshold(double)
Definition: Operator.cpp:785
bool checkAndActivateHWKB()
Definition: Operator.cpp:795
bool block_troubleshooting
Definition: Operator.h:257
bool skip_instinctive_response_step
Definition: Operator.h:255
bool abnormal_signal_perceived
Definition: Operator.h:256
double procedure_use_probability
Definition: Operator.h:265
TimeConstrainedModule time_constrained_load
Definition: Operator.h:132
void copyOperatorFromRestartInfoMultiProcessor(Operator &)
Definition: Operator.cpp:693
void setScanQueueLimit(int)
Definition: Operator.cpp:914
SPDS safety_parameters
Definition: Operator.h:131
double getUseOfOldInfoProbabiility()
Definition: Operator.cpp:963
double getNominalCommunicationTime()
Definition: Operator.cpp:790
double getTroubleshootingProbability()
Definition: Operator.cpp:792
double troubleshooting_probability
Definition: Operator.h:264
void ActiveFetchAlarmStateInfo(std::string, int)
Definition: Operator.cpp:1494
ManeuverAction maneuver_action
Definition: Operator.h:135
double abnormal_signal_threshold
Definition: Operator.h:260
double getProcedureUseProbability()
Definition: Operator.cpp:794
void ActiveFetchSupportSystemStateInfo(std::string, int)
Definition: Operator.cpp:1480
double action_time_multiplier
Definition: Operator.h:262
double getSkipNonResponseThreshold()
Definition: Operator.cpp:788
double skip_action_threshold
Definition: Operator.h:263
int getTypeOfOperator()
Definition: Operator.cpp:59
ShortTermMemory memory
Definition: Operator.h:126
void setBlockProcedureUse(bool)
Definition: Operator.cpp:910
void setTroubleshootingProbability(double)
Definition: Operator.cpp:791
void interruptAllMentalProcedures()
Definition: Operator.cpp:1398
void setMentalProcedurePriorityThreshold(int)
Definition: Operator.cpp:60
bool performAMentalProcedure(int, std::string, std::string)
Definition: Operator.cpp:1233
bool getBlockProcedureUse()
Definition: Operator.cpp:911
void setActionTimeMultiplier(double)
Definition: Operator.cpp:906
double threshold_value_for_HWKB_confidence
Definition: Operator.h:261
bool block_procedure_use
Definition: Operator.h:258
void copyOperatorToRestartInfo(Operator &)
Definition: Operator.cpp:595
void checkAndResetProcedureStep(BranchProcedureStep *)
Definition: Operator.cpp:1336
void PrintMessage(std::string)
Definition: Operator.cpp:1508
bool performReasoningStrategy()
Definition: Operator.cpp:1308
void ActiveFetchParameterValueInfo(std::string, int)
Definition: Operator.cpp:1451
void seedKnowledgeBaseFromMaster()
Definition: Operator.cpp:62
double skip_non_response_threshold
Definition: Operator.h:263
bool getNewBranchGenerated()
Definition: Operator.cpp:582
double getActionTimeMultiplier()
Definition: Operator.cpp:907
void setUseOfOldInfoProbability(double)
Definition: Operator.cpp:962
void setAbnormalSignalPerceived(bool)
Definition: Operator.cpp:587
void setNominalCommunicationTime(double)
Definition: Operator.cpp:789
KB knowledge_base
Definition: Operator.h:127
void setPauseMentalProcedure(bool)
Definition: Operator.cpp:583
InformationLoadModule information_load
Definition: Operator.h:133
void clearOperatorFromRestartInfo()
Definition: Operator.cpp:746
double getAbnormalSignalThreshold()
Definition: Operator.cpp:590
friend class boost::serialization::access
Definition: Operator.h:139
bool pause_mental_procedure
Definition: Operator.h:253
int type_of_operator
Definition: Operator.h:249
HumanFailureEventsBBN hfe_bbn
Definition: Operator.h:136
Operator()
Definition: Operator.cpp:26
bool getAbnormalSignalPerceived()
Definition: Operator.cpp:588
void checkCompletenessOfSystemDecomposition(int)
Definition: Operator.cpp:1087
void setNewBranchGenerated(bool)
Definition: Operator.cpp:581
EventSymptomMatrix diagnosis_matrix
Definition: Operator.h:129
KBScannedParameters scanned_indicators
Definition: Operator.h:128
void biasFilter()
Definition: Operator.cpp:289
void ActiveFetchComponentStateInfo(std::string, int)
Definition: Operator.cpp:1466
bool getPauseMentalProcedure()
Definition: Operator.cpp:586
bool pause_activity
Definition: Operator.h:252
int scan_queue_limit
Definition: Operator.h:251
bool getPauseActivity()
Definition: Operator.cpp:580
int getScanQueueLimit()
Definition: Operator.cpp:915
double checkItemRelevanceToCurrentDiagnosis(std::string)
Definition: Operator.cpp:1209
double getThresholdValueForHWKBConfidence()
Definition: Operator.cpp:784
void setBlockTroubleshooting(bool)
Definition: Operator.cpp:908
void initiationForSimulation()
Definition: Operator.cpp:79
void setSkipNonResponseThreshold(double)
Definition: Operator.cpp:787
void setSkipInstinctiveResponseStep(bool)
Definition: Operator.cpp:593
void saveOperatorToFile(std::ofstream &)
Definition: Operator.cpp:964
bool info_gather_mode_branch_generated
Definition: Operator.h:267
void seedDiagnosisMatrixFromMaster()
Definition: Operator.cpp:71
void setThresholdValueForHWKBConfidence(double)
Definition: Operator.cpp:783
Definition: SPDS.h:21