# Module `miplearn.components.composite`

Expand source code

    #  MIPLearn: Extensible Framework for Learning-Enhanced Mixed-Integer Optimization
    #  Copyright (C) 2020, UChicago Argonne, LLC. All rights reserved.
    #  Released under the modified BSD license. See COPYING.md for more details.

    from miplearn.components.component import Component

    class CompositeComponent(Component):
        """
        A Component which redirects each method call to one or more subcomponents.

        Useful for breaking down complex components into smaller classes. See
        RelaxationComponent for a concrete example.

        Parameters
        ----------
        children : list[Component]
            Subcomponents that compose this component.
        """

        def __init__(self, children):
            self.children = children

        def before_solve(self, solver, instance, model):
            for child in self.children:
                child.before_solve(solver, instance, model)

        def after_solve(
            self,
            solver,
            instance,
            model,
            stats,
            training_data,
        ):
            for child in self.children:
                child.after_solve(solver, instance, model, stats, training_data)

        def fit(self, training_instances):
            for child in self.children:
                child.fit(training_instances)

        def lazy_cb(self, solver, instance, model):
            for child in self.children:
                child.lazy_cb(solver, instance, model)

        def iteration_cb(self, solver, instance, model):
            should_repeat = False
            for child in self.children:
                if child.iteration_cb(solver, instance, model):
                    should_repeat = True
            return should_repeat

## Classes

`class CompositeComponent (children)`

  A Component which redirects each method call to one or more subcomponents.

  Useful for breaking down complex components into smaller classes. See RelaxationComponent for a concrete example.

  ## Parameters

  `children` :`list`[`Component`]
    Subcomponents that compose this component.
  Expand source code

      class CompositeComponent(Component):
          """
          A Component which redirects each method call to one or more subcomponents.

          Useful for breaking down complex components into smaller classes. See
          RelaxationComponent for a concrete example.

          Parameters
          ----------
          children : list[Component]
              Subcomponents that compose this component.
          """

          def __init__(self, children):
              self.children = children

          def before_solve(self, solver, instance, model):
              for child in self.children:
                  child.before_solve(solver, instance, model)

          def after_solve(
              self,
              solver,
              instance,
              model,
              stats,
              training_data,
          ):
              for child in self.children:
                  child.after_solve(solver, instance, model, stats, training_data)

          def fit(self, training_instances):
              for child in self.children:
                  child.fit(training_instances)

          def lazy_cb(self, solver, instance, model):
              for child in self.children:
                  child.lazy_cb(solver, instance, model)

          def iteration_cb(self, solver, instance, model):
              should_repeat = False
              for child in self.children:
                  if child.iteration_cb(solver, instance, model):
                      should_repeat = True
              return should_repeat

  ### Ancestors

  - Component
  - abc.ABC

  ### Methods

  `def fit(self, training_instances)`
    Expand source code

        def fit(self, training_instances):
            for child in self.children:
                child.fit(training_instances)

  `def lazy_cb(self, solver, instance, model)`
    Expand source code

        def lazy_cb(self, solver, instance, model):
            for child in self.children:
                child.lazy_cb(solver, instance, model)

  ### Inherited members

  - `Component`:
    - `after_solve`
    - `before_solve`
    - `iteration_cb`