bopp.core

User interface for BOPP

defopt

macro

(defopt name & args)
Binds variable to a BOPP query. Synatx is the
 same as Anglican's defquery, except that an
 additional input is specified to dictate the
 variables to be optimized.

Example:

(defopt opt-query
   <docstring>
   [y] [theta]
   (let [a (sample (normal 0 10))
         theta (sample (normal a 20))
         b (sample (normal a (* theta theta)))]
     (observe (normal (* a theta) (* b b)) y)
     [a b]))


For more details please see the README and the
paper.  https://github.com/twgr/bopp/blob/master/README.md
http://papers.nips.cc/paper/6421-bayesian-optimization-for-probabilistic-programs

doopt

(doopt algorithm opt-query opt-query-args num-samples & {:keys [speed-option bo-options opt-type opt-program-transformation opt-sample-summarizer opt-bo-target-transformation num-particles acq-opt-num-starts ais-num-steps ais-start-exponent ais-end-exponent output-extractor f-theta-inf], :or {speed-option :fast, opt-type :mmap, ais-start-exponent 0.001, ais-end-exponent 10, output-extractor get-result-vector, f-theta-inf -100000.0}})
Calls BOPP on a target query as defined by defopt, returning a lazy
 infinite sequence of increasingly optimal estimates.

For more details please see the README and the
paper.  https://github.com/twgr/bopp/blob/master/README.md
http://papers.nips.cc/paper/6421-bayesian-optimization-for-probabilistic-programs

Input:
  algorithm ... Inference algorithm
    [:smc, :pcascade, :importance]
  opt-query ... Query to be optimized, defined by defopt.
  opt-query-args ... Arguments of opt-query.
  num-samples ... Number of samples for constructing the estimator to be
    optimized

Optional keyword arguments:
  Speed option:
    speed-option ... Set the default options to a set of pre-tuned values to
      be able to switch between the different modes of running depending on
      speed. Can be overriden by user post-hoc.
      [:careful, :fast] (Default: :fast)

  Bayesian optimization (BO) options:
    bo-options ... look at documentation of Deodorant, this should be a map
      with those options, i.e.:

        {:initial-points <initial-points>
         :num-scaling-thetas <num-scaling-thetas>
         :num-initial-points <num-initial-points>
         :cov-fn-form <cov-fn-form>
         ... etc.}

      You only need to provide options whose defaults that you want to
      override.

      (Default:
        if :speed-option is :careful
          {:hmc-num-leapfrog-steps 5
           :hmc-num-mcmc-steps 50
           :hmc-num-opt-steps 15
           :hmc-num-chains 8
           :hmc-max-gps 50}

        if :speed-option is :fast
          {:hmc-num-leapfrog-steps 2
           :hmc-num-mcmc-steps 20
           :hmc-num-opt-steps 10
           :hmc-num-chains 4
           :hmc-max-gps 20})

  Optimization options:
    opt-type ... Optimization type. Use :custom to customize the
      optimization; must provide opt-program-transformation,
      opt-sample-summarizer, opt-bo-target-transformation in this case.
      [:mmap, :ml2, :risk-minimization :custom] (Default: :mmap)
    opt-program-transformation ... Custom program transformation for
      optimization.
      [nil, :mmap, :ml2] (Default: nil)
    opt-sample-summarizer ... Custom sample summarizer for optimizer. Takes
      in a sequence of Anglican samples, outputs target scalar for BO.
      (Default: nil; Suggested: anglican.inference/log-marginal)
    opt-bo-target-transformation ... Custom BO target transformation for
      optimization. Takes in BO target, outputs alternative target.
      (Default: nil; Suggested: identity, - for minimization)

  Inference options:
    num-particles ... Number of particles during inference.
      (Default: num-samples)

  Acquisition optimization/AIS options:
    acq-opt-num-starts ... Number of parallel optimizations to prevent
      multimodality. (Default: 4 if :speed-option is :fast 16 if :careful)
    ais-num-steps ... Number of MCMC steps performed during acquisition
      function optimization.
      (Default: (max 100 (int (* 2 (/ num-samples acq-opt-num-starts)))))
    ais-start-exponent ... Start exponent for annealed importance sampling
      (Default: 0.001)
    ais-end-exponent ... End exponent for annealed importance sampling
      (Default: 10)

  Other options
    output-extractor ... Takes in an Anglican sample, returns its output.
      (Default: #(into [] (anglican.state/get-result sample));
       Alternatives: anglican.state/get-result, anglican.state/get-predicts)
    f-theta-inf ... Replace -Infinity during BO by this. (Default: -1e5)

Output:
  Lazy list of increasingly optimal (in the MMAP sense) triples
  (opt-vars, log-marginal, program-results):
    opt-vars ... optimization variables
    log-marginal ... the log marginal likelihood p(observes, opt-vars)
    program-results ... program results associated with opt-vars

See paper for details.

opt

macro

(opt & args)