ZonoOpt v1.0.0
Loading...
Searching...
No Matches
Point.hpp
Go to the documentation of this file.
1#ifndef ZONOOPT_POINT_HPP_
2#define ZONOOPT_POINT_HPP_
3
15#include "Zono.hpp"
16
17namespace ZonoOpt
18{
19
20using namespace detail;
21
27class Point final : public Zono
28{
29 public:
30
31 // constructor
36 Point() { sharp = true; }
37
43 explicit Point(const Eigen::Vector<zono_float, -1>& c)
44 {
45 set(c);
46 sharp = true;
47 }
48
49 // set method
55 void set(const Eigen::Vector<zono_float, -1>& c);
56
57 HybZono* clone() const override
58 {
59 return new Point(*this);
60 }
61
62 // display methods
63 std::string print() const override;
64
65 // do nothing methods
66 void remove_redundancy(int interval_contractor) override { /* do nothing */ }
67 void convert_form() override { /* do nothing */ }
68
69 protected:
70
71 Eigen::Vector<zono_float, -1> do_optimize_over(
72 const Eigen::SparseMatrix<zono_float> &P, const Eigen::Vector<zono_float, -1> &q, zono_float c,
73 const OptSettings &settings, OptSolution* solution) const override;
74
75 Eigen::Vector<zono_float, -1> do_project_point(const Eigen::Vector<zono_float, -1>& x,
76 const OptSettings &settings, OptSolution* solution) const override;
77
78 zono_float do_support(const Eigen::Vector<zono_float, -1>& d, const OptSettings &settings,
79 OptSolution* solution) override;
80
81 bool do_contains_point(const Eigen::Vector<zono_float, -1>& x, const OptSettings &settings,
82 OptSolution* solution) const override;
83
84 Box do_bounding_box(const OptSettings &settings, OptSolution* solution) override;
85};
86
87// implementation
88inline void Point::set(const Eigen::Vector<zono_float, -1>& c)
89{
90 // point parameters
91 this->c = c;
92 this->n = static_cast<int>(this->c.size());
93
94 // hybzono parameters
95 this->G.resize(this->n,0);
96 this->nG = 0;
97 this->nGc = this->nG;
98 this->nGb = 0;
99 this->nC = 0;
100 this->Gc = this->G;
101 this->Gb.resize(this->n, 0);
102 this->A.resize(0, this->nG);
103 this->Ac = this->A;
104 this->Ab.resize(0, 0);
105 this->b.resize(0);
106 this->zero_one_form = false;
107}
108
109inline std::string Point::print() const
110{
111 std::stringstream ss;
112 ss << "Point: " << std::endl;
113 ss << "n: " << this->n << std::endl;
114 ss << "c: " << this->c;
115 return ss.str();
116}
117
118inline Eigen::Vector<zono_float, -1> Point::do_optimize_over(
119 const Eigen::SparseMatrix<zono_float> &P, const Eigen::Vector<zono_float, -1> &q, zono_float c,
120 const OptSettings &settings, OptSolution* solution) const
121{
122 return this->c;
123}
124
125inline Eigen::Vector<zono_float, -1> Point::do_project_point(const Eigen::Vector<zono_float, -1>& x,
126 const OptSettings &settings, OptSolution* solution) const
127{
128 // check dimensions
129 if (this->n != x.size())
130 {
131 throw std::invalid_argument("Point projection: inconsistent dimensions.");
132 }
133
134 return this->c;
135}
136
137inline zono_float Point::do_support(const Eigen::Vector<zono_float, -1>& d,
138 const OptSettings &settings, OptSolution* solution)
139{
140 // check dimensions
141 if (this->n != d.size())
142 {
143 throw std::invalid_argument("Support: inconsistent dimensions.");
144 }
145
146 return this->c.dot(d);
147}
148
149
150inline bool Point::do_contains_point(const Eigen::Vector<zono_float, -1>& x,
151 const OptSettings &settings, OptSolution* solution) const
152{
153 if (this->n != x.size())
154 throw std::invalid_argument("Contains point: inconsistent dimensions");
155
156 const zono_float dist = (x - this->c).norm();
157 return dist < zono_eps;
158}
159
160inline Box Point::do_bounding_box(const OptSettings &settings, OptSolution* solution)
161{
162 return {this->c, this->c};
163}
164
165} // namespace ZonoOpt
166
167#endif
Zonotope class for ZonoOpt library.
Box (i.e., interval vector) class.
Definition Intervals.hpp:720
Hybrid zonotope class.
Definition HybZono.hpp:44
int nC
number of constraints
Definition HybZono.hpp:482
int n
set dimension
Definition HybZono.hpp:470
bool zero_one_form
flag to indicate whether the set is in 0-1 or -1-1 form
Definition HybZono.hpp:485
Eigen::SparseMatrix< zono_float > Gc
continuous generator matrix
Definition HybZono.hpp:449
Eigen::SparseMatrix< zono_float > Gb
binary generator matrix
Definition HybZono.hpp:452
int nG
total number of factors. nG = nGc + nGb
Definition HybZono.hpp:473
bool sharp
flag to indicate whether the set is known to be sharp (i.e., convex relaxation = convex hull)
Definition HybZono.hpp:488
Eigen::Vector< zono_float, -1 > c
center vector
Definition HybZono.hpp:464
int nGb
number of binary factors
Definition HybZono.hpp:479
Eigen::SparseMatrix< zono_float > A
constraint matrix A = [Ac, Ab]
Definition HybZono.hpp:455
Eigen::Vector< zono_float, -1 > b
constraint vector
Definition HybZono.hpp:467
Eigen::SparseMatrix< zono_float > Ab
binary constraint matrix
Definition HybZono.hpp:461
Eigen::SparseMatrix< zono_float > Ac
continuous constraint matrix
Definition HybZono.hpp:458
Eigen::SparseMatrix< zono_float > G
generator matrix G = [Gc, Gb]
Definition HybZono.hpp:446
int nGc
number of continuous factors
Definition HybZono.hpp:476
Point class.
Definition Point.hpp:28
Eigen::Vector< zono_float, -1 > do_project_point(const Eigen::Vector< zono_float, -1 > &x, const OptSettings &settings, OptSolution *solution) const override
Definition Point.hpp:125
zono_float do_support(const Eigen::Vector< zono_float, -1 > &d, const OptSettings &settings, OptSolution *solution) override
Definition Point.hpp:137
Box do_bounding_box(const OptSettings &settings, OptSolution *solution) override
Definition Point.hpp:160
void convert_form() override
Converts the set representation between -1-1 and 0-1 forms.
Definition Point.hpp:67
Point(const Eigen::Vector< zono_float, -1 > &c)
Point constructor.
Definition Point.hpp:43
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 override
Definition Point.hpp:118
void set(const Eigen::Vector< zono_float, -1 > &c)
Reset point object with the given parameters.
Definition Point.hpp:88
void remove_redundancy(int interval_contractor) override
Removes redundant constraints and any unused generators.
Definition Point.hpp:66
std::string print() const override
Returns set information as a string.
Definition Point.hpp:109
Point()
Default constructor for Point class.
Definition Point.hpp:36
HybZono * clone() const override
Clone method for polymorphic behavior.
Definition Point.hpp:57
bool do_contains_point(const Eigen::Vector< zono_float, -1 > &x, const OptSettings &settings, OptSolution *solution) const override
Definition Point.hpp:150
Zonotope class.
Definition Zono.hpp:33
#define zono_float
Defines the floating-point type used in ZonoOpt.
Definition ZonoOpt.hpp:43
#define zono_eps
Defines the precision used for floating point comparisons in ZonoOpt.
Definition ZonoOpt.hpp:51
Definition ADMM.hpp:41
Settings for optimization routines in ZonoOpt library.
Definition SolverDataStructures.hpp:26
Solution data structure for optimization routines in ZonoOpt library.
Definition SolverDataStructures.hpp:153