在优化中为 objective 函数中的每个输入组合寻找最佳参数
Finding optimal parameter for each input combination in the objective function in an optimization
我正在校准一个模型,为此我必须为我提供给 objective 函数的每个输入组合估计一个参数。我有超过 10k 个输入组合,我想最小化每个组合的参数。模型中的所有其他变量都是已知的。我实现了为整个集合估计 1 个最小值,但这对我没有帮助,当我对每个组合尝试我的方法时,我得到错误: Error in mP[ logik] <- mPv[ logik, drop = FALSE ] : 下标作业中不允许使用 NA。
我的 objective 函数如下所示
x_vol <- vector(mode = "double", length = 10776)
objective_function_vol <- function(x_vol){
S <- calibration_set$index_level
K <- calibration_set$strike
tau <- calibration_set$tau
r <- calibration_set$riskfree_rate
q <- calibration_set$q
model_prices_vol <- vector(mode = "double", length = 10776)
for (i in 1:10776){
model_prices_vol[i] <- hestonCallcf(S = S[i], K = K[i], t = tau[i],
r = r[i], q = 0,
v0 = x_vol[i],
vbar = 0.1064688, rho = -0.9914710,
a = 1.6240300, vvol = 0.98839192)
print(i)
}
diff_sq <- (market_price - model_prices_vol)^2
wdiff <- diff_sq/market_price
error <- sum(wdiff)/10776
return(error)
}
我正在使用 NMOF::DEopt 进行优化。是否可以编写第二个循环来存储 x_vol 的最佳值,因为我认为使用下标 i 来表示已知输入值和未知值在某种程度上是错误的。
该错误意味着某些 objective 函数调用导致了 NA
。
如果您只想最小化单个参数(即标量),微分进化可能不是您想要的方法。沿着一个维度进行网格搜索(可能带有改进)可能会更好。
我正在校准一个模型,为此我必须为我提供给 objective 函数的每个输入组合估计一个参数。我有超过 10k 个输入组合,我想最小化每个组合的参数。模型中的所有其他变量都是已知的。我实现了为整个集合估计 1 个最小值,但这对我没有帮助,当我对每个组合尝试我的方法时,我得到错误: Error in mP[ logik] <- mPv[ logik, drop = FALSE ] : 下标作业中不允许使用 NA。
我的 objective 函数如下所示
x_vol <- vector(mode = "double", length = 10776)
objective_function_vol <- function(x_vol){
S <- calibration_set$index_level
K <- calibration_set$strike
tau <- calibration_set$tau
r <- calibration_set$riskfree_rate
q <- calibration_set$q
model_prices_vol <- vector(mode = "double", length = 10776)
for (i in 1:10776){
model_prices_vol[i] <- hestonCallcf(S = S[i], K = K[i], t = tau[i],
r = r[i], q = 0,
v0 = x_vol[i],
vbar = 0.1064688, rho = -0.9914710,
a = 1.6240300, vvol = 0.98839192)
print(i)
}
diff_sq <- (market_price - model_prices_vol)^2
wdiff <- diff_sq/market_price
error <- sum(wdiff)/10776
return(error)
}
我正在使用 NMOF::DEopt 进行优化。是否可以编写第二个循环来存储 x_vol 的最佳值,因为我认为使用下标 i 来表示已知输入值和未知值在某种程度上是错误的。
该错误意味着某些 objective 函数调用导致了 NA
。
如果您只想最小化单个参数(即标量),微分进化可能不是您想要的方法。沿着一个维度进行网格搜索(可能带有改进)可能会更好。