Turbo Constraint Solver
Loading...
Searching...
No Matches
statistics.hpp
Go to the documentation of this file.
1// Copyright 2021 Pierre Talbot
2
3#ifndef TURBO_STATISTICS_HPP
4#define TURBO_STATISTICS_HPP
5
6#include <chrono>
7#include <algorithm>
8#include "battery/utility.hpp"
9#include "battery/allocator.hpp"
10#include "lala/logic/ast.hpp"
11
12struct Statistics {
13 size_t variables;
16 int64_t duration;
18 size_t nodes;
19 size_t fails;
20 size_t solutions;
21 size_t depth_max;
22 size_t exhaustive;
32
43
44 CUDA Statistics(): Statistics(0,0,false) {}
45 Statistics(const Statistics&) = default;
46 Statistics(Statistics&&) = default;
47
63
64private:
65 CUDA void print_stat(const char* name, size_t value) const {
66 printf("%%%%%%mzn-stat: %s=%" PRIu64 "\n", name, value);
67 }
68
69 CUDA void print_stat(const char* name, double value) const {
70 printf("%%%%%%mzn-stat: %s=%lf\n", name, value);
71 }
72
73 CUDA double to_sec(int64_t dur) const {
74 return ((double) dur / 1000.);
75 }
76
77public:
78 CUDA void print_mzn_statistics() const {
79 print_stat("nodes", nodes);
80 print_stat("failures", fails);
81 print_stat("variables", variables);
82 print_stat("propagators", constraints);
83 print_stat("peakDepth", depth_max);
84 print_stat("initTime", to_sec(interpretation_duration));
85 print_stat("solveTime", to_sec(duration));
86 print_stat("num_solutions", solutions);
87 print_stat("eps_num_subproblems", eps_num_subproblems);
88 print_stat("eps_solved_subproblems", eps_solved_subproblems);
89 print_stat("eps_skipped_subproblems", eps_skipped_subproblems);
90 print_stat("num_blocks_done", num_blocks_done);
91 print_stat("fixpoint_iterations", fixpoint_iterations);
92 print_stat("eliminated_variables", eliminated_variables);
93 print_stat("eliminated_formulas", eliminated_formulas);
94#ifdef TURBO_PROFILE_MODE
95 print_stat("search_time", search_time);
96 print_stat("propagation_time", propagation_time);
97#endif
98 }
99
100 CUDA void print_mzn_end_stats() const {
101 printf("%%%%%%mzn-stat-end\n");
102 }
103
104 CUDA void print_mzn_objective(const auto& obj, bool is_minimization) const {
105 printf("%%%%%%mzn-stat: objective=");
106 if(is_minimization) {
107 obj.lb().template deinterpret<lala::TFormula<battery::standard_allocator>>().print(false);
108 }
109 else {
110 obj.ub().template deinterpret<lala::TFormula<battery::standard_allocator>>().print(false);
111 }
112 printf("\n");
113 }
114
115 CUDA void print_mzn_separator() const {
116 printf("----------\n");
117 }
118
119 CUDA void print_mzn_final_separator() const {
120 if(solutions > 0) {
121 if(exhaustive) {
122 printf("==========\n");
123 }
124 }
125 else {
126 assert(solutions == 0);
127 if(exhaustive) {
128 printf("=====UNSATISFIABLE=====\n");
129 }
130 else if(optimization) {
131 printf("=====UNBOUNDED=====\n");
132 }
133 else {
134 printf("=====UNKNOWN=====\n");
135 }
136 }
137 }
138};
139
140#endif
Definition statistics.hpp:12
size_t eps_num_subproblems
Definition statistics.hpp:23
size_t fails
Definition statistics.hpp:19
size_t depth_max
Definition statistics.hpp:21
size_t fixpoint_iterations
Definition statistics.hpp:27
CUDA void print_mzn_statistics() const
Definition statistics.hpp:78
Statistics(Statistics &&)=default
size_t num_blocks_done
Definition statistics.hpp:26
size_t constraints
Definition statistics.hpp:14
size_t eps_solved_subproblems
Definition statistics.hpp:24
CUDA void print_mzn_objective(const auto &obj, bool is_minimization) const
Definition statistics.hpp:104
double search_time
Definition statistics.hpp:30
size_t eps_skipped_subproblems
Definition statistics.hpp:25
CUDA Statistics()
Definition statistics.hpp:44
CUDA void meet(const Statistics &other)
Definition statistics.hpp:48
double propagation_time
Definition statistics.hpp:31
int64_t interpretation_duration
Definition statistics.hpp:17
CUDA void print_mzn_end_stats() const
Definition statistics.hpp:100
Statistics(const Statistics &)=default
size_t eliminated_variables
Definition statistics.hpp:28
CUDA void print_mzn_final_separator() const
Definition statistics.hpp:119
CUDA Statistics(size_t variables, size_t constraints, bool optimization)
Definition statistics.hpp:33
size_t nodes
Definition statistics.hpp:18
size_t eliminated_formulas
Definition statistics.hpp:29
size_t solutions
Definition statistics.hpp:20
size_t variables
Definition statistics.hpp:13
int64_t duration
Definition statistics.hpp:16
CUDA void print_mzn_separator() const
Definition statistics.hpp:115
bool optimization
Definition statistics.hpp:15
size_t exhaustive
Definition statistics.hpp:22