📄 readme
字号:
======================================================================== GeoSteiner 3.1 Copyright (c) 1999, 2001 by David M. Warme, Pawel Winter, & Martin Zachariasen.========================================================================This directory contains GeoSteiner version 3.1, which solves thefollowing NP-hard problems: - Euclidean Steiner minimal tree - Rectilinear Steiner minimal tree - Minimum spanning tree in hypergraphsGeosteiner is the joint work of: - David Warme Emergent Information Technologies, Inc. - Pawel Winter University of Copenhagen - Martin Zachariasen University of CopenhagenThe latest news regarding the GeoSteiner package can be found at: http://www.diku.dk/geosteiner/Bug reports, suggested improvements and constructive comments aregreatly appreciated.Author's information====================David WarmeEmergent Information Technologies, Inc.2600 Park Tower Drive, Suite 900Vienna, Virginia 22180 USAE-mail: David.Warme@Emergent-IT.comPhone: 703-645-8441Fax: 703-641-7172Pawel WinterDepartment of Computer Science (DIKU), University of CopenhagenUniversitetsparken 1, DK-2100 Copenhagen East, DenmarkE-mail: pawel@diku.dkPhone: +45 35 32 14 00Fax: +45 35 32 14 01Martin ZachariasenDepartment of Computer Science (DIKU), University of CopenhagenUniversitetsparken 1, DK-2100 Copenhagen East, DenmarkE-mail: martinz@diku.dkPhone: +45 35 32 14 00Fax: +45 35 32 14 01Historic Note=============To the best knowledge of the authors, this code represents thecomputational state of the art as of February 2001. It solves problemsmore than an order of magnitude larger than any other software of whichwe are aware.The "GeoSteiner" name was coined (and is therefore "owned") by PawelWinter, whose seminal program GEOSTEINER started it all back in 1985.In 1996 Winter and Zachariasen published an improved algorithm called"GeoSteiner96".On the other hand, Warme's first Steiner tree code was the Salowe-Warmealgorithm in 1993, which used backtrack search to concatenaterectilinear FSTs. In 1998, Warme's PhD dissertation described a newbranch-and-cut code for finding minimum spanning trees in arbitraryhypergraphs -- which was applied to the FST concatenation problem forboth rectilinear and Euclidean FSTs.The first distribution of the combined code therefore represented the"third version" of each group's code, and it was thus namedGeoSteiner version 3.0. This and subsequent versions continuethat naming convention.References==========D. M. Warme. Spanning Trees in Hypergraphs with Applications to SteinerTrees. Ph.D. Thesis, Computer Science Dept., The University ofVirginia, 1998.P. Winter and M. Zachariasen. Euclidean Steiner Minimum Trees: AnImproved Exact Algorithm. Networks, 30:149--166, 1997.M. Zachariasen. Rectilinear Full Steiner Tree Generation. Networks 33,125-143, 1999.Building and Installing GeoSteiner==================================GeoSteiner comes with a "GNU style" configure script. For those ofyou who are especially impatient, type the following: $ ./configure $ makeFor complete instructions on building and installing Geosteiner, seethe INSTALL file.Program Descriptions====================GeoSteiner consists of the following programs: rand_points lib_points efst rfst bb dumpfst plotfst prunefst fst2graph krand a single data file: prelude.psrand_points - Generates random point sets. The coordinates of the points are integers chosen (more or less) uniformly from the range 0 <= x,y < 10000. The following options are permitted: -e Display the initial seed used on stderr. -f Display the final seed state (to stderr, unless -o is specified, in which case to stdout). -o Display the initial seed to stdout. -n Use the "new" random number generator that uses a 64-bit shift register with XOR feedback. Without this option a generator is used that functions identically to the original PDP-11 Unix rand(3) routine (with all of its ugly warts intact). -s N Set the initial seed to be N. -r Randomize. Use an initial seed chosen from the current date and time.lib_points - Reads a point set in either TSPLIB or OR-Library format from stdin and converts the input to clean point coordinates as required by "efst" or "rfst". The program automatically determines the input file type. The program has one optional parameter (which has value 1 by default) that specifies which instance number should be extracted from an OR-Library file.efst - Reads a point set from stdin, and generates a set of Euclidean FSTs that contains at least one Euclidean Steiner minimal tree. The output on stdout is ASCII encoded, but not particularly meaningful except as input to the "bb", "dumpfst", "plotfst", "prunefst" and "fst2graph" programs. The following options are permitted: -d txt Description of problem instance. -e K Sets the initial number of equilateral points per terminal to K. The default is 100. The equilateral points are automatically reallocated as needed, but some very large point sets may run out of memory unless the initial allocation is sufficient. -f E Epsilon multiplication factor for floating point comparisons. Default is 32. -g Use greedy heuristic instead of Smith-Lee-Liebman (more time consuming but generates fewer eq-points). -k K Generate only FSTs having at most K terminals. This can save considerable time but can also eliminate FSTs that must be in the optimal Steiner tree (i.e., solutions can become suboptimal). -m M Use multiple precision. Larger M use it more. Default is M=0 which disables multiple precision. The use of this option requires that the GNU Multi-Precision arithmetic library (GMP) has been linked with the program (see the INSTALL file for more details). -t Print detailed timings to stderr. -v N Generate the output in version N of the FST data format. Supported versions are 0, 2 and 3. Version 3 is the default.rfst - Reads a point set from stdin, and generates a set of rectilinear FSTs that contains at least one rectilinear Steiner minimal tree. The output on stdout is ASCII encoded, but not particularly meaningful except as input to the "bb", "dumpfst", "plotfst", "prunefst" and "fst2graph" programs. The following options are permitted: -d txt Description of problem instance. -k K Generate only FSTs having at most K terminals. This can save time but can also eliminate FSTs that must be in the optimal Steiner tree (i.e., solutions can become suboptimal). -t Print detailed timings to stderr. -v N Generate the output in version N of the FST data format. Supported versions are 0, 2 and 3. Version 3 is the default.bb - The FST concatenation algorithm using branch-and-cut to solve an IP formulation of the problem. The FST data is read from stdin and a plot of the solution is produced on stdout in an "incomplete" postscript form. A printable postscript file can be obtained by PREPENDING the file "prelude.ps" to the program output. Various trace messages appear in the output as postscript comments. (The name "bb" is for branch-and-bound -- note that the name "bc" is already taken on Unix.) The following options are permitted: -2 Omit all 2-terminal SEC's from the initial constraint pool. -b Disable "strong branching", which chooses branching variables very carefully. -B N Set branch variable selection policy. N=0: naive max of mins, N=1: smarter lexicographic max of mins (default), N=2: product of improvements. -l T Sets a CPU time limit of T. -r Plot the optimal LP relaxation solution for the root node, but only if it is fractional. -R When optimal root LP relaxation is obtained, determine for each LP iteration the number of final constraints whose first violation occurred during that iteration. -T N Search N times more thoroughly for strong branching variables. -u B Specify B to be the initial upper bound assumed by the branch-and-bound. -z N Sets the target number of pool non-zeros to N. When configured to use CPLEX, the following additional option is permitted: -a M N Force CPLEX allocation to be at least M rows and N non-zeros. When configured to use lp_solve, the following additional options are permitted: -p Turn on the use of perturbations. This is the method that lp_solve_2.3 uses to deal with degenerate problems. -s Turn on the use of problem scaling. Once again a rather crude attempt to address problems that are badly behaved numerically. The following "grep-able" items appear in the output within postscript comments, and may be potentially useful: @0 The instance description from the FST data file. @1 Summary statistics: - Number of terminals - Number of FSTs/hyperedges - Number of branch-and-bound nodes - Number of LP's solved - Phase 1 CPU time (FST generation) - Phase 2 CPU time (branch-and-cut) - Total CPU time @2 LP/IP statistics: - Length of optimal Steiner tree - Length of LP relaxation at root node - Percent of LP/IP "gap" - # of LP's solve for root node - CPU time for root node - Percent reduction of SMT over MST @3 Initial constraint pool statistics: - Number of rows in pool - Number of non-zeros in pool - Number of rows in LP tableaux - Number of non-zeros in LP tableaux @4 Constraint pool statistics for root node: - Number of rows in pool - Number of non-zeros in pool - Number of rows in LP tableaux - Number of non-zeros in LP tableaux @5 Final constraint pool statistics: - Number of rows in pool - Number of non-zeros in pool - Number of rows in LP tableaux - Number of non-zeros in LP tableaux @6 Statistics on FSTs occurring in the SMT: - Number of FSTs in SMT - Average FST size in SMT - Maximum FST size in SMT - Number of FSTs of size 2 in SMT - Number of FSTs of size 3 in SMT - Number of FSTs of size 4 in SMT - Number of FSTs of size 5 in SMT - Number of FSTs of size 6 in SMT - Number of FSTs of size 7 in SMT - Number of FSTs of size 8 in SMT - Number of FSTs of size 9 in SMT - Number of FSTs of size 10 in SMT - Number of FSTs of size > 10 in SMT @C Coordinates of a Steiner point in the optimal solution. The Steiner points form a "certificate" of the optimal solution since the optimal solution can be reconstructed by computing a minimum spanning tree of the original terminals and these Steiner points. @D Deletion of slack rows from LP tableaux. @LO @LN This pair of messages is emitted every time the lower bound gets tighter. They contain the CPU time and the old/new bound, as well as the old/new gap percentages. These can be plotted (i.e., using gnuplot) to graphically show the convergence rate of the algorithm. @NC Creation of a new branch-and-bound node: - Node number - Parent node number - Branch variable - Branch direction - Objective value (the real LP objective is at least this value) @PAP Adding "pending" pool constraints to the LP tableaux. @PL State of LP tableaux constraints. @PMEM Constraint pool memory status. Printed before and after each garbage collection, and after adding new/initial constraints to the pool. @r Experimental output from -R switch.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -