Turbo Constraint Solver
Loading...
Searching...
No Matches
cpu_solving.hpp
Go to the documentation of this file.
1// Copyright 2023 Pierre Talbot
2
3#ifndef TURBO_CPU_SOLVING_HPP
4#define TURBO_CPU_SOLVING_HPP
5
6#include "common_solving.hpp"
7
9 auto start = std::chrono::steady_clock::now();
10
11 CP<Itv> cp(config);
12 cp.config.or_nodes = 1;
13 cp.preprocess();
14
15 FixpointSubsetCPU<GaussSeidelIteration> fp_engine(cp.iprop->num_deductions());
16 local::B has_changed = true;
18 while(!must_quit(cp) && check_timeout(cp, start) && has_changed) {
19 has_changed = false;
20 auto start2 = cp.stats.start_timer_host();
21 cp.stats.fixpoint_iterations += fp_engine.fixpoint([&](int i) { return cp.iprop->deduce(i); });
22 start2 = cp.stats.stop_timer(Timer::FIXPOINT, start2);
23 bool must_prune = cp.on_node();
24 if(cp.iprop->is_bot()) {
25 cp.on_failed_node();
26 fp_engine.reset();
27 }
28 else {
29 fp_engine.select([&](int i) { return !cp.iprop->ask(i); });
31 if(fp_engine.num_active() == 0 && cp.search_tree->template is_extractable<AtomicExtraction>()) {
32 has_changed |= cp.bab->deduce();
33 must_prune |= cp.on_solution_node();
34 fp_engine.reset();
35 }
36 }
37 has_changed |= cp.search_tree->deduce();
38 cp.stats.stop_timer(Timer::SEARCH, start2);
39 if(must_prune) { break; }
40 }
43}
44
45#endif
bool must_quit(A &a)
Definition common_solving.hpp:78
void block_signal_ctrlc()
Definition common_solving.hpp:72
bool check_timeout(A &a, const Timepoint &start)
Definition common_solving.hpp:90
void cpu_solve(const Configuration< battery::standard_allocator > &config)
Definition cpu_solving.hpp:8
@ FIXPOINT
@ SELECT_FP_FUNCTIONS
Definition common_solving.hpp:144
abstract_ptr< IBAB > bab
Definition common_solving.hpp:266
Configuration< BasicAllocator > config
Definition common_solving.hpp:278
CUDA void print_final_solution()
Definition common_solving.hpp:830
CUDA bool on_solution_node()
Definition common_solving.hpp:819
CUDA bool on_node()
Definition common_solving.hpp:779
Statistics< BasicAllocator > stats
Definition common_solving.hpp:279
abstract_ptr< IST > search_tree
Definition common_solving.hpp:264
CUDA void on_failed_node()
Definition common_solving.hpp:826
void preprocess()
Definition common_solving.hpp:591
abstract_ptr< IProp > iprop
Definition common_solving.hpp:261
CUDA void print_mzn_statistics()
Definition common_solving.hpp:837
Definition config.hpp:34
size_t or_nodes
Definition config.hpp:48
size_t fixpoint_iterations
Definition statistics.hpp:127
std::chrono::steady_clock::time_point start_timer_host() const
Definition statistics.hpp:183
std::chrono::steady_clock::time_point stop_timer(Timer timer, std::chrono::steady_clock::time_point start)
Definition statistics.hpp:193