Skip to content
Snippets Groups Projects
Commit 43d82db9 authored by David  Martínez's avatar David Martínez
Browse files

Fixed combination of rule alternatives with dangerous actions.

parent d186eb64
No related branches found
No related tags found
No related merge requests found
......@@ -26,6 +26,8 @@ std::vector<RuleSet> FailureAnalyzerUtils::get_rules_that_overcome_planning_fail
RuleSet new_rules = create_new_rule_candidates_with_planning_failure(*rule_it, symbolic_planning_failure, transitions);
CINFO("excuses") << "Checking " << new_rules.size() << " new rules for action " << (*rule_it)->name << " with score ( " << orig_score << " ): " << NOENDL;
if (DEBUG > 1)
CINFO("excuses") << "Original rule was " << **rule_it;
for ( RuleList::iterator new_rule_it=new_rules.begin() ; new_rule_it != new_rules.end(); ++new_rule_it ) {
RuleSet new_generated_rules(rules_copy);
new_generated_rules.push_back(*new_rule_it);
......
......@@ -197,6 +197,7 @@ bool HighLevelPlanner::replan_without_dangerous_actions(const Scenario& scenario
check_teacher_demonstration_requested(new_planning_res);
if (new_planning_res) {
LOG(INFO) << START_COLOR_CYAN << "Replanning without dangerous rules was successful" << END_COLOR;
*logging_file_ptr << "Replan without dangerous rule: " << *new_planning_res << std::endl;
planning_res = new_planning_res;
return true; // found new plan, not dangerous any more
// TODO Make a recursive loop until no dangerous action is planned
......@@ -262,6 +263,18 @@ SymbolOptional HighLevelPlanner::planning_with_alternative_rules(Scenario& scena
}
if (!extra_rulesets.empty())
CINFO("excuses");
// don't select dangerous actions with rule alternatives
if (planning_res &&
scenario.config_reader.get_variable<bool>("confirm_dangerous_actions")
&& scenario.get_rules().is_dangerous(*planning_res, scenario.get_state()) ) {
float prob_success = planner->get_expected_action_success_probability(scenario, *planning_res, true);
if (prob_success < 1.0) {
(*logging_file_ptr) << "Ignoring dangerous alternative due to possible dead end: " << *planning_res << std::endl;
CINFO("excuses") << "Ignoring dangerous alternative due to possible dead end: " << *planning_res;
planning_res = SymbolOptional();
}
}
// if found good rules -> save them
if (planning_res) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment