Class DecompositionWorkflow

java.lang.Object
jline.opt.decomposition.DecompositionWorkflow

public class DecompositionWorkflow extends Object
Decomposes a joint optimization problem into per-variable-type subproblems solved via Gauss-Seidel cycling with fixed-value propagation. An internal topological sort (no external dependency) orders subproblems when explicit dependencies are set. Mirrors native-Python line_solver.opt.decomposition.DecompositionWorkflow.
  • Constructor Details

  • Method Details

    • getProblem

      public OptimizationProblem getProblem()
    • getSubProblems

      public List<SubProblem> getSubProblems()
    • setSolverOptions

      public DecompositionWorkflow setSolverOptions(LineOptSolverOptions options)
    • autoDecompose

      public DecompositionWorkflow autoDecompose()
    • setDependency

      public DecompositionWorkflow setDependency(String fromProblem, String toProblem)
    • addSubProblem

      public DecompositionWorkflow addSubProblem(String name, List<DecisionVariable> variables, List<String> after)
    • solveSequential

      public WorkflowResult solveSequential(int maxCycles, double tolerance)
    • solveHierarchical

      public WorkflowResult solveHierarchical()
    • solveLayered

      public WorkflowResult solveLayered()
      LQN layer-wise decomposition with default settings.
    • solveLayered

      public WorkflowResult solveLayered(int maxCycles, double tolerance, boolean autoFreeze, double freezeTol, List<String> frozenLayersSeed)
      Solve an LQN by layer, optionally freezing converged layers. Groups decision variables by the LQN layer they perturb (host or task layer) and cycles Gauss-Seidel over the layer groups, fixing every other layer's variables at their current values while one layer is optimized. This is the LQN analogue of solveSequential(int, double), but the subproblems are LAYERS.

      Freezing has two composable sources: frozenLayersSeed, an explicit set held fixed throughout; and autoFreeze, adaptive -- after each cycle a layer whose representative node metrics moved less than freezeTol (relative) is frozen and skipped, and unfrozen again if any still-active layer later moves by more than freezeTol.

      Convergence is on the full penalized objective delta between cycles, or when every layer is frozen. Falls back to solveSequential(int, double) for a flat network. The returned WorkflowResult carries the extra fields frozenLayers (final frozen set) and modelEvaluations (total LINE solves). Mirrors native-Python solveLayered.

      Parameters:
      maxCycles - maximum Gauss-Seidel cycles
      tolerance - objective-delta convergence tolerance
      autoFreeze - enable adaptive layer freezing
      freezeTol - relative-movement threshold for freezing a layer
      frozenLayersSeed - explicit layers held fixed throughout (may be null)
      Returns:
      the workflow result with LQN freezing diagnostics