# Copyright (c) 1997-2004 # Ewgenij Gawrilow, Michael Joswig (Technische Universitaet Berlin, Germany) # http://www.math.tu-berlin.de/polymake, mailto:polymake@math.tu-berlin.de # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2, or (at your option) any # later version: http://www.gnu.org/licenses/gpl.txt. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. #----------------------------------------------------------------------------- # $Project: polymake $$Id: random_hirsch 5639 2004-12-17 21:36:25Z gawrilow $ application 'polytope'; # n random simplicial d-polytopes with 2d vertices sub random_hirsch { my ($n, $d, $seed)=@_; my $logfile="log"; # this is a standard (d-1)-simplex my $simplex1=new Apps::polytope::RationalPolytope("simplex1"); Modules::client("simplex", $simplex1, $d-1); open LOG, ">>$logfile"; $|=1; print LOG "[ random_hirsch(#=$n,dim=$d,initial seed=$seed) on $ENV{HOSTNAME}; format: N_VERTICES N_FACETS SIMPLICIAL DUAL_DIAMETER ]\n"; # for dimension below 10 beneath_beyond will be (slightly) faster $d<=10 ? beneath_beyond : lrs; # generate random (d-1)-simplices and construct the Cayley embedding of the two simplices # check for the Hirsch bound and save the output (if interesting) for (my $i=$seed; $i<$seed+$n; ++$i) { my $simplex2=new Apps::polytope::RationalPolytope("simplex2"); Modules::client("rand", $simplex2, $simplex1, $d, "-seed", $i); $simplex2->commit; my $p=new Apps::polytope::RationalPolytope("rand_$i"); Modules::client("cayley_embedding", $p, $simplex1, $simplex2); # let create all properties at once my ($nv, $nf, $simplicial, $dd)=$p->give("N_VERTICES", "N_FACETS", "SIMPLICIAL", "DUAL_DIAMETER"); my $now=localtime(); print LOG "$now $ENV{HOSTNAME} ($d,$i): $nv $nf $simplicial $dd"; if ($dd > $nv - $p->DIM) { print LOG "*"; my $filename= "hirsch_" . $p->DIM . "_" . $i; $p->commit; save($p, $filename, 1); } print LOG "\n"; } close LOG; } if (@ARGV == 2) { push @ARGV, time; } elsif (@ARGV != 3) { die "usage: polymake --script random_hirsch #polytopes dim [ seed ]\n"; } random_hirsch(@ARGV); # Local Variables: # mode: perl # c-basic-offset:3 # End: