考虑以下数据框:
A=data.frame(v1=c(4,2,-3,3,-1,3,6,-2), v2=c(3,3,-1,5,-3,-2,-2,-3), v3=c(5,-2,2,2,5,5,4,-4),
v4=c(-2,-1,3,1,-1,3,2,-5), v5=c(2,-5,4,-4,3,1,1,1))
有以下优化问题:
其中 a_i 是矩阵 A 的第 i 行。
我试图用包解决这个问题nloptr
。首先是目标函数:
fct <- function(p) {
return(sum((as.matrix(A)%*%p<0)*(as.matrix(A)%*%p)^2))
}
然后是约束:
constraint <- function(p){
return(p[1]-1)
}
但是我尝试过的所有求解器都需要梯度,例如:
sol <- nloptr(x0=c(1,1,-0.13,-0.5,1.3), eval_f=fct, eval_g_eq=constraint,
opts=list("algorithm"="NLOPT_LD_SLSQP"))
-> A gradient for the objective function is needed by algorithm NLOPT_LD_SLSQP but was not supplied
是否可以计算这个函数的梯度,或者有其他方法可以解决这个问题吗?
谢谢你。