6 #include <unordered_set>
7 #include <unordered_map>
10 template <
typename Indiv
idualTask,
typename Constra
intType,
typename Indiv
idualSolution>
18 std::unordered_map<IndividualTask*,IndividualSolution*>
solutionMap;
28 CBSNode(std::vector<IndividualTask*> _tasks) {
29 for(
auto& task : _tasks) {
59 cost = std::move(_node.cost);
79 if(kv.second != *iter)
92 if(kv.second != *(iter->second))
99 return cost > _node.cost;
105 template <
typename Indiv
idualTask,
typename Constra
intType,
typename Indiv
idualSolution>
108 IndividualTask* _task)>;
110 template <
typename Indiv
idualTask,
typename Constra
intType,
typename Indiv
idualSolution>
112 std::function<std::vector<std::pair<IndividualTask*, ConstraintType>>(
115 template <
typename Indiv
idualTask,
typename Constra
intType,
typename Indiv
idualSolution>
119 template <
typename Indiv
idualTask,
typename Constra
intType,
typename Indiv
idualSolution>
121 std::function<std::vector<CBSNode<IndividualTask,ConstraintType,IndividualSolution>>(
123 std::vector<std::pair<IndividualTask*, ConstraintType>> _constraints,
127 template <
typename Indiv
idualTask,
typename Constra
intType,
typename Indiv
idualSolution>
131 std::vector<IndividualTask*> _tasks,
135 template <
typename Indiv
idualTask,
typename Constra
intType,
typename Indiv
idualSolution>
139 std::vector<CBSNode<IndividualTask, ConstraintType, IndividualSolution>>& _root,
140 std::vector<IndividualTask*> _tasks,
145 for(
auto task : _tasks) {
146 if (!_lowlevel(single, task))
149 single.
cost = _cost(single);
150 _root.push_back(single);
154 template <
typename Indiv
idualTask,
typename Constra
intType,
typename Indiv
idualSolution>
157 std::vector<IndividualTask*> _tasks,
163 auto initial = CBSDefaultInitialFunction<IndividualTask, ConstraintType, IndividualSolution>();
164 return CBS(_tasks, _validate, _split, _lowlevel, _cost, initial);
167 template <
typename Indiv
idualTask,
typename Constra
intType,
typename Indiv
idualSolution>
170 std::vector<IndividualTask*> _tasks,
181 std::priority_queue<CBSNodeType,
182 std::vector<CBSNodeType>,
183 std::greater<CBSNodeType>> ct;
186 std::vector<CBSNodeType> root;
188 _initial(root, _tasks, _lowlevel, _cost);
190 for (
auto node : root)
197 auto node = ct.top();
201 auto constraints = _validate(node);
204 if(constraints.empty())
208 auto children = _split(node, constraints, _lowlevel, _cost);
211 for(
const auto& child : children) {
216 return CBSNodeType();
CBSInitialFunction< IndividualTask, ConstraintType, IndividualSolution > CBSDefaultInitialFunction()
Definition: CBS.h:137
std::function< std::vector< std::pair< IndividualTask *, ConstraintType > >(CBSNode< IndividualTask, ConstraintType, IndividualSolution > &_node)> CBSValidationFunction
Definition: CBS.h:113
std::function< void(std::vector< CBSNode< IndividualTask, ConstraintType, IndividualSolution > > &_root, std::vector< IndividualTask * > _tasks, CBSLowLevelPlanner< IndividualTask, ConstraintType, IndividualSolution > &_lowlevel, CBSCostFunction< IndividualTask, ConstraintType, IndividualSolution > &_cost)> CBSInitialFunction
Definition: CBS.h:133
std::function< std::vector< CBSNode< IndividualTask, ConstraintType, IndividualSolution > >(CBSNode< IndividualTask, ConstraintType, IndividualSolution > &_node, std::vector< std::pair< IndividualTask *, ConstraintType > > _constraints, CBSLowLevelPlanner< IndividualTask, ConstraintType, IndividualSolution > &_lowlevel, CBSCostFunction< IndividualTask, ConstraintType, IndividualSolution > &_cost)> CBSSplitNodeFunction
Definition: CBS.h:125
std::function< bool(CBSNode< IndividualTask, ConstraintType, IndividualSolution > &_node, IndividualTask *_task)> CBSLowLevelPlanner
Definition: CBS.h:108
std::function< double(CBSNode< IndividualTask, ConstraintType, IndividualSolution > &_node)> CBSCostFunction
Definition: CBS.h:117
CBSNode< IndividualTask, ConstraintType, IndividualSolution > CBS(std::vector< IndividualTask * > _tasks, CBSValidationFunction< IndividualTask, ConstraintType, IndividualSolution > &_validate, CBSSplitNodeFunction< IndividualTask, ConstraintType, IndividualSolution > &_split, CBSLowLevelPlanner< IndividualTask, ConstraintType, IndividualSolution > &_lowlevel, CBSCostFunction< IndividualTask, ConstraintType, IndividualSolution > &_cost)
Definition: CBS.h:156
CBSNode(const CBSNode &_node)
Definition: CBS.h:36
bool operator==(const CBSNode &_node) const
Definition: CBS.h:64
bool operator>(const CBSNode &_node) const noexcept
Definition: CBS.h:98
CBSNode & operator=(const CBSNode &_node)
Definition: CBS.h:42
CBSNode()
Definition: CBS.h:24
std::unordered_map< IndividualTask *, IndividualSolution * > solutionMap
Map of task to its solution.
Definition: CBS.h:18
CBSNode & operator=(CBSNode &&_node)
Definition: CBS.h:53
CBSNode(std::vector< IndividualTask * > _tasks)
Definition: CBS.h:28
double cost
Cost of current solution.
Definition: CBS.h:21
std::map< IndividualTask *, std::set< ConstraintType > > constraintMap
Map of task to its constraints.
Definition: CBS.h:15