dReal4
contractor_ibex_polytope_mt.h
1 #pragma once
2 
3 #include <memory>
4 #include <mutex>
5 #include <ostream>
6 #include <vector>
7 
8 #include "dreal/contractor/contractor_cell.h"
9 #include "dreal/contractor/contractor_ibex_polytope.h"
10 #include "dreal/contractor/contractor_status.h"
11 #include "dreal/solver/config.h"
13 #include "dreal/util/box.h"
14 
15 namespace dreal {
16 
17 /// Multi-thread version of ContractorIbexFwdbwd contractor.
18 ///
19 /// The base ContractorIbexPolytope is not thread-safe. When there are N jobs,
20 /// it creates N ContractorIbexPolytope instances internally and make sure that
21 /// each thread calls a designated instance.
23  public:
24  /// Constructs IbexPolytopeMt contractor using @p f and @p vars.
25  ContractorIbexPolytopeMt(std::vector<Formula> formulas, const Box& box,
26  const Config& config);
27 
28  /// Deleted copy constructor.
30 
31  /// Deleted move constructor.
33 
34  /// Deleted copy assign operator.
36 
37  /// Deleted move assign operator.
39 
40  /// Default destructor.
41  ~ContractorIbexPolytopeMt() override = default;
42 
43  void Prune(ContractorStatus* cs) const override;
44  std::ostream& display(std::ostream& os) const override;
45 
46  /// Returns true if it has no internal ibex contractor.
47  bool is_dummy() const;
48 
49  private:
50  ContractorIbexPolytope* GetCtcOrCreate(const Box& box) const;
51  bool is_dummy_{false};
52 
53  const std::vector<Formula> formulas_;
54  const Config config_;
55 
56  // ctc_ready_[i] is 1 indicates that ctcs_[i] is ready to be used.
57  mutable std::vector<int> ctc_ready_;
58  mutable std::vector<std::unique_ptr<ContractorIbexPolytope>> ctcs_;
59 };
60 
61 } // namespace dreal
const Config & config() const
Returns config.
Definition: contractor_cell.cc:33
Abstract base class of contractors.
Definition: contractor_cell.h:29
ContractorIbexPolytopeMt & operator=(const ContractorIbexPolytopeMt &)=delete
Deleted copy assign operator.
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
void Prune(ContractorStatus *cs) const override
Performs pruning on cs.
Definition: contractor_ibex_polytope_mt.cc:50
Multi-thread version of ContractorIbexFwdbwd contractor.
Definition: contractor_ibex_polytope_mt.h:22
bool is_dummy() const
Returns true if it has no internal ibex contractor.
Definition: contractor_ibex_polytope_mt.cc:64
Represents a n-dimensional interval vector.
Definition: box.h:17
Definition: config.h:12
~ContractorIbexPolytopeMt() override=default
Default destructor.
This is the header file that we consolidate Drake&#39;s symbolic classes and expose them inside of dreal ...
std::ostream & display(std::ostream &os) const override
Outputs this contractor to os.
Definition: contractor_ibex_polytope_mt.cc:56
Definition: contractor_ibex_polytope.h:29
Contractor status.
Definition: contractor_status.h:13
ContractorIbexPolytopeMt(std::vector< Formula > formulas, const Box &box, const Config &config)
Constructs IbexPolytopeMt contractor using f and vars.
Definition: contractor_ibex_polytope_mt.cc:17