Learn R Programming

TRES (version 0.1.0)

OptStiefelGBB: Optimization on Stiefel manifold (GBB)

Description

Curvilinear search algorithm for optimization on Stiefel manifold based on Wen and Yin (2013). Used for estimating the envelope subspace.

Usage

OptStiefelGBB(X, opts=NULL, fun, ...)

Arguments

X

n by k matrix such that \(X'X = I\)

opts

Option structure with fields: "record = 0" -- no print out. "mxitr" -- max number of iterations. "xtol" -- stop control for \(||X_k - X_{k-1}||\). "gtol" -- stop control for the projected gradient. "ftol" -- stop control for \(\frac{|F_k - F_{k-1}|}{(1+|F_{k-1}|)}\) usually with max{xtol, gtol} > ftol.

The default values are: "xtol"=1e-08; "gtol"=1e-08; "ftol"=1e-12; "mxitr"=500.

fun

Objective function and its gradient: fun(X, data1, data2) data1, data2 are addtional data.

...

Additional input for fun, Calling syntax: OptStiefelGBB(X0, fun, opts, data1, data2).

Value

X

Solution

Out

Output information, inclusde estimation error, function value, iteration times etc.

References

Wen, Z., & Yin, W. (2013). A feasible method for optimization with orthogonality constraints. Mathematical Programming, 142(1-2), 397-434.

Examples

Run this code
# NOT RUN {
fun <- function(X,  W) {
      G = -2*(W %*% X)
      F = -sum(diag(t(X) %*% W %*% X))
      return(list(F = F, G = G))
}
n = 1000; k = 6;
W = matrix(rnorm(n^2), n, n); W = t(W) %*% W

opts=c()
opts$record = 0;
opts$mxitr  = 1000;
opts$xtol = 1e-5;
opts$gtol = 1e-5;
opts$ftol = 1e-8;

X0 = matrix(rnorm(n*k), n, k);
X0 = qr.Q(qr(X0));

eva <- OptStiefelGBB(X0, opts, fun, W)
X <- eva$X
out <- eva$out
out$fval = -2*out$fval;

# }

Run the code above in your browser using DataLab