# Benchmarks

## Table of Contents

Here, you can find benchmarks comparing state-of-the-art solvers to dejavu.

## Benchmark Suite #

We test 44 graph classes, comprised of almost all sets linked in the
standard benchmark library. Specifically, we test all graph classes listed under bliss, conauto, saucy, random graphs, miscellaneous graphs, Dawar-Yeung graphs, as well as the shrunken multipedes. We solely left out *very few* sets for at least some brevity (e.g., slightly easier variants of shrunken multipedes).

We made the following additions to the benchmark suite, which we believe to be meaningful:

- mip17: practical graphs stemming from symmetry exploitation in mixed-integer solvers, provided by Marc Pfetsch and Christopher Hojny
- sat21: graphs stemming from SAT solving, preprocessed using unit and pure
- pace23: graphs from the pace challenge 2023 (twin width)
- groups128: some multiplication tables of groups of order 128, provided by Jendrik Brachter
- CFI and complete graphs: extended the sets with larger graphs

The benchmark graphs can either be found in ðŸ“– Adolfo Piperno’s collection, or on our graph page. We configured dejavu with an error probability below 0.1%, but used a pseudo random number generator. More details on the precise benchmark setup can be found further below.

## Results Summary #

We give a brief overview of the results of our benchmarks.

#### Fastest on Graph Class

First, taking the sum of all the runtimes of a graph class, dejavu is fastest on 32 classes, with Traces being fastest on 8, saucy on 3, and nauty on 1 (out of 44 total classes).- dejavu 32
- Traces 8
- saucy 3

#### Competitive (within factor 2 of best) on Graph Class

We get a more refined picture if we define a solver to be*competitive*, if it finishes within a factor of two of the fastest solver. Considering this, dejavu is competitive on 39 classes, Traces on 22, saucy on 15, nauty on 11, and bliss on 3 (out of 44 total classes).

- dejavu 39
- Traces 22
- saucy 15
- nauty 11
- bliss 3

#### Timeouts

We ran all benchmarks with a time limit of 100 seconds. On all graph classes, dejavu posted the lowest number of timeouts achieved in the benchmarks (in the majority of classes the score was tied at 0, though). Summing over all the graphs in the benchmark suite, dejavu reported 31 timeouts, Traces reported 558, bliss reported 489, nauty reported 840, and saucy reported 557. We also remark that nauty and Traces ran out of memory on some graphs, wich we counted as a timeout. More details can be found in the table and figures shown below.## Results Table #

Below is a table summarizing our benchmark results for each graph class and solver.
For each class we report its size, meaning the number of graphs contained in the class.
Then, for each class and solver, report the sum of the runtimes of all the graphs in a class as *t*.
If the solver did not solve a graph within the timelimit of 100 seconds, we classify the graph as a timeout.
The number of timeouts can be found in the rows labeled *t/o*.

The best reported runtime and timeout for each graph class is signified in **bold**. If a solver finished within a factor of *2* of the best runtime for a given class, we report this as “competitive”, signified in *italic*. All runtimes are reported in seconds.

graph class | `dejavu` |
```
Traces
``` | ```
bliss
``` | ```
nauty
``` | ```
saucy
``` | ||||||

name | size | t | t/o | t | t/o | t | t/o | t | t/o | t | t/o |

ag | 23 | 0.11 | 0 | 0.084 | 0 | 0.29 | 0 | 0.20 | 0 | 1804 | 18 |

cfixl | 101 | 62 | 0 | 95 | 0 | 806 | 7 | 765 | 7 | 1000 | 10 |

chh | 26 | 0.17 | 0 | 477 | 4 | 286 | 2 | 1217 | 11 | 1238 | 12 |

cmz | 46 | 0.040 | 0 | 0.18 | 0 | 74 | 0 | 3418 | 33 | 0.024 | 0 |

combinatorial | 12 | 24 | 0 | 63 | 0 | 527 | 5 | 847 | 7 | 1060 | 10 |

dac | 29 | 0.42 | 0 | 2.1 | 0 | 1.8 | 0 | 31 | 0 | 64 | 0 |

sat21 | 400 | 1584 | 2 | 4231 | 28 | 4242 | 26 | 11057 | 88 | 2387 | 12 |

sat21* | 400 | 507 | 0 | 3529 | 28 | 3220 | 15 | 10101 | 77 | 1539 | 10 |

f-lex | 210 | 39 | 0 | 16619 | 162 | 8733 | 83 | 19457 | 192 | 395 | 0 |

grid | 39 | 0.081 | 0 | 0.044 | 0 | 0.096 | 0 | 0.062 | 0 | 0.070 | 0 |

grid-w | 39 | 0.13 | 0 | 0.078 | 0 | 0.17 | 0 | 0.066 | 0 | 0.10 | 0 |

groups128 | 17 | 13 | 0 | 37 | 0 | 43 | 0 | 342 | 2 | 333 | 1 |

had | 66 | 12 | 0 | 21 | 0 | 48 | 0 | 470 | 3 | 1254 | 7 |

had-sw | 51 | 9.4 | 0 | 3.0 | 0 | 202 | 1 | 523 | 3 | 807 | 4 |

hypercubes | 19 | 98 | 0 | 100 | 0 | 186 | 1 | 155 | 1 | 230 | 1 |

internet | 3 | 0.18 | 0 | 2.4 | 0 | 198 | 1 | 300 | 3 | 0.19 | 0 |

ispd | 8 | 5.9 | 0 | 6.5 | 0 | 800 | 8 | 800 | 8 | 7.5 | 0 |

k | 112 | 0.055 | 0 | 41 | 0 | 370 | 3 | 122 | 0 | 0.30 | 0 |

kef | 11 | 0.006 | 0 | 0.056 | 0 | 0.029 | 0 | 0.065 | 0 | 0.005 | 0 |

latin | 29 | 0.093 | 0 | 0.031 | 0 | 0.17 | 0 | 0.058 | 0 | 0.040 | 0 |

latin-sw | 231 | 3.9 | 0 | 5.0 | 0 | 44 | 0 | 444 | 0 | 281 | 0 |

lattice | 27 | 0.028 | 0 | 0.064 | 0 | 0.33 | 0 | 0.057 | 0 | 0.12 | 0 |

mip17 | 240 | 15 | 0 | 1103 | 9 | 174 | 0 | 1470 | 10 | 22 | 0 |

multipedes** | 348 | 4594 | 29 | 21452 | 214 | 12107 | 114 | 12019 | 108 | 15170 | 145 |

mz | 25 | 0.083 | 0 | 0.013 | 0 | 0.14 | 0 | 0.15 | 0 | 1003 | 10 |

mz-aug | 25 | 0.13 | 0 | 0.015 | 0 | 0.13 | 0 | 0.090 | 0 | 1403 | 14 |

mz-aug2 | 24 | 0.029 | 0 | 0.005 | 0 | 0.19 | 0 | 1739 | 17 | 0.005 | 0 |

pace23 | 400 | 39 | 0 | 5736 | 51 | 3927 | 26 | 10149 | 90 | 133 | 0 |

paley | 53 | 0.018 | 0 | 0.020 | 0 | 0.32 | 0 | 0.020 | 0 | 0.046 | 0 |

pg | 23 | 0.091 | 0 | 0.087 | 0 | 0.36 | 0 | 0.27 | 0 | 0.11 | 0 |

pp | 243 | 708 | 0 | 2661 | 1 | 21366 | 203 | 20702 | 196 | 22800 | 228 |

ran2 | 131 | 0.079 | 0 | 0.19 | 0 | 0.55 | 0 | 0.13 | 0 | 0.28 | 0 |

ran10 | 150 | 0.12 | 0 | 0.27 | 0 | 0.86 | 0 | 0.21 | 0 | 0.42 | 0 |

ransq | 150 | 0.039 | 0 | 0.054 | 0 | 0.14 | 0 | 0.057 | 0 | 0.062 | 0 |

rantree | 19 | 0.036 | 0 | 0.022 | 0 | 2.4 | 0 | 231 | 2 | 0.026 | 0 |

ranreg | 13 | 0.42 | 0 | 4.7 | 0 | 155 | 1 | 437 | 4 | 4.9 | 0 |

rnd-3-reg | 110 | 0.89 | 0 | 1.1 | 0 | 28 | 0 | 2081 | 0 | 3.0 | 0 |

sat_cfi | 290 | 258 | 0 | 7477 | 72 | 261 | 1 | 321 | 0 | 7198 | 64 |

states | 56 | 7.5 | 0 | 12 | 0 | 1538 | 7 | 5120 | 51 | 7.6 | 0 |

sts | 25 | 0.21 | 0 | 0.36 | 0 | 0.64 | 0 | 14 | 0 | 9.5 | 0 |

sts-sw | 231 | 3.2 | 0 | 5.4 | 0 | 33 | 0 | 659 | 0 | 396 | 0 |

tnn | 20 | 0.35 | 0 | 403 | 4 | 1.7 | 0 | 7.4 | 0 | 905 | 9 |

tran | 139 | 1.2 | 0 | 4.9 | 0 | 6.6 | 0 | 7.7 | 0 | 1.6 | 0 |

triang | 27 | 0.014 | 0 | 0.018 | 0 | 0.13 | 0 | 0.021 | 0 | 0.046 | 0 |

usr | 18 | 6.3 | 0 | 1306 | 13 | 8.8 | 0 | 441 | 4 | 1203 | 12 |

*****Not randomly permuted, but in the original vertex order. We added this line to show that dejavu is able to solve all graphs of this class within the given timelimit, if graphs are not randomly permuted. Note that this unpermuted set is *not* included in the summary above (or below).

******We restricted this set to graphs below 1536 vertices, which suffices to timeout all the solvers (larger graphs will solely produce timeouts).

## Plot for each Class #

Below are detailed plots for the tested benchmark classes. Click a plot to view in fullscreen.

Note that in all of the figures and for each solver, the instances were always sorted according to running time. We have another page that contains scatter plots, plotting graph size versus running time. However, in some of the sets, there is only a weak correspondence between graph size and difficulty of the graph. This is why in the plots below it is easier to tell which solver is faster – whereas in the other plots scaling with size is more apparent. Below, “spikes” at the end of the plots do not necessarily mean that the solvers start to scale much worse “at the end of the set”. Rather, this is often due to a few of the graphs (not necessarily the largest ones) posing some more difficulty to a solver in a certain run, often related to a specific random permutation of a graph.

## Benchmark Setup #

Benchmarks were run on an Intel i7 9700K with 64GB of RAM on Ubuntu 20.04. All solvers ran on a single thread, with the full amount of RAM available (we did not run any benchmarks in parallel). All graphs were randomly permuted, but each solver was passed the same permuted version of the graph. The versions used are bliss 0.73, nauty/Traces 2.6R12, saucy 3.0, and dejavu 2.0preview1. We are aware that slightly newer versions of bliss and nauty are available. While we do not believe that these would considerably change the benchmark numbers, we will re-run the benchmark numbers in some time.

We configured dejavu with an error probability below 0.1%, but used a pseudo random number generator. Essentially, we used the default configuration of the solver. However, we did make one adjustment for the sake of fairness: we used an empty function as the hook (instead of a `nullptr`

), in order to enforce that all generators are properly lifted back to the original graph. If a `nullptr`

is passed instead, i.e., only the automorphism group size is computed, the solver will run faster on many of the graphs.