[PPL-devel] Technical questions on how to extend a polyhedron
Enea Zaffanella
zaffanella at cs.unipr.it
Thu Jan 31 14:54:32 CET 2013
On 01/30/2013 07:22 PM, giuseppe lipari wrote:
> Dear all,
>
> we are using the PPL (C++ version) to model a parametric real-time
> scheduling problem.
> At some point in our methodology, we obtain a region of space
> constrained by a C_Polyhedron that describes a subset of valid solutions
> for our problem.
>
> Our problem has also this nice property: if X=(x_1, ..., x_n) is a
> vector contained in the C_Polyhedron, then any Y = (y_1, ...., y_n) with
>
> forall i 0<= y_i <= x_i,
>
> is also a valid solution.
>
> Therefore we would like to extend the C_Polyhedron to include all
> vectors 0<= Y <= X.
>
> So, our questions are:
>
> 1) Is there any simple way of doing it in PPL?
>
> In 2D we thought of the following simple strategy: add points (0,0)
> (x1,0) (0, x2) to the set of generators of the polyhedron, then minimize
> it.
>
> 2) Is this strategy correct?
> 3) How can we extend it to N dimension?
>
> Thanks in advance for your kind response
>
> Giuseppe Lipari
> Laboratoire Spécification et Vérification,
> Ecole Normale Supérieure de Cachan
Hello Giuseppe.
There is something which is unclear (at least to me) in your description
of the class of polyhedra of interest.
Do the points in your polyhedra always have non-negative coordinates?
In the following I am assuming this property holds.
(I think that, without this additional property, the minimal set
containing your polyhedron and satisfying the requirement above might be
a non-convex set.)
Regarding question 1, it depends on the notion of "simpler".
From the point of view of the programmer, the following approach might
be simpler:
* first, for each space dimension i, add the ray
Generator::ray(-Variable(i));
* then, for each space dimension i, add the constraint
Constraint(Variable(i) >= 0);
If N is the space dimension, this means adding N generators, minimize
(done implicitly), adding N constraints, minimize (if you want a
non-redundant constraint description).
Regarding question 2:
the approach you propose seems to be correct for *bounded* polyhedra
(i.e., polytopes). If the polyhedron is unbounded, we can build a
counter-example:
Consider the polyhedron defined by constraints
x1 >= 0, x2 >= 0, x1 == x2.
Its generator system will contain a ray (1, 1) and a point (0, 0) in the
origin of the vector space. Using your approach, the polyhedron will be
left unchanged ... which is wrong, as you want to obtain the whole
non-negative quadrant.
That said, the fix seems to be simple: first check for boundedness; if
it is unbounded, return the non-negative quadrant; if it is bounded, use
the proposed approach.
Regarding question 3:
the approach should be easily generalizable by using an inner loop:
for each generating point p {
for each space dimension i {
add a point which is the same of p
except that it has a zero for coordinate i
}
}
add the origin of the vector space
Now, if your polyhedron has M points (could be M >> N), this will cause
the addition of M*N + 1 generating points, followed by a single
minimization.
It is quite difficult to predict whether or not this approach is going
to be more efficient than the one proposed above. I recommend doing some
efficiency tests.
Regards,
Enea Zaffanella.
More information about the PPL-devel
mailing list