void Explanation_Based_Chunker::add_additional_constraints() { constraint* lConstraint = NULL; test eq_copy = NULL, constraint_test = NULL; for (constraint_list::iterator iter = constraints->begin(); iter != constraints->end();) { lConstraint = *iter; condition* lOperationalCond = lConstraint->eq_test->identity ? lConstraint->eq_test->identity->get_operational_cond() : NULL; condition* lOperationalConstraintCond = lConstraint->constraint_test->identity ? lConstraint->constraint_test->identity->get_operational_cond() : NULL; if (lOperationalCond && !lConstraint->eq_test->identity->literalized()) { constraint_test = copy_test(thisAgent, lConstraint->constraint_test, true); attach_relational_test(constraint_test, lOperationalCond, lConstraint->eq_test->identity->get_operational_field()); } else if (lOperationalConstraintCond && !lConstraint->constraint_test->identity->literalized()) { eq_copy = copy_test(thisAgent, lConstraint->eq_test, true); constraint_test = copy_test(thisAgent, lConstraint->constraint_test, true); invert_relational_test(&eq_copy, &constraint_test); attach_relational_test(constraint_test, lOperationalConstraintCond, lConstraint->constraint_test->identity->get_operational_field()); deallocate_test(thisAgent, eq_copy); } ++iter; } clear_cached_constraints(); }
void Explanation_Based_Chunker::add_additional_constraints() { constraint* lConstraint = NULL; test eq_copy = NULL, constraint_test = NULL; dprint_header(DT_CONSTRAINTS, PrintBefore, "Adding %u transitive constraints from non-operational conditions...\n", static_cast<uint64_t>(constraints->size())); for (constraint_list::iterator iter = constraints->begin(); iter != constraints->end();) { lConstraint = *iter; condition* lOperationalCond = lConstraint->eq_test->identity ? lConstraint->eq_test->identity->get_operational_cond() : NULL; condition* lOperationalConstraintCond = lConstraint->constraint_test->identity ? lConstraint->constraint_test->identity->get_operational_cond() : NULL; dprint(DT_CONSTRAINTS, "Attempting to add constraint %t %g to %t %g: ", lConstraint->constraint_test, lConstraint->constraint_test, lConstraint->eq_test, lConstraint->eq_test); if (lOperationalCond && !lConstraint->eq_test->identity->literalized()) { constraint_test = copy_test(thisAgent, lConstraint->constraint_test, true); attach_relational_test(constraint_test, lOperationalCond, lConstraint->eq_test->identity->get_operational_field()); dprint(DT_CONSTRAINTS, "...constraint added. Condition is now %l\n", lOperationalCond); } else if (lOperationalConstraintCond && !lConstraint->constraint_test->identity->literalized()) { eq_copy = copy_test(thisAgent, lConstraint->eq_test, true); constraint_test = copy_test(thisAgent, lConstraint->constraint_test, true); invert_relational_test(&eq_copy, &constraint_test); attach_relational_test(constraint_test, lOperationalConstraintCond, lConstraint->constraint_test->identity->get_operational_field()); deallocate_test(thisAgent, eq_copy); dprint(DT_CONSTRAINTS, "...complement of constraint added. Condition is now %l\n", lOperationalConstraintCond); } else { dprint(DT_CONSTRAINTS, "...did not add constraint:\n eq_test: %t %g, literalized = %s\n reltest: %t %g, literalized = %s\n", lConstraint->eq_test, lConstraint->eq_test, (lConstraint->eq_test->identity && lConstraint->eq_test->identity->literalized()) ? "true" : "false", lConstraint->constraint_test, lConstraint->constraint_test, (lConstraint->constraint_test->identity && lConstraint->constraint_test->identity->literalized()) ? "true" : "false"); } ++iter; } clear_cached_constraints(); dprint_header(DT_CONSTRAINTS, PrintAfter, "Done adding transitive constraints.\n"); }
void remove_isa_state_tests_for_non_roots(agent* thisAgent, condition **lhs_top, condition ** /*lhs_bottom*/, list *roots) { condition *cond; Bool a,b; test temp; a = FALSE; b = FALSE; for (cond = *lhs_top; cond != NIL; cond = cond->next) { if ((cond->type == POSITIVE_CONDITION) && (test_is_complex_test(cond->data.tests.id_test)) && (test_includes_goal_or_impasse_id_test (cond->data.tests.id_test, TRUE, FALSE)) && (!test_tests_for_root(cond->data.tests.id_test, roots))) { temp = cond->data.tests.id_test; cond->data.tests.id_test = copy_test_removing_goal_impasse_tests (thisAgent, temp,&a,&b); deallocate_test (thisAgent, temp); /* RBD fixed memory leak 3/29/95 */ } } }
void instantiation_record::print_for_wme_trace(bool isChunk, bool printFooter) { Output_Manager* outputManager = thisAgent->outputManager; if (conditions->empty()) { outputManager->printa(thisAgent, "No conditions on left-hand-side\n"); } else { condition_record* lCond; bool lInNegativeConditions = false; int lConditionCount = 0; action* rhs; test id_test_without_goal_test = NULL; outputManager->set_column_indent(0, 7); outputManager->set_column_indent(1, 57); outputManager->set_column_indent(2, 72); /* Print header */ outputManager->printa_sf(thisAgent, "Working memory trace of instantiation # %u %-(match of rule %y at level %d)\n", instantiationID, production_name, static_cast<int64_t>(match_level)); outputManager->printa_sf(thisAgent, "%- %-Operational %-Creator\n\n"); outputManager->set_print_test_format(false, true); for (condition_record_list::iterator it = conditions->begin(); it != conditions->end(); it++) { lCond = (*it); ++lConditionCount; if (lInNegativeConditions) { if (lCond->type != CONJUNCTIVE_NEGATION_CONDITION) { outputManager->printa(thisAgent, " }\n"); lInNegativeConditions = false; } } else { if (lCond->type == CONJUNCTIVE_NEGATION_CONDITION) { outputManager->printa(thisAgent, " -{\n"); lInNegativeConditions = true; } } outputManager->printa_sf(thisAgent, "%d:%-", lConditionCount); id_test_without_goal_test = copy_test(thisAgent, lCond->condition_tests.id, false, false, true); outputManager->printa_sf(thisAgent, "(%t%s^%t %t%s)%-", id_test_without_goal_test, ((lCond->type == NEGATIVE_CONDITION) ? " -" : " "), lCond->condition_tests.attr, lCond->condition_tests.value, lCond->test_for_acceptable_preference ? " +" : ""); deallocate_test(thisAgent, id_test_without_goal_test); bool isSuper = (match_level > 0) && (lCond->wme_level_at_firing < match_level); outputManager->printa_sf(thisAgent, "%s", (isSuper ? " Yes" : " No")); if (lCond->parent_instantiation) { outputManager->printa_sf(thisAgent, "%-i %u (%y)%-", (lCond->parent_instantiation->instantiationID), (lCond->parent_instantiation->production_name)); } else if (lCond->type == POSITIVE_CONDITION) { outputManager->printa_sf(thisAgent, isSuper ? "%-Higher-level Problem Space%-" : "%-Soar Architecture%-"); } else { outputManager->printa_sf(thisAgent, "%-N/A%-"); } outputManager->printa(thisAgent, "\n"); } if (lInNegativeConditions) { outputManager->printa(thisAgent, " }\n"); } outputManager->printa(thisAgent, " -->\n"); thisAgent->explanationMemory->print_instantiation_actions(actions, thisAgent->explanationMemory->get_production(original_productionID), rhs); if (printFooter) { thisAgent->explanationMemory->print_footer(); } } }