1#ifndef MERGE_AND_SHRINK_MERGE_SCORING_FUNCTION_TOTAL_ORDER_H
2#define MERGE_AND_SHRINK_MERGE_SCORING_FUNCTION_TOTAL_ORDER_H
4#include "downward/merge_and_shrink/merge_scoring_function.h"
9class RandomNumberGenerator;
12namespace merge_and_shrink {
13enum class AtomicTSOrder { REVERSE_LEVEL, LEVEL, RANDOM };
14enum class ProductTSOrder { OLD_TO_NEW, NEW_TO_OLD, RANDOM };
16class MergeScoringFunctionTotalOrder :
public MergeScoringFunction {
17 AtomicTSOrder atomic_ts_order;
18 ProductTSOrder product_ts_order;
19 bool atomic_before_product;
21 std::shared_ptr<utils::RandomNumberGenerator> rng;
22 std::vector<std::pair<int, int>> merge_candidate_order;
24 virtual std::string name()
const override;
26 dump_function_specific_options(utils::LogProxy& log)
const override;
29 explicit MergeScoringFunctionTotalOrder(
30 AtomicTSOrder atomic_ts_order,
31 ProductTSOrder product_ts_order,
32 bool atomic_before_product,
34 virtual std::vector<double> compute_scores(
35 const FactoredTransitionSystem& fts,
36 const std::vector<std::pair<int, int>>& merge_candidates)
override;
37 virtual void initialize(
const TaskProxy& task_proxy)
override;
39 virtual bool requires_init_distances()
const override {
return false; }
41 virtual bool requires_goal_distances()
const override {
return false; }