OED Utility Functions (Optimality Criteria)#

An OED utility function is a function that quantifies the quality of an experimental design. In control, utility functions are associated with maximization problem. In Bayesian OED, one the other hand the term optimality criterion is used instead of a utility function and is associated with a minimization problem. Thus, we use the two terms “utility function” and “optimality criterion” interchangeably and assume the optimization problem is determined accordingly.

This module provides a continuously expanding collection of utility functions used in the OED sub-package. Should you decide that you want to pass your own custom utility function to the OED solver, you can do so by inheriting the abstract base class UtilityFunction class (in the utility functions part of the OED core). Further functionality may ought to be added as required.

We categorize the utility functions in this module into two categories, namely, Alphabetic Criteria and Information Criteria.

Note

The user can define a utility function by inheriting the base optimality criterion (base utility function) UtilityFunction from the OED core subpackage pyoed.oed.core.

Contents of this page:

OED Utility Functions based on the Alphabetic Criteria#

OED Utility Functions based on Information Content/Gain#

Lookup function (for easy access)#

A look up module pyoed.oed.utility_functions.lookup is available for users to employ for finding a utility function that matches a commonly used pattern. The most common use (which is expected is to call the lookup.find_criteria(pattern)()) where ‘pattern’ is a string that describes the criterion to be created. For example, to create a Bayesian A-Opt OED utility function:

pyoed.oed.utility_functions.lookup('Bayesian A-opt')

To create a Bayesian A-Opt OED utility function with design relaxation, one can use:

pyoed.oed.utility_functions.lookup('Relaxed Bayesian A-opt')

Utility Functions Base Classes (Core)#

This module implements base classes for all OED utility function (optimality criteria) in PyOED. The baseclass Criterion also aliased to Utility represent is the base class that need to be inherited by all specific OED optimality criteria.

In general, the term optimality criterion is often used in the context of minimization while the term utility function is associated with maximization. In PyOED, we use both terms utility functions and optimality criterion alternatively, to give the user flexibility.

class CriterionConfigs(*, debug=False, verbose=False, output_dir='./_PYOED_RESULTS_')[source]#

Bases: PyOEDConfigs

Configuration class for utility functions / optimality criteria. There are no default configurations at this stage.

Parameters:
  • verbose (bool) – a boolean flag to control verbosity of the object.

  • debug (bool) – a boolean flag that enables adding extra functionlity in a debug mode

  • output_dir (str | Path) – the base directory where the output files will be saved.

__init__(*, debug=False, verbose=False, output_dir='./_PYOED_RESULTS_')#
class Criterion(configs=None)[source]#

Bases: PyOEDObject

Base class for utility functions and optimality criteria used in OED.

Note

  • The term ‘utility function’ is associated with rewards and is thus used in the context of maximization. Examples include expected information gain, expected KL-divergence, Fisher content, etc.

  • Conversly, the term ‘optimality criterion’ is usually associated with a minimization problem. Examples include posterior uncertainty; e.g., posterior covariance trace (A-opt), and log-det (D-opt).

  • instances of ‘Utility’ or its alias OptimalityCriterion can be used for both maximization and minimization equally. One has to be only aware of the difference and how the utility/criterion is developed.

__init__(configs=None)[source]#
abstract evaluate(*args, **kwargs)[source]#

Evaluate the utility function / optimality criterion at the given point(s). Typically *args will just be \(\zeta\) (the design variable) and **kwargs will be empty. However, some utility functions may require additional, hence the abstract interface is left open.

UtilityConfigs#

alias of CriterionConfigs

Utility#

alias of Criterion