0

我正在尝试在 中使用以下函数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,这违反了约束。

图像

如何强制执行约束?

4

0 回答 0