Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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");
}
Ejemplo n.º 3
0
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 */
    }
  }
}
Ejemplo n.º 4
0
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();
        }
    }
}