Learn R Programming

RNAmf (version 1.0.1)

ALD_RNAmf: find the next point by ALD criterion

Description

The function acquires the new point by the Active learning Decomposition (ALD) criterion. It calculates the ALD criterion \(\frac{V_l(\bm{x})}{\sum^l_{j=1}C_j}\), where \(V_l(\bm{x})\) is the contribution of GP emulator at each fidelity level \(l\) and \(C_j\) is the simulation cost at level \(j\). For details, see Heo and Sung (2024, <tools:::Rd_expr_doi("https://doi.org/10.1080/00401706.2024.2376173")>).

A new point is acquired on Xcand. If Xcand=NULL, a new point is acquired on unit hypercube \([0,1]^d\).

Usage

ALD_RNAmf(Xcand = NULL, fit, mc.sample = 100, cost = NULL,
optim = TRUE, parallel = FALSE, ncore = 1, trace=TRUE)

Value

  • ALD: list of ALD criterion computed at each point of Xcand at each level if optim=FALSE. If optim=TRUE, ALD returns NULL.

  • cost: a copy of cost.

  • Xcand: a copy of Xcand.

  • chosen: list of chosen level and point.

  • time: a scalar of the time for the computation.

Arguments

Xcand

vector or matrix of candidate set which could be added into the current design only used when optim=FALSE. Xcand is the set of the points where ALD criterion is evaluated. If Xcand=NULL, \(100 \times d\) number of points from 0 to 1 are generated by Latin hypercube design. Default is NULL.

fit

object of class RNAmf.

mc.sample

a number of mc samples generated for the MC approximation in 3 levels case. Default is 100.

cost

vector of the costs for each level of fidelity. If cost=NULL, total costs at all levels would be 1. cost is encouraged to have an ascending order of positive value. Default is NULL.

optim

logical indicating whether to optimize AL criterion by optim's gradient-based L-BFGS-B method. If optim=TRUE, \(5 \times d\) starting points are generated by Latin hypercube design for optimization. If optim=FALSE, AL criterion is optimized on the Xcand. Default is TRUE.

parallel

logical indicating whether to compute the AL criterion in parallel or not. If parallel=TRUE, parallel computation is utilized. Default is FALSE.

ncore

a number of core for parallel. It is only used if parallel=TRUE. Default is 1.

trace

logical indicating whether to print the computational time for each step. If trace=TRUE, the computation time for each step is printed. Default is FALSE.

Examples

Run this code
# \donttest{
library(lhs)
library(doParallel)
library(foreach)

### simulation costs ###
cost <- c(1, 3)

### 1-d Perdikaris function in Perdikaris, et al. (2017) ###
# low-fidelity function
f1 <- function(x) {
  sin(8 * pi * x)
}

# high-fidelity function
f2 <- function(x) {
  (x - sqrt(2)) * (sin(8 * pi * x))^2
}

### training data ###
n1 <- 13
n2 <- 8

### fix seed to reproduce the result ###
set.seed(1)

### generate initial nested design ###
X <- NestedX(c(n1, n2), 1)
X1 <- X[[1]]
X2 <- X[[2]]

### n1 and n2 might be changed from NestedX ###
### assign n1 and n2 again ###
n1 <- nrow(X1)
n2 <- nrow(X2)

y1 <- f1(X1)
y2 <- f2(X2)

### n=100 uniform test data ###
x <- seq(0, 1, length.out = 100)

### fit an RNAmf ###
fit.RNAmf <- RNAmf_two_level(X1, y1, X2, y2, kernel = "sqex")

### predict ###
predy <- predict(fit.RNAmf, x)$mu
predsig2 <- predict(fit.RNAmf, x)$sig2

### active learning with optim=TRUE ###
ald.RNAmf.optim <- ALD_RNAmf(
  Xcand = x, fit.RNAmf, cost = cost,
  optim = TRUE, parallel = TRUE, ncore = 2
)
print(ald.RNAmf.optim$time) # computation time of optim=TRUE

### active learning with optim=FALSE ###
ald.RNAmf <- ALD_RNAmf(
  Xcand = x, fit.RNAmf, cost = cost,
  optim = FALSE, parallel = TRUE, ncore = 2
)
print(ald.RNAmf$time) # computation time of optim=FALSE

### visualize ALD ###
oldpar <- par(mfrow = c(1, 2))
plot(x, ald.RNAmf$ALD$ALD1,
  type = "l", lty = 2,
  xlab = "x", ylab = "ALD criterion at the low-fidelity level",
  ylim = c(min(c(ald.RNAmf$ALD$ALD1, ald.RNAmf$ALD$ALD2)),
           max(c(ald.RNAmf$ALD$ALD1, ald.RNAmf$ALD$ALD2)))
)
points(ald.RNAmf$chosen$Xnext,
  ald.RNAmf$ALD$ALD1[which(x == drop(ald.RNAmf$chosen$Xnext))],
  pch = 16, cex = 1, col = "red"
)
plot(x, ald.RNAmf$ALD$ALD2,
  type = "l", lty = 2,
  xlab = "x", ylab = "ALD criterion at the high-fidelity level",
  ylim = c(min(c(ald.RNAmf$ALD$ALD1, ald.RNAmf$ALD$ALD2)),
           max(c(ald.RNAmf$ALD$ALD1, ald.RNAmf$ALD$ALD2)))
)
par(oldpar)# }

Run the code above in your browser using DataLab