Operations

pypolycontain.operations.AH_polytope_vertices(P, N=200, epsilon=0.001, solver='Gurobi')

Returns N*2 matrix of vertices

pypolycontain.operations.AddMatrixInequalityConstraint_classical(mathematical_program, A, X, B)
pypolycontain.operations.Hausdorff_distance(Q1, Q2, directed=False, ball='infinty_norm', solver='gurobi', k=-1)
pypolycontain.operations.Lambda_H_Gamma(mathematical_program, Lambda, H_1, H_2, Gamma)

Lambda H_1 = H_2 Gamma

pypolycontain.operations.Lambda_h_Inequality(mathematical_program, Lambda, beta, H, h_1, h_2)

Adds Lambda H-1 le h_2 + H beta to the Mathematical Program

pypolycontain.operations.Lambda_h_Inequality_D(mathematical_program, Lambda, beta, H, h_1, h_2, D)

Adds Lambda H-1 le h_2 D + H beta to the Mathematical Program

pypolycontain.operations.affine_map(T, P, t=None, get_inverse=True)

Returns the affine map of a polytope.

pypolycontain.operations.bounding_box(Q, solver='Gurobi')

Computes the bounding box of a polytope by solving \(2n\) linear programs. Each linear program is in the form:

\[\begin{split}\begin{array}{lll} l_i= & \min & e_i^T x \\ & \text{subject to} & x \in \mathbb{P} \end{array}\end{split}\]

and

\[\begin{split}\begin{array}{lll} u_i= & \max & e_i^T x \\ & \text{subject to} & x \in \mathbb{P} \end{array} \end{split}\]

where \(l,u\) define the lower and upper corners of the bounding box.

pypolycontain.operations.boxing_order_reduction(zonotope, desired_order=1)

boxing method for zonotope order reduction inputs: input zonotope , order of the output zonotope output: zonotope

Based on Kopetzki, Anna-Kathrin, Bastian Schurmann, and Matthias Althoff. “Methods for order reduction of zonotopes.” 2017 IEEE 56th Annual Conference on Decision and Control (CDC). IEEE, 2017.

pypolycontain.operations.check_non_empty(Q, tol=1e-05, solver='gurobi')
pypolycontain.operations.check_subset(P1, P2, k=-1)

Checks if .math..`P1 subseteq P2` Inputs:

pypolycontain.operations.convex_hull(P1, P2)
Inputs:
P1, P2: AH_polytopes
Output:
returns :math:` ext{ConvexHull}(mathbb{P}_1,mathbb{P}_2)` as an AH-polytope
pypolycontain.operations.convex_hull_of_point_and_polytope(x, Q)
Inputs:
x: numpy n*1 array Q: AH-polytope in R^n
Returns:
AH-polytope representing convexhull(x,Q)
\[\text{conv}(x,Q):=\{y | y= \lambda q + (1-\lambda) x, q \in Q\}.\]
pypolycontain.operations.decompose(zonotope, dimensions)

@author: kasra Decompising a given set into bunch of fewer dimensional sets such that the Cartesian product of those sets is a subset of the given set.

pypolycontain.operations.directed_Hausdorff_hyperbox(b1, b2)

The directed Hausdorff hyperbox min epsilon such that b1 in b2+epsilon

pypolycontain.operations.distance_hyperbox(b1, b2)

The distance between boxes

pypolycontain.operations.distance_point_polytope(P, x, ball='infinity', solver='Gurobi')

Computes the distance of point x from AH-polytope Q

pypolycontain.operations.distance_polytopes(Q1, Q2, ball='infinity', solver='gurobi')

Finds the closest two points in two polytopes and their distance. It is zero if polytopes have non-empty intersection

pypolycontain.operations.get_nonzero_cost_vectors(cost)
pypolycontain.operations.intersection(P1, P2)
Inputs:
P1, P2: polytopic objects
Output:

returns \(\mathbb{P}_1 \cap \mathbb{P}_2\) as an AH-polytope

If both objects are H-polytopes, return H-polytope

pypolycontain.operations.intersection_old(P1, P2)
Inputs:
P1, P2: AH_polytopes \(\mathbb{P}_1,\mathbb{P}_2\). Converted to AH-polytopes
Output:
returns \(\mathbb{P}_1 \cap \mathbb{P}_2\) as an AH-polytope
pypolycontain.operations.make_ball(n, norm)
pypolycontain.operations.minkowski_sum(P1, P2)
Inputs:
P1, P2: AH_polytopes
Returns:
returns the Mkinkowski sum \(P_1 \oplus P_2\) as an AH-polytope.

Background: The Minkowski sum of two sets is defined as:

\[A \oplus B = \{ a + b \big | a \in A, b \in B\}.\]
pypolycontain.operations.pca_order_reduction(zonotope, desired_order=1)

PCA method for zonotope order reduction inputs: input zonotope , order of the output zonotope output: zonotope

Based on Kopetzki, Anna-Kathrin, Bastian Schürmann, and Matthias Althoff. “Methods for order reduction of zonotopes.” 2017 IEEE 56th Annual Conference on Decision and Control (CDC). IEEE, 2017.

pypolycontain.operations.point_membership(Q, x, tol=1e-05, solver='gurobi')
pypolycontain.operations.point_membership_fuzzy(Q, x, tol=1e-05, solver='gurobi')

Fuzzy membership check. If x contains NaN, the entry is unconstrained @param Q: Polytope in R^n @param x: n*1 numpy array, may contain NaNs @param tol: @param solver: solver to use @return: boolean of whether x is in Q

pypolycontain.operations.positive_matrix(mathematical_program, Lambda)

All elements are non-negative

pypolycontain.operations.sorting_generator(G, desired_numberofcolumns)

The goal is deviding the generator into to parts. One part that is used for zonotope order reduction methods. And the other part which is used to enforce the reduced zonotope to have the desire order.

pypolycontain.operations.translate(t, P)

Shifts the polytope by t vector

Conversions

pypolycontain.conversions.AH_to_H_old(Q, P0, solver='Gurobi')

Converting Q to an H-polytope using an optimization-based method

WARNING: To be deprecated

pypolycontain.conversions.AH_to_V(P, N=360, epsilon=0.001, solver='Gurobi')

Returns the V-polytope form of a 2D pp.AH_polytope. The method is based on ray shooting.

Inputs:
  • P: AH-polytope
  • N defualt=360: number of rays
  • solver: default=Gurobi. The linear-programming optimization solver.
Returns:
  • V: matrix

Note

This method only works for 2D AH-polytopes and its for visualization. For generic use, first use H-V on \(\mathbb{P}\) and then apply affine transformation. Note that H-V uses elimination-based vertex enumeration method that is not scalable.

pypolycontain.conversions.H_to_V(P)

Returns the vertices of an H_polytope.

Inputs:
  • P: H_polytope in \(\mathbb{R}^n\)
Output:
  • V: list of vertices. Each vertex is numpy.ndarray[float[n,1]]
Method:
The method is based on double description method, and is using pycddlib.

Warning

This method can be very slow or numerically unstable for polytopes in high dimensions and/or large number of hyperplanes

pypolycontain.conversions.to_AH_polytope(P)

Converts the polytopic object P into an AH-polytope. If applied on a AH-polytope, a deepcopy is returned

pypolycontain.conversions.to_V(P, N=500)

returns the vertices of the polytopic object $P$ in a vertical stack form.

pypolycontain.conversions.vcube(n)

\(2^n \times n\) array of vectors of vertices in unit cube in \(\mathbb{R^n}\)

pypolycontain.conversions.zonotope_to_V(Z)

Finds the vertices of a zonotope