CrossEntropyMethod.jl

An implementation of the cross entropy method that works well for time series
Author sisl
Popularity
7 Stars
Updated Last
2 Years Ago
Started In
May 2020

CrossEntropyMethod.jl

Build Status Coverage Status codecov

This package provides an implementation of the cross entropy method for optimizing multivariate time series distributions. Suppose we have a timeseries X = {x₁, ..., xₙ} where each xᵢ is a vector of dimension m. This package provides optimization for two different scenarios:

  1. The time series is sampled IID from a single distribution p: xᵢ ~ p(x). In this case, the distribution is represented as a Dict{Symbol, Tuple{Sampleable, Int64}}. The dictionary will contain m symbols, one for each variable in the series. The Sampleable object represents p and the integer is the length of the timeseries (N)
  2. The time series is sampled from a different distribution at each timestep pᵢ: xᵢ ~ pᵢ(x). In this case, the distribution is also represented as a Dict{Symbol, Tuple{Sampleable, Int64}}.

Note: The Sampleable objects must support the Distributions.jl function logpdf and fit.

Usage

See the examples/ folder for an example use case. The main function is cross_entropy_method and has the following parameters:

  • loss::Function - The loss function. No default.
  • d_in - The starting sampling distribution. No default.
  • max_iter - Maximum number of iterations, No default.
  • N - The population size. Default: 100
  • elite_thresh - The threshold below which a sample will be considered elite. To have a fixed number of elite samples set this to -Inf and use the min_elite_samples parameter. Default: -0.99
  • min_elite_samples - The minimum number of elite samples. Default: Int64(floor(0.1*N))
  • max_elite_samples - The maximum number of allowed elite samples. Default: typemax(Int64)
  • weight_fn - A function that specifies the weight of each sample. Use the likelihood ratio when trying to perform importance sampling. Default (d,x) -> 1
  • rng::AbstractRNG - The random number generator used. Default: Random.GLOBAL_RNG
  • verbose - Whether or not to print progress. Default: false
  • show_progress - Whether or not to show the progress meter. Default: false
  • batched - Indicates batched loss evaluation (loss function must return an array containing loss values for each sample). Default: false
  • add_entropy - A function that transforms the sampling distribution after fitting. Use it to enforce a maximum level of entropy if converging too quickly. Default: (x)->x

Maintained by Anthony Corso (acorso@stanford.edu)