← Documentation
ADS-IDAC Engine 5.0.0
Operator.cpp
Go to the documentation of this file.
1// Operator.cpp: implementation of the Operator class.
2//
4
5#include <map>
6#include "../Global/SharedConfig.h"
7#include <vector>
8#include <fstream>
9#include <boost/serialization/export.hpp>
10
11#include "Operator.h"
12#include "../ControlPanel/ControlPanel.h"
13#include "../Procedure/Procedures.h"
14#include "../Global/SimulationContext.h"
15#include <boost/archive/binary_oarchive.hpp>
16#include <boost/archive/binary_iarchive.hpp>
17BOOST_CLASS_EXPORT_IMPLEMENT(Operator)
18
19
20using namespace std;
21
23// Construction/Destruction
25
27 pause_activity = false;
28 skip_procedure_step = false;
40 block_procedure_use = false;
41 // These are serialized and deep-copied at every branch point, so they get
42 // deterministic defaults. Zero/false matches the effective state of the
43 // zero-initialized global operators.
44 type_of_operator = 0; // sentinel; subclass constructors set the real value
51
52 // m_RM default-constructs to nullptr
53}
54
56
57}
63 // State overlay: rebuild the role's knowledge base from the process-local
64 // master before the state stream lands. Null-tolerant for unit tests.
65 const KB* master = adsidac::shared_kb(type_of_operator);
66 if (master == nullptr || master == &knowledge_base) return;
68 knowledge_base.copyKBForRestart(const_cast<KB&>(*master));
69}
70
72 // State overlay: same contract as the KB seed. The copy appends, so clear first.
74 if (master == nullptr || master == &diagnosis_matrix) return;
77}
78
80 // Idempotent: clients/server load operator config at startup so the KB
81 // masters exist before the first snapshot arrives; onFirstInit reaches here
82 // again on the engine's normal path. Pure file reads (no RNG draws, those
83 // happen at construction); reloading would append duplicate KB units.
84 if (!knowledge_base.hard_wired_diagnosis.empty()) return;
85
86 string str, str1, str_base;
87 double alarm_t_min, alarm_alpha, alarm_beta;
88 double comp_t_min, comp_alpha, comp_beta;
89 double ss_t_min, ss_alpha, ss_beta;
90 double param_t_min, param_alpha, param_beta;
91 double low_info_load_limit, upper_info_load_limit;
92 ifstream fin;
93
94 int num;
97 str_base = str;
98 str += "DecisionMaker.txt";
99 fin.open(str.c_str(), ios::in);
100 if (!fin.is_open()) {
101 cout << "File: " << str << " cound not be found" << endl;
102 ofstream fout("err messages.txt", ios::app);
103 fout << r5pars_.timesno << " File: " << str << " cound not be found\n";
104 fout.close();
105 r5pars_.sim_err = true;
106 g_sim.Branch_center.setTempESMessage("Operator::initiationForSimulation DecisionMaker.txt err.");
108 } else {
109 fin >> str1 >> num
110 >> str1 >> action_time_multiplier
113 >> str1 >> scan_queue_limit
114 >> str1 >> low_info_load_limit
115 >> str1 >> upper_info_load_limit
116 >> str1 >> alarm_t_min >> alarm_alpha >> alarm_beta
117 >> str1 >> comp_t_min >> comp_alpha >> comp_beta
118 >> str1 >> ss_t_min >> ss_alpha >> ss_beta
119 >> str1 >> param_t_min >> param_alpha >> param_beta
120 >> str1 >> skip_action_threshold
126 >> str1 >> procedure_use_probability;
127 fin.close();
129 this->information_load.setLowerInfoLoadThreshold(low_info_load_limit);
130 this->information_load.setUpperInfoLoadThreshold(upper_info_load_limit);
131 this->memory.alarm_update_time.setT_Minimum(alarm_t_min);
132 this->memory.alarm_update_time.setAlpha_Weibull(alarm_alpha);
133 this->memory.alarm_update_time.setBeta_Weibull(alarm_beta);
134 this->memory.component_update_time.setT_Minimum(comp_t_min);
140 this->memory.parameter_update_time.setT_Minimum(param_t_min);
143 }
144 //
145 // initialize event diagnosis data
146 str = str_base + "KB_ODM_Event_Matrix.txt";
148 //
149 // initialize time constrained data
150 str = str_base + "KB_ODM_Time_Constrained_Input.txt";
152 //
153 // initialize control panel scanned parameters
154 str = str_base + "KB_ODM_Scanned_Parameters.txt";
156 //
157 str = str_base + "KB_ODM_Safety_Parameters.txt";
159 //
160 str = str_base + "KB_ODM_Diagnosis_Actions.txt";
162 //
163 } else if (type_of_operator == sim::Operator::OAT) {
165 str_base = str;
166 str += "ActionTaker.txt";
167 fin.open(str.c_str(), ios::in);
168 if (!fin.is_open()) {
169 cout << "File: " << str << " cound not be found" << endl;
170 ofstream fout("err messages.txt", ios::app);
171 fout << r5pars_.timesno << " File: " << str << " cound not be found\n";
172 fout.close();
173 r5pars_.sim_err = true;
174 g_sim.Branch_center.setTempESMessage("Operator::initiationForSimulation ActionTaker.txt err.");
176 } else {
177 fin >> str1 >> num
178 >> str1 >> action_time_multiplier
181 >> str1 >> scan_queue_limit
182 >> str1 >> low_info_load_limit
183 >> str1 >> upper_info_load_limit
184 >> str1 >> alarm_t_min >> alarm_alpha >> alarm_beta
185 >> str1 >> comp_t_min >> comp_alpha >> comp_beta
186 >> str1 >> ss_t_min >> ss_alpha >> ss_beta
187 >> str1 >> param_t_min >> param_alpha >> param_beta
188 >> str1 >> skip_action_threshold
194 >> str1 >> procedure_use_probability;
195 fin.close();
197 this->information_load.setLowerInfoLoadThreshold(low_info_load_limit);
198 this->information_load.setUpperInfoLoadThreshold(upper_info_load_limit);
199 this->memory.alarm_update_time.setT_Minimum(alarm_t_min);
200 this->memory.alarm_update_time.setAlpha_Weibull(alarm_alpha);
201 this->memory.alarm_update_time.setBeta_Weibull(alarm_beta);
202 this->memory.component_update_time.setT_Minimum(comp_t_min);
208 this->memory.parameter_update_time.setT_Minimum(param_t_min);
211 }
212 //
213 // initialize event diagnosis data
214 str = str_base + "KB_OAT_Event_Matrix.txt";
216 //
217 // initialize time constrained loading data
218 str = str_base + "KB_OAT_Time_Constrained_Input.txt";
220 //
221 // initialize control panel scanned parameters
222 str = str_base + "KB_OAT_Scanned_Parameters.txt";
224 //
225 str = str_base + "KB_OAT_Safety_Parameters.txt";
227 //
228 str = str_base + "KB_OAT_Diagnosis_Actions.txt";
230 } else {
231 //
232 // Still need to add event diagnosis and time constrianed modules to OCT
233 //
235 str += "Consultant.txt";
236 fin.open(str.c_str(), ios::in);
237 if (!fin.is_open()) {
238 cout << "File: " << str << " cound not be found" << endl;
239 ofstream fout("err messages.txt", ios::app);
240 fout << r5pars_.timesno << " File: " << str << " cound not be found\n";
241 fout.close();
242 r5pars_.sim_err = true;
243 g_sim.Branch_center.setTempESMessage("Operator::initiationForSimulation Consultant.txt err.");
245 } else {
246 fin >> str1 >> num
247 >> str1 >> action_time_multiplier
250 >> str1 >> skip_action_threshold
254 fin.close();
256 }
257 if (use_of_old_info_probability < 0.000001) {
260 } else if (use_of_old_info_probability > 0.999999) {
263 }
264 }
268 //
269
270 //caution, only decision maker runs the reasoning module
272 this->m_RM = make_unique<ReasonMachine>();
273 this->m_RM->m_operator = this->type_of_operator;
274 this->m_RM->InitiationOfReasonMachineFromInputFile();
275 //Temporary codes
276 ofstream fout("RMI.txt", ios::out);
277 fout << "Reasoning Module Information" << '\n';
278 fout.close();
279
280 ofstream fout1("AuxInfo.txt", ios::out);
281 fout1 << "Aux Information" << '\n';
282 fout1.close();
283
284 ofstream fout2("Semantic_Base.txt", ios::out);
285 fout2 << "ODM's Semantic Pool" << '\n';
286 fout2.close();
287 }
288}
290 bool found_indicator = false;
291 double biased_value;
292 for (auto& bf_ptr : this->knowledge_base.indicator_bias_factors) {
293 if (bf_ptr->getTotalTimeRequired() < r5pars_.timesno) {
294 for (auto &parameter_value_elem : this->memory.new_info.parameter_value) {
295 //
296 // bias parameter values
297 if (bf_ptr->getInfoName() == parameter_value_elem->getInfoName()
298 && parameter_value_elem->getSender() == sim::Source::Plant) {
299 switch (bf_ptr->getTypeOfBias()) {
301 biased_value = parameter_value_elem->getObservedParameterValue() + bf_ptr->getBiasFactor();
302 parameter_value_elem->setObservedParameterValue(biased_value);
303 break;
305 biased_value = parameter_value_elem->getObservedParameterValue() * bf_ptr->getBiasFactor();
306 parameter_value_elem->setObservedParameterValue(biased_value);
307 break;
308 case sim::Compare::EQ: biased_value = bf_ptr->getBiasFactor();
309 parameter_value_elem->setObservedParameterValue(biased_value);
310 break;
311 case sim::Compare::GT: biased_value = bf_ptr->getBiasFactor();
312 if (parameter_value_elem->getObservedParameterValue() <= biased_value) {
313 parameter_value_elem->setObservedParameterValue(biased_value);
314 }
315 break;
316 case sim::Compare::GE: biased_value = bf_ptr->getBiasFactor();
317 if (parameter_value_elem->getObservedParameterValue() <= biased_value) {
318 parameter_value_elem->setObservedParameterValue(biased_value);
319 }
320 break;
321 case sim::Compare::LT: biased_value = bf_ptr->getBiasFactor();
322 if (parameter_value_elem->getObservedParameterValue() >= biased_value) {
323 parameter_value_elem->setObservedParameterValue(biased_value);
324 }
325 break;
326 case sim::Compare::LE: biased_value = bf_ptr->getBiasFactor();
327 if (parameter_value_elem->getObservedParameterValue() >= biased_value) {
328 parameter_value_elem->setObservedParameterValue(biased_value);
329 }
330 break;
331 default: break;
332 }
333 }
334 }
335 //
336 // bias parameters used for parameter difference compariosn
337 for (auto &parameter_difference_elem : this->memory.new_info.parameter_difference) {
338
339 if (bf_ptr->getInfoName() == parameter_difference_elem->first_indicator.getInfoName()
340 && parameter_difference_elem->getSender() == sim::Source::Plant) {
341 switch (bf_ptr->getTypeOfBias()) {
343 biased_value = parameter_difference_elem->first_mental_parameter.getObservedParameterValue()
344 + bf_ptr->getBiasFactor();
345 parameter_difference_elem->first_mental_parameter.setObservedParameterValue(biased_value);
346 break;
348 biased_value = parameter_difference_elem->first_mental_parameter.getObservedParameterValue()
349 * bf_ptr->getBiasFactor();
350 parameter_difference_elem->first_mental_parameter.setObservedParameterValue(biased_value);
351 break;
352 case sim::Compare::EQ: biased_value = bf_ptr->getBiasFactor();
353 parameter_difference_elem->first_mental_parameter.setObservedParameterValue(biased_value);
354 break;
355 case sim::Compare::GT: biased_value = bf_ptr->getBiasFactor();
356 if (parameter_difference_elem->first_mental_parameter.getObservedParameterValue() <= biased_value) {
357 parameter_difference_elem->first_mental_parameter.setObservedParameterValue(biased_value);
358 }
359 break;
360 case sim::Compare::GE: biased_value = bf_ptr->getBiasFactor();
361 if (parameter_difference_elem->first_mental_parameter.getObservedParameterValue() <= biased_value) {
362 parameter_difference_elem->first_mental_parameter.setObservedParameterValue(biased_value);
363 }
364 break;
365 case sim::Compare::LT: biased_value = bf_ptr->getBiasFactor();
366 if (parameter_difference_elem->first_mental_parameter.getObservedParameterValue() >= biased_value) {
367 parameter_difference_elem->first_mental_parameter.setObservedParameterValue(biased_value);
368 }
369 break;
370 case sim::Compare::LE: biased_value = bf_ptr->getBiasFactor();
371 if (parameter_difference_elem->first_mental_parameter.getObservedParameterValue() >= biased_value) {
372 parameter_difference_elem->first_mental_parameter.setObservedParameterValue(biased_value);
373 }
374 break;
375 default: break;
376 }
377 }
378 if (bf_ptr->getInfoName() == parameter_difference_elem->second_indicator.getInfoName()
379 && parameter_difference_elem->getSender() == sim::Source::Plant) {
380 switch (bf_ptr->getTypeOfBias()) {
382 biased_value = parameter_difference_elem->second_mental_parameter.getObservedParameterValue()
383 + bf_ptr->getBiasFactor();
384 parameter_difference_elem->second_mental_parameter.setObservedParameterValue(biased_value);
385 break;
387 biased_value = parameter_difference_elem->second_mental_parameter.getObservedParameterValue()
388 * bf_ptr->getBiasFactor();
389 parameter_difference_elem->second_mental_parameter.setObservedParameterValue(biased_value);
390 break;
391 case sim::Compare::EQ: biased_value = bf_ptr->getBiasFactor();
392 parameter_difference_elem->second_mental_parameter.setObservedParameterValue(biased_value);
393 break;
394 case sim::Compare::GT: biased_value = bf_ptr->getBiasFactor();
395 if (parameter_difference_elem->second_mental_parameter.getObservedParameterValue() <= biased_value) {
396 parameter_difference_elem->second_mental_parameter.setObservedParameterValue(biased_value);
397 }
398 break;
399 case sim::Compare::GE: biased_value = bf_ptr->getBiasFactor();
400 if (parameter_difference_elem->second_mental_parameter.getObservedParameterValue() <= biased_value) {
401 parameter_difference_elem->second_mental_parameter.setObservedParameterValue(biased_value);
402 }
403 break;
404 case sim::Compare::LT: biased_value = bf_ptr->getBiasFactor();
405 if (parameter_difference_elem->second_mental_parameter.getObservedParameterValue() >= biased_value) {
406 parameter_difference_elem->second_mental_parameter.setObservedParameterValue(biased_value);
407 }
408 break;
409 case sim::Compare::LE: biased_value = bf_ptr->getBiasFactor();
410 if (parameter_difference_elem->second_mental_parameter.getObservedParameterValue() >= biased_value) {
411 parameter_difference_elem->second_mental_parameter.setObservedParameterValue(biased_value);
412 }
413 break;
414 default: break;
415 }
416 }
417 }
418 }
419 }
420}
422// the quantification filter limits the amount of information that an operator can
423// obtain from a control panel scan to less than the queue size limit
424{
425 int priority_limit;
426 bool found;
427 bool reduce_limit;
428 decltype(scanned_indicators.parameter_scan_list)::iterator parameter_itr;
429 decltype(scanned_indicators.component_scan_list)::iterator component_itr;
430 decltype(scanned_indicators.support_system_scan_list)::iterator support_system_itr;
431 decltype(scanned_indicators.alarm_scan_list)::iterator alarm_itr;
432
433 double dynamic_queue_limit;
434 // initially set priority limit to only remove low priority information
435 priority_limit = this->scanned_indicators.getPriorityLimit();
436 //
437 // adjust scanned parameter priority based on time in queue and relevance to current diagnosis
438 // Item priority is reduced based on the age of the item in the queue and its relevance to the diagnosis
439 // Decayed items are collected and removed after each pass: erasing mid-loop
440 // invalidates the vector iterators (UB when the erased item is the first element).
441 vector<string> decayed;
442 for (auto &item : scanned_indicators.parameter_scan_list) {
443 if ((r5pars_.timesno - item->getT_Minimum()) > this->scanned_indicators.getPriorityDecayTime()) {
444 if (this->checkItemRelevanceToCurrentDiagnosis(item->getInfoName())
446 item->setDecision(item->getDecision() + 1);
447 if (item->getDecision() > priority_limit) {
448 decayed.push_back(item->getDisplayName());
449 } else {
450 item->setT_Minimum(r5pars_.timesno);
451 }
452 }
453 }
454 }
455 for (const auto &name : decayed) { this->scanned_indicators.removeScannedParameter(name); }
456 decayed.clear();
457 for (auto &item : scanned_indicators.component_scan_list) {
458 if ((r5pars_.timesno - item->getT_Minimum()) > this->scanned_indicators.getPriorityDecayTime()) {
459 if (this->checkItemRelevanceToCurrentDiagnosis(item->getInfoName())
461 item->setDecision(item->getDecision() + 1);
462 if (item->getDecision() > priority_limit) {
463 decayed.push_back(item->getDisplayName());
464 } else {
465 item->setT_Minimum(r5pars_.timesno);
466 }
467 }
468 }
469 }
470 for (const auto &name : decayed) { this->scanned_indicators.removeScannedComponent(name); }
471 decayed.clear();
473 if ((r5pars_.timesno - item->getT_Minimum()) > this->scanned_indicators.getPriorityDecayTime()) {
474 if (this->checkItemRelevanceToCurrentDiagnosis(item->getInfoName())
476 item->setDecision(item->getDecision() + 1);
477 if (item->getDecision() > priority_limit) {
478 decayed.push_back(item->getDisplayName());
479 } else {
480 item->setT_Minimum(r5pars_.timesno);
481 }
482 }
483 }
484 }
485 for (const auto &name : decayed) { this->scanned_indicators.removeScannedSupportSystem(name); }
486 decayed.clear();
487 for (auto &item : scanned_indicators.alarm_scan_list) {
488 if ((r5pars_.timesno - item->getT_Minimum()) > this->scanned_indicators.getPriorityDecayTime()) {
489 if (this->checkItemRelevanceToCurrentDiagnosis(item->getAlarmName())
491 item->setDecision(item->getDecision() + 1);
492 if (item->getDecision() > priority_limit) {
493 decayed.push_back(item->getAlarmName());
494 } else {
495 item->setT_Minimum(r5pars_.timesno);
496 }
497 }
498 }
499 }
500 for (const auto &name : decayed) { this->scanned_indicators.removeScannedAlarm(name); }
501 decayed.clear();
502 //
503 // if scanned_indicator queue exceeds maximum size, remove items based on their priority
504 // determine dynamic scan queue size
505 dynamic_queue_limit = scan_queue_limit;
506 // adjust for information load
507 dynamic_queue_limit *=
509 // adjust for perceived criticality of situation
510 dynamic_queue_limit *=
512 //
513 // ensure dynamic_queue_limit remians within appropriate limits
514 if (dynamic_queue_limit > scan_queue_limit) { dynamic_queue_limit = scan_queue_limit; }
515 if (dynamic_queue_limit < 0) { dynamic_queue_limit = 0; }
516 //
517 while (this->scanned_indicators.getScanListSize() > dynamic_queue_limit) {
518 reduce_limit = true;
519 found = false;
520 // attempt to remove low priority scanned alarm
521 alarm_itr = this->scanned_indicators.alarm_scan_list.begin();
522 while (alarm_itr != this->scanned_indicators.alarm_scan_list.end() && !found) {
523 if ((*alarm_itr)->getDecision() >= priority_limit) {
524 this->scanned_indicators.removeScannedAlarm((*alarm_itr)->getAlarmName());
525 found = true;
526 reduce_limit = false;
527 break; // alarm_itr is invalidated by the erase
528 }
529 alarm_itr++;
530 }
531 //
532 // attempt to remove low priority scanned component
533 component_itr = this->scanned_indicators.component_scan_list.begin();
534 while (component_itr != this->scanned_indicators.component_scan_list.end() && !found) {
535 if ((*component_itr)->getDecision() >= priority_limit) {
536 this->scanned_indicators.removeScannedComponent((*component_itr)->getDisplayName());
537 found = true;
538 reduce_limit = false;
539 break; // component_itr is invalidated by the erase
540 }
541 component_itr++;
542 }
543 //
544 // attempt to remove low priority scanned support system
545 support_system_itr = this->scanned_indicators.support_system_scan_list.begin();
546 while (support_system_itr != this->scanned_indicators.support_system_scan_list.end() && !found) {
547 if ((*support_system_itr)->getDecision() >= priority_limit) {
548 this->scanned_indicators.removeScannedSupportSystem((*support_system_itr)->getDisplayName());
549 found = true;
550 reduce_limit = false;
551 break; // support_system_itr is invalidated by the erase
552 }
553 support_system_itr++;
554 }
555 //
556 // attempt to remove low priority scanned parameter
557 parameter_itr = this->scanned_indicators.parameter_scan_list.begin();
558 while (parameter_itr != this->scanned_indicators.parameter_scan_list.end() && !found) {
559 if ((*parameter_itr)->getDecision() >= priority_limit) {
560 this->scanned_indicators.removeScannedParameter((*parameter_itr)->getDisplayName());
561 found = true;
562 reduce_limit = false;
563 break; // parameter_itr is invalidated by the erase
564 }
565 parameter_itr++;
566 }
567 //
568 // if no scanned parameter can be eliminated, reduce the priority limit
569 if (reduce_limit) {
570 priority_limit = priority_limit - 1;
571 priority_limit = fmax(1, priority_limit);
572 }
573
574 }
575
576}
578 pause_activity = bl;
579}
585}
599 //this->Relap_PIFs.copyPIFRelap(_op.Relap_PIFs);
627
628 // NOTE: hfe_bbn is deliberately NOT copied into the snapshot, so every
629 // restored branch starts its first decision cycle from default (zero) PSF
630 // posteriors until updateEvidenceForAllPSFs runs at the end of that tick,
631 // while the in-line sibling branch uses live PSFs. This is consistent
632 // across serial, MPI and checkpoint runs, but it biases HEP values at
633 // branch points. Copying it here is a one-line change that CHANGES RESULTS
634 // in all modes, so it requires new gold baselines.
635
636 // RM gate: with the reasoning cycle disabled (the default), nothing reads
637 // the snapshot's RM, so the clone + Build at every branch point is skipped.
638 // A null snapshot RM also keeps the rm_data blob out of every MPI transfer
639 // and checkpoint (has_rm=false in Operator::serialize).
640 // See docs/developer/internals/reason-machine-status.md before enabling it.
641 if (g_sim.config.rm_cycle_enabled && _op.m_RM != nullptr) {
642 this->m_RM = make_unique<ReasonMachine>();
643 this->m_RM->CopyReasonMachineFromAnotherRM(_op.m_RM.get());
644 this->m_RM->BuildTheConnectionsWithinRM();
645 }
646}
651 //this->Relap_PIFs.copyPIFRelap(_op.Relap_PIFs);
679
680 // RM gate: with the reasoning cycle disabled, the live RM persists across
681 // sequences (as in the MPI restore path below, which does not clone). Only
682 // the disabled cycle's input queues are reset, which gives the same state
683 // as a fresh clone.
684 if (g_sim.config.rm_cycle_enabled && _op.m_RM != nullptr) {
685 this->m_RM = make_unique<ReasonMachine>();
686 this->m_RM->CopyReasonMachineFromAnotherRM(_op.m_RM.get());
687 this->m_RM->BuildTheConnectionsWithinRM();
688 } else if (this->m_RM != nullptr) {
689 this->m_RM->ClearTBIListsForRestart();
690 }
692}
697 //this->Relap_PIFs.copyPIFRelap(_op.Relap_PIFs);
725
726 // RM gate: this MPI restore path does not clone the RM (the live RM
727 // persists across sequences here). With the reasoning cycle disabled it
728 // also resets the disabled cycle's input queues, same as the serial
729 // restore path.
730 if (!g_sim.config.rm_cycle_enabled && this->m_RM != nullptr) {
731 this->m_RM->ClearTBIListsForRestart();
732 }
733}
738 //this->Relap_PIFs.clearPIFRelap();
745}
750 //this->Relap_PIFs.clearPIFRelap();
757}
758
761 this->knowledge_base.clearKB();
763 //this->Relap_PIFs.clearPIFRelap();
770}
773 this->knowledge_base.clearKB();
774 //this->Relap_PIFs.clearPIFRelap();
781}
782
796 decltype(knowledge_base.hard_wired_diagnosis)::iterator hwd_itr;
797// BranchDiagnosis *dia_active, *dia_not_active;
798 BranchExpectedMentalBelief *mb_active, *mb_not_active;
800 ExpectedMentalBelief *mb_ptr = 0;
801 double active_probability, time_delay, activation_time;
802 double cdf_lower, cdf_upper, delta_cdf, activation_branch_probability;
803 int i, number_of_branches;
804 bool branch_generated = false;
805 hwd_itr = this->knowledge_base.hard_wired_diagnosis.begin();
806 while (hwd_itr != this->knowledge_base.hard_wired_diagnosis.end() && !branch_generated) {
807 //
808 // reset activation if timer has expired
809 if ((*hwd_itr)->getStateOfActivation() == sim::State::Succeed) {
810 //
811 // reset state of mental diagnosis based on dormancy time
812 if ((*hwd_itr)->dormancy_time.getTotalTimeRequired() < r5pars_.timesno) {
813 (*hwd_itr)->setStateOfActivation(sim::None);
814 mb_ptr = this->memory.perceived_info.checkExistanceOfMentalBelief((*hwd_itr)->getInfoName());
815 if (mb_ptr != 0) {
816 //reset set of activation for memorized mental belief
819 mb_ptr->getStateOfActivation());
820 }
821 }
822 }
823 //
824 //if((*hwd_itr)->getConfidenceLevel() >= threshold_value_for_HWKB_confidence && (*hwd_itr)->getStateOfActivation() == sim::None){
825 if ((*hwd_itr)->getConfidenceLevel() >= (*hwd_itr)->activation_probability.getProbability()
826 && (*hwd_itr)->getStateOfActivation() == sim::None) {
827 (*hwd_itr)->setStateOfActivation(sim::State::Succeed);
828 // set dormancy time delay before hard wired diagnosis can be reactived
829 time_delay = (*hwd_itr)->dormancy_time.calculateMeanRequiredTime() + r5pars_.timesno;
830 (*hwd_itr)->dormancy_time.setBothTotalTimeRequiredAndRemainingTime(time_delay);
831 //
832 // set activation time for mental procedure (activation time sets time lag between the mental diagnosis and proceedure initiation)
833 bmp_atu_pt =
835 (*hwd_itr)->getProcedureName());
836 if (bmp_atu_pt != 0) {
837 number_of_branches = bmp_atu_pt->getNumberOfBranches();
838 } else {
839 number_of_branches = 1;
840 }
841 activation_branch_probability = 1.0 / ((double) number_of_branches);
842 delta_cdf = 1.0 / ((double) number_of_branches);
843 for (i = 0; i != number_of_branches; i++) {
844 // calculate time required to perform action
845 cdf_lower = delta_cdf * ((double) i);
846 cdf_upper = delta_cdf * ((double) (i + 1));
847 activation_time =
848 (*hwd_itr)->activation_delay.calculateMeanRequiredTime(cdf_lower, cdf_upper) + r5pars_.timesno;
849 if ((*hwd_itr)->branch_probability.getProbability()
850 > 0.999999) {//when the probability is set to close to one, generate only success branches
851 mb_active = new BranchExpectedMentalBelief();
852 mb_active->setInfoName((*hwd_itr)->getInfoName());
853 mb_active->setMentalPriority((*hwd_itr)->getMentalProcedurePriority());
854 mb_active->setActivationTime(activation_time);
856 /*
857 cout << "-------------------\n";
858 cout << type_of_operator << "\n";
859 cout << -1.0*this->hfe_bbn.getMentalProcedureFailureProbability();
860 cout << "\n-------------------\n";
861 */
862 mb_active->setProbability(1.0 - activation_branch_probability * this->hfe_bbn.getMentalProcedureFailureProbability());
867 branch_generated = true;
868 } else if ((*hwd_itr)->branch_probability.getProbability()
869 < 0.000001) {//when the probability is set to close to zero, do nothing
870 } else { //otherwise, generate success branch(es) and one failure(bypass) branch
871 active_probability = (*hwd_itr)->branch_probability.getProbability();
872 mb_active = new BranchExpectedMentalBelief();
873 mb_active->setInfoName((*hwd_itr)->getInfoName());
874 mb_active->setMentalPriority((*hwd_itr)->getMentalProcedurePriority());
875 mb_active->setActivationTime(activation_time);
877 mb_active->setProbability(1.0 - active_probability * activation_branch_probability * this->hfe_bbn.getMentalProcedureFailureProbability());
882 //
883 if (i == (number_of_branches - 1)) // generate one mental belief failure (bypass) branch
884 {
885 mb_not_active = new BranchExpectedMentalBelief();
886 mb_not_active->setInfoName((*hwd_itr)->getInfoName());
887 mb_not_active->setMentalPriority((*hwd_itr)->getMentalProcedurePriority());
889 mb_not_active->setBothTotalTimeRequiredAndRemainingTime(-1.0);
890 //mb_not_active->setProbability((1.0 - active_probability) * activation_branch_probability);
891 mb_not_active->setProbability(active_probability * activation_branch_probability * this->hfe_bbn.getMentalProcedureFailureProbability());
895 branch_generated = true;
896 }
897 }
898 }
899 } else {
900 // do nothing
901 }
902 hwd_itr++;
903 }
904 return branch_generated;
905}
916
919 int num_branch = 0;
922 if (use_of_old_info_probability < 0.999999
923 && use_of_old_info_probability > 0.000001) {//two branches for used of old info and checking for new info
924 this->setPauseActivity(true);
925 bigm = new BranchInfoGatherMode();
931 //
932 bigm = new BranchInfoGatherMode();
938 num_branch = 2;
939 } else if (use_of_old_info_probability > 0.999999) {//use the old (memorized) information only
940 this->setPauseActivity(true);
942 bigm = new BranchInfoGatherMode();
948 num_branch = 1;
949 } else {//check for the new information only
950 this->setPauseActivity(true);
951 bigm = new BranchInfoGatherMode();
957 num_branch = 1;
958 }
959 }
960 return num_branch;
961}
964void Operator::saveOperatorToFile(ofstream &fout) {
965 int i_pause_activity, i_pause_mental_procedure, i_abnormal_signal_perceived;
966 int i_skip_procedure_step, i_skip_instinctive_response_step;
967 int i_info_gather_mode_branch_generated, i_block_troubleshooting, i_block_procedures;
968 int i_new_branch_generated;
969 i_pause_activity = 0;
970 i_pause_mental_procedure = 0;
971 i_new_branch_generated = 0;
972 i_abnormal_signal_perceived = 0;
973 i_skip_procedure_step = 0;
974 i_skip_instinctive_response_step = 0;
975 i_info_gather_mode_branch_generated = 0;
976 i_block_troubleshooting = 0;
977 i_block_procedures = 0;
978 if (pause_activity) i_pause_activity = 1;
979 if (pause_mental_procedure) i_pause_mental_procedure = 1;
980 if (new_branch_generated) i_new_branch_generated = 1;
981 if (abnormal_signal_perceived) i_abnormal_signal_perceived = 1;
982 if (skip_procedure_step) i_skip_procedure_step = 1;
983 if (skip_instinctive_response_step) i_skip_instinctive_response_step = 1;
984 if (info_gather_mode_branch_generated) i_info_gather_mode_branch_generated = 1;
985 if (block_troubleshooting) i_block_troubleshooting = 1;
986 if (block_procedure_use) i_block_procedures = 1;
987 fout << "Operator "
988 << i_pause_activity << ' '
989 << i_pause_mental_procedure << ' '
990 << i_new_branch_generated << ' '
991 << i_abnormal_signal_perceived << ' '
993 << i_skip_procedure_step << ' '
994 << i_skip_instinctive_response_step << ' '
995 << skip_action_threshold << ' '
997 << i_info_gather_mode_branch_generated << ' '
998 << i_block_troubleshooting << ' '
999 << i_block_procedures << ' '
1000 << type_of_operator << ' '
1003 << action_time_multiplier << ' '
1007 << scan_queue_limit << ' '
1008 << use_of_old_info_probability << '\n';
1010 this->knowledge_base.saveKBToFile(fout);
1012 //this->Relap_PIFs.savePIFRelapToFile(fout);
1019}
1021 int i_pause_activity, i_pause_mental_procedure, i_abnormal_signal_perceived;
1022 int i_skip_procedure_step, i_skip_instinctive_response_step;
1023 int i_info_gather_mode_branch_generated, i_block_troubleshooting, i_block_procedures;
1024 int i_new_branch_generated;
1025 string str;
1026 pause_activity = false;
1027 pause_mental_procedure = false;
1028 new_branch_generated = false;
1030 skip_procedure_step = false;
1033 block_troubleshooting = false;
1034 block_procedure_use = false;
1035 fin >> str;
1036 if (str != "Operator") {
1037 ofstream fout("err messages.txt", ios::app);
1038 cout << "Operator::retrieveOperatorFromFile File retrieval error in previous function" << endl;
1039 fout << r5pars_.timesno << " Operator::retrieveOperatorFromFile File retrieval error in previous function\n";
1040 fout.close();
1041 r5pars_.sim_err = true;
1042 g_sim.Branch_center.setTempESMessage("Operator::retrieveOperatorFromFile Prior error");
1044 return;
1045 }
1046 fin >> i_pause_activity
1047 >> i_pause_mental_procedure
1048 >> i_new_branch_generated
1049 >> i_abnormal_signal_perceived
1051 >> i_skip_procedure_step
1052 >> i_skip_instinctive_response_step
1055 >> i_info_gather_mode_branch_generated
1056 >> i_block_troubleshooting
1057 >> i_block_procedures
1067 if (i_pause_activity == 1) pause_activity = true;
1068 if (i_pause_mental_procedure == 1) pause_mental_procedure = true;
1069 if (i_new_branch_generated == 1) new_branch_generated = true;
1070 if (i_abnormal_signal_perceived == 1) abnormal_signal_perceived = true;
1071 if (i_skip_procedure_step == 1) skip_procedure_step = true;
1072 if (i_skip_instinctive_response_step == 1) skip_instinctive_response_step = true;
1073 if (i_info_gather_mode_branch_generated == 1) info_gather_mode_branch_generated = true;
1074 if (i_block_troubleshooting == 1) block_troubleshooting = true;
1075 if (i_block_procedures == 1) block_procedure_use = true;
1079 //this->Relap_PIFs.retrievePIFRelapFromFile(fin);
1086}
1088 vector<unique_ptr<AlarmParameter>>::iterator ap_itr;
1089 vector<unique_ptr<AlarmComponent>>::iterator ac_itr;
1090 vector<unique_ptr<AlarmTwoParameterDifference>>::iterator atpd_itr;
1091 vector<unique_ptr<ControlState>>::iterator cs_itr;
1092 vector<unique_ptr<ControlValue>>::iterator cv_itr;
1093 vector<unique_ptr<DisplayComponentState>>::iterator dcs_itr;
1094 vector<unique_ptr<DisplaySupportSystemState>>::iterator dsss_itr;
1095 vector<unique_ptr<DisplayParameterValue>>::iterator dpv_itr;
1096 vector<unique_ptr<DisplayHeatStructure>>::iterator dhs_itr; //meash points are the objects stored
1097 vector<unique_ptr<DisplayParameterValueRate>>::iterator dpvr_itr;
1098 vector<StringContainer *> not_found_item;
1099 string name_list = "";
1100 bool found_mismatch = false;
1101 map<string, KBSystemDecompositionUnit *>::const_iterator map_itr;
1102
1103 for (ap_itr = g_sim.Indicator.alarms.alarm_parameter_value_array.begin();
1104 ap_itr != g_sim.Indicator.alarms.alarm_parameter_value_array.end(); ap_itr++) {
1105 map_itr = this->knowledge_base.system_decomposition_map.find((*ap_itr)->getAlarmName());
1106 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1107 found_mismatch = true;
1108 name_list += (*ap_itr)->getAlarmName();
1109 name_list += ",\n";
1110 }
1111 }
1112 for (ac_itr = g_sim.Indicator.alarms.alarm_component_state_array.begin();
1113 ac_itr != g_sim.Indicator.alarms.alarm_component_state_array.end(); ac_itr++) {
1114 map_itr = this->knowledge_base.system_decomposition_map.find((*ac_itr)->getAlarmName());
1115 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1116 found_mismatch = true;
1117 name_list += (*ac_itr)->getAlarmName();
1118 name_list += ",\n";
1119 }
1120 }
1121 for (atpd_itr = g_sim.Indicator.alarms.alarm_value_difference_array.begin();
1122 atpd_itr != g_sim.Indicator.alarms.alarm_value_difference_array.end(); atpd_itr++) {
1123 map_itr = this->knowledge_base.system_decomposition_map.find((*atpd_itr)->getAlarmName());
1124 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1125 found_mismatch = true;
1126 name_list += (*atpd_itr)->getAlarmName();
1127 name_list += ",\n";
1128 }
1129 }
1131 cs_itr++) {
1132 map_itr = this->knowledge_base.system_decomposition_map.find((*cs_itr)->getDisplayName());
1133 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1134 found_mismatch = true;
1135 name_list += (*cs_itr)->getDisplayName();
1136 name_list += ",\n";
1137 }
1138 }
1140 cv_itr++) {
1141 map_itr = this->knowledge_base.system_decomposition_map.find((*cv_itr)->getDisplayName());
1142 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1143 found_mismatch = true;
1144 name_list += (*cv_itr)->getDisplayName();
1145 name_list += ",\n";
1146 }
1147 }
1148 for (dcs_itr = g_sim.Indicator.indicators.component_state_array.begin();
1149 dcs_itr != g_sim.Indicator.indicators.component_state_array.end(); dcs_itr++) {
1150 map_itr = this->knowledge_base.system_decomposition_map.find((*dcs_itr)->getDisplayName());
1151 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1152 found_mismatch = true;
1153 name_list += (*dcs_itr)->getDisplayName();
1154 name_list += ",\n";
1155 }
1156 }
1157 for (dsss_itr = g_sim.Indicator.indicators.support_systems_state_array.begin();
1158 dsss_itr != g_sim.Indicator.indicators.support_systems_state_array.end(); dsss_itr++) {
1159 map_itr = this->knowledge_base.system_decomposition_map.find((*dsss_itr)->getDisplayName());
1160 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1161 found_mismatch = true;
1162 name_list += (*dsss_itr)->getDisplayName();
1163 name_list += ",\n";
1164 }
1165 }
1166 for (dpv_itr = g_sim.Indicator.indicators.parameter_value_array.begin();
1167 dpv_itr != g_sim.Indicator.indicators.parameter_value_array.end(); dpv_itr++) {
1168 map_itr = this->knowledge_base.system_decomposition_map.find((*dpv_itr)->getDisplayName());
1169 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1170 found_mismatch = true;
1171 name_list += (*dpv_itr)->getDisplayName();
1172 name_list += ",\n";
1173 }
1174 }
1175 for (dhs_itr = g_sim.Indicator.indicators.heat_structure_array.begin();
1176 dhs_itr != g_sim.Indicator.indicators.heat_structure_array.end(); dhs_itr++) {
1177 map_itr = this->knowledge_base.system_decomposition_map.find((*dhs_itr)->getDisplayName());
1178 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1179 found_mismatch = true;
1180 name_list += (*dhs_itr)->getDisplayName();
1181 name_list += ",\n";
1182 }
1183 }
1184 for (dpvr_itr = g_sim.Indicator.indicators.parameter_trend_array.begin();
1185 dpvr_itr != g_sim.Indicator.indicators.parameter_trend_array.end(); dpvr_itr++) {
1186 map_itr = this->knowledge_base.system_decomposition_map.find((*dpvr_itr)->getDisplayName());
1187 if (map_itr == this->knowledge_base.system_decomposition_map.end()) {
1188 found_mismatch = true;
1189 name_list += (*dpvr_itr)->getDisplayName();
1190 name_list += ",\n";
1191 }
1192 }
1193//output not found items
1194 if (found_mismatch) {
1195 cout << "Operator " << _operator
1196 << " The following ControlPanel elements do not exist in teh operators KB_OYY_System_Decomposition.txt file\n"
1197 << name_list << endl;
1198 ofstream fout("err messages.txt", ios::app);
1199 fout << r5pars_.timesno << " Operator " << _operator
1200 << " The following ControlPanel elements do not exist in teh operators KB_OYY_System_Decomposition.txt file\n"
1201 << name_list;
1202 fout.close();
1203 r5pars_.sim_err = true;
1204 g_sim.Branch_center.setTempESMessage("Operator::checkCompletenessOfSystemDecomposition err.");
1206 }
1207}
1208
1210 map<string, KBSystemDecompositionUnit *>::const_iterator map_itr;
1212 int number_of_functions, function_id, i;
1213 string function_name;
1214 double relevance = 0.0;
1215 if (_str == "Procedure") {
1216 // set relevance factor for procedure transfers to 0.5 (this results in a multiplier of 1.0)
1217 relevance = 0.5;
1218 } else {
1219 map_itr = this->knowledge_base.system_decomposition_map.find(_str);
1220 if (map_itr != this->knowledge_base.system_decomposition_map.end()) {
1221 sdu_pt = map_itr->second;
1222 number_of_functions = sdu_pt->getNumberOfRelatedSubsystem();
1223 for (i = 0; i < number_of_functions; i++) {
1224 function_id = sdu_pt->getRelatedSubsystem(i);
1225 function_name = this->knowledge_base.getAssociatedFunctionalDecompositionName(function_id);
1226 relevance = fmax(relevance, this->diagnosis_matrix.getEventRationalConfidence(function_name));
1227 }
1228 }
1229 }
1230 return relevance;
1231}
1232
1233bool Operator::performAMentalProcedure(int _operator, string _in_use_procedure_name, string _in_use_step_name) {
1234 string _procedure_name, _step_name, diagnosis, str, str1;
1235 DecisionProcedureStep *procedure_pt = 0;
1236 BranchProcedureStep *b_procedure_pt;
1237 int state_of_activation;
1238 ProcedureStep *_procedure_step_pt;
1239 map<string, ProcedureStep *>::iterator procedure_map_itr;
1240//
1241 bool branch_generated = false;
1242 procedure_pt =
1243 this->memory.perceived_info.identifyTheMentalProcedureToBePerformed(_in_use_procedure_name, _in_use_step_name);
1244 if (procedure_pt == 0) {
1245 if (_operator == sim::Operator::ODM) {
1246 str = "OperatorDM::performAMentalProcedure: No mental procedure is found.";
1247 str1 = "OperatorDM::performAMentalProcedure err.";
1248 } else if (_operator == sim::Operator::OAT) {
1249 str = "OperatorAT::performAMentalProcedure: No mental procedure is found.";
1250 str1 = "OperatorAT::performAMentalProcedure err.";
1251 } else {
1252 str = "OperatorCT::performAMentalProcedure: No mental procedure is found.";
1253 str1 = "OperatorCT::performAMentalProcedure err.";
1254 }
1255 ofstream fout("err messages.txt", ios::app);
1256 cout << str << endl;
1257 fout << r5pars_.timesno << " " << str << '\n';
1258 fout.close();
1259 r5pars_.sim_err = true;
1262 } else {
1263 state_of_activation = procedure_pt->getStateOfActivation();
1264 if (state_of_activation == sim::None) {
1266 _procedure_name = procedure_pt->getProcedureName();
1267 _step_name = procedure_pt->getStepName();
1268 b_procedure_pt = new BranchProcedureStep();
1269 b_procedure_pt->setSenderAndReceiver(_operator, _operator);//(sender, receiver)
1270 b_procedure_pt->setTimerAndProbability(0.0, 1.0 - this->hfe_bbn.getMentalProcedureFailureProbability());//(remaining time, probability)
1271 b_procedure_pt->setProcedureName(_procedure_name);
1272 b_procedure_pt->setStepName(_step_name);
1274 g_sim.Branch_center.addInstinctiveResponseProcedure(_operator, b_procedure_pt);
1275 branch_generated = true;
1276 } else {
1277 _procedure_name = procedure_pt->getProcedureName();
1278 _step_name = procedure_pt->getStepName();
1279 _procedure_name += _step_name;
1280 procedure_map_itr = g_sim.All_procedure.procedure_map.find(_procedure_name);
1281 if (procedure_map_itr != g_sim.All_procedure.procedure_map.end()) {
1282 _procedure_step_pt = procedure_map_itr->second;
1283 _procedure_step_pt->setStateOfActivation(sim::State::Active);
1284 branch_generated = _procedure_step_pt->oneThroughProcessForInstinctiveResponseProcedure(*this,
1285 this->getSkipActionThreshold(),
1288 this->memory);
1289 this->setSkipInstinctiveResponseStep(false);
1290 state_of_activation = _procedure_step_pt->getStateOfActivation();
1291 if (state_of_activation == sim::None || state_of_activation == sim::State::Done || state_of_activation == sim::State::Succeed) {
1292 //this->setPauseActivity(false);
1293 this->setPauseMentalProcedure(false);
1295 }
1296 } else {
1297 //the mental belief refers to an non-existing procedure
1299 //this->setPauseActivity(false);
1300 this->setPauseMentalProcedure(false);
1301 }
1302 }
1303
1304 }
1305 return branch_generated;
1306}
1307
1309 bool branch_generated = false;
1310 branch_generated =
1312 return branch_generated;
1313}
1314
1316 string action_name, sub_action_name;
1317 int sender, receiver;
1318 bool is_a_maneuver_action = false;
1320 for (auto &action_elem : g_sim.Communication_place.action) {
1321 action_name = action_elem->getActionName();
1322 if (action_name.size() > 9) {
1323 sub_action_name = action_name.substr(0, 9);
1324 sender = action_elem->getSender();
1325 receiver = action_elem->getIntendedReceiver();
1326 if (sub_action_name == "MANEUVER_" && receiver == this->type_of_operator) {
1327 if (sender == sim::Operator::OAT && receiver == sim::Operator::ODM) {
1328 // do nothing; OAT replies to ODM the starting of the maneuver control
1329 } else {
1330 this->maneuver_action.activateManeuverUnit(action_name);
1331 }
1332 }
1333 }
1334 }
1335}
1337 // resets previous procedure step when procedure transfer is due to non-response action
1338 map<string, ProcedureStep *>::iterator procedure_map_itr;
1339 vector<unique_ptr<ProcedureStepUnit>>::iterator ps_unit_itr;
1340 string last_procedure_name, last_step_name, combined_name;
1341 string sub_str;
1342 int non_response_status, non_response_type;
1343 ProcedureStep *pps_pt = 0;
1344 bool found_ps_unit = false;
1345 bool next_is_a_functional_recovery_guideline = false;
1346 bool last_is_a_mental_procedure = false;
1347 bool next_is_a_mental_procedure = false;
1348 last_procedure_name = _bps_pt->getLastProcedureName();
1349 last_step_name = _bps_pt->getLastStepName();
1350 combined_name = last_procedure_name + last_step_name;
1351 procedure_map_itr = g_sim.All_procedure.procedure_map.find(combined_name);
1352 if (procedure_map_itr != g_sim.All_procedure.procedure_map.end()) {
1353 pps_pt = procedure_map_itr->second;
1354 ps_unit_itr = (*pps_pt).procedure_step_unit.begin();
1355 while (ps_unit_itr != (*pps_pt).procedure_step_unit.end() && !found_ps_unit) {
1356 non_response_status = (*ps_unit_itr)->getStateOfExpectation();
1357 non_response_type = (*ps_unit_itr)->getTypeOfNonResponseAction();
1358 if (non_response_status == sim::State::Failed && non_response_type == sim::Branch::Procedure) {
1359 found_ps_unit = true;
1360 pps_pt->resetStateOfActivation();
1361 // reset mental procedure status for last procedure step
1362 this->memory.perceived_info.setStateOfAProcedureStep(last_procedure_name, last_step_name, sim::State::Done);
1363 //
1364 // check if paper procedure status needs to be reset
1365 if (_bps_pt->getProcedureName().size() > 4) {
1366 sub_str = _bps_pt->getProcedureName().substr(0, 4);
1367 if (sub_str == "FRG_") {
1368 next_is_a_functional_recovery_guideline = true;
1369 }
1370 }
1371 if (_bps_pt->getProcedureName().size() > 5) {
1372 sub_str = _bps_pt->getProcedureName().substr(0, 5);
1373 if (sub_str == "MPBG_") {
1374 next_is_a_mental_procedure = true;
1375 }
1376 }
1377 if (last_procedure_name.size() > 5) {
1378 sub_str = last_procedure_name.substr(0, 5);
1379 if (sub_str == "MPBG_") {
1380 last_is_a_mental_procedure = true;
1381 }
1382 }
1383 if (last_is_a_mental_procedure && !next_is_a_mental_procedure && !next_is_a_functional_recovery_guideline) {
1384 for (auto& dps_elem : this->memory.perceived_info.procedure_step) {
1385 if (dps_elem->getStateOfActivation() == sim::State::Active || dps_elem->getStateOfActivation() == sim::None) {
1386 dps_elem->setStateOfActivation(sim::State::Interrupted);
1387 }
1388 }
1389 //this->memory.perceived_info.setStateOfAProcedureStep(_bps_pt->getProcedureName(), _bps_pt->getStepName(), sim::State::Active);
1390 }
1391 //
1392 }
1393 ps_unit_itr++;
1394 } // end while
1395 }
1396}
1397
1399 ProcedureStep *procedure_step_ptr;
1400 map<string, ProcedureStep *>::iterator procedure_map_itr;
1401 string procedure_name, step_name;
1402 for (auto& mp_elem : this->memory.perceived_info.instinctive_response_procedure) {
1403 if (mp_elem->getStateOfActivation() != sim::State::Done) {
1405 // reset mental procedure state of activation
1406 procedure_name = mp_elem->getProcedureName();
1407 step_name = mp_elem->getStepName();
1408 procedure_name += step_name;
1409 procedure_map_itr = g_sim.All_procedure.procedure_map.find(procedure_name);
1410 if (procedure_map_itr != g_sim.All_procedure.procedure_map.end()) {
1411 procedure_step_ptr = procedure_map_itr->second;
1412 procedure_step_ptr->resetStateOfActivation();
1413 }
1414
1415 }
1416 }
1417 this->setPauseMentalProcedure(false);
1418 this->setSkipInstinctiveResponseStep(false);
1419}
1420
1422 ProcedureStep *procedure_step_ptr;
1423 map<string, ProcedureStep *>::iterator procedure_map_itr;
1424 string procedure_name, step_name;
1425 string active_procedure, active_step;
1428 for (auto& mp_elem : this->memory.perceived_info.instinctive_response_procedure) {
1429 if (mp_elem->getStateOfActivation() != sim::State::Done
1430 && mp_elem->getPriority() > this->getMentalProcedurePriorityThreshold()) {
1431 mp_elem->setStateOfActivation(sim::State::Interrupted);
1432 // reset mental procedure state of activation
1433 procedure_name = mp_elem->getProcedureName();
1434 step_name = mp_elem->getStepName();
1435 if (procedure_name == active_procedure && step_name == active_step) {
1436 // reset pause and skip flags if active instinctive response procedure is low priority
1437 this->setPauseMentalProcedure(false);
1438 this->setSkipInstinctiveResponseStep(false);
1439 }
1440 procedure_name += step_name;
1441 procedure_map_itr = g_sim.All_procedure.procedure_map.find(procedure_name);
1442 if (procedure_map_itr != g_sim.All_procedure.procedure_map.end()) {
1443 procedure_step_ptr = procedure_map_itr->second;
1444 procedure_step_ptr->resetStateOfActivation();
1445 }
1446
1447 }
1448 }
1449}
1450
1451void Operator::ActiveFetchParameterValueInfo(string _name, int _timer) {
1452 if (this->m_RM) this->m_RM->AddDeltaToCognitiveLoad(0.12);
1453 BranchExpectedParameterValue *Expected_Par_pt;
1454 Expected_Par_pt = new BranchExpectedParameterValue;
1455 Expected_Par_pt->setInfoName(_name);
1456 Expected_Par_pt->setDisplayName(_name);
1457 Expected_Par_pt->setTimeRequiredForCheckingThisDisplay(_timer);
1458 Expected_Par_pt->setSender(this->type_of_operator);
1459 Expected_Par_pt->setIntendedReceiver(sim::Source::Plant);
1460 Expected_Par_pt->setTimerAndProbability(_timer, 1.0 - this->hfe_bbn.getGatherStateInfoFailureProbability());
1461 //To be continued
1462 g_sim.Branch_center.addParameterValue(this->type_of_operator, Expected_Par_pt);
1463
1464}
1465
1466void Operator::ActiveFetchComponentStateInfo(string _name, int _timer) {
1467 if (this->m_RM) this->m_RM->AddDeltaToCognitiveLoad(0.12);
1469 B_C_pt = new BranchExpectedComponentState;
1470 B_C_pt->setInfoName(_name);
1471 B_C_pt->setDisplayName(_name);
1473 B_C_pt->setSender(this->type_of_operator);
1476
1478}
1479//
1480void Operator::ActiveFetchSupportSystemStateInfo(string _name, int _timer) {
1481 if (this->m_RM) this->m_RM->AddDeltaToCognitiveLoad(0.12);
1484 B_SS_pt->setInfoName(_name);
1485 B_SS_pt->setDisplayName(_name);
1487 B_SS_pt->setSender(this->type_of_operator);
1490
1492}
1493
1494void Operator::ActiveFetchAlarmStateInfo(string _name, int _timer) {
1495 if (this->m_RM) this->m_RM->AddDeltaToCognitiveLoad(0.12);
1497 A_C_pt = new BranchExpectedAlarmState;
1498 A_C_pt->setInfoName(_name);
1499 A_C_pt->setAlarmName(_name);
1500 A_C_pt->setTimeRequiredToCheckThisAlarm(_timer);
1501 A_C_pt->setSender(this->type_of_operator);
1505
1506}
1507
1508void Operator::PrintMessage(string str) {
1509 cout << " " << r5pars_.timesno << " " << str << '\n';
1510
1511 //test
1512 ofstream fout("RMI.txt", ios::app);
1513 fout << "Time: " << r5pars_.timesno << " " << str << '\n';
1514 fout.close();
1515}
1516
1518 // Adjust for perceived system criticality
1519 double system_criticality = this->scanned_indicators.getSystemCriticalitySensitivity() * this->safety_parameters.getSPDSValue();
1520 // Normalize system criticality
1521 this->hfe_bbn.setSystemCriticality(system_criticality/10);
1522
1523 // Adjust for perceived information load
1524 double information_load = this->scanned_indicators.getInfoLoadSensitivity() * this->information_load.getInfoLoadPIFValue();
1525 // Normalize information load
1526 this->hfe_bbn.setInformationLoad(information_load/10);
1527
1528 double time_constraint_load = this->time_constrained_load.getTimeConstrainedPIFValue();
1529 // Normalize information load
1530 this->hfe_bbn.setTimeConstraintLoad(time_constraint_load/10);
1531
1532// if (m_RM != nullptr) {
1533// double cognitive_task_load = m_RM->m_cognitive_load;
1534// this->hfe_bbn.setCognitiveTaskLoad(cognitive_task_load);
1535// double passive_alarm_load = m_RM->m_passive_alarm_load->m_alarm_load_value;
1536// this->hfe_bbn.setPassiveAlarmLoad(passive_alarm_load);
1537// double task_complexity = m_RM->m_diagnosis_complexity;
1538// this->hfe_bbn.setTaskComplexity(task_complexity);
1539// double expert_level = m_RM->m_expert_level;
1540// this->hfe_bbn.setExpertise(expert_level);
1541// double stress = m_RM->m_overall_stress;
1542// this->hfe_bbn.setStress(stress);
1543// double fatigue = m_RM->m_fatigue_level;
1544// this->hfe_bbn.setFatigue(fatigue);
1545// int problem_solving_style = m_RM->m_problem_solving_style;
1546// switch(problem_solving_style) {
1547// case 0 : this->hfe_bbn.setProblemSolvingStyle(0);
1548// break;
1549// case 1 : this->hfe_bbn.setProblemSolvingStyle(0.1);
1550// break;
1551// case 2 : this->hfe_bbn.setProblemSolvingStyle(1.0);
1552// break;
1553// case 3 : this->hfe_bbn.setProblemSolvingStyle(0.5);
1554// break;
1555// case 4 : this->hfe_bbn.setProblemSolvingStyle(0.25);
1556// break;
1557// }
1558// }
1559}
Base class for all crew members — cognitive processing loops, mental model, and knowledge base.
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
void setAlarmName(std::string)
void setTimeRequiredToCheckThisAlarm(double)
BranchMentalProcedureActivationTimeUnit * checkToGenerateActivationTimeBranches(std::string, std::string)
void addInfoGatherMode(int, BranchInfoGatherMode *)
void setTempTypeOfConsequence(Consequence)
Stores the consequence of the end state the running sequence will get.
void addComponentState(int, BranchExpectedComponentState *)
void addInstinctiveResponseProcedure(int, BranchProcedureStep *)
void addParameterValue(int, BranchExpectedParameterValue *)
BranchMentalProcedureActivationTime mental_procedure_activation_branches
Definition: BranchRecord.h:296
void addSupportSystemState(int, BranchExpectedSupportSystemState *)
void addMentalBelief(int, BranchExpectedMentalBelief *)
Crew fork registration for a mental belief; same contract as addGoal().
void setTempESMessage(std::string)
Stores the description of the end state the running sequence will get if it is terminated (set by mod...
void addAlarmState(int, BranchExpectedAlarmState *)
std::vector< std::shared_ptr< BranchExpectedParameterDifference > > parameter_difference
Definition: BranchUnit.h:65
std::vector< std::shared_ptr< BranchExpectedParameterValue > > parameter_value
Definition: BranchUnit.h:64
std::vector< std::shared_ptr< BranchAction > > action
Definition: BranchUnit.h:59
void setSenderAndReceiver(int, int)
void setSender(int)
void setIntendedReceiver(int)
void setTypeOfPauseActivity(int)
std::vector< std::unique_ptr< AlarmTwoParameterDifference > > alarm_value_difference_array
std::vector< std::unique_ptr< AlarmComponent > > alarm_component_state_array
std::vector< std::unique_ptr< AlarmParameter > > alarm_parameter_value_array
std::vector< std::unique_ptr< ControlValue > > control_value_array
std::vector< std::unique_ptr< ControlState > > control_state_array
std::vector< std::unique_ptr< DisplayComponentState > > component_state_array
std::vector< std::unique_ptr< DisplayParameterValueRate > > parameter_trend_array
std::vector< std::unique_ptr< DisplayParameterValue > > parameter_value_array
std::vector< std::unique_ptr< DisplayHeatStructure > > heat_structure_array
std::vector< std::unique_ptr< DisplaySupportSystemState > > support_systems_state_array
ControlPanelDisplay indicators
Definition: ControlPanel.h:53
ControlPanelControl controls
Definition: ControlPanel.h:54
ControlPanelAlarm alarms
Definition: ControlPanel.h:52
void setProcedureName(std::string)
void retreiveDiagnosisActionModuleFromFile(std::ifstream &)
void copyDiagnosisActionModule(DiagnosisActionModule &)
void saveDiagnosisActionModuleToFile(std::ofstream &)
void readDiagnosisActionModuleInfoFromFile(std::string)
bool onceThroughProcessForReasoningStrategy(Operator &, ShortTermMemory &, EventSymptomMatrix &)
void setTimeRequiredForCheckingThisDisplay(double)
void setDisplayName(std::string)
void copyEventSymptomMatrix(EventSymptomMatrix &)
double getEventRationalConfidence(std::string)
void readInfoFromFile(std::string)
void saveEventSymptomMatrixToFile(std::ofstream &)
void retrieveEventSymptomMatrixFromFile(std::ifstream &)
void setSystemCriticality(double system_criticality)
void setTimeConstraintLoad(double time_constraint_load)
void copyHumanFailureEventsBBN(HumanFailureEventsBBN &)
void setInformationLoad(double information_load)
DecisionProcedureStep * identifyTheMentalProcedureToBePerformed(std::string, std::string)
Definition: InfoChunk.cpp:547
std::string getCurrentInstinctiveResponseProceduralStepName()
Definition: InfoChunk.cpp:185
std::vector< std::shared_ptr< DecisionProcedureStep > > instinctive_response_procedure
Definition: InfoChunk.h:143
std::vector< std::shared_ptr< DecisionProcedureStep > > procedure_step
Definition: InfoChunk.h:142
void setStateOfAProcedureStep(std::string, std::string, int)
Definition: InfoChunk.cpp:1286
ExpectedMentalBelief * checkExistanceOfMentalBelief(std::string)
Definition: InfoChunk.cpp:934
std::string getCurrentInstinctiveResponseProcedureName()
Definition: InfoChunk.cpp:170
void retreiveInformationLoadModuleFromFile(std::ifstream &)
void saveInformationLoadModuleToFile(std::ofstream &)
void copyInformationLoadModule(InformationLoadModule &)
void setInfoName(std::string)
Definition: KBElement.cpp:25
std::string getInfoName()
Definition: KBElement.cpp:26
void removeScannedParameter(std::string)
void removeScannedSupportSystem(std::string)
std::vector< std::shared_ptr< BranchExpectedParameterValue > > parameter_scan_list
std::vector< std::shared_ptr< BranchExpectedSupportSystemState > > support_system_scan_list
void saveKBSCannedParameterToFile(std::ofstream &)
void readInfoFromFile(std::string)
std::vector< std::shared_ptr< BranchExpectedAlarmState > > alarm_scan_list
double getSystemCriticalitySensitivity()
void removeScannedComponent(std::string)
void retrieveKBSCannedParameterFromFile(std::ifstream &)
std::vector< std::shared_ptr< BranchExpectedComponentState > > component_scan_list
void copyScannedParameters(KBScannedParameters &)
void removeScannedAlarm(std::string)
Definition: KB.h:46
void copyKB(KB &)
Definition: KB.cpp:287
void clearKB()
Definition: KB.cpp:24
void initiationForSimulation(int, InfoChunk &)
Definition: KB.cpp:32
void retrieveKBFromFile(std::ifstream &)
Definition: KB.cpp:467
std::map< std::string, KBSystemDecompositionUnit * > system_decomposition_map
Definition: KB.h:87
std::string getAssociatedFunctionalDecompositionName(int)
Definition: KB.cpp:383
void copyKBForRestart(KB &)
Definition: KB.cpp:265
void clearKBForRestart()
Definition: KB.cpp:309
void saveKBToFile(std::ofstream &)
Definition: KB.cpp:444
std::vector< std::unique_ptr< KBBiasFactorUnit > > indicator_bias_factors
Definition: KB.h:86
std::vector< std::unique_ptr< KBHardWiredUnit > > hard_wired_diagnosis
Definition: KB.h:84
void KBcheckHardWiredMatchForMentalBelief(std::string, int)
Definition: KB.cpp:230
void activateManeuverUnit(std::string)
void readInfoFromFile(int)
void clearManeuverAction()
void retrieveManeuverActionFromFile(std::ifstream &)
void saveManeuverActionToFile(std::ofstream &)
void copyManeuverAction(ManeuverAction &)
void checkAndExecuteManeuverUnit(Operator &)
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
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
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
void setProbability(double)
Definition: Probability.cpp:26
std::vector< std::unique_ptr< ProcedureStepUnit > > procedure_step_unit
Definition: ProcedureStep.h:62
bool oneThroughProcessForInstinctiveResponseProcedure(Operator &, double, double, bool, ShortTermMemory &)
void resetStateOfActivation()
std::map< std::string, ProcedureStep * > procedure_map
Definition: Procedures.h:72
void copySPDS(SPDS &)
Definition: SPDS.cpp:60
double getSPDSValue()
Definition: SPDS.cpp:55
void retrieveSPDSFromFile(std::ifstream &)
Definition: SPDS.cpp:197
void saveSPDSToFile(std::ofstream &)
Definition: SPDS.cpp:176
void initiationForSimulation(std::string)
Definition: SPDS.cpp:35
void clearSPDS()
Definition: SPDS.cpp:30
std::string getOATDirectory()
Definition: Scheduler.cpp:622
void setODMActionTimeMultiplier(double)
Definition: Scheduler.cpp:789
std::string getOCTDirectory()
Definition: Scheduler.cpp:625
void setOATActionTimeMultiplier(double)
Definition: Scheduler.cpp:795
void setOCTActionTimeMultiplier(double)
Definition: Scheduler.cpp:801
std::string getODMDirectory()
Definition: Scheduler.cpp:619
Timer support_system_update_time
void clearShortTermMemoryFromRestartNodeInfoMultiProcessors()
void retrieveShortTermMemoryFromFile(std::ifstream &)
Timer parameter_update_time
void copyShortTermMemoryFromRestartInfo(ShortTermMemory &)
CommunicationPlace new_info
void clearShortTermMemoryFromRestartInfo()
void saveShortTermMemoryToFile(std::ofstream &)
void clearShortTermMemoryForRestart()
void copyShortTermMemoryToRestartInfo(ShortTermMemory &)
void setInfoGatherMode(int)
void initiationForSimulation()
Timer component_update_time
InfoChunk perceived_info
void setStateOfActivation(int)
void retrieveTimeConstrainedModuleFromFile(std::ifstream &)
void copyTimeConstrainedData(TimeConstrainedModule &)
void initiationForSimulation(std::string)
void saveTimeConstrainedModuleToFile(std::ofstream &)
void setTimerAndProbability(double, double)
void setBothTotalTimeRequiredAndRemainingTime(double)
Definition: Timer.cpp:71
void setT_Minimum(double)
Definition: Timer.cpp:38
void setBeta_Weibull(double)
Definition: Timer.cpp:36
void setAlpha_Weibull(double)
Definition: Timer.cpp:34
struct @0 r5pars_
const KB * shared_kb(int operator_type)
const EventSymptomMatrix * shared_diagnosis_matrix(int operator_type)
constexpr int InfoGatherMode
Definition: SimConstants.h:264
constexpr int Procedure
Definition: SimConstants.h:261
constexpr int GE
Definition: SimConstants.h:88
constexpr int GT
Definition: SimConstants.h:87
constexpr int LE
Definition: SimConstants.h:90
constexpr int LT
Definition: SimConstants.h:91
constexpr int EQ
Definition: SimConstants.h:89
constexpr int Additive
Definition: SimConstants.h:236
constexpr int Proportional
Definition: SimConstants.h:235
constexpr int ODM
Definition: SimConstants.h:145
constexpr int OAT
Definition: SimConstants.h:144
constexpr int Bypass
Definition: SimConstants.h:132
constexpr int Plant
Definition: SimConstants.h:135
constexpr int Failed
Definition: SimConstants.h:103
constexpr int OldInfo
Definition: SimConstants.h:126
constexpr int Interrupted
Definition: SimConstants.h:124
constexpr int Succeed
Definition: SimConstants.h:104
constexpr int Done
Definition: SimConstants.h:123
constexpr int Active
Definition: SimConstants.h:118
constexpr int New
Definition: SimConstants.h:114
constexpr int InstinctiveResponse
Definition: SimConstants.h:175
constexpr int None
Definition: SimConstants.h:75
bool rm_cycle_enabled
–enable-rm-cycle: ReasonMachine snapshot/restore/serialize/tbi machinery (see docs/developer/internal...
Definition: SimConfig.h:46
Scheduler SScheduler
Simulation scheduling, parses CLI options.
Procedures All_procedure
Emergency operating procedures.
ControlPanel Indicator
Control room panel state.
CommunicationPlace Communication_place
Inter-module communication.
BranchRecord Branch_center
Dynamic event tree state.