AERA
|
#include <mdl_controller.h>
Public Member Functions | |
TopLevelMDLController (r_code::_View *view) | |
void | take_input (r_exec::View *input) override |
void | reduce (r_exec::View *input) |
void | store_requirement (_Fact *f_p_f_imdl, MkRdx *mk_rdx, MDLController *controller, bool chaining_was_allowed) override |
void | predict (HLPBindingMap *bm, _Fact *input, Fact *f_imdl, bool chaining_was_allowed, RequirementsPair &r_p, Fact *ground, MkRdx *ground_mk_rdx, std::vector< P< _Fact > > &already_predicted) override |
void | register_pred_outcome (Fact *f_pred, r_code::Code *mk_rdx, bool success, _Fact *evidence, float32 confidence, bool rate_failures) override |
void | register_goal_outcome (Fact *goal, bool success, _Fact *evidence) const override |
void | register_simulated_goal_outcome (Fact *goal, bool success, _Fact *evidence) const override |
void | register_req_outcome (Fact *f_pred, bool success, bool rate_failures) override |
![]() | |
void | add_g_monitor (_GMonitor *m) |
void | remove_g_monitor (_GMonitor *m) |
void | add_r_monitor (_GMonitor *m) |
void | remove_r_monitor (_GMonitor *m) |
void | register_predicted_goal_outcome (Fact *goal, HLPBindingMap *bm, Fact *f_imdl, bool success, bool injected_goal) |
void | inject_simulated_goal_success (Fact *goal, bool success, _Fact *evidence) const |
![]() | |
void | add_monitor (PMonitor *m) |
void | remove_monitor (PMonitor *m) |
_Fact * | get_lhs () const |
_Fact * | get_rhs () const |
Fact * | get_f_ihlp (HLPBindingMap *bindings, bool wr_enabled) const override |
ChainingStatus | retrieve_imdl_fwd (const HLPBindingMap *bm, Fact *f_imdl, RequirementsPair &r_p, std::vector< BindingResult > &results, MDLController *req_controller, bool &wr_enabled) |
ChainingStatus | retrieve_imdl_bwd (HLPBindingMap *bm, Fact *f_imdl, Fact *&ground, Fact *&strong_requirement_ground) |
ChainingStatus | retrieve_simulated_imdl_fwd (const HLPBindingMap *bm, Fact *f_imdl, Sim *sim, std::vector< BindingResult > &results) |
ChainingStatus | retrieve_simulated_imdl_bwd (HLPBindingMap *bm, Fact *f_imdl, Sim *prediction_sim, Fact *&ground, Fact *&strong_requirement_ground) |
void | add_requirement_to_rhs () |
void | remove_requirement_from_rhs () |
bool | is_requirement () const |
bool | is_reuse () const |
bool | is_cmd () const |
void | register_requirement (_Fact *f_pred, RequirementsPair &r_p) |
![]() | |
void | invalidate () override |
r_code::Code * | get_core_object () const override |
r_code::Code * | get_unpacked_object () const |
void | add_requirement (bool strong) |
void | remove_requirement (bool strong) |
uint32 | get_requirement_count (uint32 &weak_requirement_count, uint32 &strong_requirement_count) |
uint32 | get_requirement_count () |
void | store_evidence (_Fact *evidence) |
void | store_predicted_evidence (_Fact *evidence) |
uint16 | get_out_group_count () const |
r_code::Code * | get_out_group (uint16 i) const |
Group * | get_host () const |
bool | has_tpl_args () const |
bool | inject_prediction (Fact *prediction, float32 confidence) const |
![]() | |
std::chrono::microseconds | get_tsc () |
bool | is_invalidated () |
void | activate (bool a) |
bool | is_activated () const |
bool | is_alive () const |
r_code::Code * | get_object () const |
r_exec::View * | get_view () const |
void | _take_input (r_exec::View *input) |
virtual void | gain_activation () |
virtual void | lose_activation () |
void | set_view (View *view) |
void | debug (View *) |
![]() | |
void | incRef () |
virtual void | decRef () |
Additional Inherited Members | |
![]() | |
static MDLController * | New (View *view, bool &inject_in_secondary_group) |
static bool | get_imdl_template_timings (r_code::Code *imdl, Timestamp &after, Timestamp &before, uint16 *after_ts_index=NULL, uint16 *before_ts_index=NULL) |
![]() | |
enum | RequirementType { NOT_A_REQUIREMENT = 0, WEAK_REQUIREMENT = 1, STRONG_REQUIREMENT = 2 } |
![]() | |
void | inject_goal (HLPBindingMap *bm, Fact *goal, Fact *f_imdl) const |
void | inject_simulation (Fact *simulation, Timestamp injectionTime) const |
bool | monitor_goals (_Fact *input) |
std::chrono::microseconds | get_sim_thz (Timestamp now, Timestamp deadline) const |
PMDLController (r_code::_View *view) | |
![]() | |
void | _store_requirement (r_code::list< RequirementEntry > *cache, RequirementEntry &e) |
float32 | get_success_rate () const |
template<class C > | |
void | reduce_cache (Fact *f_p_f_imdl, MDLController *controller) |
template<class E > | |
void | reduce_cache (CriticalSectionList< E > *cache, Fact *f_p_f_imdl, MDLController *controller) |
bool | monitor_predictions (_Fact *input) |
MDLController (r_code::_View *view) | |
![]() | |
template<class E > | |
void | _store_evidence (CriticalSectionList< E > *cache, _Fact *evidence) |
bool | evaluate_bwd_guards (HLPBindingMap *bm, bool narrow_fwd_timings=false) |
MatchResult | check_evidences (_Fact *target, _Fact *&evidence) |
MatchResult | check_predicted_evidences (_Fact *target, _Fact *&evidence) |
void | inject_notification_into_out_groups (r_code::Code *origin, r_code::Code *marker) const |
bool | is_orphan () |
bool | become_invalidated () |
virtual void | kill_views () |
HLPController (r_code::_View *view) | |
![]() | |
OController (r_code::_View *view) | |
![]() | |
template<class C > | |
void | __take_input (r_exec::View *input) |
Controller (r_code::_View *view) | |
![]() | |
static void | push_reduction_job (_ReductionJob *j) |
![]() | |
CriticalSection | g_monitorsCS_ |
r_code::list< P< _GMonitor > > | g_monitors_ |
r_code::list< P< _GMonitor > > | r_monitors_ |
![]() | |
RequirementCache | requirements_ |
RequirementCache | simulated_requirements_ |
CriticalSection | p_monitorsCS_ |
r_code::list< P< PMonitor > > | p_monitors_ |
P< r_code::Code > | lhs_ |
P< r_code::Code > | rhs_ |
RequirementType | requirement_type_ |
bool | is_reuse_ |
bool | is_cmd_ |
CriticalSection | active_requirementsCS_ |
std::unordered_map< P< _Fact >, RequirementsPair, r_code::PHash< _Fact > > | active_requirements_ |
![]() | |
CriticalSectionList< EvidenceEntry > | evidences_ |
CriticalSectionList< PredictedEvidenceEntry > | predicted_evidences_ |
P< HLPBindingMap > | bindings_ |
bool | has_tpl_args_ |
uint32 | ref_count_ |
std::vector< P< HLPController > > | controllers_ |
Timestamp | last_match_time_ |
![]() | |
r_code::list< P< Overlay > > | overlays_ |
![]() | |
volatile uint32 | invalidated_ |
volatile uint32 | activated_ |
std::chrono::microseconds | time_scope_ |
r_code::_View * | view_ |
CriticalSection | reductionCS_ |
![]() | |
std::atomic_int32_t | refCount_ |
![]() | |
static const uint32 | LHSController = 0 |
static const uint32 | RHSController = 1 |
See g_monitor.h: controllers and monitors work closely together.
Min sthz is the time allowed for simulated predictions to flow upward. Max sthz sets the responsiveness of the model, i.e. limits the time waiting for simulation results, i.e. limits the latency of decision making. Simulation is synchronous, i.e. is performed within the enveloppe of sthz, recursively.
Drives are not monitored (since they are not produced by models): they are injected periodically by user-defined pgms. Drives are not observable: they cannot be predicted to succeed or fail. RHS is a drive; the model is an axiom: no rating and lives in the primary group only. The model does not predict. There is exactly one top-level model for each drive: hence no simulation during backward chaining. Top-level models cannot have requirements.
Backward chaining: inputs are drives. If LHS is in the fact cache, stop. If LHS is in the prediction cache, spawn a g-monitor (will be ready to catch a counter-prediction, invalidate the goal and trigger the re-issuing of a new goal). Else commit to the sub-goal; this will trigger the simulation of sub-sub-goals; N.B.: commands are not simulated, commands with unbound values are not injected.
Definition at line 382 of file mdl_controller.h.
|
overridevirtual |
If f_p_f_imdl->get_pred()->is_simulation(), then this is for a simulation.
Implements r_exec::MDLController.
Definition at line 1261 of file mdl_controller.cpp.