← Documentation
ADS-IDAC Engine 5.0.0
MRParameterUnit.cpp
Go to the documentation of this file.
1// MRParameterUnit.cpp: implementation of the MRParameterUnit class.
2//
4
5#include <string>
6#include <sstream>
7#include <iostream>
8#include <fstream>
9
10#include "MRParameterUnit.h"
11#include "SentenceUnit.h"
12#include "../Crew/OperatorDM.h"
13#include "../Crew/OperatorAT.h"
14#include "ReasonMachine.h"
15#include "Statement.h"
16#include "Investigator.h"
17#include "KnowledgeElement.h"
18#include "../Global/SimulationContext.h"
19
20using namespace std;
21
22
24// Construction/Destruction
26
28{
29 this->m_ID_Type = 201;
30 this->m_Concept_ID_pt = NULL;
31 this->m_recent_trend = NULL;
32 this->m_parameter_concept_ID = "";
33 this->m_ID_recent_trend = "";
34 //201--MRParameterUnit
35 //202--MRComponentStateUnit
36 //203--MRAlarmUnit
37}
38
40{
41 this->m_parameter_history_value.clear();
42 this->m_parameter_history_rate.clear();
43}
44
45void MRParameterUnit::AddNewValue(float NewValue, int _operator, bool _expecting)
46{
47 string prompt;
48 stringstream conv;
49 SentenceUnit * found_sent_pt;
50 SentenceUnit * sent_pt;
51 Investigator * invest_pt;
52 ReasonMachine * RM_pt;
53 Statement * statement_pt;
54 decltype(RM_pt->m_Statement_list)::reverse_iterator state_ritr;
55 decltype(RM_pt->m_investigator_pool)::reverse_iterator invest_ritr;
56 Statement * new_statement_pt;
57 bool NewStatement_bl = false;
58 bool new_invest_bl = false;
59 bool stop_bl = false;
60 KnowledgeElement * KE_pt;
61
62 vector<SentenceUnit *> sent_list;
63 vector<SentenceUnit *>::iterator sent_itr;
64 float value1, value2;
65 MRParameterUnit * MP_pt;
66 int order = 0;
67
68 prompt = "Received new reading of ";
69 prompt += this->m_parameter_indicator_ID;
70 prompt += ": ";
71 conv.str("");
72 conv << NewValue;
73 prompt += conv.str();
74 this->PrintMessage(prompt);
75
76 if (_operator == sim::Operator::ODM)
77 {RM_pt = g_sim.Decision_Maker.m_RM.get();}
78 else if (_operator == sim::Operator::OAT)
79 {RM_pt = g_sim.Action_Taker.m_RM.get();}
80 else
81 {}//add error message
82
83
84 if(this->m_Concept_ID_pt->m_ID == "SG_B_WR_level")
85 {this->ErrorMessage("");}
86 //Function:
87 //if the new received value is bigger than the last received value--difference bigger than threshold
88 //if the last received rate was not "increasing"
89 //that means the parameter increased between the two consecutive readings
90
91 int trend_int = 0; // 1, increasing trend; 2, decreasing trend; 3, stable trend; 0, not enought info to observe trend
92/* if(this->m_recent_trend != NULL)
93 {
94 if(this->m_recent_trend->m_sent_pt->m_ID == "PRZ_level_decrease")
95 {this->PrintMessage("");}
96 }
97 */
98 RM_pt->AddDeltaToCognitiveLoad(0.024);
99 if(this->m_recent_parameter_value != NULL)
100 {
101 if((NewValue - this->m_recent_parameter_value->m_perceived_value) > this->m_increase_threshold)
102 {
103 trend_int = 1;
104 }//end of increase analysis
105 else if ((NewValue - this->m_recent_parameter_value->m_perceived_value) < this->m_decrease_threshold)
106 {
107 trend_int = 2;
108 }//end of decrease analysis
109 else
110 {
111 //if two observations are very close to each other. A small difference between readings is not evidence to show it is stable
112 //only when the difference is smaller than the rate * deltaT, it concludes a stable state
113 //if the difference is bigger than the rate * deltaT, we believe that "AddNewRate" function might catch this trend.
114 //Or else there is a fuzzy zone that it doesn't give a statement.
115 if((NewValue - this->m_recent_parameter_value->m_perceived_value) < this->m_increase_rate_threshold * (r5pars_.timesno - this->m_recent_parameter_value->m_time_perceived)
116 &&
117 (NewValue - this->m_recent_parameter_value->m_perceived_value) > this->m_decrease_rate_threshold * (r5pars_.timesno - this->m_recent_parameter_value->m_time_perceived))
118 {trend_int = 3;}
119
120 //if a parameter drops below the indication range, do not generate a stable statement
121 //Right now we use 0 as the lower bound for all indication ranges
122 //ways to expand in future: a) use specific lower range value for each indication; 2) generate false "stable" indication;
123 if(NewValue < 0.0001)
124 {trend_int = 0;}
125 trend_int = 0;
126 }
127
128 switch (trend_int)
129 {
130 case 0:
131 break;
132 case 1:
133 //increase trend
134 if(this->m_recent_trend == NULL)
135 {NewStatement_bl = true;}
136 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getIncreasePt())
137 {NewStatement_bl = true;}
138 else if(this->m_recent_trend->m_investigator_ID_pt == NULL)
139 {NewStatement_bl = true;}
140 if(NewStatement_bl == true)
141 {
142 new_invest_bl = true;
143 SentenceUnit increase_sent;
144 increase_sent.m_sentence_type = 1;
145 increase_sent.m_subject_pt = this->m_Concept_ID_pt;
146 increase_sent.m_process_pt = RM_pt->m_Concept_Base->getIncreasePt();
147 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&increase_sent);
148 }
149 break;
150 case 2:
151 //decrease trend
152 if(this->m_recent_trend == NULL)
153 {NewStatement_bl = true;}
154 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getDecreasePt())
155 {NewStatement_bl = true;}
156 else if(this->m_recent_trend->m_investigator_ID_pt == NULL)
157 {NewStatement_bl = true;}
158 if(NewStatement_bl == true)
159 {
160 new_invest_bl = true;
161 SentenceUnit decrease_sent;
162 decrease_sent.m_sentence_type = 1;
163 decrease_sent.m_subject_pt = this->m_Concept_ID_pt;
164 decrease_sent.m_process_pt = RM_pt->m_Concept_Base->getDecreasePt();
165 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&decrease_sent);
166 }
167 break;
168 case 3:
169 //stable trend
170 if(this->m_recent_trend == NULL)
171 {NewStatement_bl = true;}
172 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getStablePt())
173 {NewStatement_bl = true;}
174 if(NewStatement_bl == true)
175 {
176 new_invest_bl = false;
177 SentenceUnit stable_sent;
178 stable_sent.m_sentence_type = 1;
179 stable_sent.m_subject_pt = this->m_Concept_ID_pt;
180 stable_sent.m_process_pt = RM_pt->m_Concept_Base->getStablePt();
181 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&stable_sent);
182 }
183 break;
184 default:
185 break;
186 }
187
188 if(found_sent_pt != NULL && NewStatement_bl == true)
189 {
190 //new phenomenon, need to add a new statement
191 auto stmt = make_unique<Statement>();
192 stmt->m_sent_pt = found_sent_pt;
193 stmt->m_state = true;
194 stmt->m_time_range.m_time_before = r5pars_.timesno;
195 stmt->m_time_range.m_time_after = this->m_recent_parameter_value->m_time_perceived;
196 stmt->m_confidence = 0.9;
197 stmt->m_factual_type = 2; //inferred fact
198 statement_pt = stmt.get();
199 this->m_recent_trend = statement_pt;
200 RM_pt->AddANewStatement(stmt.release());
201 RM_pt->AddDeltaToSystemDynamics(0.12);
202
203 if(_expecting == true)
204 {
206 if(statement_pt->m_sent_pt == sent_pt)
207 {
208 RM_pt->m_working_on_invest_pt->m_Statement_pt = statement_pt;
209 RM_pt->AddDeltaToCognitiveLoad(0.024);
210 statement_pt->m_investigator_ID_pt = (IDElement*)(RM_pt->m_working_on_invest_pt);
211 new_invest_bl = false;
212 }
213 }
214
215 if(statement_pt->m_sent_pt->m_process_pt == RM_pt->m_Concept_Base->getStablePt())
216 {
217 statement_pt->m_tbi_bl = false;
218 }
219 else if( new_invest_bl == true)
220 {
221 //Add an investigator for this statement
222 auto inv = make_unique<Investigator>();
223 inv->m_note = "by a statement";
224 inv->m_motivation = 1;
225 inv->m_Happen = 3;
226 inv->m_Statement_pt = statement_pt;
227 RM_pt->AddDeltaToCognitiveLoad(0.024);
228 inv->m_operator = this->m_operator;
229 inv->m_root_of_a_thought_line = true;
230 invest_pt = inv.get();
231 RM_pt->AddNewInvestigator(inv.release());
232 //link the statement to the statement pointer
233 statement_pt->m_investigator_ID_pt = (IDElement*)invest_pt;
234 }
235 }
236 else if(this->m_recent_trend != NULL)
237 {
238 this->m_recent_trend->RefreshStatementEndTimeToCurrentTime(0); //need to improve; value only updates the 0 type; while rate updates the 1 type
239 //RM_pt->ActivationUpdateByRefreshAStatement(this->m_recent_trend);
240 //update the existing statement
241 }
242 this->m_parameter_history_value.push_back(std::move(this->m_recent_parameter_value));
243 }
244 //if this is the first reading
245 this->m_recent_parameter_value = make_unique<MRValueSchema>();
246 this->m_recent_parameter_value->m_time_perceived = r5pars_.timesno;
247 this->m_recent_parameter_value->m_perceived_value = NewValue;
248 this->UpdateTheRelevantInvestigator(_operator);
249
250//***************************************************************
251// comparing the perceived value with other parameter or values
252//***************************************************************
253
254//Interpretation with comparison sentences
255 for(auto &sem_e : RM_pt->m_Semantic_list)
256 {
257 if(sem_e->m_sentence_type == 3 || sem_e->m_sentence_type == 4)
258 {
259 if(sem_e->m_subject_pt == this->m_Concept_ID_pt || sem_e->m_object_pt == this->m_Concept_ID_pt)
260 {
261 sent_list.push_back(sem_e.get());
262 }
263 }
264 }
265
266
267 if(this->m_Concept_ID_pt->m_ID == "SG_A_WR_level" && r5pars_.timesno > 1150)
268 {this->PrintMessage("check");}
269
270//Looping
271 for(sent_itr = sent_list.begin(); sent_itr != sent_list.end(); sent_itr++)
272 {
273 new_statement_pt = NULL;
274 NewStatement_bl = false;
275 value1 = 0;
276 value2 = 0;
277 order = 1; // 1--A >=< B; 2--B >=< A
278
279 sent_pt = *sent_itr;
280 switch (sent_pt->m_sentence_type)
281 {
282 case 3:
283 value1 = NewValue;
284 value2 = sent_pt->m_value;
285 //compare the values
286 if(sent_pt->m_comparison_pt == RM_pt->m_Concept_Base->getBiggerPt())
287 {
288 if(value1 > value2)
289 {
290 NewStatement_bl = true;
291 }
292 }
293 else if(sent_pt->m_comparison_pt == RM_pt->m_Concept_Base->getSmallerPt())
294 {
295 if(value1 < value2)
296 {
297 NewStatement_bl = true;
298 }
299 }
300 else
301 {break;}
302 break;
303 case 4:
304 //assign one value
305 if(sent_pt->m_subject_pt == this->m_Concept_ID_pt)
306 {
307 value1 = NewValue;
308 order = 1;
309 MP_pt = (MRParameterUnit *)(RM_pt->m_MR->CheckExistenceByConceptName(sent_pt->m_object_pt->m_ID));
310 }
311 else if(sent_pt->m_object_pt == this->m_Concept_ID_pt)
312 {
313 value2 = NewValue;
314 order = 2;
315 MP_pt = (MRParameterUnit *)(RM_pt->m_MR->CheckExistenceByConceptName(sent_pt->m_subject_pt->m_ID));
316 }
317 else
318 {break;}
319
320 //get the other value
321 if(MP_pt == NULL)
322 {break;}
323 if(MP_pt->m_recent_parameter_value == NULL)
324 {break;}
325 if(MP_pt->m_recent_parameter_value->m_time_perceived < r5pars_.timesno - 8)
326 {break;}
327
328 if(order == 1)
329 {
330 value2 = MP_pt->m_recent_parameter_value->m_perceived_value;
331 }
332 else if(order == 2)
333 {
334 value1 = MP_pt->m_recent_parameter_value->m_perceived_value;
335 }
336 else
337 {break;}
338
339 //compare these two values
340 if(sent_pt->m_comparison_pt == RM_pt->m_Concept_Base->getBiggerPt())
341 {
342 if(value1 > value2 + sent_pt->m_delta_value)
343 {
344 NewStatement_bl = true;
345 }
346 }
347 else if(sent_pt->m_comparison_pt == RM_pt->m_Concept_Base->getSmallerPt())
348 {
349 if(value1 < value2 - sent_pt->m_delta_value)
350 {
351 NewStatement_bl = true;
352 }
353 }
354 else if(sent_pt->m_comparison_pt == RM_pt->m_Concept_Base->getEqualPt())
355 {
356 if(value1 > value2 - sent_pt->m_delta_value && value1 < value2 + sent_pt->m_delta_value)
357 {
358 NewStatement_bl = true;
359 }
360 }
361 else
362 {break;}
363
364 break;
365 default:
366 break;
367 }
368
369 //create a new statement if needed
370 if(NewStatement_bl == true)
371 {
372 auto stmt = make_unique<Statement>();
373 stmt->m_sent_pt = sent_pt;
374 stmt->m_state = true;
375 stmt->m_time_generated = r5pars_.timesno;
376 stmt->m_time_range.m_start_time = r5pars_.timesno;
377 stmt->m_time_range.m_end_time = r5pars_.timesno;
378 stmt->m_confidence = 1;
379 new_statement_pt = stmt.get();
380 RM_pt->AddANewStatement(stmt.release());
381 //whether to initiate an investigation item for this statement
382
383 new_invest_bl = false;
384 invest_pt = NULL;
385 statement_pt = NULL;
386
387 //search for a recent corresponding statement
388 stop_bl = false;
389 for(state_ritr = RM_pt->m_Statement_list.rbegin(); state_ritr != RM_pt->m_Statement_list.rend() && statement_pt == NULL && stop_bl == false; state_ritr++)
390 {
391 if(state_ritr->get() != new_statement_pt)
392 {statement_pt = state_ritr->get();}
393 else if((*state_ritr)->m_time_range.GetTimeBoundLater() < r5pars_.timesno - 600)
394 {stop_bl = true;}
395 }
396
397 //search for a recent corresponding Investigator
398 stop_bl = false;
399 for(invest_ritr = RM_pt->m_investigator_pool.rbegin(); invest_ritr != RM_pt->m_investigator_pool.rend() && invest_pt == NULL && stop_bl == false; invest_ritr++)
400 {
401 if((*invest_ritr)->m_KElement_ID_pt != NULL)
402 {
403 KE_pt = (KnowledgeElement*)((*invest_ritr)->m_KElement_ID_pt);
404 if(KE_pt->m_SentenceUnit_pt == sent_pt && KE_pt->m_negation == false)
405 {invest_pt = invest_ritr->get();}
406 }
407 else if((*invest_ritr)->m_Statement_pt != NULL)
408 {
409 if((*invest_ritr)->m_Statement_pt->m_sent_pt == sent_pt)
410 {invest_pt = invest_ritr->get();}
411 }
412 else if((*invest_ritr)->m_investigation_initiate_time < r5pars_.timesno - 600)
413 {stop_bl = true;}
414 }
415
416 if(invest_pt == NULL)
417 {new_invest_bl = true;}
418 else
419 {
420 if(invest_pt->m_Happen == 2 || invest_pt->m_Happen == 4)
421 {new_invest_bl = true;}
422 else if(invest_pt->m_explained == 4)
423 {new_invest_bl = true;}
424 else if(invest_pt->m_explained == 3 || invest_pt->m_explained == 2)
425 {
426 if(statement_pt == NULL)
427 {new_invest_bl = true;}
428 else if(statement_pt->m_time_range.GetTimeBoundEarlier() < r5pars_.timesno - 300)
429 {new_invest_bl = true;}
430 }
431 }
432
433 if(new_invest_bl == true)
434 {
435 //initiate a new investigator here
436 auto inv = make_unique<Investigator>();
437 inv->m_note = "by a statement";
438 inv->m_motivation = 1;
439 inv->m_Happen = 3;
440 inv->m_Statement_pt = new_statement_pt;
441 RM_pt->AddDeltaToCognitiveLoad(0.024);
442 inv->m_operator = this->m_operator;
443 inv->m_root_of_a_thought_line = true;
444 invest_pt = inv.get();
445 RM_pt->AddNewInvestigator(inv.release());
446 //link the statement to the statement pointer
447 new_statement_pt->m_investigator_ID_pt = (IDElement*)invest_pt;
448 }
449 }
450 }//end of iteration of the list of sentences sent_pt
451
452}
453
454void MRParameterUnit::AddNewRate(float NewValue, int _operator, bool _expecting)
455{
456 SentenceUnit * found_sent_pt;
457 SentenceUnit * sent_pt;
458 ReasonMachine * RM_pt;
459 Investigator * invest_pt;
460 Statement * statement_pt;
461 bool NewStatement_bl = false;
462
463
464
465 string ID_name;
466 string prompt;
467 stringstream conv;
468 prompt = "Received new reading of ";
469 prompt += this->m_parameter_rate_indicator_ID;
470 prompt += ": ";
471 conv.str("");
472 conv << NewValue;
473 prompt += conv.str();
474 this->PrintMessage(prompt);
475
476 if (_operator == sim::Operator::ODM)
477 {RM_pt = g_sim.Decision_Maker.m_RM.get();}
478 else if (_operator == sim::Operator::OAT)
479 {RM_pt = g_sim.Action_Taker.m_RM.get();}
480 else
481 {}//add error message
482
483 if(r5pars_.timesno > 1111)
484 {this->PrintMessage("");}
485
486 RM_pt->AddDeltaToCognitiveLoad(0.024);
487 if(NewValue > this->m_increase_rate_threshold)
488 {//parameter increase
489 SentenceUnit increase_sent;
490 increase_sent.m_sentence_type = 1;
491 increase_sent.m_subject_pt = this->m_Concept_ID_pt;
492 increase_sent.m_process_pt = RM_pt->m_Concept_Base->getIncreasePt();
493 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&increase_sent);
494 if(found_sent_pt != 0 )
495 {
496 if(this->m_recent_trend == NULL)
497 {NewStatement_bl = true;}
498 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getIncreasePt())
499 {NewStatement_bl = true;}
500 else if(this->m_recent_trend->m_investigator_ID_pt == NULL)
501 {NewStatement_bl = true;}
502 }
503 }
504 else if(NewValue < this->m_decrease_rate_threshold)
505 {//parameter decrease
506 SentenceUnit decrease_sent;
507 decrease_sent.m_sentence_type = 1;
508 decrease_sent.m_subject_pt = this->m_Concept_ID_pt;
509 decrease_sent.m_process_pt = RM_pt->m_Concept_Base->getDecreasePt();
510 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&decrease_sent);
511 if(found_sent_pt != 0 )
512 {
513 if(this->m_recent_trend == NULL)
514 {NewStatement_bl = true;}
515 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getDecreasePt())
516 {NewStatement_bl = true;}
517 else if(this->m_recent_trend->m_investigator_ID_pt == NULL)
518 {NewStatement_bl = true;}
519 }
520 }
521 else
522 {//parameter stable
523 SentenceUnit stable_sent;
524 stable_sent.m_sentence_type = 1;
525 stable_sent.m_subject_pt = this->m_Concept_ID_pt;
526 stable_sent.m_process_pt = RM_pt->m_Concept_Base->getStablePt();
527 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&stable_sent);
528 if(found_sent_pt != 0 )
529 {
530 if(this->m_recent_trend == NULL)
531 {NewStatement_bl = true;}
532 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getStablePt())
533 {NewStatement_bl = true;}
534 }
535
536 if(this->m_recent_parameter_value != NULL)
537 {
538 if(this->m_recent_parameter_value->m_perceived_value < 0.00001)
539 {NewStatement_bl = false;}
540 }
541 }
542
543 if(NewStatement_bl == true && found_sent_pt!= NULL)
544 { //new phenomenon, need to add a new statement
545
546 auto stmt = make_unique<Statement>();
547 stmt->m_sent_pt = found_sent_pt;
548 stmt->m_state = true;
549 stmt->m_time_range.m_start_time = r5pars_.timesno;
550 stmt->m_time_range.m_end_time = r5pars_.timesno;
551 stmt->m_confidence = 1.0;
552 stmt->m_factual_type = 1; //observed fact
553 statement_pt = stmt.get();
554 RM_pt->AddANewStatement(stmt.release());
555 this->m_recent_trend = statement_pt;
556 RM_pt->AddDeltaToSystemDynamics(0.12);
557
558 //feed this back to the investigator
559 if(_expecting == true)
560 {
562 if(statement_pt->m_sent_pt->m_sentence_type == sent_pt->m_sentence_type)
563 {
564 if(statement_pt->m_sent_pt == sent_pt)
565 {
566 RM_pt->m_working_on_invest_pt->m_Statement_pt = statement_pt;
567 RM_pt->AddDeltaToCognitiveLoad(0.024);
568 statement_pt->m_investigator_ID_pt = (IDElement*)(RM_pt->m_working_on_invest_pt);
569 }
570 else
571 {
572 RM_pt->m_working_on_invest_pt->m_possible_statement_pt = statement_pt;
573 }
574 }
575 }
576
577 //if a parameter is stable, no need to investigate this.
578 if(statement_pt->m_sent_pt->m_process_pt == RM_pt->m_Concept_Base->getStablePt())
579 {
580 statement_pt->m_tbi_bl = false;
581 }
582 else if(statement_pt->m_investigator_ID_pt == NULL)
583 {
584 //Add an investigator for this statement
585 auto inv = make_unique<Investigator>();
586 inv->m_note = "by a statement";
587 inv->m_motivation = 1;
588 inv->m_Statement_pt = statement_pt;
589 RM_pt->AddDeltaToCognitiveLoad(0.024);
590 inv->m_Happen = 3;
591 inv->m_operator = this->m_operator;
592 inv->m_root_of_a_thought_line = true;
593 invest_pt = inv.get();
594 RM_pt->AddNewInvestigator(inv.release());
595 //link the statement to the statement pointer
596 statement_pt->m_investigator_ID_pt = (IDElement*)invest_pt;
597 }
598 }
599 else if(this->m_recent_trend != NULL)
600 {
602 //RM_pt->ActivationUpdateByRefreshAStatement(this->m_recent_trend);
603 //update the existing statement
604 }
605 //save the newly received parameter value
607 {this->m_parameter_history_rate.push_back(std::move(this->m_recent_parameter_rate));}
608 this->m_recent_parameter_rate = make_unique<MRValueSchema>();
609 this->m_recent_parameter_rate->m_time_perceived = r5pars_.timesno;
610 this->m_recent_parameter_rate->m_perceived_value = NewValue;
611
612 this->UpdateTheRelevantInvestigator(_operator);
613}
614
616{
617 // this function is to find a reading in the history which is within the required time range
618 MRValueSchema * value_schema_pt = NULL;
619 bool found = false;
620 if(!this->m_recent_parameter_value)
621 {
622 return NULL; //question: could use return 0 instead??
623 }
624 else if(this->m_recent_parameter_value->m_time_perceived >= _start && this->m_recent_parameter_value->m_time_perceived <= _end)
625 {
626 value_schema_pt = this->m_recent_parameter_value.get();
627 found = true;
628 }
629 else
630 {// To be added, the memory decay effect, only the active value could be retrieved from the memory
631 for(auto &e : this->m_parameter_history_value)
632 {
633 if(found) break;
634 if(e->m_time_perceived >= _start && e->m_time_perceived <= _end)
635 {
636 value_schema_pt = e.get();
637 found = true;
638 }
639 }
640 }
641 return value_schema_pt;
642}
643
645{
646 switch (this->m_operator)
647 {
649 if(this->m_parameter_indicator_ID.compare("NONE") != 0)
650 {
652 }
653 if(this->m_parameter_rate_indicator_ID.compare("NONE") != 0)
654 {
656 }
657 break;
659 if(this->m_parameter_indicator_ID.compare("NONE") != 0)
660 {
662 }
663/* if(this->m_parameter_rate_indicator_ID.compare("NONE") != 0)
664 {
665 g_sim.Decision_Maker.ActiveFetchParameterValueInfo(this->m_parameter_rate_indicator_ID, _timer);
666 }
667*/ break;
668 default:
669 break;
670 //error message
671 }
672
673}
674
676{
677 bool found = false;
678 MRValueSchema * value_schema_pt = NULL;
679 if(this->m_recent_parameter_value == NULL)
680 {
681 return NULL;
682 }
683 else
684 {
685 if(this->m_recent_parameter_value->m_time_perceived >= _start && this->m_recent_parameter_value->m_time_perceived <= _end)
686 {
687 return this->m_recent_parameter_value.get();
688 }
689 }
690
691 for(auto ritr = this->m_parameter_history_value.rbegin(); ritr != this->m_parameter_history_value.rend() && found == false; ++ritr)
692 {
693 if((*ritr)->m_time_perceived <= _end)
694 {
695 if((*ritr)->m_time_perceived >= _start)
696 {
697 found = true;
698 value_schema_pt = ritr->get();
699 }
700 else
701 {
702 //need to verify "break" jumps out of the for loop
703 break;
704 }
705 }
706 }
707 return value_schema_pt;
708}
709
711{
712 switch (this->m_operator)
713 {
715 if(this->m_parameter_indicator_ID.compare("NONE") != 0)
716 {
718 }
719 break;
721 if(this->m_parameter_indicator_ID.compare("NONE") != 0)
722 {
724 }
725 break;
726 default:
727 break;
728 //error message
729 }
730}
731
733{
734 switch (this->m_operator)
735 {
737 if(this->m_parameter_rate_indicator_ID.compare("NONE") != 0)
738 {
740 }
741 break;
743 if(this->m_parameter_rate_indicator_ID.compare("NONE") != 0)
744 {
746 }
747 break;
748 default:
749 break;
750 //error message
751 }
752}
753
754void MRParameterUnit::AddNewValueForFirstRoundCheck(float NewValue, int _operator)
755{
756 SentenceUnit * found_sent_pt;
757 ReasonMachine * RM_pt;
758 Statement * statement_pt;
759 bool NewStatement_bl = false;
760
761 string prompt;
762 stringstream conv;
763 prompt = "Received new reading of ";
764 prompt += this->m_parameter_indicator_ID;
765 prompt += ": ";
766 conv.str("");
767 conv << NewValue;
768 prompt += conv.str();
769 this->PrintMessage(prompt);
770
771 if (_operator == sim::Operator::ODM)
772 {RM_pt = g_sim.Decision_Maker.m_RM.get();}
773 else if (_operator == sim::Operator::OAT)
774 {RM_pt = g_sim.Action_Taker.m_RM.get();}
775 else
776 {}//add error message
777 //Function:
778 //if the new received value is bigger than the last received value--difference bigger than threshold
779 //if the last received rate was not "increasing"
780 //that means the parameter increased between the two consecutive readings
781 if(this->m_recent_parameter_value != NULL)
782 {
783 if((NewValue - this->m_recent_parameter_value->m_perceived_value) > this->m_increase_threshold)
784 {//increase trend
785 if(this->m_recent_trend == NULL)
786 {NewStatement_bl = true;}
787 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getIncreasePt())
788 {NewStatement_bl = true;}
789 if(NewStatement_bl == true)
790 {
791 SentenceUnit increase_sent;
792 increase_sent.m_sentence_type = 1;
793 increase_sent.m_subject_pt = this->m_Concept_ID_pt;
794 increase_sent.m_process_pt = RM_pt->m_Concept_Base->getIncreasePt();
795 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&increase_sent);
796 }
797 }//end of increase analysis
798 else if ((NewValue - this->m_recent_parameter_value->m_perceived_value) < this->m_decrease_threshold)
799 {//decrease trend
800 if(this->m_recent_trend == NULL)
801 {NewStatement_bl = true;}
802 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getDecreasePt())
803 {NewStatement_bl = true;}
804 if(NewStatement_bl == true)
805 {
806 SentenceUnit decrease_sent;
807 decrease_sent.m_sentence_type = 1;
808 decrease_sent.m_subject_pt = this->m_Concept_ID_pt;
809 decrease_sent.m_process_pt = RM_pt->m_Concept_Base->getDecreasePt();
810 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&decrease_sent);
811 }
812 }//end of decrease analysis
813 else
814 {//stable trend
815 if(this->m_recent_trend == NULL)
816 {NewStatement_bl = true;}
817 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getStablePt())
818 {NewStatement_bl = true;}
819 if(NewStatement_bl == true)
820 {
821 SentenceUnit stable_sent;
822 stable_sent.m_sentence_type = 1;
823 stable_sent.m_subject_pt = this->m_Concept_ID_pt;
824 stable_sent.m_process_pt = RM_pt->m_Concept_Base->getStablePt();
825 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&stable_sent);
826 }
827 }
828 if(found_sent_pt != NULL && NewStatement_bl == true)
829 {
830 //new phenomenon, need to add a new statement
831 auto stmt = make_unique<Statement>();
832 stmt->m_sent_pt = found_sent_pt;
833 stmt->m_state = true;
834 stmt->m_time_range.m_time_before = r5pars_.timesno;
835 stmt->m_time_range.m_time_after = this->m_recent_parameter_value->m_time_perceived;
836 stmt->m_confidence = 0.9;
837 stmt->m_factual_type = 2; //inferred fact
838 statement_pt = stmt.get();
839 this->m_recent_trend = statement_pt;
840 RM_pt->AddANewStatement(stmt.release());
841
842 statement_pt->m_tbi_bl = false;
843 }
844 else if(this->m_recent_trend != NULL)
845 {
847 //RM_pt->ActivationUpdateByRefreshAStatement(this->m_recent_trend);
848 //update the existing statement
849 }
850 this->m_parameter_history_value.push_back(std::move(this->m_recent_parameter_value));
851 }
852 //if this is the first reading
853 this->m_recent_parameter_value = make_unique<MRValueSchema>();
854 this->m_recent_parameter_value->m_time_perceived = r5pars_.timesno;
855 this->m_recent_parameter_value->m_perceived_value = NewValue;
856}
857
858void MRParameterUnit::AddNewRateForFirstRoundCheck(float NewValue, int _operator)
859{
860 SentenceUnit * found_sent_pt;
861 ReasonMachine * RM_pt;
862 Statement * statement_pt;
863 bool NewStatement_bl = false;
864
865 string ID_name;
866 string prompt;
867 stringstream conv;
868 prompt = "Received new reading of ";
869 prompt += this->m_parameter_rate_indicator_ID;
870 prompt += ": ";
871 conv.str("");
872 conv << NewValue;
873 prompt += conv.str();
874 this->PrintMessage(prompt);
875
876 if (_operator == sim::Operator::ODM)
877 {RM_pt = g_sim.Decision_Maker.m_RM.get();}
878 else if (_operator == sim::Operator::OAT)
879 {RM_pt = g_sim.Action_Taker.m_RM.get();}
880 else
881 {}//add error message
882
883 if(NewValue > this->m_increase_rate_threshold)
884 {//parameter increase
885 SentenceUnit increase_sent;
886 increase_sent.m_sentence_type = 1;
887 increase_sent.m_subject_pt = this->m_Concept_ID_pt;
888 increase_sent.m_process_pt = RM_pt->m_Concept_Base->getIncreasePt();
889 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&increase_sent);
890 if(found_sent_pt != 0 )
891 {
892 if(this->m_recent_trend == NULL)
893 {NewStatement_bl = true;}
894 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getIncreasePt())
895 {NewStatement_bl = true;}
896 }
897 }
898 else if(NewValue < this->m_decrease_rate_threshold)
899 {//parameter decrease
900 SentenceUnit decrease_sent;
901 decrease_sent.m_sentence_type = 1;
902 decrease_sent.m_subject_pt = this->m_Concept_ID_pt;
903 decrease_sent.m_process_pt = RM_pt->m_Concept_Base->getDecreasePt();
904 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&decrease_sent);
905 if(found_sent_pt != 0 )
906 {
907 if(this->m_recent_trend == NULL)
908 {NewStatement_bl = true;}
909 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getDecreasePt())
910 {NewStatement_bl = true;}
911 }
912 }
913 else
914 {//parameter stable
915 SentenceUnit stable_sent;
916 stable_sent.m_sentence_type = 1;
917 stable_sent.m_subject_pt = this->m_Concept_ID_pt;
918 stable_sent.m_process_pt = RM_pt->m_Concept_Base->getStablePt();
919 found_sent_pt = RM_pt->CheckExistInSemanticPoolBySentence(&stable_sent);
920 if(found_sent_pt != 0 )
921 {
922 if(this->m_recent_trend == NULL)
923 {NewStatement_bl = true;}
924 else if(this->m_recent_trend->m_sent_pt->m_process_pt != RM_pt->m_Concept_Base->getStablePt())
925 {NewStatement_bl = true;}
926 }
927 }
928 if(NewStatement_bl == true && found_sent_pt!= NULL)
929 { //new phenomenon, need to add a new statement
930
931 auto stmt = make_unique<Statement>();
932 stmt->m_sent_pt = found_sent_pt;
933 stmt->m_state = true;
934 stmt->m_time_range.m_start_time = r5pars_.timesno;
935 stmt->m_time_range.m_end_time = r5pars_.timesno;
936 stmt->m_confidence = 1.0;
937 stmt->m_factual_type = 1; //observed fact
938 statement_pt = stmt.get();
939 RM_pt->AddANewStatement(stmt.release());
940 this->m_recent_trend = statement_pt;
941 }
942 else if(this->m_recent_trend != NULL)
943 {
945 //RM_pt->ActivationUpdateByRefreshAStatement(this->m_recent_trend);
946 //update the existing statement
947 }
948 //save the newly received parameter value
950 {this->m_parameter_history_rate.push_back(std::move(this->m_recent_parameter_rate));}
951 this->m_recent_parameter_rate = make_unique<MRValueSchema>();
952 this->m_recent_parameter_rate->m_time_perceived = r5pars_.timesno;
953 this->m_recent_parameter_rate->m_perceived_value = NewValue;
954}
955
957{
958 cout << "Time: " << r5pars_.timesno << ": " << str << '\n';
959
960 //test
961 ofstream fout("RMI.txt", ios::app);
962 fout << "Time: " << r5pars_.timesno << ": " << str << '\n';
963 fout.close();
964}
965
967{
968 MRValueSchema * found_schema_pt = NULL;
969 MRValueSchema * value_schema_pt;
970 decltype(m_parameter_history_value)::reverse_iterator VS_ritr;
971 float value, delta;
972
973 ReasonMachine * RM_pt;
974 if (this->m_operator == sim::Operator::ODM)
975 {RM_pt = g_sim.Decision_Maker.m_RM.get();}
976 else if (this->m_operator == sim::Operator::OAT)
977 {RM_pt = g_sim.Action_Taker.m_RM.get();}
978 else
979 {}//add error message
980 int comparison_type;
981
982 if(_sent_pt->m_sentence_type != 3)
983 {
984 //error message
985 this->ErrorMessage("Error!");
986 }
987
988 if(_sent_pt->m_comparison_pt == (IDElement *)RM_pt->m_Concept_Base->getBiggerPt())
989 {comparison_type = 1;}
990 else if(_sent_pt->m_comparison_pt == (IDElement *)RM_pt->m_Concept_Base->getSmallerPt())
991 {comparison_type = 2;}
992 else if(_sent_pt->m_comparison_pt == (IDElement *)RM_pt->m_Concept_Base->getEqualPt())
993 {comparison_type = 3;}
994 else
995 {
996 this->ErrorMessage("Error!");
997 }
998
999 value = _sent_pt->m_value;
1000 delta = _sent_pt->m_delta_value;
1001
1002 if(this->m_recent_parameter_value != NULL)
1003 {
1004 if(this->m_recent_parameter_value->m_time_perceived >= _start
1005 && this->m_recent_parameter_value->m_time_perceived <= _end)
1006 {
1007 switch (comparison_type)
1008 {//1->; 2-<; 3-=;
1009 case 1:
1010 if(this->m_recent_parameter_value->m_perceived_value - value > delta)
1011 {
1012 found_schema_pt = this->m_recent_parameter_value.get();
1013 }
1014 break;
1015 case 2:
1016 if(value - this->m_recent_parameter_value->m_perceived_value > delta)
1017 {
1018 found_schema_pt = this->m_recent_parameter_value.get();
1019 }
1020 break;
1021 case 3:
1022 if(value - this->m_recent_parameter_value->m_perceived_value < delta
1023 && this->m_recent_parameter_value->m_perceived_value - value < delta)
1024 {
1025 found_schema_pt = this->m_recent_parameter_value.get();
1026 }
1027 break;
1028 default:
1029 break;
1030 }
1031 }
1032 else
1033 {
1034 if(this->m_recent_parameter_value->m_time_perceived < _start)
1035 {
1036 return NULL;
1037 }
1038 }
1039 }
1040
1041 VS_ritr = this->m_parameter_history_value.rbegin();
1042 while(VS_ritr != this->m_parameter_history_value.rend() && found_schema_pt == NULL)
1043 {
1044 value_schema_pt = VS_ritr->get();
1045 if(value_schema_pt->m_time_perceived >= _start
1046 && value_schema_pt->m_time_perceived <= _end)
1047 {
1048 switch (comparison_type)
1049 {//1->; 2-<; 3-=;
1050 case 1:
1051 if(value_schema_pt->m_perceived_value - value > delta)
1052 {
1053 found_schema_pt = value_schema_pt;
1054 }
1055 break;
1056 case 2:
1057 if(value - value_schema_pt->m_perceived_value > delta)
1058 {
1059 found_schema_pt = value_schema_pt;
1060 }
1061 break;
1062 case 3:
1063 if(value - value_schema_pt->m_perceived_value < delta
1064 && value_schema_pt->m_perceived_value - value < delta)
1065 {
1066 found_schema_pt = value_schema_pt;
1067 }
1068 break;
1069 default:
1070 break;
1071 }
1072 }
1073 else
1074 {
1075 if(value_schema_pt->m_time_perceived < _start)
1076 {
1077 return NULL;
1078 }
1079 }
1080 VS_ritr++;
1081 }
1082 return found_schema_pt;
1083}
1084
1086{
1087 MRValueSchema * found_schema_pt = NULL;
1088 MRValueSchema * value_schema_pt;
1089 decltype(m_parameter_history_value)::reverse_iterator VS_ritr;
1090 float value, delta;
1091
1092 ReasonMachine * RM_pt;
1093 if (this->m_operator == sim::Operator::ODM)
1094 {RM_pt = g_sim.Decision_Maker.m_RM.get();}
1095 else if (this->m_operator == sim::Operator::OAT)
1096 {RM_pt = g_sim.Action_Taker.m_RM.get();}
1097 else
1098 {}//add error message
1099 int comparison_type;
1100
1101 if(_sent_pt->m_sentence_type != 3)
1102 {
1103 //error message
1104 this->ErrorMessage("Error!");
1105 }
1106
1107 if(_sent_pt->m_comparison_pt == (IDElement *)RM_pt->m_Concept_Base->getBiggerPt())
1108 {comparison_type = 1;}
1109 else if(_sent_pt->m_comparison_pt == (IDElement *)RM_pt->m_Concept_Base->getSmallerPt())
1110 {comparison_type = 2;}
1111 else if(_sent_pt->m_comparison_pt == (IDElement *)RM_pt->m_Concept_Base->getEqualPt())
1112 {comparison_type = 3;}
1113 else
1114 {
1115 this->ErrorMessage("Error!");
1116 }
1117
1118 value = _sent_pt->m_value;
1119 delta = _sent_pt->m_delta_value;
1120
1121 if(this->m_recent_parameter_value != NULL)
1122 {
1123 if(this->m_recent_parameter_value->m_time_perceived >= _start
1124 && this->m_recent_parameter_value->m_time_perceived <= _end)
1125 {
1126 switch (comparison_type)
1127 {//1->; 2-<; 3-=;
1128 case 1:
1129 if(!(this->m_recent_parameter_value->m_perceived_value - value > delta))
1130 {
1131 found_schema_pt = this->m_recent_parameter_value.get();
1132 }
1133 break;
1134 case 2:
1135 if(!(value - this->m_recent_parameter_value->m_perceived_value > delta))
1136 {
1137 found_schema_pt = this->m_recent_parameter_value.get();
1138 }
1139 break;
1140 case 3:
1141 if(!(value - this->m_recent_parameter_value->m_perceived_value <= delta
1142 && this->m_recent_parameter_value->m_perceived_value - value <= delta))
1143 {
1144 found_schema_pt = this->m_recent_parameter_value.get();
1145 }
1146 break;
1147 default:
1148 break;
1149 }
1150 }
1151 else
1152 {
1153 if(this->m_recent_parameter_value->m_time_perceived < _start)
1154 {
1155 return NULL;
1156 }
1157 }
1158 }
1159
1160 VS_ritr = this->m_parameter_history_value.rbegin();
1161 while(VS_ritr != this->m_parameter_history_value.rend() && found_schema_pt == NULL)
1162 {
1163 value_schema_pt = VS_ritr->get();
1164 if(value_schema_pt->m_time_perceived >= _start
1165 && value_schema_pt->m_time_perceived <= _end)
1166 {
1167 switch (comparison_type)
1168 {//1->; 2-<; 3-=;
1169 case 1:
1170 if(!(value_schema_pt->m_perceived_value - value > delta))
1171 {
1172 found_schema_pt = value_schema_pt;
1173 }
1174 break;
1175 case 2:
1176 if(!(value - value_schema_pt->m_perceived_value > delta))
1177 {
1178 found_schema_pt = value_schema_pt;
1179 }
1180 break;
1181 case 3:
1182 if(!(value - value_schema_pt->m_perceived_value <= delta
1183 && value_schema_pt->m_perceived_value - value <= delta))
1184 {
1185 found_schema_pt = value_schema_pt;
1186 }
1187 break;
1188 default:
1189 break;
1190 }
1191 }
1192 else
1193 {
1194 if(value_schema_pt->m_time_perceived < _start)
1195 {
1196 return NULL;
1197 }
1198 }
1199 VS_ritr++;
1200 }
1201 return found_schema_pt;
1202
1203}
1204
1206{
1207 cout << r5pars_.timesno << " " << str << " in MRParameterUnit.cpp" << '\n';
1208 ofstream fout("err messages.txt", ios::app);
1209 fout << r5pars_.timesno << " " << str << '\n';
1210 fout.close();
1211 //r5pars_.terminateall = true;
1212}
1213
1215{
1217 this->m_operator = _p_pt->m_operator;
1222
1225
1226 //
1227 if(_p_pt->m_Concept_ID_pt != NULL)
1229 else
1231
1232 if(_p_pt->m_recent_trend != NULL)
1233 {this->m_ID_recent_trend = _p_pt->m_recent_trend->m_ID;}
1234 else
1235 {this->m_ID_recent_trend = _p_pt->m_ID_recent_trend;}
1236
1237 if(_p_pt->m_recent_parameter_value)
1238 {
1239 this->m_recent_parameter_value = make_unique<MRValueSchema>();
1240 this->m_recent_parameter_value->CopyMRValueSchemaFromAnother(_p_pt->m_recent_parameter_value.get());
1241 }
1242 if(_p_pt->m_recent_parameter_rate)
1243 {
1244 this->m_recent_parameter_rate = make_unique<MRValueSchema>();
1245 this->m_recent_parameter_rate->CopyMRValueSchemaFromAnother(_p_pt->m_recent_parameter_rate.get());
1246 }
1247
1248 for(auto &e : _p_pt->m_parameter_history_value)
1249 {
1250 auto value_pt = make_unique<MRValueSchema>();
1251 value_pt->CopyMRValueSchemaFromAnother(e.get());
1252 this->m_parameter_history_value.push_back(std::move(value_pt));
1253 }
1254 for(auto &e : _p_pt->m_parameter_history_rate)
1255 {
1256 auto value_pt = make_unique<MRValueSchema>();
1257 value_pt->CopyMRValueSchemaFromAnother(e.get());
1258 this->m_parameter_history_rate.push_back(std::move(value_pt));
1259 }
1260
1261}
1262
1264{
1265 ReasonMachine * RM_pt;
1266 RM_pt = (ReasonMachine *)_pt;
1267/*
1268 IDElement * m_Concept_ID_pt;
1269 Statement * m_recent_trend;
1270
1271 string m_parameter_concept_ID;
1272 string m_ID_recent_trend;
1273*/
1274 if(this->m_parameter_concept_ID.compare("") != 0)
1275 {
1276 this->m_Concept_ID_pt = RM_pt->m_Concept_Base->FindConceptByID(this->m_parameter_concept_ID);
1277 if(this->m_Concept_ID_pt == NULL)
1278 {this->ErrorMessage("could not find the concept " + this->m_parameter_concept_ID); return;}
1279 }
1280
1281
1282 if(this->m_ID_recent_trend.compare("") != 0)
1283 {
1285 if(this->m_recent_trend == NULL)
1286 {this->ErrorMessage("could not find the statement " + this->m_ID_recent_trend); return;}
1287 }
1288 this->m_ID_recent_trend = "";
1289}
1290
1292{
1293
1294 ReasonMachine * RM_pt;
1295 Investigator * invest_pt;
1296 if (_operator == sim::Operator::ODM)
1297 {RM_pt = g_sim.Decision_Maker.m_RM.get();}
1298 else if (_operator == sim::Operator::OAT)
1299 {RM_pt = g_sim.Action_Taker.m_RM.get();}
1300 else
1301 {}//add error message
1302 //update the relevant investigation
1303
1304 if(this->m_recent_trend != NULL)
1305 {
1306 if(this->m_recent_trend->m_investigator_ID_pt != 0)
1307 {
1308 invest_pt = (Investigator *)this->m_recent_trend->m_investigator_ID_pt;
1309 if(invest_pt != NULL)
1310 {
1311 if(invest_pt->m_investigator_token < 3029)
1312 {
1313 invest_pt->m_last_active_time = r5pars_.timesno;
1314 if(invest_pt->m_investigation_closed == true)
1315 {
1316 //if(RM_pt->FindASimilarInvestigatorRecentlyResolved(invest_pt) == NULL && RM_pt->FindASimilarOngoingInvestigator(invest_pt) == NULL)
1317 //{
1318 invest_pt->ReopenThisInvestigator();
1319 }
1320 }
1321 }
1322 }
1323 }
1324}
Diagnostic reasoning engine — knowledge representation, mental model, and inference.
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
document e
void CopyIDElementToRestartInfo(IDElement *)
Definition: IDElement.cpp:23
int m_ID_Type
Definition: IDElement.h:15
std::string m_ID
Definition: IDElement.h:16
float m_last_active_time
Definition: Investigator.h:87
bool m_investigation_closed
Definition: Investigator.h:88
SentenceUnit * GetSemanticSentenceOfThisInvestigator()
void ReopenThisInvestigator()
Statement * m_possible_statement_pt
Definition: Investigator.h:131
int m_investigator_token
Definition: Investigator.h:99
Statement * m_Statement_pt
Definition: Investigator.h:130
SentenceUnit * m_SentenceUnit_pt
std::string m_parameter_concept_ID
std::string m_ID_recent_trend
float m_decrease_rate_threshold
MRValueSchema * FindAReadingConsistantWithASentenceWithinTimeRange(float _start, float _end, SentenceUnit *_sent_pt)
void ReadParameterRate(double)
Statement * m_recent_trend
void AddNewRateForFirstRoundCheck(float, int)
std::string m_parameter_indicator_ID
void PrintMessage(std::string)
void AddNewRate(float, int, bool)
std::unique_ptr< MRValueSchema > m_recent_parameter_rate
void AddNewValue(float, int, bool)
virtual ~MRParameterUnit()
IDElement * m_Concept_ID_pt
std::vector< std::unique_ptr< MRValueSchema > > m_parameter_history_rate
void UpdateTheRelevantInvestigator(int)
void AddNewValueForFirstRoundCheck(float, int)
MRValueSchema * FoundAValueReadingWithinTimeRange(float, float)
float m_increase_rate_threshold
float m_decrease_threshold
float m_increase_threshold
void ReadParameterIndication(double)
void ErrorMessage(std::string str)
void BuildConnectionsForThisMRParameter(void *)
void CopyMRParameterUnitInforFromAnother(MRParameterUnit *)
std::string m_parameter_rate_indicator_ID
void ReadParameterValue(double)
std::vector< std::unique_ptr< MRValueSchema > > m_parameter_history_value
std::unique_ptr< MRValueSchema > m_recent_parameter_value
MRValueSchema * FindAReadingInconsistantWithASentenceWithinTimeRange(float _start, float _end, SentenceUnit *_sent_pt)
MRValueSchema * CheckReadingWithinTimeRange(double, double)
float m_time_perceived
Definition: MRValueSchema.h:11
float m_perceived_value
Definition: MRValueSchema.h:14
std::unique_ptr< ReasonMachine > m_RM
Definition: Operator.h:55
void ActiveFetchParameterValueInfo(std::string, int)
Definition: Operator.cpp:1451
std::unique_ptr< KBConcept > m_Concept_Base
std::vector< std::unique_ptr< Investigator > > m_investigator_pool
Investigator * m_working_on_invest_pt
void AddDeltaToCognitiveLoad(float)
void AddANewStatement(Statement *)
std::vector< std::unique_ptr< SentenceUnit > > m_Semantic_list
std::vector< std::unique_ptr< Statement > > m_Statement_list
Statement * FindStatementByID(std::string)
std::unique_ptr< MentalRepresentation > m_MR
SentenceUnit * CheckExistInSemanticPoolBySentence(SentenceUnit *)
void AddDeltaToSystemDynamics(float)
void AddNewInvestigator(Investigator *)
IDElement * m_object_pt
Definition: SentenceUnit.h:41
IDElement * m_process_pt
Definition: SentenceUnit.h:38
int m_sentence_type
Definition: SentenceUnit.h:34
double m_value
Definition: SentenceUnit.h:31
float m_delta_value
Definition: SentenceUnit.h:33
IDElement * m_comparison_pt
Definition: SentenceUnit.h:37
IDElement * m_subject_pt
Definition: SentenceUnit.h:40
bool m_tbi_bl
Definition: Statement.h:39
TimeRange m_time_range
Definition: Statement.h:40
SentenceUnit * m_sent_pt
Definition: Statement.h:43
void RefreshStatementEndTimeToCurrentTime(int)
Definition: Statement.cpp:73
IDElement * m_investigator_ID_pt
Definition: Statement.h:42
float GetTimeBoundEarlier()
Definition: TimeRange.cpp:79
struct @0 r5pars_
Definition: RMTokens.h:21
constexpr int ODM
Definition: SimConstants.h:145
constexpr int OAT
Definition: SimConstants.h:144
OperatorAT Action_Taker
Crew action execution model.
OperatorDM Decision_Maker
Crew decision-making model.