OMLT Block

The omlt.block module contains the implementation of the OmltBlock class. This class is used in combination with a formulation object to construct the necessary constraints and variables to represent ML models.

Example

import tensorflow.keras as keras
from omlt import OmltBlock
from omlt.neuralnet import FullSpaceNNFormulation
from omlt.io import load_keras_sequential

nn = keras.models.load_model(keras_fname)
net = load_keras_sequential(nn)

m = pyo.ConcreteModel()
m.neural_net_block = OmltBlock()
m.neural_net_block.build_formulation(FullSpaceNNFormulation(net))

m.obj = pyo.Objective(expr=(m.neural_net_block.outputs[2]-4.0)**2)
status = pyo.SolverFactory('ipopt').solve(m, tee=True)
pyo.assert_optimal_termination(status)
class omlt.block.OmltBlock(*args, **kwds)

Bases: CustomBlock

Note

OmltBlock is the name used to declare the custom Pyomo block which is exposed to the user. The block functionality is given by OmltBlockData which inherits from Pyomo _BlockData.

class omlt.block.OmltBlockData(component)[source]

Bases: _BlockData

_setup_inputs_outputs(*, input_indexes, output_indexes)[source]

This function should be called by the derived class to create the inputs and outputs on the block

Parameters:
  • input_indexes – list list of indexes (can be tuples) defining the set to be used for the input variables

  • output_indexes – list list of indexes (can be tuples) defining the set to be used for the input variables

build_formulation(formulation)[source]

Call this method to construct the constraints (and possibly intermediate variables) necessary for the particular neural network formulation. The formulation object can be accessed later through the “formulation” attribute.

Parameters:

formulation (instance of _PyomoFormulation) – see, for example, FullSpaceNNFormulation