packages feed

hbayesian-0.1.0.0: src/HBayesian/MCMC/MALA.hs

{-# LANGUAGE DataKinds           #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications    #-}

module HBayesian.MCMC.MALA
  ( MALAConfig (..)
  , mala
  ) where

import           HHLO.Core.Types
import           HHLO.EDSL.Ops
import           HHLO.IR.Builder
import           HBayesian.Core
import           HBayesian.HHLO.Ops
import           HBayesian.HHLO.RNG
import           HBayesian.MCMC.HMC (HMCConfig (..), HMCState (..), hmc)

-- | Configuration for MALA.
newtype MALAConfig = MALAConfig
  { malaStepSize :: Double
  }

-- | MALA is HMC with a single leapfrog step.
mala :: forall s d.
        (KnownShape s, KnownDType d)
     => (Tensor s d -> Builder (Tensor '[] d))
     -> Gradient s d
     -> MALAConfig
     -> Kernel s d (HMCState s d) (Info s d)
mala logpdf grad config =
  hmc logpdf grad (HMCConfig (malaStepSize config) 1)