1#! /usr/bin/env python
2
3from __future__ import print_function
4import openturns as ot
5ot.TESTPREAMBLE()
6
7levelFunction = ot.SymbolicFunction(
8    ["x1", "x2", "x3", "x4"], ["x1+2*x2-3*x3+4*x4"])
9# Add a finite difference gradient to the function, as Abdo Rackwitz algorithm
10# needs it
11myGradient = ot.NonCenteredFiniteDifferenceGradient(
12    1e-7, levelFunction.getEvaluation())
13print("myGradient = ", repr(myGradient))
14# Substitute the gradient
15levelFunction.setGradient(
16    ot.NonCenteredFiniteDifferenceGradient(myGradient))
17startingPoint = [0.0] * 4
18algo = ot.AbdoRackwitz(ot.NearestPointProblem(levelFunction, 3.0))
19algo.setStartingPoint(startingPoint)
20algo.run()
21print("result = ", algo.getResult())
22
23levelFunction = ot.SymbolicFunction(
24    ["x1", "x2", "x3", "x4"], ["x1*cos(x1)+2*x2*x3-3*x3+4*x3*x4"])
25# Add a finite difference gradient to the function, as Abdo Rackwitz algorithm
26# needs it
27myGradient = ot.NonCenteredFiniteDifferenceGradient(
28    1e-7, levelFunction.getEvaluation())
29print("myGradient = ", repr(myGradient))
30# Substitute the gradient
31levelFunction.setGradient(
32    ot.NonCenteredFiniteDifferenceGradient(myGradient))
33startingPoint = [0.0] * 4
34algo = ot.AbdoRackwitz(ot.NearestPointProblem(levelFunction, -0.5))
35algo.setStartingPoint(startingPoint)
36print("myalgorithm=", repr(algo))
37algo.run()
38print("result = ",  algo.getResult())
39print("evaluation calls number=", levelFunction.getEvaluationCallsNumber())
40print("gradient   calls number=", levelFunction.getGradientCallsNumber())
41print("hessian    calls number=", levelFunction.getHessianCallsNumber())
42