之前的code报错,evaluate函数有误,缺少大括号,已修改。
# install.packages("lattice")
library(lattice)
# install.packages("zoo")
library(zoo)
##
## 载入程辑包:'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
evaluate <- function(PARAM, minVal = NA, maxVal = NA, y = 2014,
transform = FALSE, verbose = FALSE,
negative = FALSE, transformOnly = FALSE,
returnData = FALSE, accountParams = NULL){
# Step 1
# Convert and declare parameters if they exist on unbounded (-inf,inf) domain
if( transform | transformOnly ){
PARAM <- minVal +
(maxVal - minVal) * unlist(lapply( PARAM, function(v) (1 + exp(-v))^(-1) ))
if( transformOnly ){
}
}
return(PARAM)
} ## 修改
# Declare bounds and step size for optimization
lowerBound <- c(n1 = 5, nFact = 3, nSharpe = 22, shThresh = 0.05)
upperBound <- c(n1 = 80, nFact = 3, nSharpe = 22, shThresh = 0.95)
stepSize <- c(n1 = 5, nFact = 1, nSharpe = 1, shThresh = 0.05)
pnames <- names(stepSize)
np <- length(pnames)
# Declare list of all test points
POINTS <- list()
for( p in pnames ){
POINTS[[p]] <- seq(lowerBound[[p]], upperBound[[p]], stepSize[[p]])
}
OPTIM <- data.frame(matrix(NA, nrow = prod(unlist(lapply(POINTS, length))),
ncol = np + 1))
names(OPTIM)[1:np] <- names(POINTS)
names(OPTIM)[np+1] <- "obj"
# Store all possible combinations of parameters
for( i in 1:np ){
each <- prod(unlist(lapply(POINTS, length))[-(1:i)])
times <- prod(unlist(lapply(POINTS, length))[-(i:length(pnames))])
OPTIM[,i] <- rep(POINTS[[pnames[i]]], each = each, times = times)
}
# Test each row of OPTIM
timeLapse <- proc.time()[3]
for( i in 1:nrow(OPTIM) ){
OPTIM[i,np+1] <- evaluate(OPTIM[i,1:np], transform = FALSE, y = 2014)
cat(paste0("## ", floor( 100 * i / nrow(OPTIM)), "% complete\n"))
cat(paste0("## ",
round( ((proc.time()[3] - timeLapse) *
((nrow(OPTIM) - i)/ i))/60, 2),
" minutes remaining\n\n"))
}
## ## 0% complete
## ## 0.15 minutes remaining
##
## ## 0% complete
## ## 0.15 minutes remaining
##
## ## 0% complete
## ## 0.1 minutes remaining
##
## ## 1% complete
## ## 0.08 minutes remaining
##
## ## 1% complete
## ## 0.06 minutes remaining
##
## ## 1% complete
## ## 0.05 minutes remaining
##
## ## 2% complete
## ## 0.04 minutes remaining
##
## ## 2% complete
## ## 0.04 minutes remaining
##
## ## 2% complete
## ## 0.03 minutes remaining
##
## ## 3% complete
## ## 0.03 minutes remaining
##
## ## 3% complete
## ## 0.03 minutes remaining
##
## ## 3% complete
## ## 0.02 minutes remaining
##
## ## 4% complete
## ## 0.02 minutes remaining
##
## ## 4% complete
## ## 0.02 minutes remaining
##
## ## 4% complete
## ## 0.02 minutes remaining
##
## ## 5% complete
## ## 0.02 minutes remaining
##
## ## 5% complete
## ## 0.02 minutes remaining
##
## ## 5% complete
## ## 0.02 minutes remaining
##
## ## 6% complete
## ## 0.02 minutes remaining
##
## ## 6% complete
## ## 0.01 minutes remaining
##
## ## 6% complete
## ## 0.01 minutes remaining
##
## ## 7% complete
## ## 0.02 minutes remaining
##
## ## 7% complete
## ## 0.02 minutes remaining
##
## ## 7% complete
## ## 0.02 minutes remaining
##
## ## 8% complete
## ## 0.01 minutes remaining
##
## ## 8% complete
## ## 0.01 minutes remaining
##
## ## 8% complete
## ## 0.01 minutes remaining
##
## ## 9% complete
## ## 0.01 minutes remaining
##
## ## 9% complete
## ## 0.01 minutes remaining
##
## ## 9% complete
## ## 0.01 minutes remaining
##
## ## 10% complete
## ## 0.01 minutes remaining
##
## ## 10% complete
## ## 0.01 minutes remaining
##
## ## 10% complete
## ## 0.01 minutes remaining
##
## ## 11% complete
## ## 0.01 minutes remaining
##
## ## 11% complete
## ## 0.01 minutes remaining
##
## ## 11% complete
## ## 0.01 minutes remaining
##
## ## 12% complete
## ## 0.01 minutes remaining
##
## ## 12% complete
## ## 0.01 minutes remaining
##
## ## 12% complete
## ## 0.01 minutes remaining
##
## ## 13% complete
## ## 0.01 minutes remaining
##
## ## 13% complete
## ## 0.01 minutes remaining
##
## ## 13% complete
## ## 0.01 minutes remaining
##
## ## 14% complete
## ## 0.01 minutes remaining
##
## ## 14% complete
## ## 0.01 minutes remaining
##
## ## 14% complete
## ## 0.01 minutes remaining
##
## ## 15% complete
## ## 0.01 minutes remaining
##
## ## 15% complete
## ## 0.01 minutes remaining
##
## ## 15% complete
## ## 0.01 minutes remaining
##
## ## 16% complete
## ## 0.01 minutes remaining
##
## ## 16% complete
## ## 0.01 minutes remaining
##
## ## 16% complete
## ## 0.01 minutes remaining
##
## ## 17% complete
## ## 0.01 minutes remaining
##
## ## 17% complete
## ## 0.01 minutes remaining
##
## ## 17% complete
## ## 0.01 minutes remaining
##
## ## 18% complete
## ## 0.01 minutes remaining
##
## ## 18% complete
## ## 0.01 minutes remaining
##
## ## 18% complete
## ## 0.01 minutes remaining
##
## ## 19% complete
## ## 0.01 minutes remaining
##
## ## 19% complete
## ## 0.01 minutes remaining
##
## ## 19% complete
## ## 0.01 minutes remaining
##
## ## 20% complete
## ## 0.01 minutes remaining
##
## ## 20% complete
## ## 0.01 minutes remaining
##
## ## 20% complete
## ## 0.01 minutes remaining
##
## ## 21% complete
## ## 0.01 minutes remaining
##
## ## 21% complete
## ## 0.01 minutes remaining
##
## ## 21% complete
## ## 0.01 minutes remaining
##
## ## 22% complete
## ## 0.01 minutes remaining
##
## ## 22% complete
## ## 0.01 minutes remaining
##
## ## 22% complete
## ## 0.01 minutes remaining
##
## ## 23% complete
## ## 0.01 minutes remaining
##
## ## 23% complete
## ## 0 minutes remaining
##
## ## 23% complete
## ## 0 minutes remaining
##
## ## 24% complete
## ## 0 minutes remaining
##
## ## 24% complete
## ## 0 minutes remaining
##
## ## 24% complete
## ## 0 minutes remaining
##
## ## 25% complete
## ## 0 minutes remaining
##
## ## 25% complete
## ## 0 minutes remaining
##
## ## 25% complete
## ## 0 minutes remaining
##
## ## 25% complete
## ## 0 minutes remaining
##
## ## 26% complete
## ## 0 minutes remaining
##
## ## 26% complete
## ## 0 minutes remaining
##
## ## 26% complete
## ## 0 minutes remaining
##
## ## 27% complete
## ## 0 minutes remaining
##
## ## 27% complete
## ## 0 minutes remaining
##
## ## 27% complete
## ## 0 minutes remaining
##
## ## 28% complete
## ## 0 minutes remaining
##
## ## 28% complete
## ## 0 minutes remaining
##
## ## 28% complete
## ## 0 minutes remaining
##
## ## 29% complete
## ## 0 minutes remaining
##
## ## 29% complete
## ## 0 minutes remaining
##
## ## 29% complete
## ## 0 minutes remaining
##
## ## 30% complete
## ## 0 minutes remaining
##
## ## 30% complete
## ## 0 minutes remaining
##
## ## 30% complete
## ## 0 minutes remaining
##
## ## 31% complete
## ## 0 minutes remaining
##
## ## 31% complete
## ## 0 minutes remaining
##
## ## 31% complete
## ## 0 minutes remaining
##
## ## 32% complete
## ## 0 minutes remaining
##
## ## 32% complete
## ## 0 minutes remaining
##
## ## 32% complete
## ## 0 minutes remaining
##
## ## 33% complete
## ## 0 minutes remaining
##
## ## 33% complete
## ## 0 minutes remaining
##
## ## 33% complete
## ## 0 minutes remaining
##
## ## 34% complete
## ## 0 minutes remaining
##
## ## 34% complete
## ## 0 minutes remaining
##
## ## 34% complete
## ## 0 minutes remaining
##
## ## 35% complete
## ## 0 minutes remaining
##
## ## 35% complete
## ## 0 minutes remaining
##
## ## 35% complete
## ## 0 minutes remaining
##
## ## 36% complete
## ## 0 minutes remaining
##
## ## 36% complete
## ## 0 minutes remaining
##
## ## 36% complete
## ## 0 minutes remaining
##
## ## 37% complete
## ## 0 minutes remaining
##
## ## 37% complete
## ## 0 minutes remaining
##
## ## 37% complete
## ## 0 minutes remaining
##
## ## 38% complete
## ## 0 minutes remaining
##
## ## 38% complete
## ## 0 minutes remaining
##
## ## 38% complete
## ## 0 minutes remaining
##
## ## 39% complete
## ## 0 minutes remaining
##
## ## 39% complete
## ## 0 minutes remaining
##
## ## 39% complete
## ## 0 minutes remaining
##
## ## 40% complete
## ## 0 minutes remaining
##
## ## 40% complete
## ## 0 minutes remaining
##
## ## 40% complete
## ## 0 minutes remaining
##
## ## 41% complete
## ## 0 minutes remaining
##
## ## 41% complete
## ## 0 minutes remaining
##
## ## 41% complete
## ## 0 minutes remaining
##
## ## 42% complete
## ## 0 minutes remaining
##
## ## 42% complete
## ## 0 minutes remaining
##
## ## 42% complete
## ## 0 minutes remaining
##
## ## 43% complete
## ## 0 minutes remaining
##
## ## 43% complete
## ## 0 minutes remaining
##
## ## 43% complete
## ## 0 minutes remaining
##
## ## 44% complete
## ## 0 minutes remaining
##
## ## 44% complete
## ## 0 minutes remaining
##
## ## 44% complete
## ## 0 minutes remaining
##
## ## 45% complete
## ## 0 minutes remaining
##
## ## 45% complete
## ## 0 minutes remaining
##
## ## 45% complete
## ## 0 minutes remaining
##
## ## 46% complete
## ## 0 minutes remaining
##
## ## 46% complete
## ## 0 minutes remaining
##
## ## 46% complete
## ## 0 minutes remaining
##
## ## 47% complete
## ## 0 minutes remaining
##
## ## 47% complete
## ## 0 minutes remaining
##
## ## 47% complete
## ## 0 minutes remaining
##
## ## 48% complete
## ## 0 minutes remaining
##
## ## 48% complete
## ## 0 minutes remaining
##
## ## 48% complete
## ## 0 minutes remaining
##
## ## 49% complete
## ## 0 minutes remaining
##
## ## 49% complete
## ## 0 minutes remaining
##
## ## 49% complete
## ## 0 minutes remaining
##
## ## 50% complete
## ## 0 minutes remaining
##
## ## 50% complete
## ## 0 minutes remaining
##
## ## 50% complete
## ## 0 minutes remaining
##
## ## 50% complete
## ## 0 minutes remaining
##
## ## 51% complete
## ## 0 minutes remaining
##
## ## 51% complete
## ## 0 minutes remaining
##
## ## 51% complete
## ## 0 minutes remaining
##
## ## 52% complete
## ## 0 minutes remaining
##
## ## 52% complete
## ## 0 minutes remaining
##
## ## 52% complete
## ## 0 minutes remaining
##
## ## 53% complete
## ## 0 minutes remaining
##
## ## 53% complete
## ## 0 minutes remaining
##
## ## 53% complete
## ## 0 minutes remaining
##
## ## 54% complete
## ## 0 minutes remaining
##
## ## 54% complete
## ## 0 minutes remaining
##
## ## 54% complete
## ## 0 minutes remaining
##
## ## 55% complete
## ## 0 minutes remaining
##
## ## 55% complete
## ## 0 minutes remaining
##
## ## 55% complete
## ## 0 minutes remaining
##
## ## 56% complete
## ## 0 minutes remaining
##
## ## 56% complete
## ## 0 minutes remaining
##
## ## 56% complete
## ## 0 minutes remaining
##
## ## 57% complete
## ## 0 minutes remaining
##
## ## 57% complete
## ## 0 minutes remaining
##
## ## 57% complete
## ## 0 minutes remaining
##
## ## 58% complete
## ## 0 minutes remaining
##
## ## 58% complete
## ## 0 minutes remaining
##
## ## 58% complete
## ## 0 minutes remaining
##
## ## 59% complete
## ## 0 minutes remaining
##
## ## 59% complete
## ## 0 minutes remaining
##
## ## 59% complete
## ## 0 minutes remaining
##
## ## 60% complete
## ## 0 minutes remaining
##
## ## 60% complete
## ## 0 minutes remaining
##
## ## 60% complete
## ## 0 minutes remaining
##
## ## 61% complete
## ## 0 minutes remaining
##
## ## 61% complete
## ## 0 minutes remaining
##
## ## 61% complete
## ## 0 minutes remaining
##
## ## 62% complete
## ## 0 minutes remaining
##
## ## 62% complete
## ## 0 minutes remaining
##
## ## 62% complete
## ## 0 minutes remaining
##
## ## 63% complete
## ## 0 minutes remaining
##
## ## 63% complete
## ## 0 minutes remaining
##
## ## 63% complete
## ## 0 minutes remaining
##
## ## 64% complete
## ## 0 minutes remaining
##
## ## 64% complete
## ## 0 minutes remaining
##
## ## 64% complete
## ## 0 minutes remaining
##
## ## 65% complete
## ## 0 minutes remaining
##
## ## 65% complete
## ## 0 minutes remaining
##
## ## 65% complete
## ## 0 minutes remaining
##
## ## 66% complete
## ## 0 minutes remaining
##
## ## 66% complete
## ## 0 minutes remaining
##
## ## 66% complete
## ## 0 minutes remaining
##
## ## 67% complete
## ## 0 minutes remaining
##
## ## 67% complete
## ## 0 minutes remaining
##
## ## 67% complete
## ## 0 minutes remaining
##
## ## 68% complete
## ## 0 minutes remaining
##
## ## 68% complete
## ## 0 minutes remaining
##
## ## 68% complete
## ## 0 minutes remaining
##
## ## 69% complete
## ## 0 minutes remaining
##
## ## 69% complete
## ## 0 minutes remaining
##
## ## 69% complete
## ## 0 minutes remaining
##
## ## 70% complete
## ## 0 minutes remaining
##
## ## 70% complete
## ## 0 minutes remaining
##
## ## 70% complete
## ## 0 minutes remaining
##
## ## 71% complete
## ## 0 minutes remaining
##
## ## 71% complete
## ## 0 minutes remaining
##
## ## 71% complete
## ## 0 minutes remaining
##
## ## 72% complete
## ## 0 minutes remaining
##
## ## 72% complete
## ## 0 minutes remaining
##
## ## 72% complete
## ## 0 minutes remaining
##
## ## 73% complete
## ## 0 minutes remaining
##
## ## 73% complete
## ## 0 minutes remaining
##
## ## 73% complete
## ## 0 minutes remaining
##
## ## 74% complete
## ## 0 minutes remaining
##
## ## 74% complete
## ## 0 minutes remaining
##
## ## 74% complete
## ## 0 minutes remaining
##
## ## 75% complete
## ## 0 minutes remaining
##
## ## 75% complete
## ## 0 minutes remaining
##
## ## 75% complete
## ## 0 minutes remaining
##
## ## 75% complete
## ## 0 minutes remaining
##
## ## 76% complete
## ## 0 minutes remaining
##
## ## 76% complete
## ## 0 minutes remaining
##
## ## 76% complete
## ## 0 minutes remaining
##
## ## 77% complete
## ## 0 minutes remaining
##
## ## 77% complete
## ## 0 minutes remaining
##
## ## 77% complete
## ## 0 minutes remaining
##
## ## 78% complete
## ## 0 minutes remaining
##
## ## 78% complete
## ## 0 minutes remaining
##
## ## 78% complete
## ## 0 minutes remaining
##
## ## 79% complete
## ## 0 minutes remaining
##
## ## 79% complete
## ## 0 minutes remaining
##
## ## 79% complete
## ## 0 minutes remaining
##
## ## 80% complete
## ## 0 minutes remaining
##
## ## 80% complete
## ## 0 minutes remaining
##
## ## 80% complete
## ## 0 minutes remaining
##
## ## 81% complete
## ## 0 minutes remaining
##
## ## 81% complete
## ## 0 minutes remaining
##
## ## 81% complete
## ## 0 minutes remaining
##
## ## 82% complete
## ## 0 minutes remaining
##
## ## 82% complete
## ## 0 minutes remaining
##
## ## 82% complete
## ## 0 minutes remaining
##
## ## 83% complete
## ## 0 minutes remaining
##
## ## 83% complete
## ## 0 minutes remaining
##
## ## 83% complete
## ## 0 minutes remaining
##
## ## 84% complete
## ## 0 minutes remaining
##
## ## 84% complete
## ## 0 minutes remaining
##
## ## 84% complete
## ## 0 minutes remaining
##
## ## 85% complete
## ## 0 minutes remaining
##
## ## 85% complete
## ## 0 minutes remaining
##
## ## 85% complete
## ## 0 minutes remaining
##
## ## 86% complete
## ## 0 minutes remaining
##
## ## 86% complete
## ## 0 minutes remaining
##
## ## 86% complete
## ## 0 minutes remaining
##
## ## 87% complete
## ## 0 minutes remaining
##
## ## 87% complete
## ## 0 minutes remaining
##
## ## 87% complete
## ## 0 minutes remaining
##
## ## 88% complete
## ## 0 minutes remaining
##
## ## 88% complete
## ## 0 minutes remaining
##
## ## 88% complete
## ## 0 minutes remaining
##
## ## 89% complete
## ## 0 minutes remaining
##
## ## 89% complete
## ## 0 minutes remaining
##
## ## 89% complete
## ## 0 minutes remaining
##
## ## 90% complete
## ## 0 minutes remaining
##
## ## 90% complete
## ## 0 minutes remaining
##
## ## 90% complete
## ## 0 minutes remaining
##
## ## 91% complete
## ## 0 minutes remaining
##
## ## 91% complete
## ## 0 minutes remaining
##
## ## 91% complete
## ## 0 minutes remaining
##
## ## 92% complete
## ## 0 minutes remaining
##
## ## 92% complete
## ## 0 minutes remaining
##
## ## 92% complete
## ## 0 minutes remaining
##
## ## 93% complete
## ## 0 minutes remaining
##
## ## 93% complete
## ## 0 minutes remaining
##
## ## 93% complete
## ## 0 minutes remaining
##
## ## 94% complete
## ## 0 minutes remaining
##
## ## 94% complete
## ## 0 minutes remaining
##
## ## 94% complete
## ## 0 minutes remaining
##
## ## 95% complete
## ## 0 minutes remaining
##
## ## 95% complete
## ## 0 minutes remaining
##
## ## 95% complete
## ## 0 minutes remaining
##
## ## 96% complete
## ## 0 minutes remaining
##
## ## 96% complete
## ## 0 minutes remaining
##
## ## 96% complete
## ## 0 minutes remaining
##
## ## 97% complete
## ## 0 minutes remaining
##
## ## 97% complete
## ## 0 minutes remaining
##
## ## 97% complete
## ## 0 minutes remaining
##
## ## 98% complete
## ## 0 minutes remaining
##
## ## 98% complete
## ## 0 minutes remaining
##
## ## 98% complete
## ## 0 minutes remaining
##
## ## 99% complete
## ## 0 minutes remaining
##
## ## 99% complete
## ## 0 minutes remaining
##
## ## 99% complete
## ## 0 minutes remaining
##
## ## 100% complete
## ## 0 minutes remaining
library(lattice)
wireframe(obj ~ n1*shThresh, data = OPTIM,
xlab = "n1", ylab = "shThresh",
main = "Long-Only MACD Exhaustive Optimization",
drape = TRUE,
colorkey = TRUE,
screen = list(z = 15, x = -60)
)
levelplot(obj ~ n1*shThresh, data = OPTIM,
xlab = "n1", ylab = "shThresh",
main = "Long-Only MACD Exhaustive Optimization"
)
之前的报错是找不到initVALS,修改为上题的POINTS,并修改np =4
#install.packages("lattice")
library(lattice)
K <- maxIter <- 200
# Vector theta_0
initDelta <- 6
deltaThresh <- 0.05
PARAM <- PARAMNaught <-
c(n1 = 0, nFact = 0, nSharpe = 0, shThresh = 0) - initDelta/2
# bounds
minVal <- c(n1 = 1, nFact = 1, nSharpe = 1, shThresh = 0.01)
maxVal <- c(n1 = 250, nFact = 10, nSharpe = 250, shThresh = .99)
# Optimization parameters
alpha <- 1
gamma <- 2
rho <- .5
sigma <- .5
randomInit <- FALSE
np <- 4 ## 修改
OPTIM <- data.frame(matrix(NA, ncol = np + 1, nrow = maxIter * (2 * np + 2)))
SIMPLEX <- data.frame(matrix(NA, ncol = np + 1, nrow = np + 1))
names(SIMPLEX) <- names(OPTIM) <- c(names(POINTS), "obj") #修改
# Print function for reporting progress in loop
printUpdate <- function(){
cat("Iteration: ", k, "of", K, "\n")
cat("\t\t", paste0(strtrim(names(OPTIM), 6), "\t"), "\n")
cat("Global Best:\t",
paste0(round(unlist(OPTIM[which.min(OPTIM$obj),]),3), "\t"), "\n")
cat("Simplex Best:\t",
paste0(round(unlist(SIMPLEX[which.min(SIMPLEX$obj),]),3), "\t"), "\n")
cat("Simplex Size:\t",
paste0(max(round(simplexSize,3)), "\t"), "\n\n\n")
}
o <- 1
# Initialize SIMPLEX
for( i in 1:(np+1) ) {
SIMPLEX[i,1:np] <- PARAMNaught + initDelta * as.numeric(1:np == (i-1))
SIMPLEX[i,np+1] <- evaluate(SIMPLEX[i,1:np], minVal, maxVal, negative = TRUE,
y = y)
OPTIM[o,] <- SIMPLEX[i,]
o <- o + 1
}
# Optimization loop
for( k in 1:K ){
SIMPLEX <- SIMPLEX[order(SIMPLEX[,np+1]),]
centroid <- colMeans(SIMPLEX[-(np+1),-(np+1)])
cat("Computing Reflection...\n")
reflection <- centroid + alpha * (centroid - SIMPLEX[np+1,-(np+1)])
reflectResult <- evaluate(reflection, minVal, maxVal, negative = TRUE, y = y)
OPTIM[o,] <- c(reflection, obj = reflectResult)
o <- o + 1
if( reflectResult > SIMPLEX[1,np+1] &
reflectResult < SIMPLEX[np, np+1] ){
SIMPLEX[np+1,] <- c(reflection, obj = reflectResult)
} else if( reflectResult < SIMPLEX[1,np+1] ) {
cat("Computing Expansion...\n")
expansion <- centroid + gamma * (reflection - centroid)
expansionResult <- evaluate(expansion,
minVal, maxVal, negative = TRUE, y = y)
OPTIM[o,] <- c(expansion, obj = expansionResult)
o <- o + 1
if( expansionResult < reflectResult ){
SIMPLEX[np+1,] <- c(expansion, obj = expansionResult)
} else {
SIMPLEX[np+1,] <- c(reflection, obj = reflectResult)
}
} else if( reflectResult > SIMPLEX[np, np+1] ) {
cat("Computing Contraction...\n")
contract <- centroid + rho * (SIMPLEX[np+1,-(np+1)] - centroid)
contractResult <- evaluate(contract, minVal, maxVal, negative = TRUE, y = y)
OPTIM[o,] <- c(contract, obj = contractResult)
o <- o + 1
if( contractResult < SIMPLEX[np+1, np+1] ){
SIMPLEX[np+1,] <- c(contract, obj = contractResult)
} else {
cat("Computing Shrink...\n")
for( i in 2:(np+1) ){
SIMPLEX[i,1:np] <- SIMPLEX[1,-(np+1)] +
sigma * (SIMPLEX[i,1:np] - SIMPLEX[1,-(np+1)])
SIMPLEX[i,np+1] <- c(obj = evaluate(SIMPLEX[i,1:np],
minVal, maxVal,
negative = TRUE, y = y))
}
OPTIM[o:(o+np-1),] <- SIMPLEX[2:(np+1),]
o <- o + np
}
}
centroid <- colMeans(SIMPLEX[-(np+1),-(np+1)])
simplexSize <- rowMeans(t(apply(SIMPLEX[,1:np], 1,
function(v) abs(v - centroid))))
if( max(simplexSize) < deltaThresh ){
cat("Size Threshold Breached: Restarting with Random Initiate\n\n")
for( i in 1:(np+1) ) {
SIMPLEX[i,1:np] <- (PARAMNaught * 0) +
runif(n = np, min = -initDelta, max = initDelta)
SIMPLEX[i,np+1] <- evaluate(SIMPLEX[i,1:np],
minVal, maxVal, negative = TRUE, y = y)
OPTIM[o,] <- SIMPLEX[i,]
o <- o + 1
SIMPLEX <- SIMPLEX[order(SIMPLEX[,np+1]),]
centroid <- colMeans(SIMPLEX[-(np+1),-(np+1)])
simplexSize <- rowMeans(t(apply(SIMPLEX[,1:np], 1, function(v) abs(v - centroid))))
}
}
printUpdate()
}
# Return the best optimization in untransformed parameters
evaluate(OPTIM[which.min(OPTIM$obj),1:np], minVal, maxVal, transformOnly = TRUE)