dReal4
contractor_ibex_fwdbwd_mt.h
1 #pragma once
2 
3 #include <memory>
4 #include <ostream>
5 #include <vector>
6 
7 #include "dreal/contractor/contractor_cell.h"
8 #include "dreal/contractor/contractor_ibex_fwdbwd.h"
9 #include "dreal/contractor/contractor_status.h"
11 #include "dreal/util/box.h"
12 
13 namespace dreal {
14 
15 /// Multi-thread version of ContractorIbexFwdbwd contractor.
16 ///
17 /// The base ContractorIbexFwdbwd is not thread-safe. When there are N jobs, it
18 /// creates N ContractorIbexFwdbwd instances internally and make sure that each
19 /// thread calls a designated instance.
21  public:
22  /// Deleted default constructor.
23  ContractorIbexFwdbwdMt() = delete;
24 
25  /// Constructs IbexFwdbwdMt contractor using @p f and @p box.
26  ContractorIbexFwdbwdMt(Formula f, const Box& box, 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  ~ContractorIbexFwdbwdMt() override = default;
41 
42  void Prune(ContractorStatus* cs) const override;
43 
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  ContractorIbexFwdbwd* GetCtcOrCreate(const Box& box) const;
51 
52  const Formula f_;
53  bool is_dummy_{false};
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<ContractorIbexFwdbwd>> 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
std::ostream & display(std::ostream &os) const override
Outputs this contractor to os.
Definition: contractor_ibex_fwdbwd_mt.cc:53
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
ContractorIbexFwdbwdMt()=delete
Deleted default constructor.
bool is_dummy() const
Returns true if it has no internal ibex contractor.
Definition: contractor_ibex_fwdbwd_mt.cc:57
Multi-thread version of ContractorIbexFwdbwd contractor.
Definition: contractor_ibex_fwdbwd_mt.h:20
Represents a n-dimensional interval vector.
Definition: box.h:17
Definition: config.h:12
This is the header file that we consolidate Drake&#39;s symbolic classes and expose them inside of dreal ...
Contractor class wrapping IBEX&#39;s forward/backward contractor.
Definition: contractor_ibex_fwdbwd.h:16
Contractor status.
Definition: contractor_status.h:13
Represents a symbolic form of a first-order logic formula.
Definition: symbolic_formula.h:101
ContractorIbexFwdbwdMt & operator=(const ContractorIbexFwdbwdMt &)=delete
Deleted copy assign operator.
void Prune(ContractorStatus *cs) const override
Performs pruning on cs.
Definition: contractor_ibex_fwdbwd_mt.cc:46