Source code for disropt.problems.constraint_coupled_problem

from .problem import Problem
from ..functions import AbstractFunction, AffineForm
from .milp import MixedIntegerLinearProblem


[docs]class ConstraintCoupledProblem(Problem): """A local part of a constraint-coupled problem. Args: objective_function (AbstractFunction, optional): Local objective function. Defaults to None. constraints (list, optional): Local constraints. Defaults to None. coupling_function (AbstractFunction, optional): Local function contributing to coupling constraints. Defaults to None. Attributes: objective_function (Function): Objective function to be minimized constraints (AbstractSet or Constraint): Local constraints coupling_function (Function): Local function contributing to coupling constraints """ coupling_function = None def __new__(cls, *args, **kwargs): instance = object.__new__(cls) return instance def __init__(self, objective_function: AbstractFunction = None, constraints: list = None, coupling_function: AbstractFunction = None, **kwargs): super().__init__(objective_function=objective_function, constraints=constraints, **kwargs) if coupling_function is not None: self.set_coupling_function(coupling_function)
[docs] def set_coupling_function(self, fn: AbstractFunction): """Set the coupling constraint function Args: fn: coupling constraint function Raises: TypeError: input must be a AbstractFunction """ if not isinstance(fn, AbstractFunction): raise TypeError("coupling function must be a AbstractFunction") self.coupling_function = fn
[docs]class ConstraintCoupledMILP(ConstraintCoupledProblem, MixedIntegerLinearProblem): def __init__(self, objective_function: AffineForm, coupling_function: AffineForm, constraints: list = None, integer_vars: list = None, binary_vars: list = None, **kwargs): """[summary] Args: objective_function (AffineForm): [description] coupling_function (AffineForm): Local function contributing to coupling constraints constraints (list, optional): [description]. Defaults to None. integer_vars (list, optional) binary_vars (list, optional) """ if not coupling_function.is_affine: raise TypeError("Coupling function must be affine") super().__init__(objective_function=objective_function, coupling_function=coupling_function, constraints=constraints, integer_vars=integer_vars, binary_vars=binary_vars)