Class SensitivityAnalyzer
java.lang.Object
neqsim.process.fielddevelopment.economics.SensitivityAnalyzer
- All Implemented Interfaces:
Serializable
Sensitivity and uncertainty analysis for field development economics.
This class provides tools for analyzing the uncertainty in economic metrics (NPV, IRR, payback) through sensitivity analysis, scenario analysis, and Monte Carlo simulation.
Analysis Types
- Sensitivity Analysis: Varies one parameter at a time to understand individual impact (tornado diagrams)
- Scenario Analysis: Evaluates discrete scenarios (low, base, high cases)
- Monte Carlo Simulation: Probabilistic analysis with random sampling from distributions
Example Usage
// Set up base case engine
CashFlowEngine baseCase = new CashFlowEngine("NO");
baseCase.setCapex(800, 2025);
baseCase.setOilPrice(75.0);
// ... configure production, etc.
// Create analyzer
SensitivityAnalyzer analyzer = new SensitivityAnalyzer(baseCase, 0.08);
// Tornado analysis (±20% variation)
TornadoResult tornado = analyzer.tornadoAnalysis(0.20);
System.out.println(tornado.toMarkdownTable());
// Monte Carlo simulation
analyzer.setOilPriceDistribution(60.0, 90.0); // Uniform distribution
analyzer.setCapexDistribution(700, 900);
MonteCarloResult mc = analyzer.monteCarloAnalysis(1000);
System.out.println("NPV P10: " + mc.getNpvP10());
System.out.println("NPV P50: " + mc.getNpvP50());
System.out.println("NPV P90: " + mc.getNpvP90());
- Version:
- 1.0
- Author:
- ESOL
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classResult of breakeven analysis.static final classResult of Monte Carlo analysis.private static interfaceFunctional interface for setting parameters.static final classResult of scenario analysis.static final classSingle item in tornado analysis.static final classResult of tornado (sensitivity) analysis. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final CashFlowEngineBase case engine (used as template).private final doubleBase case NPV for comparison.private doubleprivate doubleprivate final doubleDiscount rate for NPV calculations.private doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate RandomRandom number generator for Monte Carlo.private static final long -
Constructor Summary
ConstructorsConstructorDescriptionSensitivityAnalyzer(CashFlowEngine baseCase, double discountRate) Creates a new sensitivity analyzer for the given base case. -
Method Summary
Modifier and TypeMethodDescriptionprivate SensitivityAnalyzer.TornadoItemanalyzeParameter(String name, double variationPercent, SensitivityAnalyzer.ParameterSetter setter) Analyzes a single parameter's sensitivity.Calculates breakeven prices for zero NPV.private CashFlowEngineCreates a clone of the base case engine.private voidprivate static doublemean(double[] values) monteCarloAnalysis(int iterations) Performs Monte Carlo simulation with the configured distributions.private static doublepercentile(double[] sortedValues, int percentile) scenarioAnalysis(double lowOilPrice, double highOilPrice, double lowGasPrice, double highGasPrice, double capexContingency) Performs three-scenario analysis (low, base, high).voidsetCapexDistribution(double minCapex, double maxCapex) Sets CAPEX distribution for Monte Carlo simulation.voidsetGasPriceDistribution(double minPrice, double maxPrice) Sets gas price distribution for Monte Carlo simulation.voidsetOilPriceDistribution(double minPrice, double maxPrice) Sets oil price distribution for Monte Carlo simulation.voidsetOpexFactorDistribution(double minFactor, double maxFactor) Sets OPEX factor distribution for Monte Carlo simulation.voidsetProductionFactorDistribution(double minFactor, double maxFactor) Sets production factor distribution for Monte Carlo simulation.voidsetRandomSeed(long seed) Sets the random seed for reproducible Monte Carlo results.private static doublestdDev(double[] values, double mean) tornadoAnalysis(double variationPercent) Performs tornado analysis by varying each parameter by the specified percentage.private doubleuniformRandom(double min, double max)
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
baseCase
Base case engine (used as template). -
discountRate
private final double discountRateDiscount rate for NPV calculations. -
baseCaseNpv
private final double baseCaseNpvBase case NPV for comparison. -
oilPriceMin
private double oilPriceMin -
oilPriceMax
private double oilPriceMax -
gasPriceMin
private double gasPriceMin -
gasPriceMax
private double gasPriceMax -
capexMin
private double capexMin -
capexMax
private double capexMax -
opexFactorMin
private double opexFactorMin -
opexFactorMax
private double opexFactorMax -
productionFactorMin
private double productionFactorMin -
productionFactorMax
private double productionFactorMax -
random
Random number generator for Monte Carlo.
-
-
Constructor Details
-
SensitivityAnalyzer
Creates a new sensitivity analyzer for the given base case.- Parameters:
baseCase- the configured cash flow engine representing the base casediscountRate- discount rate for NPV calculations
-
-
Method Details
-
initializeDefaultDistributions
private void initializeDefaultDistributions() -
tornadoAnalysis
Performs tornado analysis by varying each parameter by the specified percentage.Each parameter is varied independently while holding others constant. Results show the NPV impact of low and high cases for each parameter.
- Parameters:
variationPercent- variation as fraction (e.g., 0.20 for ±20%)- Returns:
- tornado analysis result
-
analyzeParameter
private SensitivityAnalyzer.TornadoItem analyzeParameter(String name, double variationPercent, SensitivityAnalyzer.ParameterSetter setter) Analyzes a single parameter's sensitivity.- Parameters:
name- parameter namevariationPercent- variation percentagesetter- parameter setter function- Returns:
- tornado item with low/high NPV values
-
scenarioAnalysis
public SensitivityAnalyzer.ScenarioResult scenarioAnalysis(double lowOilPrice, double highOilPrice, double lowGasPrice, double highGasPrice, double capexContingency) Performs three-scenario analysis (low, base, high).- Parameters:
lowOilPrice- low case oil pricehighOilPrice- high case oil pricelowGasPrice- low case gas pricehighGasPrice- high case gas pricecapexContingency- additional CAPEX for low case (e.g., 0.20 for 20% overrun)- Returns:
- scenario analysis result
-
setOilPriceDistribution
public void setOilPriceDistribution(double minPrice, double maxPrice) Sets oil price distribution for Monte Carlo simulation.- Parameters:
minPrice- minimum oil price (USD/bbl)maxPrice- maximum oil price (USD/bbl)
-
setGasPriceDistribution
public void setGasPriceDistribution(double minPrice, double maxPrice) Sets gas price distribution for Monte Carlo simulation.- Parameters:
minPrice- minimum gas price (USD/Sm3)maxPrice- maximum gas price (USD/Sm3)
-
setCapexDistribution
public void setCapexDistribution(double minCapex, double maxCapex) Sets CAPEX distribution for Monte Carlo simulation.- Parameters:
minCapex- minimum CAPEX (MUSD)maxCapex- maximum CAPEX (MUSD)
-
setOpexFactorDistribution
public void setOpexFactorDistribution(double minFactor, double maxFactor) Sets OPEX factor distribution for Monte Carlo simulation.- Parameters:
minFactor- minimum factor (e.g., 0.8 for -20%)maxFactor- maximum factor (e.g., 1.2 for +20%)
-
setProductionFactorDistribution
public void setProductionFactorDistribution(double minFactor, double maxFactor) Sets production factor distribution for Monte Carlo simulation.- Parameters:
minFactor- minimum factor (e.g., 0.8 for -20%)maxFactor- maximum factor (e.g., 1.2 for +20%)
-
setRandomSeed
public void setRandomSeed(long seed) Sets the random seed for reproducible Monte Carlo results.- Parameters:
seed- random seed
-
monteCarloAnalysis
Performs Monte Carlo simulation with the configured distributions.- Parameters:
iterations- number of simulation iterations- Returns:
- Monte Carlo result with statistics
-
breakevenAnalysis
Calculates breakeven prices for zero NPV.- Returns:
- breakeven result with oil and gas prices
-
cloneEngine
Creates a clone of the base case engine. -
uniformRandom
private double uniformRandom(double min, double max) -
mean
private static double mean(double[] values) -
stdDev
private static double stdDev(double[] values, double mean) -
percentile
private static double percentile(double[] sortedValues, int percentile)
-