Learn R Programming

TRES (version 1.1.1)

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(Gamma_init, opts=NULL, fun, ...)

Arguments

Gamma_init

initial envelope subspace basis.

opts

Option structure with fields: "record = 0" -- no print out. "maxiter" -- 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; "maxiter"=500.

fun

Objective function and its gradient: fun(Gamma_init, data1, data2) data1, data2 are additional data.

...

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

Value

Gamma

The estimation of the envelope subspace basis.

Out

Output information, including 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$maxiter  <- 1000;
opts$xtol <- 1e-5;
opts$gtol <- 1e-5;
opts$ftol <- 1e-8;

Gamma0 <- matrix(rnorm(n*k), n, k);
Gamma0 <- qr.Q(qr(Gamma0));

eva <- OptStiefelGBB(Gamma0, opts, fun, W)
Gamma <- eva$Gamma
out <- eva$out
out$fval <- -2*out$fval;
# }

Run the code above in your browser using DataLab