1#ifndef OPERATOR_COUNTING_DELETE_RELAXATION_RR_CONSTRAINTS_H
2#define OPERATOR_COUNTING_DELETE_RELAXATION_RR_CONSTRAINTS_H
4#include "downward/operator_counting/constraint_generator.h"
6#include "downward/task_proxy.h"
7#include "downward/utils/hash.h"
17namespace operator_counting {
19using LPConstraints = named_vector::NamedVector<lp::LPConstraint>;
20using LPVariables = named_vector::NamedVector<lp::LPVariable>;
22enum class AcyclicityType { TIME_LABELS, VERTEX_ELIMINATION, NONE };
24class DeleteRelaxationRRConstraints :
public ConstraintGenerator {
25 struct LPVariableIDs {
32 std::vector<int> fp_offsets;
41 std::vector<utils::HashMap<FactPair, int>> fpa_ids;
49 utils::HashMap<std::pair<FactPair, FactPair>,
int> e_ids;
56 std::vector<int> t_offsets;
58 int id_of_fp(FactPair f)
const;
59 int id_of_fpa(FactPair f,
const OperatorProxy& op)
const;
60 int id_of_e(std::pair<FactPair, FactPair> edge)
const;
61 int has_e(std::pair<FactPair, FactPair> edge)
const;
62 int id_of_t(FactPair f)
const;
65 AcyclicityType acyclicity_type;
66 bool use_integer_vars;
73 std::vector<int> constraint_offsets;
77 std::vector<FactPair> last_state;
79 int get_constraint_id(FactPair f)
const;
81 LPVariableIDs create_auxiliary_variables(
82 const TaskProxy& task_proxy,
83 LPVariables& variables)
const;
84 void create_auxiliary_variables_ve(
85 const TaskProxy& task_proxy,
86 const VEGraph& ve_graph,
87 LPVariables& variables,
88 LPVariableIDs& lp_var_ids)
const;
89 void create_auxiliary_variables_tl(
90 const TaskProxy& task_proxy,
91 LPVariables& variables,
92 LPVariableIDs& lp_var_ids)
const;
93 void create_constraints(
94 const TaskProxy& task_proxy,
95 const LPVariableIDs& lp_var_ids,
96 lp::LinearProgram& lp);
97 void create_constraints_ve(
98 const TaskProxy& task_proxy,
99 const VEGraph& ve_graph,
100 const LPVariableIDs& lp_var_ids,
101 lp::LinearProgram& lp);
102 void create_constraints_tl(
103 const TaskProxy& task_proxy,
104 const LPVariableIDs& lp_var_ids,
105 lp::LinearProgram& lp);
108 DeleteRelaxationRRConstraints(
109 AcyclicityType acyclicity_type,
110 bool use_integer_vars);
112 virtual void initialize_constraints(
113 const std::shared_ptr<AbstractTask>& task,
114 lp::LinearProgram& lp)
override;
116 update_constraints(
const State& state, lp::LPSolver& lp_solver)
override;