CrossEntropyMethod.jl

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)