Package neqsim.process.util.optimizer
package neqsim.process.util.optimizer
Process optimization engine and constraint evaluation utilities.
This package provides a comprehensive framework for process optimization. For a detailed overview
of when to use which optimizer, see the documentation at
docs/process/optimization/OPTIMIZATION_OVERVIEW.md.
Two Main Optimizers - When to Use Which:
| Scenario | Use |
|---|---|
| Find max throughput at given pressures | ProcessOptimizationEngine |
| Find bottleneck equipment | ProcessOptimizationEngine |
| Generate Eclipse VFP tables | ProcessOptimizationEngine |
| Custom objective (e.g., minimize cost) | ProductionOptimizer |
| Multi-variable optimization | ProductionOptimizer |
| Pareto multi-objective | ProductionOptimizer |
| Model calibration to data | BatchParameterEstimator |
Core Classes:
ProcessOptimizationEngine- Unified API for throughput optimization with equipment constraint evaluation. Best for "find max flow at given pressures".ProductionOptimizer- General-purpose optimizer supporting custom objectives, multi-variable, and Pareto multi-objective optimization.ProcessConstraintEvaluator- Composite constraint evaluation with caching and sensitivity analysisProcessSimulationEvaluator- Interface for external optimizers (Python/SciPy integration)OptimizationResultBase- Unified result base class with status tracking, timing, and constraint violation detailsEclipseVFPExporter- Export VFP tables for Eclipse reservoir simulation
Key Features:
- Multiple Search Algorithms: Binary search, golden section, gradient descent, Armijo-Wolfe line search, BFGS, Nelder-Mead, and Particle Swarm
- Constraint Caching: TTL-based caching for repeated constraint evaluations
- Sensitivity Analysis: Calculate flow sensitivities and shadow prices
- Bottleneck Detection: Identify limiting equipment and constraints
- Multi-Objective Pareto: Generate Pareto fronts for conflicting objectives
- Parallel Evaluation: Evaluate scenarios in parallel
- FlowRateOptimizer Integration: Seamless integration with production optimizer
- Adjuster Integration: Coordinate optimization with existing Adjuster units
- Eclipse Export: Generate VFPPROD, VFPINJ, and VFPEXP tables
- Fluent API: Builder pattern for convenient configuration
Quick Start - ProcessOptimizationEngine (throughput-focused):
// Find maximum throughput at given pressures
ProcessOptimizationEngine engine = new ProcessOptimizationEngine(process);
engine.setSearchAlgorithm(SearchAlgorithm.GOLDEN_SECTION);
OptimizationResult result = engine.findMaximumThroughput(50.0, // inlet pressure (bara)
10.0, // outlet pressure (bara)
1000.0, // min flow
100000.0 // max flow
);
System.out.println("Max flow: " + result.getOptimalValue() + " kg/hr");
System.out.println("Bottleneck: " + result.getBottleneck());
Quick Start - ProductionOptimizer (general-purpose):
// Optimize with custom objective
ProductionOptimizer optimizer = new ProductionOptimizer();
OptimizationConfig config = new OptimizationConfig(50000.0, 200000.0).tolerance(100.0)
.searchMode(SearchMode.GOLDEN_SECTION_SCORE);
// Define objective (minimize compressor power)
List<OptimizationObjective> objectives = Arrays.asList(new OptimizationObjective("power",
proc -> ((Compressor) proc.getUnit("comp")).getPower("kW"), 1.0, ObjectiveType.MINIMIZE));
OptimizationResult result = optimizer.optimize(process, feed, config, objectives, null);
Pareto Multi-Objective Optimization:
// Trade off throughput vs power
List<OptimizationObjective> objectives = Arrays.asList(
new OptimizationObjective("throughput", proc -> proc.getUnit("outlet").getFlowRate("kg/hr"),
1.0, ObjectiveType.MAXIMIZE),
new OptimizationObjective("power",
proc -> ((Compressor) proc.getUnit("comp")).getPower("kW"), 1.0,
ObjectiveType.MINIMIZE));
OptimizationConfig config = new OptimizationConfig(50000.0, 200000.0).paretoGridSize(20);
ParetoResult pareto = optimizer.optimizePareto(process, feed, config, objectives);
for (ParetoPoint pt : pareto.getPoints()) {
System.out.println("Flow: " + pt.getObjectives().get("throughput") + ", Power: "
+ pt.getObjectives().get("power"));
}
Constraint Evaluation with Caching:
ProcessConstraintEvaluator evaluator = new ProcessConstraintEvaluator(process);
evaluator.setCacheTTLMillis(30000); // 30 second cache
// Evaluate constraints (uses cache if valid)
ProcessConstraintEvaluator.ConstraintEvaluationResult result = evaluator.evaluate();
System.out.println("Utilization: " + result.getOverallUtilization() * 100 + "%");
System.out.println("Bottleneck: " + result.getBottleneckEquipment());
// Calculate flow sensitivities
Map<String, Double> sensitivities = evaluator.calculateFlowSensitivities(5000.0, "kg/hr");
// Estimate max feasible flow
double maxFlow = evaluator.estimateMaxFlow(5000.0, "kg/hr");
- Version:
- 1.8
- Author:
- NeqSim Development Team
- See Also:
-
ClassDescriptionParallel parameter study for rapid concept screening.Results of a batch study.Builder for BatchStudy.Result of a single case.Optimization direction.Definition of an objective.A set of parameter values for one case.Definition of a parameter variation.Adapts equipment-level
CapacityConstraintinstances to the unifiedProcessConstraintinterface.Helper class for compressor-specific production optimization.Container for compressor operating bounds extracted from performance charts.Result of two-stage optimization containing final flow, splits, and per-train data.Reusable penalty calculator for constrained process optimization.Snapshot of a single constraint evaluation.Unified severity level for all constraint types in the optimization framework.Optimizer for finding optimal operating conditions during degraded operation.Operating mode options during degraded operation.Recovery action for the recovery plan.Recovery phase.Recovery plan for restoring normal operation.Result of degraded operation optimization.Eclipse VFP (Vertical Flow Performance) table exporter.VFP scenario configuration.Result of a flow rate optimization for pressure-constrained process simulation.Details of a constraint violation.Status of the optimization result.Optimizer for finding flow rate given inlet and outlet pressure constraints.Simple data class representing compressor operating state within a ProcessSystem.Contains equipment utilization data for reporting.Configuration class for professional lift curve generation.Result container for professional lift curve generation.Mode of operation for the optimizer.Represents a 2D capacity table showing maximum flow rates at different pressure boundary conditions.Process lift curve table for reservoir simulator integration.Represents a complete process operating point with all equipment data.Performance table for a process system at different flow rates.Callback interface for monitoring optimization progress.Reference fluid input from FluidMagic/Eclipse E300 for multi-scenario optimization.Builder class for FluidMagicInput.GOR spacing options for scenario generation.Generates lift curves (VLP tables) for reservoir simulator integration.Represents a lift curve table for reservoir simulator integration.Multi-objective optimizer for process systems.Result container for multi-objective optimization.Progress callback interface.Generates Eclipse VFP tables (VFPPROD/VFPEXP format) with GOR and water cut dimensions.Result of a single VFP point calculation.VFP table containing all calculated points.Task for calculating a single VFP point.Interface representing an optimization objective for multi-objective optimization.Direction of optimization.Base class for all optimization results in the NeqSim optimization framework.Represents a constraint violation.Status of the optimization run.Collection of Pareto-optimal solutions forming the Pareto front.Represents a single solution on the Pareto front.Builder for creating ParetoSolution instances.Optimizer for finding maximum flow rate given inlet and outlet pressure boundary conditions.Lift curve table containing maximum flow rates for pressure combinations.Unified constraint interface for process optimization.Composite constraint evaluator for process-wide constraint evaluation.Public cached constraints class for external use and testing.Internal cached constraint data for an equipment.Result of constraint evaluation.Summary of constraints for a single equipment.Unified process optimization engine.Constraint report for entire process.Constraint status for single equipment.Lift curve data container.Single point on a lift curve.Result of an optimization run.Search algorithm options.Sensitivity analysis result.Black-box evaluator for external optimization algorithms.Definition of a constraint for external optimizer integration.Constraint type.Result of a single evaluation.Definition of an objective function.Optimization direction.Definition of a decision variable (parameter) for optimization.Analyzer for assessing production impact of equipment failures.Result of a production impact analysis for equipment failure scenarios.Recommended operating mode after equipment failure.Loader for YAML/JSON optimization specification files.Constraint specification in the YAML/JSON file.Objective specification in the YAML/JSON file.Individual scenario configuration from YAML/JSON.Root element of the specification file.Variable specification for multi-variable optimization.Production optimization utility for process simulation models.Function to compute capacity duty/limit for a specific equipment.Range container to support percentile-based capacity evaluations.Pair of capacity duty/max providers.Direction of a constraint comparison.Severity classification for constraints.Outcome for a single constraint evaluation.Constraint template applied to each matching equipment.Metric to evaluate per-equipment constraints.Result of a single iteration.Snapshot of each iteration to support diagnostics and plotting.Definition of a manipulated decision variable for multi-variable optimization.Objective optimization direction.Builder-style configuration for the production optimizer.Constraint on a process-level metric such as total power, pressure, or temperature.Container for optimization objective configuration.Result container for a completed optimization attempt.Lightweight summary of an optimization run intended for quick-consumption APIs.A single point on the Pareto front representing a non-dominated solution.Result of a multi-objective Pareto optimization containing the Pareto front.Per-scenario KPI values and deltas versus the baseline scenario.Definition of a KPI to report alongside scenario comparisons.Scenario definition to enable side-by-side optimization comparisons.Optimization result paired with a scenario name to aid reporting/comparison.Supported search algorithms.Holds the utilization status for an equipment item.Series-friendly representation of utilization across iterations for plotting/reporting.Generates feed fluids at different GOR by recombining gas and oil phases.Standard optimization objectives commonly used in process optimization.