Generator Standard (GeST)

This repository is an effort to standardize the interface of the generators in optimization libraries such as:

The objective of this effort is for these different libraries to be able to use each other’s generators with little effort.

Examples:

Using libEnsemble generators in Optimas: APOSMM NLopt - IBCDFO

Using Xopt generators in Optimas: Multiple Examples

Using Xopt generators in libEnsemble: ExpectedImprovement - (with Xopt-style sim)

Using Optimas generators in libEnsemble: Multi-Fidelity Ax Generator

Using libEnsemble generators in Xopt: APOSMM Generator

Definitions

  • Generator:

    A generator is an object that recommends points to be evaluated in an optimization. It can also receive data (evaluations from past or ongoing optimization), which helps it make more informed recommendations.

    Note: The generator does not orchestrate the overall optimization (e.g. dispatch evaluations, etc.). As such, it is distinct from libEnsemble’s gen_f function, and is not itself “workflow” software.

  • Variables, Objectives, Constraints (VOCS):

    A VOCS is an object that specifies the names and types of components of the optimization problem that will be used by the generator. Each generator will validate that it can handle the specified set of variables, objectives, constraints, etc.

Specification of the standard

In order to conform to the standard, a given optimization library (e.g. Xopt, optimas, libEnsemble) must define the classes documented below, and their corresponding methods:

This is best done by subclassing the abstract classes defined in the Python package gest-api, which can be installed with:

pip install gest-api