File: t_FORM_draw.py

package info (click to toggle)
openturns 1.7-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 38,588 kB
  • ctags: 26,495
  • sloc: cpp: 144,032; python: 26,855; ansic: 7,868; sh: 419; makefile: 263; yacc: 123; lex: 44
file content (134 lines) | stat: -rwxr-xr-x 4,355 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#! /usr/bin/env python

from __future__ import print_function
from openturns import *
from math import *


def printNumericalPoint(point, digits):
    oss = "["
    eps = pow(0.1, digits)
    for i in range(point.getDimension()):
        if i == 0:
            sep = ""
        else:
            sep = ","
        if fabs(point[i]) < eps:
            oss += sep + '%.6f' % fabs(point[i])
        else:
            oss += sep + '%.6f' % point[i]
        sep = ","
    oss += "]"
    return oss


TESTPREAMBLE()

try:

    # We create a numerical math function
    # Analytical construction
    inputFunc = Description(2)
    inputFunc[0] = "x0"
    inputFunc[1] = "x1"
    outputFunc = Description(1)
    outputFunc[0] = "y0"
    formulas = Description(outputFunc.getSize())
    formulas[0] = "-(6+x0^2-x1)"
    print("formulas=", formulas)
    myFunction = NumericalMathFunction(inputFunc, outputFunc, formulas)

    dim = myFunction.getInputDimension()
    # We create a normal distribution point of dimension 1
    mean = NumericalPoint(dim, 0.0)
    # x0
    mean[0] = 5.0
    # x1
    mean[1] = 2.1
    sigma = NumericalPoint(dim, 0.0)
    # x0
    sigma[0] = 3.3
    # x1
    sigma[1] = 3.0
    R = CorrelationMatrix(dim)
    myDistribution = Normal(mean, sigma, R)

    # we name the components of the distribution
    componentDescription = Description(dim)
    componentDescription[0] = "Marginal 1"
    componentDescription[1] = "Marginal 2"
    myDistribution.setDescription(componentDescription)

    # We create a 'usual' RandomVector from the Distribution
    vect = RandomVector(myDistribution)

    # We create a composite random vector
    output = RandomVector(myFunction, vect)
    outputDescription = Description(1)
    outputDescription[0] = "Interest Variable 1"
    output.setDescription(outputDescription)

    # We create an Event from this RandomVector
    myEvent = Event(output, Greater(), 0.0)

    # We create a NearestPoint algorithm
    myCobyla = Cobyla()
    myCobyla.setMaximumIterationNumber(200)
    myCobyla.setMaximumAbsoluteError(1.0e-10)
    myCobyla.setMaximumRelativeError(1.0e-10)
    myCobyla.setMaximumResidualError(1.0e-10)
    myCobyla.setMaximumConstraintError(1.0e-10)
    print("myCobyla=", myCobyla)

    # We create a FORM algorithm
    # The first parameter is an OptimizationSolver
    # The second parameter is an event
    # The third parameter is a starting point for the design point research
    myAlgo = FORM(myCobyla, myEvent, mean)

    print("FORM=", myAlgo)

    # Perform the simulation
    myAlgo.run()

    # Stream out the result
    result = FORMResult(myAlgo.getResult())
    digits = 5
    print("importance factors=", printNumericalPoint(
        result.getImportanceFactors(), digits))

    # Graph 1 : Importance Factors graph
    importanceFactorsGraph = result.drawImportanceFactors()
    importanceFactorsGraph.draw("ImportanceFactorsDrawingFORM", 640, 480)

    # Graph 2 : Hasofer Reliability Index Sensitivity Graphs graph
    reliabilityIndexSensitivityGraphs = result.drawHasoferReliabilityIndexSensitivity(
    )
    graph2a = reliabilityIndexSensitivityGraphs[0]
    graph2a.draw("HasoferReliabilityIndexMarginalSensitivityDrawing", 640, 480)
    # Check that the correct files have been generated by computing their
    # checksum
    graph2b = reliabilityIndexSensitivityGraphs[1]
    graph2b.draw("HasoferReliabilityIndexOtherSensitivityDrawing", 640, 480)
    # Check that the correct files have been generated by computing their
    # checksum

    # Graph 3 : FORM Event Probability Sensitivity Graphs graph
    eventProbabilitySensitivityGraphs = result.drawEventProbabilitySensitivity(
    )
    graph3a = eventProbabilitySensitivityGraphs[0]
    graph3a.draw("EventProbabilityIndexMarginalSensitivityDrawing", 640, 480)
    # Check that the correct files have been generated by computing their
    # checksum
    graph3b = eventProbabilitySensitivityGraphs[1]
    graph3b.draw("EventProbabilityIndexOtherSensitivityDrawing", 640, 480)
    # Check that the correct files have been generated by computing their
    # checksum

    # Graph 4 : Convergence history
    graph4 = result.getOptimizationResult().drawErrorHistory()
    graph4.draw("ConvergenceHistory", 640, 480)

except:
    import sys
    print("t_FORM_draw.py", sys.exc_info()[0], sys.exc_info()[1])