Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F84369133
rational_interpolant_greedy_pivoted_greedy.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, Sep 22, 10:28
Size
18 KB
Mime Type
text/x-python
Expires
Tue, Sep 24, 10:28 (2 d)
Engine
blob
Format
Raw Data
Handle
21000711
Attached To
R6746 RationalROMPy
rational_interpolant_greedy_pivoted_greedy.py
View Options
#Copyright (C) 2018-2020 by the RROMPy authors
#
# This file is part of RROMPy.
#
# RROMPy is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RROMPy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with RROMPy. If not, see <http://www.gnu.org/licenses/>.
#
from
copy
import
deepcopy
as
copy
import
numpy
as
np
from
.generic_pivoted_greedy_approximant
import
(
GenericPivotedGreedyApproximantBase
,
GenericPivotedGreedyApproximantPoleMatch
)
from
rrompy.reduction_methods.standard.greedy
import
RationalInterpolantGreedy
from
rrompy.reduction_methods.standard.greedy.generic_greedy_approximant
\
import
pruneSamples
from
rrompy.reduction_methods.pivoted
import
(
RationalInterpolantGreedyPivotedPoleMatch
)
from
rrompy.utilities.base.types
import
Np1D
,
Tuple
,
paramVal
,
paramList
from
rrompy.utilities.base
import
verbosityManager
as
vbMng
from
rrompy.utilities.exception_manager
import
RROMPyAssert
from
rrompy.parameter
import
emptyParameterList
from
rrompy.utilities.parallel
import
poolRank
,
recv
__all__
=
[
'RationalInterpolantGreedyPivotedGreedyPoleMatch'
]
class
RationalInterpolantGreedyPivotedGreedyBase
(
GenericPivotedGreedyApproximantBase
):
@property
def
sampleBatchSize
(
self
):
"""Value of sampleBatchSize."""
return
1
@property
def
sampleBatchIdx
(
self
):
"""Value of sampleBatchIdx."""
return
self
.
S
def
greedyNextSample
(
self
,
muidx
:
int
,
plotEst
:
str
=
"NONE"
)
\
->
Tuple
[
Np1D
,
int
,
float
,
paramVal
]:
"""Compute next greedy snapshot of solution map."""
RROMPyAssert
(
self
.
_mode
,
message
=
"Cannot add greedy sample."
)
mus
=
copy
(
self
.
muTest
[
muidx
])
self
.
muTest
.
pop
(
muidx
)
for
j
,
mu
in
enumerate
(
mus
):
vbMng
(
self
,
"MAIN"
,
(
"Adding sample point no. {} at {} to training "
"set."
)
.
format
(
len
(
self
.
mus
)
+
1
,
mu
),
3
)
self
.
mus
.
append
(
mu
)
self
.
_S
=
len
(
self
.
mus
)
self
.
_approxParameters
[
"S"
]
=
self
.
S
if
(
self
.
samplingEngine
.
nsamples
<=
len
(
mus
)
-
j
-
1
or
not
np
.
allclose
(
mu
,
self
.
samplingEngine
.
mus
[
j
-
len
(
mus
)])):
self
.
samplingEngine
.
nextSample
(
mu
)
if
self
.
_isLastSampleCollinear
():
vbMng
(
self
,
"MAIN"
,
(
"Collinearity above tolerance detected. Starting "
"preemptive greedy loop termination."
),
3
)
self
.
_collinearityFlag
=
1
errorEstTest
=
np
.
empty
(
len
(
self
.
muTest
))
errorEstTest
[:]
=
np
.
nan
return
errorEstTest
,
[
-
1
],
np
.
nan
,
np
.
nan
errorEstTest
,
muidx
,
maxErrorEst
=
self
.
errorEstimator
(
self
.
muTest
,
True
)
if
plotEst
==
"ALL"
:
self
.
plotEstimator
(
errorEstTest
,
muidx
,
maxErrorEst
)
return
errorEstTest
,
muidx
,
maxErrorEst
,
self
.
muTest
[
muidx
]
def
_setSampleBatch
(
self
,
maxS
:
int
):
return
self
.
S
def
_preliminaryTraining
(
self
):
"""Initialize starting snapshots of solution map."""
RROMPyAssert
(
self
.
_mode
,
message
=
"Cannot start greedy algorithm."
)
if
self
.
samplingEngine
.
nsamples
>
0
:
return
self
.
resetSamples
()
self
.
samplingEngine
.
scaleFactor
=
self
.
scaleFactorDer
musPivot
=
self
.
trainSetGenerator
.
generatePoints
(
self
.
S
)
while
len
(
musPivot
)
>
self
.
S
:
musPivot
.
pop
()
muTestBasePivot
=
self
.
samplerPivot
.
generatePoints
(
self
.
nTestPoints
,
False
)
idxPop
=
pruneSamples
(
self
.
mapParameterListPivot
(
muTestBasePivot
),
self
.
mapParameterListPivot
(
musPivot
),
1e-10
*
self
.
scaleFactorPivot
[
0
])
muTestBasePivot
.
pop
(
idxPop
)
self
.
_mus
=
emptyParameterList
()
self
.
mus
.
reset
((
self
.
S
-
1
,
self
.
HFEngine
.
npar
))
self
.
muTest
=
emptyParameterList
()
self
.
muTest
.
reset
((
len
(
muTestBasePivot
)
+
1
,
self
.
HFEngine
.
npar
))
for
k
in
range
(
self
.
S
-
1
):
muk
=
np
.
empty_like
(
self
.
mus
[
0
])
muk
[
self
.
directionPivot
]
=
musPivot
[
k
]
muk
[
self
.
directionMarginal
]
=
self
.
muMargLoc
self
.
mus
[
k
]
=
muk
for
k
in
range
(
len
(
muTestBasePivot
)):
muk
=
np
.
empty_like
(
self
.
muTest
[
0
])
muk
[
self
.
directionPivot
]
=
muTestBasePivot
[
k
]
muk
[
self
.
directionMarginal
]
=
self
.
muMargLoc
self
.
muTest
[
k
]
=
muk
muk
=
np
.
empty_like
(
self
.
mus
[
0
])
muk
[
self
.
directionPivot
]
=
musPivot
[
-
1
]
muk
[
self
.
directionMarginal
]
=
self
.
muMargLoc
self
.
muTest
[
-
1
]
=
muk
if
len
(
self
.
mus
)
>
0
:
vbMng
(
self
,
"MAIN"
,
(
"Adding first {} sample point{} at {} to training "
"set."
)
.
format
(
self
.
S
-
1
,
""
+
"s"
*
(
self
.
S
>
2
),
self
.
mus
),
3
)
self
.
samplingEngine
.
iterSample
(
self
.
mus
)
self
.
_S
=
len
(
self
.
mus
)
self
.
_approxParameters
[
"S"
]
=
self
.
S
self
.
M
,
self
.
N
=
(
"AUTO"
,)
*
2
def
setupApproxPivoted
(
self
,
mus
:
paramList
)
->
int
:
if
self
.
checkComputedApproxPivoted
():
return
-
1
RROMPyAssert
(
self
.
_mode
,
message
=
"Cannot setup approximant."
)
vbMng
(
self
,
"INIT"
,
"Setting up pivoted approximant."
,
10
)
if
not
hasattr
(
self
,
"_plotEstPivot"
):
self
.
_plotEstPivot
=
"NONE"
idx
,
sizes
,
emptyCores
=
self
.
_preSetupApproxPivoted
(
mus
)
S0
=
copy
(
self
.
S
)
pMat
,
Ps
,
Qs
,
req
,
musA
=
None
,
[],
[],
[],
None
if
len
(
idx
)
==
0
:
vbMng
(
self
,
"MAIN"
,
"Idling."
,
45
)
if
self
.
storeAllSamples
:
self
.
storeSamples
()
pL
,
pT
,
mT
=
recv
(
source
=
0
,
tag
=
poolRank
())
pMat
=
np
.
empty
((
pL
,
0
),
dtype
=
pT
)
musA
=
np
.
empty
((
0
,
self
.
mu0
.
shape
[
1
]),
dtype
=
mT
)
else
:
for
i
in
idx
:
self
.
muMargLoc
=
mus
[
i
]
vbMng
(
self
,
"MAIN"
,
"Building marginal model no. {} at "
"{}."
.
format
(
i
+
1
,
self
.
muMargLoc
),
25
)
self
.
samplingEngine
.
resetHistory
()
self
.
trainedModel
=
None
self
.
verbosity
-=
5
self
.
samplingEngine
.
verbosity
-=
10
RationalInterpolantGreedy
.
setupApprox
(
self
,
self
.
_plotEstPivot
)
self
.
verbosity
+=
5
self
.
samplingEngine
.
verbosity
+=
10
if
self
.
storeAllSamples
:
self
.
storeSamples
(
i
+
self
.
_nmusOld
)
pMat
,
req
,
musA
=
self
.
_localPivotedResult
(
pMat
,
req
,
emptyCores
,
musA
)
Ps
+=
[
copy
(
self
.
trainedModel
.
data
.
P
)]
Qs
+=
[
copy
(
self
.
trainedModel
.
data
.
Q
)]
self
.
_S
=
S0
del
self
.
muMargLoc
for
r
in
req
:
r
.
wait
()
self
.
_postSetupApproxPivoted
(
musA
,
pMat
,
Ps
,
Qs
,
sizes
)
vbMng
(
self
,
"DEL"
,
"Done setting up pivoted approximant."
,
10
)
return
0
def
setupApprox
(
self
,
plotEst
:
str
=
"NONE"
)
->
int
:
if
self
.
checkComputedApprox
():
return
-
1
if
'_'
not
in
plotEst
:
plotEst
=
plotEst
+
"_NONE"
plotEstM
,
self
.
_plotEstPivot
=
plotEst
.
split
(
"_"
)
val
=
super
()
.
setupApprox
(
plotEstM
)
return
val
class
RationalInterpolantGreedyPivotedGreedyPoleMatch
(
RationalInterpolantGreedyPivotedGreedyBase
,
GenericPivotedGreedyApproximantPoleMatch
,
RationalInterpolantGreedyPivotedPoleMatch
):
"""
ROM greedy pivoted greedy rational interpolant computation for parametric
problems (with pole matching).
Args:
HFEngine: HF problem solver.
mu0(optional): Default parameter. Defaults to 0.
directionPivot(optional): Pivot components. Defaults to [0].
approxParameters(optional): Dictionary containing values for main
parameters of approximant. Recognized keys are:
- 'POD': kind of snapshots orthogonalization; allowed values
include 0, 1/2, and 1; defaults to 1, i.e. POD;
- 'scaleFactorDer': scaling factors for derivative computation;
defaults to 'AUTO';
- 'matchState': whether to match the system state rather than the
system output; defaults to False;
- 'matchingWeight': weight for pole matching optimization; defaults
to 1;
- 'matchingChordalRadius': radius to be used in chordal metric for
poles and residues; if <= 0, Euclidean metric is used; if
'AUTO', automatically selected; defaults to -1;
- 'matchingShared': required ratio of marginal points to share
resonance; defaults to 1.;
- 'matchingWeightError': weight for pole matching optimization in
error estimation; defaults to 0;
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': number of starting marginal samples;
- 'samplerMarginal': marginal sample point generator via sparse
grid;
- 'errorEstimatorKindMarginal': kind of marginal error estimator;
available values include 'LOOK_AHEAD' and 'LOOK_AHEAD_RECOVER';
defaults to 'NONE';
- 'polybasis': type of polynomial basis for pivot interpolation;
defaults to 'MONOMIAL';
- 'polybasisMarginal': type of polynomial basis for marginal
interpolation; allowed values include 'MONOMIAL_*',
'CHEBYSHEV_*', 'LEGENDRE_*', 'NEARESTNEIGHBOR', and
'PIECEWISE_LINEAR_*'; defaults to 'MONOMIAL';
- 'paramsMarginal': dictionary of parameters for marginal
interpolation; include:
. 'MMarginal': degree of marginal interpolant; defaults to
'AUTO', i.e. maximum allowed; not for 'NEARESTNEIGHBOR' or
'PIECEWISE_LINEAR_*';
. 'nNeighborsMarginal': number of marginal nearest neighbors;
defaults to 1; only for 'NEARESTNEIGHBOR';
. 'polydegreetypeMarginal': type of polynomial degree for
marginal; defaults to 'TOTAL'; not for 'NEARESTNEIGHBOR' or
'PIECEWISE_LINEAR_*';
. 'interpTolMarginal': tolerance for marginal interpolation;
defaults to None; not for 'NEARESTNEIGHBOR' or
'PIECEWISE_LINEAR_*';
. 'radialDirectionalWeightsMarginalAdapt': bounds for adaptive
rescaling of marginal radial basis weights; only for
radial basis.
- 'greedyTol': uniform error tolerance for greedy algorithm;
defaults to 1e-2;
- 'collinearityTol': collinearity tolerance for greedy algorithm;
defaults to 0.;
- 'maxIter': maximum number of greedy steps; defaults to 1e2;
- 'nTestPoints': number of test points; defaults to 5e2;
- 'trainSetGenerator': training sample points generator; defaults
to sampler;
- 'errorEstimatorKind': kind of error estimator; available values
include 'AFFINE', 'DISCREPANCY', 'LOOK_AHEAD',
'LOOK_AHEAD_RES', and 'NONE'; defaults to 'NONE';
- 'greedyTolMarginal': uniform error tolerance for marginal greedy
algorithm; defaults to 1e-1;
- 'maxIterMarginal': maximum number of marginal greedy steps;
defaults to 1e2;
- 'radialDirectionalWeightsMarginal': radial basis weights for
marginal interpolant; defaults to 1;
- 'functionalSolve': strategy for minimization of denominator
functional; allowed values include 'NORM', 'DOMINANT', 'NODAL',
'BARYCENTRIC_NORM', and 'BARYCENTRIC[_AVERAGE]' (check pdf in
main folder for meaning); defaults to 'NORM';
- 'interpTol': tolerance for pivot interpolation; defaults to None;
- 'QTol': tolerance for robust rational denominator management;
defaults to 0.
Defaults to empty dict.
verbosity(optional): Verbosity level. Defaults to 10.
Attributes:
HFEngine: HF problem solver.
mu0: Default parameter.
directionPivot: Pivot components.
mus: Array of snapshot parameters.
musMarginal: Array of marginal snapshot parameters.
approxParameters: Dictionary containing values for main parameters of
approximant. Recognized keys are in parameterList.
parameterListSoft: Recognized keys of soft approximant parameters:
- 'POD': kind of snapshots orthogonalization;
- 'scaleFactorDer': scaling factors for derivative computation;
- 'matchState': whether to match the system state rather than the
system output;
- 'matchingWeight': weight for pole matching optimization;
- 'matchingChordalRadius': radius to be used in chordal metric for
poles and residues;
- 'matchingShared': required ratio of marginal points to share
resonance;
- 'matchingWeightError': weight for pole matching optimization in
error estimation;
- 'errorEstimatorKindMarginal': kind of marginal error estimator;
- 'polybasis': type of polynomial basis for pivot interpolation;
- 'polybasisMarginal': type of polynomial basis for marginal
interpolation;
- 'paramsMarginal': dictionary of parameters for marginal
interpolation; include:
. 'MMarginal': degree of marginal interpolant;
. 'nNeighborsMarginal': number of marginal nearest neighbors;
. 'polydegreetypeMarginal': type of polynomial degree for
marginal;
. 'interpTolMarginal': tolerance for marginal interpolation;
. 'radialDirectionalWeightsMarginalAdapt': bounds for adaptive
rescaling of marginal radial basis weights.
- 'greedyTol': uniform error tolerance for greedy algorithm;
- 'collinearityTol': collinearity tolerance for greedy algorithm;
- 'maxIter': maximum number of greedy steps;
- 'nTestPoints': number of test points;
- 'trainSetGenerator': training sample points generator;
- 'errorEstimatorKind': kind of error estimator;
- 'greedyTolMarginal': uniform error tolerance for marginal greedy
algorithm;
- 'maxIterMarginal': maximum number of marginal greedy steps;
- 'radialDirectionalWeightsMarginal': radial basis weights for
marginal interpolant;
- 'functionalSolve': strategy for minimization of denominator
functional;
- 'interpTol': tolerance for pivot interpolation;
- 'QTol': tolerance for robust rational denominator management.
parameterListCritical: Recognized keys of critical approximant
parameters:
- 'S': total number of pivot samples current approximant relies
upon;
- 'samplerPivot': pivot sample point generator;
- 'SMarginal': total number of marginal samples current approximant
relies upon;
- 'samplerMarginal': marginal sample point generator via sparse
grid.
verbosity: Verbosity level.
POD: Kind of snapshots orthogonalization.
scaleFactorDer: Scaling factors for derivative computation.
matchState: Whether to match the system state rather than the system
output.
matchingWeight: Weight for pole matching optimization.
matchingChordalRadius: Radius to be used in chordal metric for poles
and residues.
matchingShared: Required ratio of marginal points to share resonance.
matchingWeightError: Weight for pole matching optimization in error
estimation.
S: Total number of pivot samples current approximant relies upon.
samplerPivot: Pivot sample point generator.
SMarginal: Total number of marginal samples current approximant relies
upon.
samplerMarginal: Marginal sample point generator via sparse grid.
errorEstimatorKindMarginal: Kind of marginal error estimator.
polybasis: Type of polynomial basis for pivot interpolation.
polybasisMarginal: Type of polynomial basis for marginal interpolation.
paramsMarginal: Dictionary of parameters for marginal interpolation.
greedyTol: uniform error tolerance for greedy algorithm.
collinearityTol: Collinearity tolerance for greedy algorithm.
maxIter: maximum number of greedy steps.
nTestPoints: number of starting training points.
trainSetGenerator: training sample points generator.
errorEstimatorKind: kind of error estimator.
greedyTolMarginal: Uniform error tolerance for marginal greedy
algorithm.
maxIterMarginal: Maximum number of marginal greedy steps.
radialDirectionalWeightsMarginal: Radial basis weights for marginal
interpolant.
functionalSolve: Strategy for minimization of denominator functional.
interpTol: Tolerance for pivot interpolation.
QTol: Tolerance for robust rational denominator management.
muBounds: list of bounds for pivot parameter values.
muBoundsMarginal: list of bounds for marginal parameter values.
samplingEngine: Sampling engine.
uHF: High fidelity solution(s) with parameter(s) lastSolvedHF as
sampleList.
lastSolvedHF: Parameter(s) corresponding to last computed high fidelity
solution(s) as parameterList.
uApproxReduced: Reduced approximate solution(s) with parameter(s)
lastSolvedApprox as sampleList.
lastSolvedApproxReduced: Parameter(s) corresponding to last computed
reduced approximate solution(s) as parameterList.
uApprox: Approximate solution(s) with parameter(s) lastSolvedApprox as
sampleList.
lastSolvedApprox: Parameter(s) corresponding to last computed
approximate solution(s) as parameterList.
"""
Event Timeline
Log In to Comment