summaryrefslogtreecommitdiff
path: root/PlanHeuristics.h
blob: 8a1d0dcc1ff7280b4d0c58c303d48aeb7ff94099 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// -*- C++ -*-
// $Id$

//=============================================================================
/**
 * @file  PlanHeuristic.h
 *
 * This file contains the class definitions for the encapsulations of
 * algorithms corresponding to planning/scheduling substeps.
 *
 * @author  John S. Kinnebrew <john.s.kinnebrew@vanderbilt.edu>
 */
//=============================================================================

#ifndef SA_POP_PLAN_STEP_H_
#define SA_POP_PLAN_STEP_H_

#include "SA_POP_Types.h"
#include "PlanStrategy.h"

namespace SA_POP {

  // Forward declaration of Planner.
  class Planner;

  /**
   * @class CondStrategy
   *
   * @brief CondStrategy abstract base class for a PlanHeuristic that
   *        chooses an open condition in the plan to satisfy next.
   */
  class CondStrategy {
  public:
    /// Constructor.
    /**
     * @param planner  Planner object to use.
     */
    CondStrategy (SA_POP::Planner *planner)
      : planner_ (planner) { };

    /// Destructor.
    virtual ~CondStrategy (void) { };

    /// Choose the next open condition to satisfy.
    /**
     * @param open_conds  Open conditions in the plan.
     *
     * @return  Next open condition to satisfy.
     */
    virtual Condition choose_cond (const OpenCondMap &open_conds) = 0;
	virtual Condition choose_cond_suspension (const OpenCondMap &open_conds) = 0;

  protected:
    /// Pointer to Planner object.
    SA_POP::Planner *planner_;
  };

  /**
   * @class TaskStrategy
   *
   * @brief TaskStrategy abstract base class for a PlanHeuristic that
   *        chooses an ordering of tasks for the choice to satisfy an
   *        open condition.
   */
  class TaskStrategy {
  public:
    /// Constructor.
    /**
     * @param planner  Planner object to use.
     */
    TaskStrategy (SA_POP::Planner *planner)
      : planner_ (planner) { };

    /// Destructor.
    virtual ~TaskStrategy (void) { };

    /// Choose the (ordering of) task(s) to satisfy an open condition.
    /**
     * @param open_cond  Open condition to satisfy.
     *
     * @return  Sorted list of tasks that satisfy given condition.
     */
    virtual TaskChoiceList choose_task (Condition open_cond) = 0;

    /// Choose the (ordering of) task(s) to satisfy an open condition.  Better
    /**
     * @param open_cond  Open condition to satisfy.
     *
     * @return  Sorted list of tasks that satisfy given condition.
     */
	virtual TaskChoiceList choose_task_fair (Condition open_cond) = 0;

  protected:
    /// Pointer to Planner object.
    SA_POP::Planner *planner_;
  };

  /**
   * @class ImplStrategy
   *
   * @brief ImplStrategy abstract base class for a PlanHeuristic that
   *        chooses an ordering of implementations to try for a given
   *        task instance.
   */
  class ImplStrategy {
  public:
    /// Constructor.
    /**
     * @param planner  Planner object to use.
     */
    ImplStrategy (SA_POP::Planner *planner)
      : planner_ (planner) { };

    /// Destructor.
    virtual ~ImplStrategy (void) { };

    /// Choose the (ordering of) task implementation(s) for a task instance.
    /**
     * @param task_inst  Task instance for which to choose implementations.
     *
     * @return  Ordered list of implementations for the given task instance.
     */
    virtual TaskImplList choose_impl (TaskInstID task_inst) = 0;

  protected:
    /// Pointer to Planner object.
    SA_POP::Planner *planner_;
  };

};  /* SA_POP namespace */

#endif /* SA_POP_PLAN_STEP_H_ */