AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
trace_based_flaw_generator.h
1#ifndef PROBFD_CARTESIAN_TRACE_BASED_FLAW_GENERATOR_H
2#define PROBFD_CARTESIAN_TRACE_BASED_FLAW_GENERATOR_H
3
4#include "probfd/cartesian_abstractions/flaw.h"
5#include "probfd/cartesian_abstractions/flaw_generator.h"
6#include "probfd/cartesian_abstractions/types.h"
7
8#include "downward/utils/timer.h"
9
10#include <memory>
11#include <optional>
12#include <vector>
13
14// Forward Declarations
15namespace utils {
16class CountdownTimer;
17class LogProxy;
18} // namespace utils
19
20namespace probfd::cartesian_abstractions {
21class AbstractState;
22class CartesianAbstraction;
23class CartesianHeuristic;
24class TraceGenerator;
25} // namespace probfd::cartesian_abstractions
26
27namespace probfd::cartesian_abstractions {
28
29/*
30 Find flaws in a generated trace.
31*/
32class TraceBasedFlawGenerator : public FlawGenerator {
33 std::unique_ptr<TraceGenerator> trace_generator_;
34
35 utils::Timer find_trace_timer_ = utils::Timer(true);
36 utils::Timer find_flaw_timer_ = utils::Timer(true);
37
38 std::unique_ptr<Trace> find_trace(
39 CartesianAbstraction& abstraction,
40 int init_id,
41 CartesianHeuristic& heuristic,
42 utils::CountdownTimer& timer);
43
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,
49 utils::LogProxy& log,
50 utils::CountdownTimer& timer);
51
52public:
53 explicit TraceBasedFlawGenerator(TraceGenerator* trace_generator);
54 ~TraceBasedFlawGenerator() override;
55
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,
62 utils::LogProxy& log,
63 utils::CountdownTimer& timer) override;
64
65 void notify_split() override;
66
67 void print_statistics(utils::LogProxy& log) override;
68};
69
70class AStarFlawGeneratorFactory : public FlawGeneratorFactory {
71public:
72 std::unique_ptr<FlawGenerator> create_flaw_generator() override;
73};
74
75} // namespace probfd::cartesian_abstractions
76
77#endif // PROBFD_CARTESIAN_TRACE_BASED_FLAW_GENERATOR_H