【发布时间】:2018-03-07 21:30:23
【问题描述】:
我试图在 R 中最小化一个函数 S.residuum ,但有一些限制
S.residuum<- function(w, stdv, corr) {
intermed<-0
for (i in 1:length(stdvv)) {
intermed =intermed+residuum(w,stdvv,corr.mat,i)
}
return(intermed)
}
其中w 是一个长度为 6 的向量。
约束如下所示:
0.03 <= w1 <= 0.27
0.03 <= w2 <= 0.27
0.20 <= w3 <= 0.91
0.01 <= w4 <= 0.1
0.01 <= w5 <= 0.1
0.01 <= w6 <= 0.1
到目前为止,我能够实现它:
nlminb(c(1,1,1,1,1,1),S.residuum,hessian = NULL,
lower=c(0.03,0.03,0.2,0.01,0.01), upper=c(0.27,0.27,0.91,0.1,0.1)),
其中c(1,1,1,1,1,1) 是初始值。
但是,我还有 2 个其他限制。我把第一个写成函数:
nequal <- function(w,stdv, corr) {
intermed<-0
for (j in 1:length(stdvv)) {
for (i in 1:length(stdvv)) {
intermed =intermed+ w[[i]] * w[[j]] * stdv[[i]] * stdv[[j]] * corr[[i]][[j]]
}
}
intermed=sqrt(intermed)
},
其中stdv 是一个向量,corr 是一个矩阵。应满足以下约束:
1) nequal <=0.75
2) w1+w2+w3+w4+w5+w6=1
有人可以告诉我如何在 R 中做到这一点吗? 谢谢!
【问题讨论】:
-
(1) 最好先写下数学模型,以便我们了解您想要实现的目标。 (2) 你有约束(非线性不等式和线性等式约束)。您需要一个可以处理此类问题的求解器。
nlminb仅适用于无约束和有界约束问题。
标签: r optimization minimization