ZonoOpt 2.4.1
Loading...
Searching...
No Matches
ConZono.hpp
Go to the documentation of this file.
1#ifndef ZONOOPT_CONZONO_HPP_
2#define ZONOOPT_CONZONO_HPP_
3
15#include "HybZono.hpp"
16
17namespace ZonoOpt
18{
19 using namespace detail;
20
31 class ConZono : public HybZono
32 {
33 public:
34 // constructors
35
40 ConZono() { sharp = true; }
41
52 ConZono(const Eigen::SparseMatrix<zono_float>& G, const Eigen::Vector<zono_float, -1>& c,
53 const Eigen::SparseMatrix<zono_float>& A, const Eigen::Vector<zono_float, -1>& b,
54 const bool zero_one_form = false);
55
56 // virtual destructor
57 ~ConZono() override = default;
58
62 HybZono* clone() const override;
63
64 // set method
75 void set(const Eigen::SparseMatrix<zono_float>& G, const Eigen::Vector<zono_float, -1>& c,
76 const Eigen::SparseMatrix<zono_float>& A, const Eigen::Vector<zono_float, -1>& b,
77 bool zero_one_form = false);
78
89 virtual std::unique_ptr<ConZono> constraint_reduction() const;
90
91 // generator conversion between [-1,1] and [0,1]
92 void convert_form() override;
93
94 // over-approximate as zonotope
95
100 virtual std::unique_ptr<Zono> to_zono_approx() const;
101
102 // display methods
103 std::string print() const override;
104
105 // in-place operators (type-preserving overrides)
106 using HybZono::operator+=; // restore vector and box overloads hidden by declarations below
107 using HybZono::operator*=; // restore scalar overload hidden by declarations below
108
113 void operator+=(ConZono& other);
114
116 void operator+=(HybZono& other) = delete;
117
122 void operator*=(ConZono& other);
123
125 void operator*=(HybZono& other) = delete;
126
127 protected:
128 OptSolution qp_opt(const Eigen::SparseMatrix<zono_float>& P, const Eigen::Vector<zono_float, -1>& q,
129 zono_float c, const Eigen::SparseMatrix<zono_float>& A,
130 const Eigen::Vector<zono_float, -1>& b,
132 std::shared_ptr<OptSolution>* solution = nullptr,
134
135 Eigen::Vector<zono_float, -1> do_optimize_over(
136 const Eigen::SparseMatrix<zono_float>& P, const Eigen::Vector<zono_float, -1>& q, const zono_float c,
137 const SolverSettings& settings, std::shared_ptr<OptSolution>* solution,
138 const WarmStartParams&) const override;
139
140 Eigen::Vector<zono_float, -1> do_project_point(const Eigen::Vector<zono_float, -1>& x,
141 const SolverSettings& settings,
142 std::shared_ptr<OptSolution>* solution,
143 const WarmStartParams& warm_start_params) const override;
144
145 bool do_is_empty(const SolverSettings& settings, std::shared_ptr<OptSolution>* solution,
146 const WarmStartParams& warm_start_params) const override;
147
148 zono_float do_support(const Eigen::Vector<zono_float, -1>& d, const SolverSettings& settings,
149 std::shared_ptr<OptSolution>* solution,
150 const WarmStartParams& warm_start_params) override;
151
152 bool do_contains_point(const Eigen::Vector<zono_float, -1>& x, const SolverSettings& settings,
153 std::shared_ptr<OptSolution>* solution,
154 const WarmStartParams& warm_start_params) const override;
155
156 Box do_bounding_box(const SolverSettings& settings, std::shared_ptr<OptSolution>*,
157 const WarmStartParams& warm_start_params) override;
158
159 std::unique_ptr<HybZono> do_complement(zono_float delta_m, bool, const SolverSettings&,
160 std::shared_ptr<OptSolution>*, int, int) override;
161 };
162
163 // forward declarations
164
174 std::unique_ptr<ConZono> vrep_2_conzono(const Eigen::Matrix<zono_float, -1, -1>& Vpoly);
175} // namespace ZonoOpt
176
177
178#endif
Hybrid zonotope class for ZonoOpt library.
Box (i.e., interval vector) class.
Definition Box.hpp:25
Constrained zonotope class.
Definition ConZono.hpp:32
void operator+=(HybZono &other)=delete
Deleted: use operator+ instead — result type would be HybZono.
void set(const Eigen::SparseMatrix< zono_float > &G, const Eigen::Vector< zono_float, -1 > &c, const Eigen::SparseMatrix< zono_float > &A, const Eigen::Vector< zono_float, -1 > &b, bool zero_one_form=false)
Reset constrained zonotope object with the given parameters.
Definition ConZono.cpp:22
std::unique_ptr< HybZono > do_complement(zono_float delta_m, bool, const SolverSettings &, std::shared_ptr< OptSolution > *, int, int) override
Definition ConZono.cpp:702
void operator+=(ConZono &other)
In-place Minkowski sum (type-preserving: ConZono, Zono, or Point argument). Use operator+ for operati...
Definition ConZono.cpp:930
Box do_bounding_box(const SolverSettings &settings, std::shared_ptr< OptSolution > *, const WarmStartParams &warm_start_params) override
Definition ConZono.cpp:269
HybZono * clone() const override
Clone method for polymorphic behavior.
Definition ConZono.cpp:17
ConZono()
Default constructor for ConZono class.
Definition ConZono.hpp:40
void convert_form() override
Converts the set representation between -1-1 and 0-1 forms.
Definition ConZono.cpp:52
bool do_contains_point(const Eigen::Vector< zono_float, -1 > &x, const SolverSettings &settings, std::shared_ptr< OptSolution > *solution, const WarmStartParams &warm_start_params) const override
Definition ConZono.cpp:187
bool do_is_empty(const SolverSettings &settings, std::shared_ptr< OptSolution > *solution, const WarmStartParams &warm_start_params) const override
Definition ConZono.cpp:144
OptSolution qp_opt(const Eigen::SparseMatrix< zono_float > &P, const Eigen::Vector< zono_float, -1 > &q, zono_float c, const Eigen::SparseMatrix< zono_float > &A, const Eigen::Vector< zono_float, -1 > &b, const SolverSettings &settings=get_default_solver_settings(), std::shared_ptr< OptSolution > *solution=nullptr, const WarmStartParams &warm_start_params=WarmStartParams()) const
Definition ConZono.cpp:213
void operator*=(ConZono &other)
In-place Cartesian product (type-preserving: ConZono, Zono, or Point argument). Use operator* for ope...
Definition ConZono.cpp:935
zono_float do_support(const Eigen::Vector< zono_float, -1 > &d, const SolverSettings &settings, std::shared_ptr< OptSolution > *solution, const WarmStartParams &warm_start_params) override
Definition ConZono.cpp:163
void operator*=(HybZono &other)=delete
Deleted: use operator* instead — result type would be HybZono.
Eigen::Vector< zono_float, -1 > do_optimize_over(const Eigen::SparseMatrix< zono_float > &P, const Eigen::Vector< zono_float, -1 > &q, const zono_float c, const SolverSettings &settings, std::shared_ptr< OptSolution > *solution, const WarmStartParams &) const override
Definition ConZono.cpp:92
~ConZono() override=default
virtual std::unique_ptr< ConZono > constraint_reduction() const
Execute constraint reduction algorithm from Scott et. al. 2016.
Definition ConZono.cpp:449
std::string print() const override
Returns set information as a string.
Definition ConZono.cpp:77
virtual std::unique_ptr< Zono > to_zono_approx() const
Compute outer approximation of constrained zonotope as zonotope using SVD.
Definition ConZono.cpp:410
Eigen::Vector< zono_float, -1 > do_project_point(const Eigen::Vector< zono_float, -1 > &x, const SolverSettings &settings, std::shared_ptr< OptSolution > *solution, const WarmStartParams &warm_start_params) const override
Definition ConZono.cpp:119
Hybrid zonotope class.
Definition HybZono.hpp:43
bool zero_one_form
flag to indicate whether the set is in 0-1 or -1-1 form
Definition HybZono.hpp:746
void set(const Eigen::SparseMatrix< zono_float > &Gc, const Eigen::SparseMatrix< zono_float > &Gb, const Eigen::Vector< zono_float, -1 > &c, const Eigen::SparseMatrix< zono_float > &Ac, const Eigen::SparseMatrix< zono_float > &Ab, const Eigen::Vector< zono_float, -1 > &b, bool zero_one_form=false, bool sharp=false)
Reset hybrid zonotope object with the given parameters.
Definition HybZono.cpp:23
bool sharp
flag to indicate whether the set is known to be sharp (i.e., convex relaxation = convex hull)
Definition HybZono.hpp:749
Eigen::Vector< zono_float, -1 > c
center vector
Definition HybZono.hpp:725
Eigen::SparseMatrix< zono_float > A
constraint matrix A = [Ac, Ab]
Definition HybZono.hpp:716
Eigen::Vector< zono_float, -1 > b
constraint vector
Definition HybZono.hpp:728
Eigen::SparseMatrix< zono_float > G
generator matrix G = [Gc, Gb]
Definition HybZono.hpp:707
#define zono_float
Defines the floating-point type used in ZonoOpt.
Definition ZonoOpt.hpp:45
std::unique_ptr< ConZono > vrep_2_conzono(const Eigen::Matrix< zono_float, -1, -1 > &Vpoly)
Builds a constrained zonotope from a vertex representation polytope.
Definition ConZono.cpp:675
Definition ZonoOpt.hpp:58
const SolverSettings & get_default_solver_settings()
Returns a reference to the current program-wide default solver settings.
Definition SolverDataStructures.hpp:388
Solution data structure for optimization routines in ZonoOpt library.
Definition SolverDataStructures.hpp:288
Abstract base for all solver settings.
Definition SolverDataStructures.hpp:35
Warm start parameters for optimization routines in ZonoOpt library.
Definition ADMM.hpp:49