Source code for pyomo.contrib.piecewise.transform.piecewise_to_mip_visitor

#  ___________________________________________________________________________
#
#  Pyomo: Python Optimization Modeling Objects
#  Copyright (c) 2008-2024
#  National Technology and Engineering Solutions of Sandia, LLC
#  Under the terms of Contract DE-NA0003525 with National Technology and
#  Engineering Solutions of Sandia, LLC, the U.S. Government retains certain
#  rights in this software.
#  This software is distributed under the 3-clause BSD License.
#  ___________________________________________________________________________

from pyomo.contrib.piecewise.piecewise_linear_expression import (
    PiecewiseLinearExpression,
)
from pyomo.core import Expression
from pyomo.core.expr.visitor import StreamBasedExpressionVisitor


[docs] class PiecewiseLinearToMIP(StreamBasedExpressionVisitor): """ Expression walker to replace PiecewiseLinearExpressions when creating equivalent MIP formulations. Args: transform_pw_linear_expression (function): a callback that accepts a PiecewiseLinearExpression, its parent PiecewiseLinearFunction, and a transformation Block. It is expected to convert the PiecewiseLinearExpression to MIP form, and return the Var (or other expression) that will replace it in the expression. transBlock (Block): transformation Block to pass to the above callback """
[docs] def __init__(self, transform_pw_linear_expression, transBlock): self.transform_pw_linear_expression = transform_pw_linear_expression self.transBlock = transBlock self._process_node = self._process_node_bx
def initializeWalker(self, expr): expr, src, src_idx = expr # always walk return True, expr def beforeChild(self, node, child, child_idx): return True, None def exitNode(self, node, data): if node.__class__ is PiecewiseLinearExpression: parent = node.pw_linear_function substitute_var = self.transform_pw_linear_expression( node, parent, self.transBlock ) parent._expressions[parent._expression_ids[node]] = substitute_var return node finalizeResult = None