Skip to content
Sequential and distributed AND/OR Branch and Bound for MPE (max-product) problems over graphical models like Bayes and Markov networks.
C++ C Objective-C
Find file

DAOOPT: Distributed AND/OR Optimization

An implementation of sequential as well as distributed AND/OR Branch-and-Bound and its Breadth-Rotating AND/OR Branch-and-Bound enhancement for combinatorial optimization problems expressed as MPE (max-product) queries over graphical models like Bayes and Markov networks.

Also implements the following:

  • full context-based caching.
  • mini-buckets for heuristic generation.
  • minfill heuristic to find variable orderings.
  • limited discrepancy search to quickly find initial solution.
  • stochastic local search to quickly find initial solution (via GLS+ code by Frank Hutter).

See references at the bottom for details and algorithm analysis.

By Lars Otten, University of California, Irvine. Main AOBB source code under GPL, included libraries vary -- see LICENSE.txt for details


A recent set of Boost library headers is required to compile the solver (confirmed to work is version 1.53.0), either in the system-wide include path or copied/symlinked into ./lib/boost locally. In addition, all solver variants need the Boost program_options library for linking; the dynamic parallel master also needs the Boost thread and system library.


The easiest and most universal way of compilation is provided through the included CMake files. Create a build subfolder and from within it run cmake ... Afterwards make all starts compilation, while make edit_cache allows to choose between release and debug compiler flags, toggle static linking, and select one of the solver variants (see references below); the default choice is the release-optimized, dynamically linked, sequential solver.

Included makefiles

Alternatively, makefiles for the different solver variants are provided directly in the following folders:

  • Worker -- Purely sequential AOBB solver.
  • Static -- Static master mode (also needs worker binaries).
  • Dynamic -- Dynamic master mode (also needs worker binaries).

In addition, the following two Makefiles are provided

  • Debug -- Compiles any of the above (through preprocessor defines) with debug flags.
  • Windows -- Windows executable of the sequential solver using MinGW compiler (not tested in a while and almost certainly broken).

By default, the ccache compiler cache is used by the makefiles. To disable it, simply run the supplied script from within the respective build folder.

Some features (such as computing the optimal tuple vs. only its cost) can be turned on/off by setting the respective preprocessor defines in include/DEFINES.h.


To see the list of command line parameters, run the solver with the --help argument. Problem input should be in UAI format, a simple text-based format to specify graphical model problems. Gzipped input is supported.

Sequential execution

Simply compile the Worker variant and run it on your problem, no further setup needed.

Distributed execution

DAOOPT assumes the Condor grid environment, the machine that the master executable runs on needs to be able to submit jobs. The file daoopt-template.condor from the working directory will be the basis for the parallel subproblem submissions, it can be used to customize Condor options. The sequential solver will be used for the parallel subproblems, so you will also need to compile that first (probably statically linked) for the appropriate architecture: rename the sequential solver to daoopt.INTEL for 32 bit Linux hosts and/or daoopt.X86_64 for 64 bit Linux hosts; placed in the working directory these will be used automatically.

Background / References

AND/OR Branch-and-Bound

AND/OR Branch-and-Bound (AOBB) is a search framework developed in Rina Dechter's research group at UC Irvine, most recently enhanced through Breadth-Rotating AND/OR Branch-and-Bound (BRAOBB). Relevant publications:

  • Rina Dechter and Robert Mateescu. "AND/OR Search Spaces for Graphical Models". In Artificial Intelligence, Volume 171 (2-3), pages 73-106, 2006.
  • Radu Marinescu and Rina Dechter. "AND/OR Branch-and-Bound Search for Combinatorial Optimization in Graphical Models." In Artificial Intelligence, Volume 173 (16-17), pages 1457-1491, 2009.
  • Radu Marinescu and Rina Dechter. "Memory Intensive AND/OR Search for Combinatorial Optimization in Graphical Models." In Artificial Intelligence, Volume 173 (16-17), pages 1492-1524, 2009.
  • Lars Otten and Rina Dechter. "Anytime AND/OR Depth-first Search for Combinatorial Optimization." In AI Communications, Volume 25 (3), pages 211-227, 2012.

Distributed AND/OR Branch-and-Bound

A recent expansion of the AOBB framework to allow using the parallel resources of a computational grid; it is still the focus of ongoing research. Some relevant publications:

  • Lars Otten and Rina Dechter. "Towards Parallel Search for Optimization in Graphical Models". In Proceedings of ISAIM'10, Fort Lauderdale, FL, USA, January 2010.
  • Lars Otten and Rina Dechter. "Load Balancing for Parallel Branch and Bound". In SofT'10 Workshop and CRAGS'10 Workshop, at CP'10, St. Andrews, Scotland, September 2010.
  • Lars Otten and Rina Dechter. "Learning Subproblem Complexities in Distributed Branch and Bound". In DISCML'11 Workshop, at NIPS'11, Granada, Spain, December 2011.
  • Lars Otten and Rina Dechter. "A Case Study in Complexity Estimation: Towards Parallel Branch-and-Bound over Graphical Models." In Proceedings of UAI'12, Catalina Island, CA, U.S.A, August 2012.


This work has been partially supported by NIH grant 5R01HG004175-03 and NSF grants IIS-0713118 and IIS-1065618.


This code was written for research purposes and does therefore not strictly adhere to established coding practices and guidelines. View and use at your own risk! ;-)

Something went wrong with that request. Please try again.