1. James Cussens
  2. gobnilp



GOBNILP is a C program which uses SCIP ( http://scip.zib.de/ ) to learn Bayesian network structure from complete discrete data (or precomputed local scores). The version of GOBNILP that exists in this git repo only works with SCIP 4.0.0.

Let us suppose you have installed SCIP in the directory ~/local/src/scipoptsuite-4.0.0/scip-4.0.0. Then to install the latest (unstable!) GOBNILP from this repo just do:

git clone https://bitbucket.org/jamescussens/gobnilp.git
cd gobnilp/
./configure.sh ~/local/src/scipoptsuite-4.0.0/scip-4.0.0

The 'configure.sh' script mentioned just above copies (and alters) files from SCIP which cannot be included in this repo for licensing reasons. If you have CPLEX installed (and accessible to SCIP) be sure to do 'make LPS=cpx' instead of plain 'make' since this will lead to considerably faster solving.

For full details on GOBNILP (including installation instructions for the stable release), please consult the GOBNILP page:


and in particular the manual:


If you wish to extend GOBNILP in some way it is best to exploit SCIP's modular architecture to do so. For example,

  1. To allow the user to add a new sort of constraint to GOBNILP you should add a new "constraint handler" to GOBNILP. See e.g. cons_dagcluster.c in the source, this implements the key acyclicity constraint. Also see cons_ci.c which implements user-defined conditional independence constraints. For general details on constraint handlers in SCIP, see: http://scip.zib.de/doc/html/CONS.php

  2. To add a new heuristic algorithm (to generate better incumbent solutions ) you should add a "primal heuristic". GOBNILP currently has only one of these: heur_sinks.c. For general info on primal heuristics in SCIP see http://scip.zib.de/doc/html/HEUR.php


  1. Samuel Vozza has written code to allow GOBNILP to learn Gaussian networks, but this has yet to be merged into the master branch.
  2. Scott MacGregor is currently working on an R package for GOBNILP.


Here are some things which are missing from GOBNILP but which could be added:

  1. Adding a pricer so that "family variables" are created only if they loosen ( ie increase ) the dual bound, rather than all at once at the beginning of solving.