← Back to coordinationmethod
ALC¶
Source: Distributed_Design_Optimizer/coordination/coordinationmethod/ALC.py
Augmented Lagrangian Coordination (ALC) method module.
This module implements the standard Augmented Lagrangian Coordination method for distributed multidisciplinary design optimization.
Classes¶
ALC¶
Inherits from: CoordinationMethodBasis
Augmented Lagrangian Coordination (ALC) method implementation.
This coordination method uses augmented Lagrangian relaxation to coordinate subsystems in a distributed optimization problem. It manages penalty weights and Lagrangian multipliers to enforce consistency between coupled subsystems.
Methods¶
init(self, convergence_indicator_innerloop: ConvergenceIndicator_Innerloop_Interface, convergence_indicator_outerloop: ConvergenceIndicator_Outerloop_Interface, updatecouplingparametermethod_outerloop: UpdateCouplingParameterMethodInterface, iterationscheme: IterationSchemeInterface) → None
📐 Pseudocode: Require hyperparameters γ, β and initial coupling parameters (Lines 1, 2, 3) → Augmented Lagrangian Coordination
Initialize the ALC coordination method.
Args:
convergence_indicator_innerloop: Convergence indicator for inner loop.
convergence_indicator_outerloop: Convergence indicator for outer loop.
updatecouplingparametermethod_outerloop: Method for updating coupling parameters in outer loop.
iterationscheme: Iteration scheme for inner loop execution.
validate_inputs(self) → None
📐 Pseudocode: Require hyperparameters γ, β and initial coupling parameters (Lines 1, 2, 3) → Augmented Lagrangian Coordination
Validate the inputs provided to the ALC coordination method.
Validates that the iteration scheme is compatible with ALC. The outer-loop update coupling parameter method and the convergence indicators are validated by the subsystems they are handed to (see LocalSubSystemALC.validate_inputs).
Raises:
ValueError: If any parameter is outside the allowed range.
createSubSystems(self, id_list: List[str], level_list: List[int], neighborid_list: List[List[str]], analysis_list: List[AnalysisInterface], localobjective_list: List[LocalObjectiveInterface], localconstraints_list: List[LocalConstraintsInterface], optimization_list: List[OptimizationInterface]) → List[LocalSubSystemALC]
Create subsystems for augmented Lagrangian coordination.
Args:
id_list: List of unique identifiers for each subsystem.
level_list: List of hierarchy levels for each subsystem.
neighborid_list: List of neighbor subsystem IDs for each subsystem.
analysis_list: List of analysis objects for each subsystem.
localobjective_list: List of local objective functions for each subsystem.
localconstraints_list: List of local constraints for each subsystem.
optimization_list: List of optimization objects for each subsystem.
Returns:
List of initialized LocalSubSystemALC objects.
createControllerSubSystem(self, subsystemsIn: List[LocalSubSystemALC]) → SubSystemInterface | None
Create a controller subsystem for coordinating local subsystems.
Args:
subsystemsIn: List of local subsystems to be coordinated.
Returns:
None, as ALC operates without a central controller.
createMiddleLevel(self, idparent: str, idchild: str, multiprocessing_lock: object) → MiddleLevelDataStorageALC
Create a middle level data storage for coupling between subsystems.
Args:
idparent: Identifier of the parent subsystem.
idchild: Identifier of the child subsystem.
multiprocessing_lock: Optional lock for thread-safe access in multiprocessing.
Returns:
MiddleLevelDataStorage instance for managing coupling data.
createControllerMiddleLevel(self, idparent: str, idchild: str, local_neighbors_list: List[str], multiprocessing_lock: object) → MiddleLevelDataStorageALC | None
Create middle level between controller and local subsystem.
Args:
idparent: Identifier of the parent (controller) subsystem.
idchild: Identifier of the child subsystem.
local_neighbors_list: List of neighbor IDs for the local subsystem (unused).
multiprocessing_lock: Optional lock for thread-safe access in multiprocessing.
Returns:
None, as ALC operates without a central controller.
centralized_prepare_updateCouplingParameters(self, subsystemsIn: List[LocalSubSystemALC]) → None
Prepare centralized update of coupling parameters for all subsystems.
For ALC, no centralized operation is required.
Args:
subsystemsIn: List of subsystems to prepare coupling parameters for.
print_beginning_of_centralized_prepare_updateCouplingParameters(self) → None
Nothing to print.