86 #ifndef mdl_controller_h
87 #define mdl_controller_h
89 #include "hlp_overlay.h"
90 #include "hlp_controller.h"
91 #include "p_monitor.h"
124 ground_mk_rdx_ = ground_mk_rdx;
129 MkRdx* ground_mk_rdx_;
135 bool check_simulated_chaining(
const HLPBindingMap *bm,
Fact *f_imdl,
Pred *prediction, std::vector<BindingResult>& results);
157 bool chaining_was_allowed;
191 public PredictedEvidenceEntry {
196 bool chaining_was_allowed_;
201 bool is_out_of_range(Timestamp now)
const {
return (before_<now || after_>now); }
222 static const uint32 LHSController = 0;
223 static const uint32 RHSController = 1;
226 NOT_A_REQUIREMENT = 0,
227 WEAK_REQUIREMENT = 1,
228 STRONG_REQUIREMENT = 2
231 RequirementType requirement_type_;
244 template<
class C>
void reduce_cache(
Fact *f_p_f_imdl,
MDLController *controller) {
247 #ifdef WITH_DETAIL_OID
248 OUTPUT_LINE((TraceLevel)0,
" make BatchReductionJob " << j->get_job_id() <<
"(" <<
249 j->get_detail_oid() <<
"), f_p_f_imdl fact(" << f_p_f_imdl->get_detail_oid() <<
250 "), controller(" << get_detail_oid() <<
") for " << get_core_object()->get_oid());
252 _Mem::Get()->push_reduction_job(j);
255 template<
class E>
void reduce_cache(CriticalSectionList<E> *cache, Fact *f_p_f_imdl, MDLController *controller) {
260 for (_e = cache->list_.begin(); _e != cache->list_.end();) {
262 if ((*_e).is_too_old(now))
263 _e = cache->list_.erase(_e);
264 else if ((*_e).evidence_->get_before() <= now)
270 PrimaryMDLOverlay o(
this, bindings_);
271 o.reduce((*_e).evidence_, f_p_f_imdl, controller);
278 bool monitor_predictions(_Fact *input);
282 static MDLController *New(View *view,
bool &inject_in_secondary_group);
284 void add_monitor(PMonitor *m);
285 void remove_monitor(PMonitor *m);
287 _Fact *get_lhs()
const {
return lhs_; }
288 _Fact *get_rhs()
const {
return rhs_; }
289 Fact *get_f_ihlp(HLPBindingMap *bindings,
bool wr_enabled)
const override {
290 return bindings->build_f_ihlp(get_object(), Opcodes::IMdl, wr_enabled);
299 ChainingStatus retrieve_simulated_imdl_fwd(
const HLPBindingMap *bm,
Fact *f_imdl,
Sim* sim, std::vector<BindingResult>& results);
300 ChainingStatus retrieve_simulated_imdl_bwd(
HLPBindingMap *bm,
Fact *f_imdl,
Sim* prediction_sim,
Fact *&ground,
Fact *&strong_requirement_ground);
303 MkRdx* ground_mk_rdx, std::vector<
P<_Fact> >& already_predicted) = 0;
304 virtual void register_pred_outcome(
Fact *f_pred,
r_code::Code* mk_rdx,
bool success,
_Fact *evidence, float32 confidence,
bool rate_failures) = 0;
305 virtual void register_req_outcome(
Fact *f_pred,
bool success,
bool rate_failures) = 0;
307 void add_requirement_to_rhs();
308 void remove_requirement_from_rhs();
310 bool is_requirement()
const {
return (requirement_type_ != NOT_A_REQUIREMENT); }
311 bool is_reuse()
const {
return is_reuse_; }
312 bool is_cmd()
const {
return is_cmd_; }
314 void register_requirement(_Fact *f_pred, RequirementsPair &r_p);
328 r_code::Code* imdl, Timestamp& after, Timestamp& before, uint16* after_ts_index = NULL, uint16* before_ts_index = NULL);
338 virtual uint32 get_rdx_out_group_count()
const {
return get_out_group_count(); }
340 void inject_simulation(
Fact *simulation, Timestamp injectionTime)
const;
342 bool monitor_goals(
_Fact *input);
344 std::chrono::microseconds get_sim_thz(Timestamp now, Timestamp deadline)
const;
353 virtual void register_goal_outcome(
Fact *goal,
bool success,
_Fact *evidence)
const = 0;
354 void register_predicted_goal_outcome(
Fact *goal,
HLPBindingMap *bm,
Fact *f_imdl,
bool success,
bool injected_goal);
355 virtual void register_simulated_goal_outcome(
Fact *goal,
bool success,
_Fact *evidence)
const = 0;
356 void inject_simulated_goal_success(
Fact* goal,
bool success,
_Fact* evidence)
const;
385 uint32 get_rdx_out_group_count()
const override {
return get_out_group_count() - 1; }
390 void register_drive_outcome(
Fact *goal,
bool success)
const;
392 void check_last_match_time(
bool )
override {}
402 MkRdx* ground_mk_rdx, std::vector<
P<_Fact> >& already_predicted)
override;
403 void register_pred_outcome(
Fact *f_pred,
r_code::Code* mk_rdx,
bool success,
_Fact *evidence, float32 confidence,
bool rate_failures)
override;
404 void register_goal_outcome(
Fact *goal,
bool success,
_Fact *evidence)
const override;
405 void register_simulated_goal_outcome(
Fact *goal,
bool success,
_Fact *evidence)
const override;
406 void register_req_outcome(
Fact *f_pred,
bool success,
bool rate_failures)
override;
440 void rate_model(
bool success);
441 void kill_views()
override;
442 void check_last_match_time(
bool match)
override;
444 void abduce_lhs(
HLPBindingMap *bm,
Fact *super_goal,
Fact *f_imdl,
bool opposite, float32 confidence,
Sim *sim,
Fact *ground,
bool set_before);
456 Sim *sim,
Fact *ground,
Fact* goal_requirement = NULL);
457 void abduce_simulated_imdl(
HLPBindingMap *bm,
Fact *super_goal,
Fact *f_imdl,
bool opposite, float32 confidence,
Sim *sim);
458 void predict_simulated_lhs(
HLPBindingMap *bm,
bool opposite, float32 confidence,
Sim *sim);
459 Fact* predict_simulated_evidence(
_Fact *evidence,
Sim *sim);
460 void assume(
_Fact *input);
476 MkRdx* ground_mk_rdx, std::vector<
P<_Fact> >& already_predicted)
override;
477 bool inject_prediction(
Fact *prediction,
Fact *f_imdl, float32 confidence, Timestamp::duration time_to_live,
r_code::Code *mk_rdx)
const;
479 void register_pred_outcome(
Fact *f_pred,
r_code::Code* mk_rdx,
bool success,
_Fact *evidence, float32 confidence,
bool rate_failures)
override;
480 void register_req_outcome(
Fact *f_pred,
bool success,
bool rate_failures)
override;
482 void register_goal_outcome(
Fact *goal,
bool success,
_Fact *evidence)
const override;
483 void register_simulated_goal_outcome(
Fact *goal,
bool success,
_Fact *evidence)
const override;
498 void abduce(
HLPBindingMap *bm,
Fact *super_goal,
bool opposite, float32 confidence);
522 void debug(
View *input);
538 void kill_views()
override;
539 void check_last_match_time(
bool match)
override;
552 MkRdx* ground_mk_rdx, std::vector<
P<_Fact> >& already_predicted)
override;
553 void register_pred_outcome(
Fact *f_pred,
r_code::Code* mk_rdx,
bool success,
_Fact *evidence, float32 confidence,
bool rate_failures)
override;
554 void register_req_outcome(
Fact *f_pred,
bool success,
bool rate_failures)
override;