AERA
All Classes Functions Pages
ast_controller.tpl.cpp
1 //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
2 //_/_/
3 //_/_/ AERA
4 //_/_/ Autocatalytic Endogenous Reflective Architecture
5 //_/_/
6 //_/_/ Copyright (c) 2018-2025 Jeff Thompson
7 //_/_/ Copyright (c) 2018-2025 Kristinn R. Thorisson
8 //_/_/ Copyright (c) 2018-2025 Icelandic Institute for Intelligent Machines
9 //_/_/ http://www.iiim.is
10 //_/_/
11 //_/_/ Copyright (c) 2010-2012 Eric Nivel
12 //_/_/ Center for Analysis and Design of Intelligent Agents
13 //_/_/ Reykjavik University, Menntavegur 1, 102 Reykjavik, Iceland
14 //_/_/ http://cadia.ru.is
15 //_/_/
16 //_/_/ Part of this software was developed by Eric Nivel
17 //_/_/ in the HUMANOBS EU research project, which included
18 //_/_/ the following parties:
19 //_/_/
20 //_/_/ Autonomous Systems Laboratory
21 //_/_/ Technical University of Madrid, Spain
22 //_/_/ http://www.aslab.org/
23 //_/_/
24 //_/_/ Communicative Machines
25 //_/_/ Edinburgh, United Kingdom
26 //_/_/ http://www.cmlabs.com/
27 //_/_/
28 //_/_/ Istituto Dalle Molle di Studi sull'Intelligenza Artificiale
29 //_/_/ University of Lugano and SUPSI, Switzerland
30 //_/_/ http://www.idsia.ch/
31 //_/_/
32 //_/_/ Institute of Cognitive Sciences and Technologies
33 //_/_/ Consiglio Nazionale delle Ricerche, Italy
34 //_/_/ http://www.istc.cnr.it/
35 //_/_/
36 //_/_/ Dipartimento di Ingegneria Informatica
37 //_/_/ University of Palermo, Italy
38 //_/_/ http://diid.unipa.it/roboticslab/
39 //_/_/
40 //_/_/
41 //_/_/ --- HUMANOBS Open-Source BSD License, with CADIA Clause v 1.0 ---
42 //_/_/
43 //_/_/ Redistribution and use in source and binary forms, with or without
44 //_/_/ modification, is permitted provided that the following conditions
45 //_/_/ are met:
46 //_/_/ - Redistributions of source code must retain the above copyright
47 //_/_/ and collaboration notice, this list of conditions and the
48 //_/_/ following disclaimer.
49 //_/_/ - Redistributions in binary form must reproduce the above copyright
50 //_/_/ notice, this list of conditions and the following disclaimer
51 //_/_/ in the documentation and/or other materials provided with
52 //_/_/ the distribution.
53 //_/_/
54 //_/_/ - Neither the name of its copyright holders nor the names of its
55 //_/_/ contributors may be used to endorse or promote products
56 //_/_/ derived from this software without specific prior
57 //_/_/ written permission.
58 //_/_/
59 //_/_/ - CADIA Clause: The license granted in and to the software
60 //_/_/ under this agreement is a limited-use license.
61 //_/_/ The software may not be used in furtherance of:
62 //_/_/ (i) intentionally causing bodily injury or severe emotional
63 //_/_/ distress to any person;
64 //_/_/ (ii) invading the personal privacy or violating the human
65 //_/_/ rights of any person; or
66 //_/_/ (iii) committing or preparing for any act of war.
67 //_/_/
68 //_/_/ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
69 //_/_/ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
70 //_/_/ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
71 //_/_/ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
72 //_/_/ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
73 //_/_/ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
74 //_/_/ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
75 //_/_/ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
76 //_/_/ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
77 //_/_/ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
78 //_/_/ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
79 //_/_/ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
80 //_/_/ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
81 //_/_/ OF SUCH DAMAGE.
82 //_/_/
83 //_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
84 
85 #include "ast_controller.h"
86 #include "mem.h"
87 #include "factory.h"
88 #include "auto_focus.h"
89 
90 using namespace r_code;
91 
92 namespace r_exec {
93 
94 template<class U> ASTController<U>::ASTController(AutoFocusController *auto_focus, View *target) : OController(NULL) {
95 
96  target_ = (_Fact *)target->object_;
97  tpx_ = new CTPX(auto_focus, target); // target is the premise, i.e. the tpx' target to be defeated.
98  thz_timestamp_ = Now() - Utils::GetTimeTolerance();
99 }
100 
101 template<class U> ASTController<U>::~ASTController() {
102 }
103 
104 template<class U> void ASTController<U>::take_input(r_exec::View *input) {
105 
106  if (is_invalidated())
107  return;
108 
109  if (input->object_->code(0).asOpcode() == Opcodes::Fact ||
110  input->object_->code(0).asOpcode() == Opcodes::AntiFact) { // discard everything but facts and |facts.
111 
112  Goal *goal = ((_Fact *)input->object_)->get_goal();
113  if (goal && goal->get_actor() == _Mem::Get()->get_self()) // ignore self's goals.
114  return;
115  if (input->get_ijt() >= thz_timestamp_) // input is too old.
116  Controller::__take_input<U>(input);
117  }
118 }
119 
120 template<class U> void ASTController<U>::reduce(View *input) {
121 
122  if (is_invalidated())
123  return;
124 
125  _Fact *input_object = input->object_;
126  if (input_object->is_invalidated()) {
127  return; }
128  reductionCS_.enter();
129 
130  if (input_object == target_) {
131 
132  tpx_->store_input(input);
133  reductionCS_.leave();
134  return;
135  }
136 
137  Pred *prediction = input_object->get_pred();
138  if (prediction) {
139  // Don't cancel if a model made a prediction of an anti-fact.
140  if (prediction->get_target()->is_fact()) {
141  switch (prediction->get_target()->is_timeless_evidence(target_)) {
142  case MATCH_SUCCESS_POSITIVE:
143  case MATCH_SUCCESS_NEGATIVE: // a model predicted the next value of the target.
144  kill();
145  break;
146  case MATCH_FAILURE:
147  break;
148  }
149  }
150 
151  reductionCS_.leave();
152  return;
153  }
154  ((U *)this)->reduce(input, input_object);
155 
156  reductionCS_.leave();
157 }
158 
159 template<class U> void ASTController<U>::kill() {
160 
161  invalidate();
162  get_view()->force_res(0);
163 }
164 }
r_exec::View
Definition: view.h:102