ZonoOpt v2.0.1
Loading...
Searching...
No Matches
HybZono.hpp
Go to the documentation of this file.
1#ifndef ZONOOPT_HYBZONO_HPP_
2#define ZONOOPT_HYBZONO_HPP_
3
16#include "MI_Solver.hpp"
17#include "MI_DataStructures.hpp"
18#include "Inequality.hpp"
19#include "Intervals.hpp"
20
21#include <stdexcept>
22#include <limits>
23#include <set>
24
25namespace ZonoOpt
26{
27
28using namespace detail;
29
30// forward declarations
31class Zono;
32class ConZono;
33
44{
45 public:
46
47 // constructors
48
53 HybZono() = default;
54
67 HybZono(const Eigen::SparseMatrix<zono_float>& Gc, const Eigen::SparseMatrix<zono_float>& Gb, const Eigen::Vector<zono_float, -1>& c,
68 const Eigen::SparseMatrix<zono_float>& Ac, const Eigen::SparseMatrix<zono_float>& Ab, const Eigen::Vector<zono_float, -1>& b,
69 bool zero_one_form=false, bool sharp=false);
70
71 // virtual destructor
72 virtual ~HybZono() = default;
73
86 void set(const Eigen::SparseMatrix<zono_float>& Gc, const Eigen::SparseMatrix<zono_float>& Gb, const Eigen::Vector<zono_float, -1>& c,
87 const Eigen::SparseMatrix<zono_float>& Ac, const Eigen::SparseMatrix<zono_float>& Ab, const Eigen::Vector<zono_float, -1>& b,
88 bool zero_one_form=false, bool sharp=false);
89
93 virtual HybZono* clone() const;
94
95 // get methods
96
102 virtual int get_n() const { return this->n; }
103
109 virtual int get_nC() const { return this->nC; }
110
116 virtual int get_nG() const { return this->nG; }
117
123 virtual int get_nGc() const { return this->nGc; }
124
130 virtual int get_nGb() const { return this->nGb; }
131
137 virtual Eigen::SparseMatrix<zono_float> get_Gc() const { return this->Gc; }
138
144 virtual Eigen::SparseMatrix<zono_float> get_Gb() const { return this->Gb; }
145
151 virtual Eigen::SparseMatrix<zono_float> get_G() const { return this->G; }
152
158 virtual Eigen::SparseMatrix<zono_float> get_Ac() const { return this->Ac; }
159
165 virtual Eigen::SparseMatrix<zono_float> get_Ab() const { return this->Ab; }
166
172 virtual Eigen::SparseMatrix<zono_float> get_A() const { return this->A; }
173
179 virtual Eigen::Vector<zono_float, -1> get_c() const { return this->c; }
180
186 virtual Eigen::Vector<zono_float, -1> get_b() const { return this->b; }
187
193 virtual bool is_0_1_form() const { return this->zero_one_form; }
194
202 bool is_sharp() const { return this->sharp; }
203
211 virtual void convert_form();
212
223 virtual void remove_redundancy(int contractor_iter=100);
224
233 virtual std::unique_ptr<ConZono> convex_relaxation() const;
234
252 virtual std::unique_ptr<HybZono> complement(const zono_float delta_m = 100, const bool remove_redundancy=true, const OptSettings &settings=OptSettings(),
253 OptSolution* solution=nullptr, const int n_leaves = std::numeric_limits<int>::max(), const int contractor_iter=100)
254 {
255 return do_complement(delta_m, remove_redundancy, settings, solution, n_leaves, contractor_iter);
256 }
257
258 // type checking
263 bool is_point() const;
264
269 bool is_zono() const;
270
275 bool is_conzono() const;
276
281 bool is_hybzono() const;
282
286 bool is_empty_set() const;
287
288 // display methods
293 virtual std::string print() const;
294
301 friend std::ostream& operator<<(std::ostream& os, const HybZono& Z);
302
303 // optimization
316 Eigen::Vector<zono_float, -1> optimize_over(
317 const Eigen::SparseMatrix<zono_float> &P, const Eigen::Vector<zono_float, -1> &q, zono_float c=0,
318 const OptSettings &settings=OptSettings(), OptSolution* solution=nullptr) const
319 {
320 return do_optimize_over(P, q, c, settings, solution);
321 }
322
331 Eigen::Vector<zono_float, -1> project_point(const Eigen::Vector<zono_float, -1>& x,
332 const OptSettings &settings=OptSettings(), OptSolution* solution=nullptr) const
333 {
334 return do_project_point(x, settings, solution);
335 }
336
345 bool is_empty(const OptSettings &settings=OptSettings(),
346 OptSolution* solution=nullptr) const
347 {
348 return do_is_empty(settings, solution);
349 }
350
361 zono_float support(const Eigen::Vector<zono_float, -1>& d, const OptSettings &settings=OptSettings(),
362 OptSolution* solution=nullptr)
363 {
364 return do_support(d, settings, solution);
365 }
366
377 bool contains_point(const Eigen::Vector<zono_float, -1>& x, const OptSettings &settings=OptSettings(),
378 OptSolution* solution=nullptr) const
379 {
380 return do_contains_point(x, settings, solution);
381 }
382
392 Box bounding_box(const OptSettings &settings=OptSettings(), OptSolution* solution=nullptr)
393 {
394 return do_bounding_box(settings, solution);
395 }
396
412 std::vector<ConZono> get_leaves(bool remove_redundancy=true, const OptSettings &settings=OptSettings(),
413 OptSolution* solution=nullptr, int n_leaves = std::numeric_limits<int>::max(), int contractor_iter=10) const;
414
415 // friend function declarations
416 friend std::unique_ptr<HybZono> affine_map(const HybZono& Z,
417 const Eigen::SparseMatrix<zono_float>& R, const Eigen::Vector<zono_float, -1>& s);
418 friend std::unique_ptr<HybZono> project_onto_dims(const HybZono& Z, const std::vector<int>& dims);
419 friend std::unique_ptr<HybZono> minkowski_sum(const HybZono& Z1, HybZono& Z2);
420 friend std::unique_ptr<HybZono> pontry_diff(HybZono& Z1, HybZono& Z2, bool exact);
421 friend std::unique_ptr<HybZono> intersection(const HybZono& Z1, HybZono& Z2,
422 const Eigen::SparseMatrix<zono_float>& R);
423 friend std::unique_ptr<HybZono> intersection_over_dims(const HybZono& Z1, HybZono& Z2,
424 const std::vector<int>& dims);
425 friend std::unique_ptr<HybZono> halfspace_intersection(HybZono& Z, const Eigen::SparseMatrix<zono_float>& H,
426 const Eigen::Vector<zono_float, -1>& f, const Eigen::SparseMatrix<zono_float>& R);
427 friend std::unique_ptr<HybZono> union_of_many(const std::vector<std::shared_ptr<HybZono>>& Zs, bool preserve_sharpness, bool expose_indicators);
428 friend std::unique_ptr<HybZono> cartesian_product(const HybZono& Z1, HybZono& Z2);
429 friend std::unique_ptr<HybZono> constrain(HybZono& Z, const std::vector<Inequality> &ineqs, const Eigen::SparseMatrix<zono_float>& R);
430 friend std::unique_ptr<HybZono> set_diff(const HybZono& Z1, HybZono& Z2, zono_float delta_m, bool remove_redundancy,
431 const OptSettings &settings, OptSolution* solution, int n_leaves, int contractor_iter);
432 friend std::unique_ptr<HybZono> vrep_2_hybzono(const std::vector<Eigen::Matrix<zono_float, -1, -1>> &Vpolys, bool expose_indicators);
433 friend std::unique_ptr<HybZono> zono_union_2_hybzono(std::vector<Zono> &Zs, bool expose_indicators);
434
435 protected:
436
437 // fields
438
440 Eigen::SparseMatrix<zono_float> G = Eigen::SparseMatrix<zono_float>(0, 0);
441
443 Eigen::SparseMatrix<zono_float> Gc = Eigen::SparseMatrix<zono_float>(0, 0);
444
446 Eigen::SparseMatrix<zono_float> Gb = Eigen::SparseMatrix<zono_float>(0, 0);
447
449 Eigen::SparseMatrix<zono_float> A = Eigen::SparseMatrix<zono_float>(0, 0);
450
452 Eigen::SparseMatrix<zono_float> Ac = Eigen::SparseMatrix<zono_float>(0, 0);
453
455 Eigen::SparseMatrix<zono_float> Ab = Eigen::SparseMatrix<zono_float>(0, 0);
456
458 Eigen::Vector<zono_float, -1> c = Eigen::Vector<zono_float, -1>(0);
459
461 Eigen::Vector<zono_float, -1> b = Eigen::Vector<zono_float, -1>(0);
462
464 int n = 0;
465
467 int nG = 0;
468
470 int nGc = 0;
471
473 int nGb = 0;
474
476 int nC = 0;
477
479 bool zero_one_form = false;
480
482 bool sharp = false;
483
484 // methods
485 virtual Eigen::Vector<zono_float, -1> do_optimize_over(
486 const Eigen::SparseMatrix<zono_float> &P, const Eigen::Vector<zono_float, -1> &q, zono_float c,
487 const OptSettings &settings, OptSolution* solution) const;
488
489 virtual Eigen::Vector<zono_float, -1> do_project_point(const Eigen::Vector<zono_float, -1>& x,
490 const OptSettings &settings, OptSolution* solution) const;
491
492 virtual bool do_is_empty(const OptSettings &settings, OptSolution* solution) const;
493
494 virtual zono_float do_support(const Eigen::Vector<zono_float, -1>& d, const OptSettings &settings,
495 OptSolution* solution);
496
497 virtual bool do_contains_point(const Eigen::Vector<zono_float, -1>& x, const OptSettings &settings,
498 OptSolution* solution) const;
499
500 virtual Box do_bounding_box(const OptSettings &settings, OptSolution* solution);
501
502 virtual std::unique_ptr<HybZono> do_complement(zono_float, bool remove_redundancy, const OptSettings &settings,
503 OptSolution* solution, int n_leaves, int contractor_iter);
504
505
506 static void remove_generators(Eigen::SparseMatrix<zono_float>& G, Eigen::SparseMatrix<zono_float>& A, const std::set<int>& idx_to_remove);
507 static std::set<int> find_unused_generators(const Eigen::SparseMatrix<zono_float>& G, const Eigen::SparseMatrix<zono_float>& A);
508 OptSolution mi_opt(const Eigen::SparseMatrix<zono_float>& P, const Eigen::Vector<zono_float, -1>& q,
509 zono_float c, const Eigen::SparseMatrix<zono_float>& A, const Eigen::Vector<zono_float, -1>& b,
510 const OptSettings &settings=OptSettings(), OptSolution* solution=nullptr) const;
511 std::vector<OptSolution> mi_opt_multisol(const Eigen::SparseMatrix<zono_float>& P, const Eigen::Vector<zono_float, -1>& q,
512 zono_float c, const Eigen::SparseMatrix<zono_float>& A, const Eigen::Vector<zono_float, -1>& b, int n_sols,
513 const OptSettings &settings=OptSettings(), OptSolution* solution=nullptr) const;
514
515 private:
516
517 void make_G_A();
518 void set_Ac_Ab_from_A();
519 std::vector<Eigen::Vector<zono_float, -1>> get_bin_leaves(const OptSettings &settings=OptSettings(), OptSolution* solution=nullptr,
520 int n_leaves = std::numeric_limits<int>::max()) const;
521};
522
523// forward delcarations
533std::unique_ptr<HybZono> affine_map(const HybZono& Z,
534 const Eigen::SparseMatrix<zono_float>& R, const Eigen::Vector<zono_float, -1>& s = Eigen::Vector<zono_float, -1>());
535
544std::unique_ptr<HybZono> project_onto_dims(const HybZono& Z, const std::vector<int>& dims);
545
554std::unique_ptr<HybZono> minkowski_sum(const HybZono& Z1, HybZono& Z2);
555
574std::unique_ptr<HybZono> pontry_diff(HybZono& Z1, HybZono& Z2, bool exact=false);
575
585std::unique_ptr<HybZono> intersection(const HybZono& Z1, HybZono& Z2,
586 const Eigen::SparseMatrix<zono_float>& R=Eigen::SparseMatrix<zono_float>());
587
597std::unique_ptr<HybZono> intersection_over_dims(const HybZono& Z1, HybZono& Z2,
598 const std::vector<int>& dims);
599
610std::unique_ptr<HybZono> halfspace_intersection(HybZono& Z, const Eigen::SparseMatrix<zono_float>& H,
611 const Eigen::Vector<zono_float, -1>& f, const Eigen::SparseMatrix<zono_float>& R=Eigen::SparseMatrix<zono_float>());
612
626std::unique_ptr<HybZono> union_of_many(const std::vector<std::shared_ptr<HybZono>>& Zs, bool preserve_sharpness=false, bool expose_indicators=false);
627
636std::unique_ptr<HybZono> cartesian_product(const HybZono& Z1, HybZono& Z2);
637
652std::unique_ptr<HybZono> constrain(HybZono& Z, const std::vector<Inequality> &ineqs, const Eigen::SparseMatrix<zono_float>& R=Eigen::SparseMatrix<zono_float>());
653
668std::unique_ptr<HybZono> set_diff(const HybZono& Z1, HybZono& Z2, zono_float delta_m = 100, bool remove_redundancy=true,
669 const OptSettings &settings=OptSettings(), OptSolution* solution=nullptr, int n_leaves = std::numeric_limits<int>::max(), int contractor_iter = 100);
670
671
687std::unique_ptr<HybZono> vrep_2_hybzono(const std::vector<Eigen::Matrix<zono_float, -1, -1>> &Vpolys, bool expose_indicators=false);
688
689
703std::unique_ptr<HybZono> zono_union_2_hybzono(std::vector<Zono> &Zs, bool expose_indicators=false);
704
705
706} // end namespace ZonoOpt
707
708#endif
Class definitions for zero-one inequalities.
Interval and box classes.
Data structures for mixed-integer optimization in ZonoOpt library.
Internal mixed-integer optimization routines for ZonoOpt library.
Utilities for sparse matrix operations in ZonoOpt library.
Box (i.e., interval vector) class.
Definition Intervals.hpp:718
Hybrid zonotope class.
Definition HybZono.hpp:44
friend std::unique_ptr< HybZono > affine_map(const HybZono &Z, const Eigen::SparseMatrix< zono_float > &R, const Eigen::Vector< zono_float, -1 > &s)
Returns affine map R*Z + s of set Z.
Definition PolymorphicFunctions.cpp:63
virtual bool is_0_1_form() const
Returns true if factors are in range [0,1], false if they are in range [-1,1].
Definition HybZono.hpp:193
int nC
number of constraints
Definition HybZono.hpp:476
virtual int get_n() const
Returns dimension of set.
Definition HybZono.hpp:102
bool is_empty(const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr) const
Returns true if the set is provably empty, false otherwise.
Definition HybZono.hpp:345
std::vector< OptSolution > mi_opt_multisol(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, int n_sols, const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr) const
Definition HybZono.cpp:332
bool is_sharp() const
Returns true if set is known to be sharp.
Definition HybZono.hpp:202
friend std::unique_ptr< HybZono > cartesian_product(const HybZono &Z1, HybZono &Z2)
Computes the Cartesian product of two sets Z1 and Z2.
Definition PolymorphicFunctions.cpp:792
int n
set dimension
Definition HybZono.hpp:464
virtual bool do_is_empty(const OptSettings &settings, OptSolution *solution) const
Definition HybZono.cpp:255
virtual Eigen::SparseMatrix< zono_float > get_Gc() const
Returns continuous generator matrix.
Definition HybZono.hpp:137
friend std::unique_ptr< HybZono > minkowski_sum(const HybZono &Z1, HybZono &Z2)
Computes Minkowski sum of two sets Z1 and Z2.
Definition PolymorphicFunctions.cpp:135
friend std::unique_ptr< HybZono > intersection_over_dims(const HybZono &Z1, HybZono &Z2, const std::vector< int > &dims)
Computes the generalized intersection of sets Z1 and Z2 over the specified dimensions.
Definition PolymorphicFunctions.cpp:265
OptSolution mi_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 OptSettings &settings=OptSettings(), OptSolution *solution=nullptr) const
Definition HybZono.cpp:300
Eigen::Vector< zono_float, -1 > project_point(const Eigen::Vector< zono_float, -1 > &x, const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr) const
Returns the projection of the point x onto the set object.
Definition HybZono.hpp:331
bool is_hybzono() const
Polymorphic type checking: true if set is a hybrid zonotope.
Definition PolymorphicFunctions.cpp:48
virtual int get_nC() const
Returns number of constraints in set definition.
Definition HybZono.hpp:109
friend std::unique_ptr< HybZono > vrep_2_hybzono(const std::vector< Eigen::Matrix< zono_float, -1, -1 > > &Vpolys, bool expose_indicators)
Computes a hybrid zonotope from a union of vertex representation polytopes.
Definition PolymorphicFunctions.cpp:1395
virtual Eigen::Vector< zono_float, -1 > do_project_point(const Eigen::Vector< zono_float, -1 > &x, const OptSettings &settings, OptSolution *solution) const
Definition HybZono.cpp:234
virtual int get_nGb() const
Returns number of binary generators in set definition.
Definition HybZono.hpp:130
virtual Eigen::Vector< zono_float, -1 > do_optimize_over(const Eigen::SparseMatrix< zono_float > &P, const Eigen::Vector< zono_float, -1 > &q, zono_float c, const OptSettings &settings, OptSolution *solution) const
Definition HybZono.cpp:211
bool zero_one_form
flag to indicate whether the set is in 0-1 or -1-1 form
Definition HybZono.hpp:479
Eigen::SparseMatrix< zono_float > Gc
continuous generator matrix
Definition HybZono.hpp:443
zono_float support(const Eigen::Vector< zono_float, -1 > &d, const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr)
Computes support function of the set in the direction d.
Definition HybZono.hpp:361
virtual void convert_form()
Converts the set representation between -1-1 and 0-1 forms.
Definition HybZono.cpp:51
bool contains_point(const Eigen::Vector< zono_float, -1 > &x, const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr) const
Checks whether the point x is contained in the set object.
Definition HybZono.hpp:377
virtual std::string print() const
Returns set information as a string.
Definition HybZono.cpp:186
Eigen::SparseMatrix< zono_float > Gb
binary generator matrix
Definition HybZono.hpp:446
int nG
total number of factors. nG = nGc + nGb
Definition HybZono.hpp:467
virtual HybZono * clone() const
Clone method for polymorphic behavior.
Definition HybZono.cpp:16
bool is_conzono() const
Polymorphic type checking: true if set is a constrained zonotope.
Definition PolymorphicFunctions.cpp:39
virtual Box do_bounding_box(const OptSettings &settings, OptSolution *solution)
Definition PolymorphicFunctions.cpp:1617
virtual zono_float do_support(const Eigen::Vector< zono_float, -1 > &d, const OptSettings &settings, OptSolution *solution)
Definition PolymorphicFunctions.cpp:1684
friend std::unique_ptr< HybZono > halfspace_intersection(HybZono &Z, const Eigen::SparseMatrix< zono_float > &H, const Eigen::Vector< zono_float, -1 > &f, const Eigen::SparseMatrix< zono_float > &R)
Computes the intersection generalized intersection of set Z with halfspace H*x <= f over matrix R.
Definition PolymorphicFunctions.cpp:296
virtual Eigen::Vector< zono_float, -1 > get_c() const
Returns center vector.
Definition HybZono.hpp:179
bool is_point() const
Polymorphic type checking: true if set is a point.
Definition PolymorphicFunctions.cpp:26
virtual ~HybZono()=default
virtual int get_nGc() const
Returns number of continuous generators in set definition.
Definition HybZono.hpp:123
friend std::unique_ptr< HybZono > zono_union_2_hybzono(std::vector< Zono > &Zs, bool expose_indicators)
Computes a hybrid zonotope from a union of zonotopes.
Definition PolymorphicFunctions.cpp:1248
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:21
virtual Eigen::SparseMatrix< zono_float > get_Ab() const
Returns binary constraint matrix.
Definition HybZono.hpp:165
virtual std::unique_ptr< ConZono > convex_relaxation() const
Returns convex relaxation of the hybrid zonotope.
Definition PolymorphicFunctions.cpp:1614
virtual Eigen::SparseMatrix< zono_float > get_A() const
Returns constraint matrix.
Definition HybZono.hpp:172
Eigen::Vector< zono_float, -1 > optimize_over(const Eigen::SparseMatrix< zono_float > &P, const Eigen::Vector< zono_float, -1 > &q, zono_float c=0, const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr) const
Solves optimization problem with quadratic objective over the current set.
Definition HybZono.hpp:316
bool sharp
flag to indicate whether the set is known to be sharp (i.e., convex relaxation = convex hull)
Definition HybZono.hpp:482
virtual void remove_redundancy(int contractor_iter=100)
Removes redundant constraints and any unused generators.
Definition HybZono.cpp:80
Eigen::Vector< zono_float, -1 > c
center vector
Definition HybZono.hpp:458
int nGb
number of binary factors
Definition HybZono.hpp:473
static void remove_generators(Eigen::SparseMatrix< zono_float > &G, Eigen::SparseMatrix< zono_float > &A, const std::set< int > &idx_to_remove)
Definition HybZono.cpp:365
std::vector< ConZono > get_leaves(bool remove_redundancy=true, const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr, int n_leaves=std::numeric_limits< int >::max(), int contractor_iter=10) const
Computes individual constrained zonotopes whose union is the hybrid zonotope object.
Definition PolymorphicFunctions.cpp:1714
HybZono()=default
Default constructor for HybZono class.
bool is_zono() const
Polymorphic type checking: true if set is a zonotope.
Definition PolymorphicFunctions.cpp:32
virtual Eigen::Vector< zono_float, -1 > get_b() const
Returns constraint vector.
Definition HybZono.hpp:186
friend std::unique_ptr< HybZono > union_of_many(const std::vector< std::shared_ptr< HybZono > > &Zs, bool preserve_sharpness, bool expose_indicators)
Computes union of several sets.
Definition PolymorphicFunctions.cpp:498
Box bounding_box(const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr)
Computes a bounding box of the set object as a Box object.
Definition HybZono.hpp:392
static std::set< int > find_unused_generators(const Eigen::SparseMatrix< zono_float > &G, const Eigen::SparseMatrix< zono_float > &A)
Definition HybZono.cpp:411
virtual int get_nG() const
Returns number of generators in set definition.
Definition HybZono.hpp:116
virtual bool do_contains_point(const Eigen::Vector< zono_float, -1 > &x, const OptSettings &settings, OptSolution *solution) const
Definition HybZono.cpp:275
Eigen::SparseMatrix< zono_float > A
constraint matrix A = [Ac, Ab]
Definition HybZono.hpp:449
Eigen::Vector< zono_float, -1 > b
constraint vector
Definition HybZono.hpp:461
virtual std::unique_ptr< HybZono > do_complement(zono_float, bool remove_redundancy, const OptSettings &settings, OptSolution *solution, int n_leaves, int contractor_iter)
Definition PolymorphicFunctions.cpp:973
friend std::unique_ptr< HybZono > constrain(HybZono &Z, const std::vector< Inequality > &ineqs, const Eigen::SparseMatrix< zono_float > &R)
Applies inequalities to set.
Definition PolymorphicFunctions.cpp:851
friend std::ostream & operator<<(std::ostream &os, const HybZono &Z)
Displays set information to the given output stream.
Definition HybZono.cpp:205
friend std::unique_ptr< HybZono > project_onto_dims(const HybZono &Z, const std::vector< int > &dims)
Projects set Z onto the dimensions specified in dims.
Definition PolymorphicFunctions.cpp:106
friend std::unique_ptr< HybZono > intersection(const HybZono &Z1, HybZono &Z2, const Eigen::SparseMatrix< zono_float > &R)
Computes the generalized intersection of sets Z1 and Z2 over the matrix R.
Definition PolymorphicFunctions.cpp:190
bool is_empty_set() const
Polymorphic type checking: true if set is empty set object.
Definition PolymorphicFunctions.cpp:56
Eigen::SparseMatrix< zono_float > Ab
binary constraint matrix
Definition HybZono.hpp:455
virtual Eigen::SparseMatrix< zono_float > get_G() const
Returns generator matrix.
Definition HybZono.hpp:151
Eigen::SparseMatrix< zono_float > Ac
continuous constraint matrix
Definition HybZono.hpp:452
virtual Eigen::SparseMatrix< zono_float > get_Gb() const
Returns binary generator matrix.
Definition HybZono.hpp:144
Eigen::SparseMatrix< zono_float > G
generator matrix G = [Gc, Gb]
Definition HybZono.hpp:440
friend std::unique_ptr< HybZono > pontry_diff(HybZono &Z1, HybZono &Z2, bool exact)
Computes the Pontryagin difference Z1 - Z2.
Definition PolymorphicFunctions.cpp:326
int nGc
number of continuous factors
Definition HybZono.hpp:470
virtual Eigen::SparseMatrix< zono_float > get_Ac() const
Returns continuous constraint matrix.
Definition HybZono.hpp:158
virtual std::unique_ptr< HybZono > complement(const zono_float delta_m=100, const bool remove_redundancy=true, const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr, const int n_leaves=std::numeric_limits< int >::max(), const int contractor_iter=100)
Computes the complement of the set Z.
Definition HybZono.hpp:252
friend std::unique_ptr< HybZono > set_diff(const HybZono &Z1, HybZono &Z2, zono_float delta_m, bool remove_redundancy, const OptSettings &settings, OptSolution *solution, int n_leaves, int contractor_iter)
Set difference Z1 \ Z2.
Definition PolymorphicFunctions.cpp:1232
#define zono_float
Defines the floating-point type used in ZonoOpt.
Definition ZonoOpt.hpp:45
std::unique_ptr< HybZono > cartesian_product(const HybZono &Z1, HybZono &Z2)
Computes the Cartesian product of two sets Z1 and Z2.
Definition PolymorphicFunctions.cpp:792
std::unique_ptr< HybZono > set_diff(const HybZono &Z1, HybZono &Z2, zono_float delta_m=100, bool remove_redundancy=true, const OptSettings &settings=OptSettings(), OptSolution *solution=nullptr, int n_leaves=std::numeric_limits< int >::max(), int contractor_iter=100)
Set difference Z1 \ Z2.
Definition PolymorphicFunctions.cpp:1232
std::unique_ptr< HybZono > minkowski_sum(const HybZono &Z1, HybZono &Z2)
Computes Minkowski sum of two sets Z1 and Z2.
Definition PolymorphicFunctions.cpp:135
std::unique_ptr< HybZono > project_onto_dims(const HybZono &Z, const std::vector< int > &dims)
Projects set Z onto the dimensions specified in dims.
Definition PolymorphicFunctions.cpp:106
std::unique_ptr< HybZono > affine_map(const HybZono &Z, const Eigen::SparseMatrix< zono_float > &R, const Eigen::Vector< zono_float, -1 > &s=Eigen::Vector< zono_float, -1 >())
Returns affine map R*Z + s of set Z.
Definition PolymorphicFunctions.cpp:63
std::unique_ptr< HybZono > union_of_many(const std::vector< std::shared_ptr< HybZono > > &Zs, bool preserve_sharpness=false, bool expose_indicators=false)
Computes union of several sets.
Definition PolymorphicFunctions.cpp:498
std::unique_ptr< HybZono > intersection(const HybZono &Z1, HybZono &Z2, const Eigen::SparseMatrix< zono_float > &R=Eigen::SparseMatrix< zono_float >())
Computes the generalized intersection of sets Z1 and Z2 over the matrix R.
Definition PolymorphicFunctions.cpp:190
std::unique_ptr< HybZono > halfspace_intersection(HybZono &Z, const Eigen::SparseMatrix< zono_float > &H, const Eigen::Vector< zono_float, -1 > &f, const Eigen::SparseMatrix< zono_float > &R=Eigen::SparseMatrix< zono_float >())
Computes the intersection generalized intersection of set Z with halfspace H*x <= f over matrix R.
Definition PolymorphicFunctions.cpp:296
std::unique_ptr< HybZono > intersection_over_dims(const HybZono &Z1, HybZono &Z2, const std::vector< int > &dims)
Computes the generalized intersection of sets Z1 and Z2 over the specified dimensions.
Definition PolymorphicFunctions.cpp:265
std::unique_ptr< HybZono > pontry_diff(HybZono &Z1, HybZono &Z2, bool exact=false)
Computes the Pontryagin difference Z1 - Z2.
Definition PolymorphicFunctions.cpp:326
std::unique_ptr< HybZono > constrain(HybZono &Z, const std::vector< Inequality > &ineqs, const Eigen::SparseMatrix< zono_float > &R=Eigen::SparseMatrix< zono_float >())
Applies inequalities to set.
Definition PolymorphicFunctions.cpp:851
std::unique_ptr< HybZono > vrep_2_hybzono(const std::vector< Eigen::Matrix< zono_float, -1, -1 > > &Vpolys, bool expose_indicators=false)
Computes a hybrid zonotope from a union of vertex representation polytopes.
Definition PolymorphicFunctions.cpp:1395
std::unique_ptr< HybZono > zono_union_2_hybzono(std::vector< Zono > &Zs, bool expose_indicators=false)
Computes a hybrid zonotope from a union of zonotopes.
Definition PolymorphicFunctions.cpp:1248
Definition ZonoOpt.hpp:58
Settings for optimization routines in ZonoOpt library.
Definition SolverDataStructures.hpp:26
Solution data structure for optimization routines in ZonoOpt library.
Definition SolverDataStructures.hpp:153