Page 1 of 1

Output format of FACETS

Posted: 12 Mar 2024, 16:05
by mitch.ondra
Hi,
when I print facets of a polytope, according to documentation I should get a matrix of numbers, each rows represents one inequality with the numbers being the coeficients in the respective inequality. However, I get this:

Code: Select all

> $c = cube(3,0); > print $c->FACETS; (4) (1 1) 1 -1 0 0 (4) (2 1) 1 0 -1 0 (4) (3 1) 1 0 0 -1
How should I interpret this output and why does it look like this? Is it possible to force the output to adhere to the format from the docs?

For the context, I need to use polymake to convert polytopes from V-repre to H-repre, where the H-repre will need to be saved as CPLEX .lp format and lrs/cdd .ine format (but I can convert to these manually if I have the matrix representation).

Re: Output format of FACETS

Posted: 12 Mar 2024, 16:16
by blorenz
The (dim) (key value) ... style is for sparse vectors / matrices where the first entry is the length and each following pair is index and value. You can force the default output with dense:

Code: Select all

polytope > print dense($c->FACETS); 0 1 0 0 1 -1 0 0 0 0 1 0 1 0 -1 0 0 0 0 1 1 0 0 -1
Regarding .lp output you can also have a look at poly2lp: https://polymake.org/doku.php/documenta ... pe#poly2lp

Best
Benjamin

Re: Output format of FACETS

Posted: 12 Mar 2024, 17:31
by mitch.ondra
Thank you!

I tried both poly2lp and and poly2porta (since I kinda work with it too) and they didn't work.
Running

Code: Select all

poly2lp($c)
gave me

Code: Select all

polymake: WARNING: available properties insufficient to compute 'LP'
while poly2porta gives

Code: Select all

polymake: ERROR: Undefined subroutine &Polymake::User::poly2porta called

Re: Output format of FACETS

Posted: 12 Mar 2024, 18:15
by blorenz
poly2lp requires an LP for the objective function, either as a subobject or as a second argument, e.g.:

Code: Select all

polytope > $c = cube(3); polytope > $lp = $c->LP(LINEAR_OBJECTIVE=>[0,1,1,1]); polytope > poly2lp($c, $lp); MINIMIZE obj: +1 x1 +1 x2 +1 x3 Subject To ie0: +1 x1 >= -1 ie1: -1 x1 >= -1 ie2: +1 x2 >= -1 ie3: -1 x2 >= -1 ie4: +1 x3 >= -1 ie5: -1 x3 >= -1 BOUNDS x1 free x2 free x3 free END

For poly2porta you need to make sure the porta.rules are active:

Code: Select all

polytope > reconfigure "porta.rules"; Could not find the program `xporta' anywhere along your PATH. Please enter the full path or an empty string to abort. [program path] > xporta polytope > poly2porta($c,"portafile"); polytope > exit; $ cat portafile DIM=3 CONV_SECTION -1 -1 -1 1 -1 -1 -1 1 -1 1 1 -1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 END