Examples

Example 1

1- Problem statement

\begin{aligned}
& \underset{x}{\text{minimize}}
& & \mathbb{E}_{\cD}((x_0-2)^2 + 2x_1^2 -4x_1 + \Theta) \\
& \text{subject to}
& & \mathbb{P}_{\cD}(-x_0 + 4x_1 + \Theta -3 \leq 0) \geq 0.9 \\
& & & \Theta \thicksim \cU(1, 3)
\end{aligned}

2- Solution

x^* = [2.2, 0.6]

3- Resolution

#!/usr/bin/env python

import openturns as ot
import otrobopt

# ot.Log.Show(ot.Log.Info)


calJ = ot.SymbolicFunction(
    ['x0', 'x1', 'theta'], ['(x0-2)^2 + 2*x1^2 - 4*x1 + theta'])
calG = ot.SymbolicFunction(
    ['x0', 'x1', 'theta'], ['-(-x0 + 4*x1 + theta - 3)'])
J = ot.ParametricFunction(calJ, [2], [2.0])
g = ot.ParametricFunction(calG, [2], [2.0])

dim = J.getInputDimension()


solver = ot.Cobyla()
solver.setIgnoreFailure(True)
solver.setMaximumIterationNumber(1000)

thetaDist = ot.Uniform(1.0, 3.0)
robustnessMeasure = otrobopt.MeanMeasure(J, thetaDist)
reliabilityMeasure = otrobopt.JointChanceMeasure(
    g, thetaDist, ot.Greater(), 0.9)
problem = otrobopt.RobustOptimizationProblem(
    robustnessMeasure, reliabilityMeasure)
bounds = ot.Interval([-10.0] * dim, [10.0] * dim)
problem.setBounds(bounds)


algo = otrobopt.SequentialMonteCarloRobustAlgorithm(problem, solver)
algo.setMaximumIterationNumber(10)
algo.setMaximumAbsoluteError(1e-3)
algo.setInitialSamplingSize(10)
algo.setInitialSearch(100)
algo.run()
result = algo.getResult()
print ('x*=', result.getOptimalPoint(), 'J(x*)=',
       result.getOptimalValue(), 'iteration=', result.getIterationNumber())

Example 2

1- Problem statement

\begin{aligned}
& \underset{x}{\text{minimize}}
& & \mathbb{E}_{\cD}(\sqrt{x_0} \sqrt{x_1} \Theta) \\
& \text{subject to}
& & 2x_1 + 4x_0 - 120 \leq 0 \\
& & & \Theta \thicksim \cN(1, 3)
\end{aligned}

2- Solution

x^* = [15, 30]

3- Resolution

#!/usr/bin/env python

import openturns as ot
import openturns.testing
import otrobopt

# ot.Log.Show(ot.Log.Info)


calJ = ot.SymbolicFunction(
    ['x0', 'x1', 'theta'], ['sqrt(x0) * sqrt(x1) * theta'])
g = ot.SymbolicFunction(['x0', 'x1'], ['-(2*x1 + 4*x0 -120)'])
J = ot.ParametricFunction(calJ, [2], [1.0])

dim = J.getInputDimension()


solver = ot.Cobyla()
solver.setMaximumIterationNumber(1000)

thetaDist = ot.Normal(1.0, 3.0)
robustnessMeasure = otrobopt.MeanMeasure(J, thetaDist)
problem = otrobopt.RobustOptimizationProblem(robustnessMeasure, g)
problem.setMinimization(False)
bounds = ot.Interval([5.0] * dim, [50.0] * dim)
problem.setBounds(bounds)


algo = otrobopt.SequentialMonteCarloRobustAlgorithm(problem, solver)
algo.setMaximumIterationNumber(10)
algo.setMaximumAbsoluteError(1e-3)
algo.setInitialSamplingSize(10)
algo.setInitialSearch(100)
algo.run()
result = algo.getResult()
# print ('x*=', result.getOptimalPoint())
openturns.testing.assert_almost_equal(
    result.getOptimalPoint(), [15.0, 30.0], 1e-4)
