X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/blobdiff_plain/c3149dd6dbf0dd296c85676fcf9f997ead2470f0..a93fd1cb792ef6dafaeb2599823256241c061cd3:/linpy/polyhedra.py diff --git a/linpy/polyhedra.py b/linpy/polyhedra.py index e5e2523..b88cfd1 100644 --- a/linpy/polyhedra.py +++ b/linpy/polyhedra.py @@ -144,6 +144,15 @@ class Polyhedron(Domain): def aspolyhedron(self): return self + def convex_union(self, *others): + """ + Return the convex union of two or more polyhedra. + """ + for other in others: + if not isinstance(other, Polyhedron): + raise TypeError('arguments must be Polyhedron instances') + return Polyhedron(self.union(*others)) + def __contains__(self, point): if not isinstance(point, Point): raise TypeError('point must be a Point instance') @@ -164,7 +173,11 @@ class Polyhedron(Domain): for inequality in self.inequalities] return Polyhedron(equalities, inequalities) - def _asinequalities(self): + def asinequalities(self): + """ + Express the polyhedron using inequalities, given as a list of + expressions greater or equal to 0. + """ inequalities = list(self.equalities) inequalities.extend([-expression for expression in self.equalities]) inequalities.extend(self.inequalities) @@ -179,8 +192,8 @@ class Polyhedron(Domain): """ if not isinstance(other, Polyhedron): raise TypeError('argument must be a Polyhedron instance') - inequalities1 = self._asinequalities() - inequalities2 = other._asinequalities() + inequalities1 = self.asinequalities() + inequalities2 = other.asinequalities() inequalities = [] for inequality1 in inequalities1: if other <= Polyhedron(inequalities=[inequality1]):