我正在尝试在 中使用以下函数DEOptim()
,但由于某种原因,未强制执行求和约束。从DEOptim()
文档来看,这似乎是强制执行约束的正确方法,但它提供的解决方案并未遵守此约束。
N_AEX <- 22
w <- rep(1/N_AEX, N_AEX)
T <- 156
week_returns = 0
portfolio_returns = c()
X_in <- XdatesAEX[1:T]
funcAEX <- function(w) {
if (sum(w) > 1) {
return(Inf)
} else {
for (t in 1:T) {
for (i in 1:N_AEX) {
week_returns[t] <- -w[i]*AEX_stocks[t, i]
}
portfolio_returns <- append(portfolio_returns, week_returns[t])
#print(portfolio_returns)
}
}
return(portfolio_returns)
}
set.seed(1234)
w_AEX_DE <- DEoptim(fn = funcAEX,
lower = rep(0.01, N_AEX),
upper = rep(1, N_AEX)) # individual weight constraints
打印这w_AEX_DE$bestval
应该给出由 找到的最佳值DEOptim
,但它会返回NULL
。如您所见,“bestmem”(找到的最佳解决方案)加起来大于 1,这违反了约束。
如何强制执行约束?