MyNixOS website logo
Description

Vertex enumeration.

Vertex enumeration of convex polytopes given by linear inequalities.

vertexenum

Stack-lts Stack-nightly

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.

Metadata

Version

1.0.0.0

Platforms (77)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-freebsd
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64-windows
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows