Maximum Stable Set by k-Rank Separation
This repository contains the source code used for the computational experiments in the following paper:
An early version of our work was presented in 2017 at the SEA conference:
The source code relies on the three following external libraries:
externs
.We have developed the code under Windows 10, using MS Visual Studio Community 2019.
The MSVC project files are available under the directory msvc
.
Please, in the project file, check the file path where you have installed Gurobi on your computer.
The code compiles in Release mode at 64 bits.
We run all our tests on a Linux server running CentOS.
The repository contains a Makefile
, where you have to set the path for the Gurobi include
and lib
directories correctly.
Note that we are compiling using the C++17 standard (-std=c++17
), we are setting some optimization flags (-march=native -mavx2 -mfma
), and we use the OpenMP library (-fopenmp
).
You may be interested in the following files, which contains the cut separator we have implemented in our solver:
Find_n_rank.h
: they contain the exact separation algorithm for k-rank inequalities, with n=2,3,4,5.DigraphSpp.h
: it contains the exact separation algorithms (nested loops) for small cliques (with cardinalities smaller or equal than 4);The implementation of the separation algorithms is self-contained (it does not depend on external libraries), and it would be possible to reuse the code in other contexts.
In the experiments, we use the following set of graphs, which are present in the subfolder data
:
data/dimacs
: A subset of the graphs from the DIMACS challenge on the maximum clique problem, which are complemented to obtain maximum stable set instances. We include only graphs of moderate size.data/sparse
: Very sparse graph with up to 400 vertices.data/rnd
: Erdos/Reny random graphs with 50, 75, and 100 vertices and an edge density ranging from 10% up to 90%.All the graphs are stored in the ascii text DIMACS format.
In order to facilitate the reproduction of our results, we include three python scripts that we use to automatize our tests:
run_test_dimacs.py
run_test_sparse.py
run_test_ijoc.py
Before running the scripts, you should check the variables pointing to the directory where the instances are saved.
Please, contact us by email if you encounter any issues.
If you ever find our paper useful for your research, or if you reuse any snippet from our code, please cite our work as follows:
@article{SCSG2021,
author = {Stefano Coniglio and Stefano Gualandi},
title = {Optimizing over the Closure of Rank Inequalities with a Small Right-Hand Side for the Maximum Stable Set problem via Bilevel Programming},
journal = {{INFORMS} Journal on Computing},
year = 2021,
note = {Accepted for publication, to appear}
}
@inproceedings{SCSG2017,
title={On the Separation of Topology-Free Rank Inequalities for the Max Stable Set Problem},
author={Coniglio, Stefano and Gualandi, Stefano},
booktitle={16th International Symposium on Experimental Algorithms (SEA 2017)},
year={2017},
organization={Schloss Dagstuhl-Leibniz-Zentrum fuer Informatik}
}