1#ifndef LANDMARKS_LANDMARK_COST_PARTITIONING_ALGORITHMS_H
2#define LANDMARKS_LANDMARK_COST_PARTITIONING_ALGORITHMS_H
4#include "downward/task_proxy.h"
6#include "downward/lp/lp_solver.h"
8#include <unordered_set>
17class LandmarkStatusManager;
19class CostPartitioningAlgorithm {
21 const LandmarkGraph& lm_graph;
22 const std::vector<int> operator_costs;
24 const std::unordered_set<int>&
25 get_achievers(
const Landmark& landmark,
bool past)
const;
28 CostPartitioningAlgorithm(
29 const std::vector<int>& operator_costs,
30 const LandmarkGraph& graph);
31 virtual ~CostPartitioningAlgorithm() =
default;
33 virtual double get_cost_partitioned_heuristic_value(
34 const LandmarkStatusManager& lm_status_manager,
35 const State& ancestor_state) = 0;
38class UniformCostPartitioningAlgorithm :
public CostPartitioningAlgorithm {
39 bool use_action_landmarks;
42 UniformCostPartitioningAlgorithm(
43 const std::vector<int>& operator_costs,
44 const LandmarkGraph& graph,
45 bool use_action_landmarks);
47 virtual double get_cost_partitioned_heuristic_value(
48 const LandmarkStatusManager& lm_status_manager,
49 const State& ancestor_state)
override;
52class OptimalCostPartitioningAlgorithm :
public CostPartitioningAlgorithm {
53 lp::LPSolver lp_solver;
56 std::vector<lp::LPConstraint> lp_constraints;
65 lp::LinearProgram build_initial_lp();
68 OptimalCostPartitioningAlgorithm(
69 const std::vector<int>& operator_costs,
70 const LandmarkGraph& graph,
71 lp::LPSolverType solver_type);
73 virtual double get_cost_partitioned_heuristic_value(
74 const LandmarkStatusManager& lm_status_manager,
75 const State& ancestor_state)
override;