/tutte

Computes the Tutte Polynomial

Primary LanguageC++BSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

DOI Build Status

Tutte

This program computes the Tutte polynomial of a user-supplied graph using the algorithm described in:

Bedini, A. & Jacobsen, J.L. A tree-decomposed transfer matrix for computing exact Potts model partition functions for arbitrary graphs, with applications to planar graph colourings. J. Phys. A: Math. Theor. 43, 385001 (2010). dx.doi.org/10.1088/1751-8113/43/38/385001.

Requirements

Compilation and installation

$ git clone git://github.com/andreabedini/tutte.git
$ cd tutte
$ mkdir build
$ cd build
$ cmake ..
$ make

You can also run some tests to make sure everything is working properly.

$ make test

Optionally, you can install the executable program to your path.

$ make install

Input specification

The input is expected to be passed to the program through the standard input. The result will be printed to the standard output while any additional message will be printed on the standard error stream.

E.g. you can do

$ cat my_graph | bin/tutte

or

$ bin/tutte < my_graph

The input format looks like this:

0--1,1--2,2--3,3--0,4--5,5--6,6--7,7--4

This describe a graph with 8 vertices and 8 edges. Each edge is represented as a pair of numbers each representing a vertex.

It is important that the vertex numbering starts from zero, so that vertex indices are in [0..V) where V is the number of vertices.

Alternatively an input file can be specified with the option --input-file

$ bin/tutte --input-file my_input

NOTE: The input graph has to be connected, giving as input a graph with multiple connected components will result in a run-time error. This can be easily solved but I haven't had the time to work on it yet. Drop a line on the bug report if you feel like helping out.

Options

A list of options is available with the --help command

Allowed options:
  -h [ --help ]           Produce help message
  --input-file arg        Read the graph from a file.
  --degree                Use greedy degree algorithm [default].
  --fill-in               Use greedy fill-in algorithm.
  --local-degree          Use 'local' greedy degree algorithm.
  --local-fill-in         Use 'local' greedy fill-in algorithm.
  --elimination-order arg Specify a vertex elimination order.
  --print-tree            Print tree decomposition.
  --tree-only             Print tree decomposition and exit.
  -f [ --flow ]           Compute the flow polynomial
  -c [ --chromatic ]      Compute the chromatic polynomial
  --chinese-remainder     Use the chinese remainder trick.

The options --flow and --chromatic tell the program to compute the relevant specialization of the Tutte polynomial. In the variables (Q, v), passing --flow sets v = -Q, while passing --chromatic sets v = -1.

The options --degree and --fillin choose which algorithm has to be used to compute the tree decomposition. The algorithms Greedy Degree and Greedy Fill-In are described in

Bodlaender, H.L. & Koster, A.M.C.A. Treewidth computations I. Upper bounds. Information and Computation 208, 259–275 (2010). 10.1016/j.ic.2009.03.008.

The algorithms local greedy degree and local greedy fill-in algorithm are home-crafted modifications to the above to make them always output a path-decomposition.

A vertex elimination order (see Bodlaender & Koster (2010) for the terminology) can be specified on directly on the command line as a comma separated list of vertices.

Remarks

Edges are assigned to bags as they appear in the elimination ordering. For the sake of generality and maintenance, problem specific optimizations, such as the pruning procedure described in Bedini & Jacobsen (2010), are not implemented.