https://github.com/sraaphorst/nibac
C++ Nonisomorphic Branch-and-Cut
https://github.com/sraaphorst/nibac
branch-and-cut combinatorial-objects covering isomorphism linear-programming
Last synced: 2 months ago
JSON representation
C++ Nonisomorphic Branch-and-Cut
- Host: GitHub
- URL: https://github.com/sraaphorst/nibac
- Owner: sraaphorst
- License: other
- Created: 2015-12-03T22:02:27.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2024-01-31T04:35:53.000Z (over 1 year ago)
- Last Synced: 2025-01-05T16:33:51.135Z (4 months ago)
- Topics: branch-and-cut, combinatorial-objects, covering, isomorphism, linear-programming
- Language: C++
- Size: 3.03 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# nibac
**Status:** Complete, but the code is very old (circa 2004). I will likely be rewriting this soon.
# C++ Nonisomorphic Branch-and-Cut
This is the code that I used to generate results for my Master's Thesis in computer science.
It is based in part on a series of papers by Francois Margot in order to produce a branch-and-cut search / generation algorithm where the symmetry group of the problem is either specified or determined, and used to prune nodes from the search space so that only one solution per isomorphism class (i.e. one orbit per the partition of solutions as induced by the symmetry group) is produced.# Warning
While I am trying to clean it up for public distribution, this code is messy and disorganized. Use at your own risk.
It still compiles, provided you set the paths properly in `src/Makefile`. After installing `glpk` and `nauty` (see below), you should `make` and then `make install`. The examples should then properly compile. While nauty is not yet built into the final library, the plan is to include it.
Right now things might break as I am migrating from a plain makefile to `CMake` for configuration of the project and to include nauty in the final library to facilitate usage. I am working in CLion and thus, there are CLion project files included in the repository.
# LP Solver
nibac requires the use of an external LP solver in order to solve LPs at each node. Support is currently provided for both (older versions of) the commercial CPLEX and the free, open source GLPK. I recommend you use GLPK 4.47, as that was the API under which this code was written, and significant, incompatible changes have been introduced into GLPK in later versions.
You can obtain it here:
http://ftp.gnu.org/gnu/glpk/glpk-4.47.tar.gzI intend to write a plugin for Clp, the COIN-OR LP solver. More information can be found here:
https://projects.coin-or.org/Clp
It was last tested with CPLEX 7; as I no longer have access to CPLEX and it is a commercial application, CPLEX support for updated versions will likely not be provided.
# nauty
Brendan McKay's nauty (released under the Apache License 2.0) is also necessary. We recommend version 22, and as it doesn't install nicely and comes with many features unnecessary for nibac, we include a heavily pared down bare-bones version in [`src_extern/nauty22`](src_extern/nauty22) that, when the update to this project is completed, should be configured, built, and bundled automatically in the final nibac library. In the interim, you will have to provide access to the headers and `.o` files by modifying [`src/Makefile`](src/Makefile).
For more information about nauty, please visit:
http://users.cecs.anu.edu.au/~bdm/nauty
# Final notes
The core code for nibac is contained in [`src`](src).
Examples using nibac are contained in [`examples`](examples) and are not built by default.