print('J(x*)=', result.getOptimalValue(),
      'iteration=', result.getIterationNumber())

Example 3

1- Problem statement

\begin{aligned}
& \underset{x}{\text{minimize}}
& & \mathbb{E}_{\cD}(x^3 - x + \Theta) \\
& \text{subject to}
& & \mathbb{P}_{\cD}(x + \Theta - 2 \leq 0) \geq 0.9 \\
& & & \Theta \thicksim \cE(2)
\end{aligned}

2- Solution

x^* = -1

3- Resolution

#!/usr/bin/env python

import openturns as ot
import otrobopt

# ot.Log.Show(ot.Log.Info)


calJ = ot.SymbolicFunction(['x', 'theta'], ['x^3 - 3*x + theta'])
calG = ot.SymbolicFunction(['x', 'theta'], ['-(x + theta - 2)'])
J = ot.ParametricFunction(calJ, [1], [0.5])
g = ot.ParametricFunction(calG, [1], [0.5])

dim = J.getInputDimension()


solver = ot.Cobyla()
solver.setMaximumIterationNumber(1000)
solver.setStartingPoint([0.0] * dim)

thetaDist = ot.Exponential(2.0)
robustnessMeasure = otrobopt.MeanMeasure(J, thetaDist)
reliabilityMeasure = otrobopt.JointChanceMeasure(
    g, thetaDist, ot.Greater(), 0.9)
problem = otrobopt.RobustOptimizationProblem(
    robustnessMeasure, reliabilityMeasure)
problem.setMinimization(False)

algo = otrobopt.SequentialMonteCarloRobustAlgorithm(problem, solver)
algo.setMaximumIterationNumber(10)
algo.setMaximumAbsoluteError(1e-3)
algo.setInitialSamplingSize(10)
algo.run()
result = algo.getResult()
print ('x*=', result.getOptimalPoint(), 'J(x*)=',
       result.getOptimalValue(), 'iteration=', result.getIterationNumber())

Example 4

1- Problem statement

\begin{aligned}
& \underset{x}{\text{minimize}}
& & \mathbb{E}_{\cD}(\cos(x) \sin(\Theta)) \\
& \text{subject to}
& & \mathbb{P}_{\cD}(-2 - x + \Theta \leq 0) \geq 0.9 \\
& & & x - 4 \leq 0 \\
& & & \Theta \thicksim \cU(0, 2)
\end{aligned}

2- Solution

x^* = \pi

3- Resolution

#!/usr/bin/env python

import openturns as ot
import otrobopt

# ot.Log.Show(ot.Log.Info)


calJ = ot.SymbolicFunction(['x', 'theta'], ['cos(x) * sin(theta)'])
calG = ot.SymbolicFunction(['x', 'theta'], ['-(-2 - x + theta)', '-(x - 4)'])
J = ot.ParametricFunction(calJ, [1], [1.0])
g = ot.ParametricFunction(calG, [1], [1.0])

dim = J.getInputDimension()


solver = ot.Cobyla()
solver.setMaximumIterationNumber(1000)
solver.setStartingPoint([0.0] * dim)

thetaDist = ot.Uniform(0.0, 2.0)
robustnessMeasure = otrobopt.MeanMeasure(J, thetaDist)
reliabilityMeasure = otrobopt.JointChanceMeasure(
    g, thetaDist, ot.Greater(), 0.9)
problem = otrobopt.RobustOptimizationProblem(
    robustnessMeasure, reliabilityMeasure)

algo = otrobopt.SequentialMonteCarloRobustAlgorithm(problem, solver)
algo.setMaximumIterationNumber(10)
algo.setMaximumAbsoluteError(1e-3)
algo.setInitialSamplingSize(10)
algo.run()
result = algo.getResult()
print ('x*=', result.getOptimalPoint(), 'J(x*)=',
       result.getOptimalValue(), 'iteration=', result.getIterationNumber())