我目前正在尝试使用模拟退火包 GenSA 来最小化以下功能:
efficientFunction <- function(v) {
t(v) %*% Cov_Mat %*% v
}
其中 Cov_Mat 是从 4 个资产获得的协方差矩阵,v 是维度 4 的权重向量。
我正在尝试以这种方式解决马科维茨资产分配方法,我想知道如何引入数学约束,例如所有系数的总和必须等于 1 :
sum(v) = 1
此外,由于我打算依赖 GenSA 函数,所以我想使用类似这样的约束:
v <- c(0.25, 0.25, 0.25, 0.25)
dimension <- 4
lower <- rep(0, dimension)
upper <- rep(1, dimension)
out <- GenSA(v, lower = lower, upper = upper, fn = efficientFunction)
我在这篇论文中发现:如何在模拟退火算法中处理此类约束,但我不知道如何在 R 中实现它。
如果有任何建议,我将非常感激。这是我第一次使用 SO,所以请毫不犹豫地告诉我我提问的方式是否有错误。