This page is for general questions about using BAM and solutions to common error messages. For further technical support, please email info@minlp.com.
Getting Started
What is BAM?
BAM, short for Branch-And-Model, is a derivative-free global optimization solver for problems whose objective or constraints may be expensive, noisy, nonsmooth, nonconvex, discrete, or available only through a simulation, experiment, or other black-box evaluation.
When should I use BAM?
Use BAM when you need to optimize a function that is difficult or impossible to express in closed algebraic form, especially when evaluations come from a simulator, experiment, external process, or data-driven workflow. BAM is useful when derivative information is unavailable or unreliable.
What makes BAM different from other optimizers?
BAM combines global search, adaptive sampling, surrogate modeling, and local search. It builds models of the black-box function, uses those models to propose new evaluations, and continues refining the search from the results. BAM uses ALAMO for surrogate model construction and BARON to globally solve surrogate models when generating candidate points.
What platforms does BAM run on?
BAM is available for Windows, Linux, and macOS. Current downloads include Windows x86-64, Linux AMD/Intel, Linux ARM64, macOS Intel, and macOS Apple Silicon builds at BAM Downloads. For Python users, pre-built wheels are available for all these platforms. The PyPI package requires Python 3.10 or newer.
Can BAM use batch or parallel evaluations?
Yes. BAM supports batch evaluation. Users can ask BAM to return multiple candidate points at once, then evaluate them sequentially, in parallel, on a cluster, through multiple processes or threads, or through laboratory instruments. Batch evaluation is optional; single-point evaluation remains the default.
Problem Scope
What types of problems can BAM solve?
BAM can handle black-box optimization problems with continuous, integer, or categorical variables. It is intended for problems involving nonconvex, non smooth, discontinuous, noisy, simulation-based, experimental, or dat-driven objective functions.
Does BAM require derivatives?
No. BAM is derivative-free and uses function values only. Users do not need to provide gradients or Hessians.
Licensing
Do I need a license?
Not always. BAM can run in free mode for optimization problems with up to two variables. Problems with more than two variables require a license. See BAM Licenses for details.
What types of licenses are available?
BAM license options include commercial licenses, free academic licenses for research and educational use, and free licenses for U.S. Department of Energy researchers. The license page also describes one-month trial licenses for eligible users.
What is included with a license?
BAM licenses include full software access, cross-platform support, technical support, and access to new releases during the license term.
Usage Tips
How do I install BAM?
Python API
BAM is available as an official Python package on PyPI:
pip install bam-solver
The Python API integrates easily with SciPy-based workflows and requires no compiler or external toolchain.
Native C and Fortran APIs, and access through the CLI
BAM also provides dedicated dedicated APIs for C and Fortran for direct integration with compiled applications and other environments, including C++, Julia, and Rust. Please refer to the BAM User Manual for additional guidance, including CLI-based access.
What is the data provider?
The data provider is the user’s objective-function evaluator. Depending on the workflow, it may be a Python callback, a C or Fortran callback, an external simulator, a cluster job, a laboratory process, or an executable using file-based input/output.
CLI-based workflows may read variables from an input file and write objective values to an output file. API workflows can pass values directly through callbacks and do not require file-based simulator I/O.
Can BAM start from existing data?
Yes. BAM can use previously evaluated points and unevaluated starting points. This can reduce the number of new function evaluations needed and can warm-start the optimization.
Error Messages and Support
Why did BAM terminate early?
Check the screen output, listing file, trace file, or API status code. Common causes include licensing/free-mode limits, invalid input, an objective callback error, an invalid simulator response, user interruption, a requested callback termination, or reaching a function-evaluation, iteration, time, or no-improvement limit.
API users should prefer BAM’s runtime status and diagnostic functions instead of parsing listing files when possible. BAM’s APIs expose status codes and messages, function-evaluation counts, CPU time, license state, license path, and the free-mode variable limit.
Where can I get help?
For technical support, email info@minlp.com. For licensing, trial, or purchasing questions, email sales@minlp.com