コード例 #1
0
ファイル: grudzien2020.py プロジェクト: cgrudz/DAPPER
def HMMs(stepper="Tay2", resolution="Low", R=1):
    """Define the various HMMs used."""
    # Use small version of L96. Has 4 non-stable Lyapunov exponents.
    Nx = 10

    # Time sequence
    # Grudzien'2020 uses the below chronology with Ko=25000, BurnIn=5000.
    t = modelling.Chronology(dt=0.005, dto=.1, T=30, Tplot=Tplot, BurnIn=10)
    if resolution == "High":
        t.dt = 0.001
    elif stepper != "Tay2":
        t.dt = 0.01

    # Dynamical operator
    Dyn = {'M': Nx, 'model': steppers(stepper)}

    # (Random) initial condition
    X0 = modelling.GaussRV(mu=x0(Nx), C=0.001)

    # Observation operator
    jj = range(Nx)  # obs_inds
    Obs = modelling.partial_Id_Obs(Nx, jj)
    Obs['noise'] = R

    return modelling.HiddenMarkovModel(Dyn, Obs, t, X0)
コード例 #2
0
ファイル: wiljes2017.py プロジェクト: cgrudz/DAPPER
"""Settings from `bib.wiljes2016second`."""

import numpy as np

import dapper.mods as modelling
from dapper.mods.Lorenz63.sakov2012 import HMM as _HMM
from dapper.mods.Lorenz63.sakov2012 import Nx

HMM = _HMM.copy()
HMM.tseq = modelling.Chronology(0.01, dko=12, T=4**5, BurnIn=4)

jj = np.array([0])
Obs = modelling.partial_Id_Obs(Nx, jj)
Obs['noise'] = 8
HMM.Obs = modelling.Operator(**Obs)

####################
# Suggested tuning
####################
# Reproduce benchmarks for NETF and ESRF (here EnKF-N) from left pane of Fig 1.
# from dapper.mods.Lorenz63.wiljes2017 import HMM # rmse.a reported by DAPPER / PAPER:
# ------------------------------------------------------------------------------
# HMM.tseq.Ko = 10**2
# xps += OptInterp()                                                # 5.4    / N/A
# xps += Var3D(xB=0.3)                                              # 3.0    / N/A
# xps += EnKF_N(N=5)                                                # 2.68   / N/A
# xps += EnKF_N(N=30,rot=True)                                      # 2.52   / 2.5
# xps += LNETF(N=40,rot=True,infl=1.02,Rs=1.0,loc_rad='NA')         # 2.61   / ~2.2
# xps += PartFilt(N=35 ,reg=1.4,NER=0.3)                            # 2.05   / 1.4 *
# *: tuning settings not given
#
コード例 #3
0
ファイル: wilks05.py プロジェクト: cgrudz/DAPPER
# tseq = modelling.Chronology(dt=0.001,dto=0.05,T=4**3,BurnIn=6) # allows using rk2
tseq = modelling.Chronology(dt=0.005, dto=0.05, T=4**3,
                            BurnIn=6)  # requires rk4

Dyn = {
    'M': LUV.M,
    'model': modelling.with_rk4(LUV.dxdt, autonom=True),
    'noise': 0,
    'linear': LUV.dstep_dx,
}

X0 = modelling.GaussRV(mu=LUV.x0, C=0.01)

R = 0.1
jj = np.arange(nU)
Obs = modelling.partial_Id_Obs(LUV.M, jj)
Obs['noise'] = R

other = {'name': rel2mods(__file__) + '_full'}
HMM_full = modelling.HiddenMarkovModel(Dyn,
                                       Obs,
                                       tseq,
                                       X0,
                                       LP=LUV.LPs(jj),
                                       **other)

################
# Truncated
################

# Just change dt from 005 to 05
コード例 #4
0
ファイル: settings101.py プロジェクト: cgrudz/DAPPER
from dapper.mods.DoublePendulum import step, x0, LP_setup, dstep_dx

t = modelling.Chronology(0.01, dko=100, T=30, BurnIn=10)

Dyn = {
    'M': len(x0),
    'model': step,
    'noise': 0,
    'linear': dstep_dx,
}

X0 = modelling.GaussRV(mu=x0, C=0.01**2)

jj = [0, 2]
Obs = modelling.partial_Id_Obs(len(x0), jj)
Obs['noise'] = 0.1**2

HMM = modelling.HiddenMarkovModel(Dyn, Obs, t, X0, LP=LP_setup(jj))

####################
# Suggested tuning
####################
# from dapper.mods.DoublePendulum.settings101 import HMM # Expct rmse.a:

# HMM.tseq.dko = anything
# xps += Climatology()                                 # 5
# xps += OptInterp()                                   # 2.5

# HMM.tseq.dko = 7 # <-- max dko for tolerable performance with Var3D
# xps += Var3D(xB=0.1)                                 # 0.81
コード例 #5
0
                         KObs=1000,
                         Tplot=Tplot,
                         BurnIn=4 * Tplot)

Nx = len(x0)

Dyn = {
    'M': Nx,
    'model': step,
    'linear': dstep_dx,
    'noise': 0,
}

X0 = modelling.GaussRV(C=2, mu=x0)

Obs = modelling.partial_Id_Obs(Nx, np.arange(Nx))
Obs['noise'] = 8.0

HMM = modelling.HiddenMarkovModel(Dyn, Obs, t, X0)

####################
# Suggested tuning
####################
# Compare with Anderson's figure 10.
# Benchmarks are fairly reliable (KObs=2000):
# from dapper.mods.Lorenz63.anderson2010rhf import HMM   # rmse.a
# xps += SL_EAKF(N=20,infl=1.01,rot=True,loc_rad=np.inf) # 0.87
# xps += EnKF_N (N=20,rot=True)                          # 0.87
# xps += RHF    (N=50,infl=1.10)                         # 1.28
# xps += RHF    (N=50,infl=0.95,rot=True)                # 0.94
# xps += RHF    (N=20,infl=0.95,rot=True)                # 1.07
コード例 #6
0
ファイル: settings01.py プロジェクト: cgrudz/DAPPER
import numpy as np

import dapper.mods as modelling
from dapper.mods.Lorenz05 import Model
from dapper.tools.localization import nd_Id_localization

# Sakov uses K=300000, BurnIn=1000*0.05
tseq = modelling.Chronology(0.002, dto=0.05, Ko=400, Tplot=2, BurnIn=5)

model = Model(b=8)

Dyn = {
    'M': model.M,
    'model': model.step,
    'noise': 0,
    'object': model,
}

X0 = modelling.GaussRV(mu=model.x0, C=0.001)

jj = np.arange(model.M)  # obs_inds
Obs = modelling.partial_Id_Obs(model.M, jj)
Obs['noise'] = 1
Obs['localizer'] = nd_Id_localization((model.M, ), (6, ))

HMM = modelling.HiddenMarkovModel(Dyn, Obs, tseq, X0)