1#ifndef PROBFD_CARTESIAN_TRACE_BASED_FLAW_GENERATOR_H
2#define PROBFD_CARTESIAN_TRACE_BASED_FLAW_GENERATOR_H
4#include "probfd/cartesian_abstractions/flaw.h"
5#include "probfd/cartesian_abstractions/flaw_generator.h"
6#include "probfd/cartesian_abstractions/types.h"
8#include "downward/utils/timer.h"
20namespace probfd::cartesian_abstractions {
22class CartesianAbstraction;
23class CartesianHeuristic;
27namespace probfd::cartesian_abstractions {
32class TraceBasedFlawGenerator :
public FlawGenerator {
33 std::unique_ptr<TraceGenerator> trace_generator_;
35 utils::Timer find_trace_timer_ = utils::Timer(
true);
36 utils::Timer find_flaw_timer_ = utils::Timer(
true);
38 std::unique_ptr<Trace> find_trace(
39 CartesianAbstraction& abstraction,
41 CartesianHeuristic& heuristic,
42 utils::CountdownTimer& timer);
44 std::optional<Flaw> find_flaw(
45 const ProbabilisticTaskProxy& task_proxy,
46 const std::vector<int>& domain_sizes,
47 const Trace& solution,
48 CartesianAbstraction& abstraction,
50 utils::CountdownTimer& timer);
53 explicit TraceBasedFlawGenerator(TraceGenerator* trace_generator);
54 ~TraceBasedFlawGenerator()
override;
56 std::optional<Flaw> generate_flaw(
57 const ProbabilisticTaskProxy& task_proxy,
58 const std::vector<int>& domain_sizes,
59 CartesianAbstraction& abstraction,
60 const AbstractState* init_id,
61 CartesianHeuristic& heuristic,
63 utils::CountdownTimer& timer)
override;
65 void notify_split()
override;
67 void print_statistics(utils::LogProxy& log)
override;
70class AStarFlawGeneratorFactory :
public FlawGeneratorFactory {
72 std::unique_ptr<FlawGenerator> create_flaw_generator()
override;