Vertex enumeration.
Vertex enumeration of convex polytopes given by linear inequalities.
vertexenum
Get the vertices of an intersection of halfspaces.
Consider the following system of linear inequalities:
$$\left{\begin{matrix} -5 & \leqslant & x & \leqslant & 4 \ -5 & \leqslant & y & \leqslant & 3-x \ -10 & \leqslant & z & \leqslant & 6-2x-y \end{matrix}.\right.$$
Each inequality defines a halfspace. The intersection of the six halfspaces is a convex polytope. The vertexenum
function can calculate the vertices of this polytope:
import Data.VectorSpace (
AdditiveGroup( (^+^), (^-^) )
, VectorSpace( (*^) )
)
import Geometry.VertexEnum
inequalities :: [Constraint Rational]
inequalities =
[ x .>= (-5) -- shortcut for `x .>=. cst (-5)`
, x .<= 4
, y .>= (-5)
, y .<=. cst 3 ^-^ x -- we need `cst` here
, z .>= (-10)
, z .<=. cst 6 ^-^ 2*^x ^-^ y ]
where
x = newVar 1
y = newVar 2
z = newVar 3
vertexenum constraints Nothing
The type of the second argument of vertexenum
is Maybe [Double]
. If this argument is Just point
, then point
must be the coordinates of a point interior to the polytope. If this argument is Nothing
, an interior point is automatically calculated. You can get it with the interiorPoint
function. It is easy to mentally get an interior point for the above example, but in general this is not an easy problem.