File: t_LARS_noisy_error.py

package info (click to toggle)
openturns 1.26-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 67,708 kB
  • sloc: cpp: 261,605; python: 67,030; ansic: 4,378; javascript: 406; sh: 185; xml: 164; makefile: 101
file content (81 lines) | stat: -rw-r--r-- 2,869 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
#!/usr/bin/env python

# # Cas test Chaos polynomial (openturns 1.21)
# Un bug se produit quand:
# size_doe = 60, sparse = True et seed = 1
# Le chaos fitté correspond à un R^2 = 0.0

import openturns as ot
# ot.Log.Show(ot.Log.NONE)

size_doe = 60  # if 50, 59, 61, 62 pas de bug
sparse = True  # if False pas de bug
seed = 1  # si 2 pas de bug

poutre = ot.SymbolicFunction(['L', 'b', 'h', 'E', 'F'],
                             ['(F * L^3)/(48 * E * b * h^3 / 12)'])

L = ot.Normal(5.0, 0.02 * 5.0)

b = ot.LogNormal()
b.setParameter(ot.LogNormalMuSigmaOverMu()([.2, .05, 0.]))

h = ot.LogNormal()
h.setParameter(ot.LogNormalMuSigmaOverMu()([.4, .05, 0.]))

E = ot.LogNormal()
E.setParameter(ot.LogNormalMuSigmaOverMu()([3e4, .12, 0.]))

F = ot.LogNormal()
F.setParameter(ot.LogNormalMuSigmaOverMu()([.1, .20, 0.]))

S = ot.CorrelationMatrix(5)
S[1, 2] = 0.8
R = ot.NormalCopula.GetCorrelationFromSpearmanCorrelation(S)
distribution = ot.ComposedDistribution([L, b, h, E, F])

ot.RandomGenerator.SetSeed(seed)
experiment = ot.LHSExperiment(distribution, int(size_doe))
inputSample = experiment.generate()
outputSample = poutre(inputSample)
# print(inputSample, outputSample)

dim = distribution.getDimension()
polyCol = [0.] * dim
for i in range(dim):
    polyCol[i] = ot.StandardDistributionPolynomialFactory(distribution.getMarginal(i))

enumerateFunction = ot.LinearEnumerateFunction(dim)
multivariateBasis = ot.OrthogonalProductPolynomialFactory(polyCol, enumerateFunction)
p = 5
indexMax = enumerateFunction.getStrataCumulatedCardinal(p)
adaptiveStrategy = ot.FixedStrategy(multivariateBasis, indexMax)
regressionStrategy = ot.LeastSquaresStrategy()
if sparse:
    approximation_algorithm = ot.LeastSquaresMetaModelSelectionFactory(ot.LARS(), ot.CorrectedLeaveOneOut())
    regressionStrategy = ot.LeastSquaresStrategy(approximation_algorithm)
algochaos = ot.FunctionalChaosAlgorithm(inputSample, outputSample,
                                        distribution,
                                        adaptiveStrategy,
                                        regressionStrategy)
algochaos.run()
chaosResult = algochaos.getResult()
chaosMeta = chaosResult.getMetaModel()
print(chaosResult, chaosMeta)
validation = ot.MetaModelValidation(outputSample, chaosMeta(inputSample))
R2 = validation.computeR2Score()[0]
print('R2 chaos = %0.7f' % R2)
assert R2 > 0.9, "low R2"

if 0:
    from openturns.viewer import View
    grid = validation.drawValidation()
    graph_validation = grid.getGraph(0, 0)
    graph_validation.setTitle('Validation graph (Training Samples)')
    graph_validation.setXTitle('Metamodel chaos')
    graph_validation.setXTitle('Model original')
    view = View(graph_validation)
    view.save('chaos_validation.png', dpi=100)
    view2 = View(chaosResult.drawErrorHistory())
    view2.save('chaos_error.png', dpi=100)
    View.ShowAll()