Class ProductionOptimizer
java.lang.Object
neqsim.process.util.optimization.ProductionOptimizer
Utility class for production optimization based on capacity utilization and configurable
constraints. The optimizer currently targets a single decision variable (feed flow) but keeps a
structured record of objectives, constraint margins, and utilization limits so that more advanced
workflows (multi-objective scoring, probabilistic margins, reporting) can be built on top.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static interfaceFunction to compute capacity duty/limit for a specific equipment.(package private) static final classRange container to support percentile-based capacity evaluations.(package private) static final classPair of capacity duty/max providers.static enumDirection of a constraint comparison.static enumSeverity classification for constraints.static final classOutcome for a single constraint evaluation.(package private) static final classConstraint template applied to each matching equipment.(package private) static interfaceMetric to evaluate per-equipment constraints.private static final classResult of a single iteration.static final classSnapshot of each iteration to support diagnostics and plotting.static final classDefinition of a manipulated decision variable.static enumObjective optimization direction.static final classBuilder-style configuration for the optimizer.static final classSimple container for constraint configuration.static final classSimple container for objective configuration.static final classResult container for a completed optimization attempt.static final classLightweight summary of an optimization run intended for quick-consumption APIs.static final classPer-scenario KPI values and deltas versus the baseline scenario.static final classDefinition of a KPI to report alongside scenario comparisons.static final classScenario definition to enable side-by-side optimization comparisons.static final classOptimization result paired with a scenario name to aid reporting/comparison.static enumSupported search algorithms.static final classHolds the utilization status for an equipment item.static final classSeries-friendly representation of utilization across iterations for plotting/reporting. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final doubleDefault maximum utilization used when no specific equipment rule is provided. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbinaryFeasibilitySearch(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) binaryFeasibilitySearch(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) buildUtilizationSeries(List<ProductionOptimizer.IterationRecord> iterationHistory) Build utilization series for each equipment across the provided iteration history to facilitate charting or CSV export.private StringbuildVectorCacheKey(double[] candidate, ProductionOptimizer.OptimizationConfig config) compareScenarios(List<ProductionOptimizer.ScenarioRequest> scenarios, List<ProductionOptimizer.ScenarioKpi> kpis) Optimize multiple scenarios and compute KPI deltas versus the baseline (first) scenario.private double[]computeCentroid(double[][] simplex, int count) private double[]contract(double[] centroid, double[] point, double factor) determineCapacityRange(ProcessEquipmentInterface unit, ProductionOptimizer.OptimizationConfig config) private ProductionOptimizer.CapacityRuledetermineCapacityRule(ProcessEquipmentInterface unit, ProductionOptimizer.OptimizationConfig config) private doubledetermineUtilizationLimit(ProcessEquipmentInterface unit, ProductionOptimizer.OptimizationConfig config) private ProductionOptimizer.EvaluationevaluateCandidate(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, double[] candidate, Map<String, ProductionOptimizer.Evaluation> cache) private ProductionOptimizer.EvaluationevaluateCandidate(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, double candidateRate, Map<Long, ProductionOptimizer.Evaluation> cache) private ProductionOptimizer.EvaluationevaluateCandidateInternal(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, double[] candidate) private ProductionOptimizer.EvaluationevaluateCandidateInternal(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, double candidateRate) private ProductionOptimizer.EvaluationevaluateProcess(ProcessSystem process, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, Map<String, Double> decisionVariables) private doublefeasibilityScore(ProductionOptimizer.Evaluation evaluation) static StringformatScenarioComparisonTable(ProductionOptimizer.ScenarioComparisonResult comparison, List<ProductionOptimizer.ScenarioKpi> kpis) Render scenario KPIs and bottleneck information side-by-side.static StringRender a compact Markdown table describing utilization per unit.static StringformatUtilizationTimeline(List<ProductionOptimizer.IterationRecord> iterationHistory) Render a compact Markdown timeline showing bottlenecks across iterations.goldenSectionSearch(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) goldenSectionSearch(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) nelderMeadSearch(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) nelderMeadSearch(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) optimize(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints) Optimize multiple manipulated variables (feeds, pressures, temperatures) using multi-dimensional search strategies.optimize(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints) Optimize the feed stream rate of a process to respect utilization limits and constraints.optimizeScenarios(List<ProductionOptimizer.ScenarioRequest> scenarios) Optimize a collection of named scenarios and return results for side-by-side comparison.optimizeThroughput(ProcessSystem process, StreamInterface feedStream, double lowerBound, double upperBound, String rateUnit, List<ProductionOptimizer.OptimizationConstraint> additionalConstraints) Convenience wrapper to maximize throughput with optional constraints and custom search config.particleSwarmSearch(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) particleSwarmSearch(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) quickOptimize(ProcessSystem process, StreamInterface feedStream) Convenience wrapper that derives reasonable bounds from the current feed rate and returns a concise summary (max rate, limiting equipment, utilization margin).quickOptimize(ProcessSystem process, StreamInterface feedStream, String rateUnit, List<ProductionOptimizer.OptimizationConstraint> constraints) Convenience wrapper that derives reasonable bounds from the current feed rate and returns a concise summary (max rate, limiting equipment, utilization margin).private voidrecordIteration(List<ProductionOptimizer.IterationRecord> iterationHistory, double candidate, String rateUnit, ProductionOptimizer.Evaluation evaluation, boolean feasible) private double[]reflect(double[] centroid, double[] point, double factor) private voidshrink(double[][] simplex, List<ProductionOptimizer.ManipulatedVariable> variables) private voidsortSimplexByScore(double[][] simplex, ProductionOptimizer.Evaluation[] evaluations) toResult(double rate, String unit, int iteration, ProductionOptimizer.Evaluation evaluation, List<ProductionOptimizer.IterationRecord> iterationHistory)
-
Field Details
-
DEFAULT_UTILIZATION_LIMIT
public static final double DEFAULT_UTILIZATION_LIMITDefault maximum utilization used when no specific equipment rule is provided.- See Also:
-
-
Constructor Details
-
ProductionOptimizer
public ProductionOptimizer()
-
-
Method Details
-
optimize
public ProductionOptimizer.OptimizationResult optimize(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints) Optimize the feed stream rate of a process to respect utilization limits and constraints.- Parameters:
process- the process model to evaluatefeedStream- the feed stream whose flow rate will be adjustedconfig- optimizer configurationobjectives- list of objectives (optional) to compute a weighted score for reportingconstraints- list of constraints with optional penalties- Returns:
- optimization result
-
optimize
public ProductionOptimizer.OptimizationResult optimize(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints) Optimize multiple manipulated variables (feeds, pressures, temperatures) using multi-dimensional search strategies. -
optimizeScenarios
public List<ProductionOptimizer.ScenarioResult> optimizeScenarios(List<ProductionOptimizer.ScenarioRequest> scenarios) Optimize a collection of named scenarios and return results for side-by-side comparison.- Parameters:
scenarios- scenarios containing process, feed, config, objectives, and constraints- Returns:
- list of scenario results in the same order as provided
-
compareScenarios
public ProductionOptimizer.ScenarioComparisonResult compareScenarios(List<ProductionOptimizer.ScenarioRequest> scenarios, List<ProductionOptimizer.ScenarioKpi> kpis) Optimize multiple scenarios and compute KPI deltas versus the baseline (first) scenario.- Parameters:
scenarios- list of scenarios to optimize; first entry is treated as baselinekpis- KPIs to compute per scenario (optional)- Returns:
- comparison result with KPI deltas and raw results
-
optimizeThroughput
public ProductionOptimizer.OptimizationResult optimizeThroughput(ProcessSystem process, StreamInterface feedStream, double lowerBound, double upperBound, String rateUnit, List<ProductionOptimizer.OptimizationConstraint> additionalConstraints) Convenience wrapper to maximize throughput with optional constraints and custom search config.- Parameters:
process- process system to runfeedStream- feed stream that will be adjustedlowerBound- lower bound on the manipulated feed rateupperBound- upper bound on the manipulated feed raterateUnit- engineering unit for rateadditionalConstraints- optional hard/soft constraints- Returns:
- optimization result with utilization and constraint history
-
formatUtilizationTable
Render a compact Markdown table describing utilization per unit. -
formatScenarioComparisonTable
public static String formatScenarioComparisonTable(ProductionOptimizer.ScenarioComparisonResult comparison, List<ProductionOptimizer.ScenarioKpi> kpis) Render scenario KPIs and bottleneck information side-by-side. -
buildUtilizationSeries
public static List<ProductionOptimizer.UtilizationSeries> buildUtilizationSeries(List<ProductionOptimizer.IterationRecord> iterationHistory) Build utilization series for each equipment across the provided iteration history to facilitate charting or CSV export. -
formatUtilizationTimeline
public static String formatUtilizationTimeline(List<ProductionOptimizer.IterationRecord> iterationHistory) Render a compact Markdown timeline showing bottlenecks across iterations. -
toResult
private ProductionOptimizer.OptimizationResult toResult(double rate, String unit, int iteration, ProductionOptimizer.Evaluation evaluation, List<ProductionOptimizer.IterationRecord> iterationHistory) -
quickOptimize
public ProductionOptimizer.OptimizationSummary quickOptimize(ProcessSystem process, StreamInterface feedStream) Convenience wrapper that derives reasonable bounds from the current feed rate and returns a concise summary (max rate, limiting equipment, utilization margin). -
quickOptimize
public ProductionOptimizer.OptimizationSummary quickOptimize(ProcessSystem process, StreamInterface feedStream, String rateUnit, List<ProductionOptimizer.OptimizationConstraint> constraints) Convenience wrapper that derives reasonable bounds from the current feed rate and returns a concise summary (max rate, limiting equipment, utilization margin). -
evaluateProcess
private ProductionOptimizer.Evaluation evaluateProcess(ProcessSystem process, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, Map<String, Double> decisionVariables) -
binaryFeasibilitySearch
private ProductionOptimizer.OptimizationResult binaryFeasibilitySearch(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) -
binaryFeasibilitySearch
private ProductionOptimizer.OptimizationResult binaryFeasibilitySearch(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) -
goldenSectionSearch
private ProductionOptimizer.OptimizationResult goldenSectionSearch(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) -
goldenSectionSearch
private ProductionOptimizer.OptimizationResult goldenSectionSearch(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) -
nelderMeadSearch
private ProductionOptimizer.OptimizationResult nelderMeadSearch(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) -
nelderMeadSearch
private ProductionOptimizer.OptimizationResult nelderMeadSearch(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) -
particleSwarmSearch
private ProductionOptimizer.OptimizationResult particleSwarmSearch(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) -
particleSwarmSearch
private ProductionOptimizer.OptimizationResult particleSwarmSearch(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, List<ProductionOptimizer.IterationRecord> iterationHistory) -
sortSimplexByScore
-
computeCentroid
private double[] computeCentroid(double[][] simplex, int count) -
reflect
private double[] reflect(double[] centroid, double[] point, double factor) -
contract
private double[] contract(double[] centroid, double[] point, double factor) -
shrink
-
evaluateCandidate
private ProductionOptimizer.Evaluation evaluateCandidate(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, double candidateRate, Map<Long, ProductionOptimizer.Evaluation> cache) -
evaluateCandidate
private ProductionOptimizer.Evaluation evaluateCandidate(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, double[] candidate, Map<String, ProductionOptimizer.Evaluation> cache) -
evaluateCandidateInternal
private ProductionOptimizer.Evaluation evaluateCandidateInternal(ProcessSystem process, StreamInterface feedStream, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, double candidateRate) -
evaluateCandidateInternal
private ProductionOptimizer.Evaluation evaluateCandidateInternal(ProcessSystem process, List<ProductionOptimizer.ManipulatedVariable> variables, ProductionOptimizer.OptimizationConfig config, List<ProductionOptimizer.OptimizationObjective> objectives, List<ProductionOptimizer.OptimizationConstraint> constraints, double[] candidate) -
buildVectorCacheKey
private String buildVectorCacheKey(double[] candidate, ProductionOptimizer.OptimizationConfig config) -
recordIteration
private void recordIteration(List<ProductionOptimizer.IterationRecord> iterationHistory, double candidate, String rateUnit, ProductionOptimizer.Evaluation evaluation, boolean feasible) -
feasibilityScore
-
determineUtilizationLimit
private double determineUtilizationLimit(ProcessEquipmentInterface unit, ProductionOptimizer.OptimizationConfig config) -
determineCapacityRule
private ProductionOptimizer.CapacityRule determineCapacityRule(ProcessEquipmentInterface unit, ProductionOptimizer.OptimizationConfig config) -
determineCapacityRange
private ProductionOptimizer.CapacityRange determineCapacityRange(ProcessEquipmentInterface unit, ProductionOptimizer.OptimizationConfig config)
-