Skip to content
Michael Iatauro edited this page Dec 3, 2014 · 1 revision

Peng's notes on planning efficiently

The built-in solver for EUROPA is a generic one, and therefore are not very efficient for some domains. There are three typical ways to make the planning more efficient.

  1. Configure the built-in planner by changing PlannerConfig.xml An introduction of the general idea is [here].

A general PlannerConfig.xml looks like the following:

  <ThreatManager defaultPriority="0">
    <FlawHandler component="StandardThreatHandler"/>
    <FlawFilter class-match="Reservoir"/>
    <FlawFilter class-match="Reusable"/>
  </ThreatManager>

  <OpenConditionManager defaultPriority="0">
    <FlawHandler component="StandardOpenConditionHandler"/>
  </OpenConditionManager>

  <UnboundVariableManager defaultPriority="0">
    <FlawFilter var-match="start"/>
    <FlawFilter var-match="end"/>
    <FlawFilter var-match="duration"/>
    <FlawFilter class-match="Resource" var-match="time"/>
    <FlawFilter class-match="Resource" var-match="quantity"/>
    <FlawFilter class-match="Reservoir" var-match="time"/>
    <FlawFilter class-match="Reservoir" var-match="quantity"/>
    <FlawFilter class-match="Reusable" var-match="quantity"/>
    <FlawFilter component="InfiniteDynamicFilter"/>
    <FlawHandler component="StandardVariableHandler"/>
  </UnboundVariableManager>
</Solver>

Basically, it contains three pairs of managers and handlers, one for each type of flaws. '''defaultPriority''' sets the default priority of each flaw in this type (0 the highest). A '''FlawFilter''' says ignore a set of flaws that has the following properties. Other than filter a flaw (a filtered flaw will never be addressed by the planner, so that if that's part of the domain constraints, the planner might return a plan that conflicts with the filtered flaw), you might want to give a low priority to some type of flaws. The following line shows how this is done: Basically, this line says that when we use standard threat handler as our flaw handler, we set the priority to be 2 (less prioritied than priority 0 or priority 1), when the predicate happenes to be medical_conference. The '''order''' keyword says when we try values for this flaw, we try large values for timeline first (supposed to be late).

  1. Write your own class of handlers. This can be done by writing a C++ class somewhere.

  2. Write your own planner.

Clone this wiki locally