Learn R Programming

REBayes (version 0.63)

KWDual: Dual optimization for Kiefer-Wolfowitz problems

Description

Interface function for calls to optimizer from various REBayes functions There are currently two options for the optimization: Mosek (the default) is the original, preferred option and uses interior point methods. It relies on the Rmosek interface to R available from http://rmosek.r-forge.r-project.org See userguide for Rmosek for further details. A more experimental option employs the pogs package available from https://github.com/foges/pogs and employs an ADMM (Alternating Direction Method of Multipliers) approach.

Usage

KWDual(A, d, w, ...)

Arguments

A
Linear constraint matrix
d
constraint vector
w
weights for x should sum to one.
...
other parameters passed to control optimization: These may include rtol the relative tolerance for dual gap convergence criterion, verb to control verbosity desired from mosek, verb = 0 is quiet, verb = 5 produces a fairly detailed iteration log, method controls the choice of optimizer: by default this is "mosek" which employs interior point methods, however if method = "pogs" then optimization is carried out by the ADMM methods described in Fougner and Boyd (2015). This is a first order descent method most suitable for large problems for which parallelization is desirable. For most REBayes applications the default "mosek" method is appropriate and "pogs" should be considered experimental. Note that there is not yet a "pogs" implementation for medde problems. Note also that method = "pogs" assumes a distinct control list. Users are responsible for specifying correctly named control variables for each method. The most advantageous implementation of "pogs" requires (CUDA) GPU hardware. control is a control list consisting of sublists iparam, dparam, and sparam, containing elements of various mosek control parameters. See the Rmosek and Mosek manuals for further details. A prime example is rtol which should eventually be deprecated and folded into control, but will persist for a while for compatibility reasons. The default for rtol is 1e-6, but in some cases it is desirable to tighten this, say to 1e-10. Another example that motivated the introduction of control would be control = list(iparam = list(num_threads = 1)), which forces Mosek to use a single threaded process. The default allows Mosek to uses multiple threads (cores) if available, which is generally desirable, but may have unintended (undesirable) consequences when running simulations on clusters.

Value

Returns a list with components: Returns a list with components:

References

Koenker, R and I. Mizera, (2013) ``Convex Optimization, Shape Constraints, Compound Decisions, and Empirical Bayes Rules,'' JASA, 109, 674--685.

Mosek Aps (2015) Users Guide to the R-to-Mosek Optimization Interface, http://rmosek.r-forge.r-project.org.

Fougner, C. (2015) POGS: Proximal Operator Graph Solver, R Package available from http://foges.github.io/pogs.

Fougner, C. and S. Boyd, (2015) Parameter Selection and Pre-Conditioning for a Graph Form Solver, Stanford Technical Report.