← Back to coordinationmethod
PC¶
Source: Distributed_Design_Optimizer/coordination/coordinationmethod/PC.py
Penalty Coordination (PC) method module.
This module implements the Penalty Coordination method for distributed multidisciplinary design optimization.
Classes¶
PC¶
Inherits from: CoordinationMethodBasis
Penalty Coordination (PC) method implementation.
This coordination method uses penalty relaxation to coordinate subsystems in a distributed optimization problem. It manages penalty weights 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
Initialize the PC coordination method.
Args:
convergence_indicator_innerloop: Convergence indicator for inner loop (e.g., ConvergenceIndicator_Innerloop_DeWit).
convergence_indicator_outerloop: Convergence indicator for outer loop (e.g., ConvergenceIndicator_Outerloop_DeWit).
updatecouplingparametermethod_outerloop: Method for updating coupling parameters in outer loop.
iterationscheme: Iteration scheme for inner loop execution.
validate_inputs(self) → None
Validate the inputs provided to the PC coordination method.
Validates that the iteration scheme is compatible with PC. Validation of the update coupling parameter method and convergence indicators is delegated to LocalSubSystemPC.validate_inputs, since those components are handed to the subsystems.
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[LocalSubSystemPC]
Create subsystems for penalty 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 LocalSubSystemPC objects.
createControllerSubSystem(self, subsystemsIn: List[LocalSubSystemPC]) → SubSystemInterface | None
Create a controller subsystem for coordinating local subsystems.
Args:
subsystemsIn: List of local subsystems to be coordinated.
Returns:
None, as PC operates without a central controller.
createMiddleLevel(self, idparent: str, idchild: str, multiprocessing_lock: object) → MiddleLevelDataStoragePC
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) → MiddleLevelDataStoragePC | 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 PC operates without a central controller.
centralized_prepare_updateCouplingParameters(self, subsystemsIn: List[LocalSubSystemPC]) → None
Prepare centralized update of coupling parameters for all subsystems.
For PC, 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.