0
我有整数作为输入值(起始的Optim面值)的向量在矩阵集中的约束 - OPTIM中的R
my.data.var <- c(10,0.25,0.25,0.25,0.25,0.25,
10,0.25,0.25,0.25,0.25,0.25,
10,0.25,0.25,0.25,0.25,0.25,
10,0.25,0.25,0.25,0.25,0.25)
优化问题是一种分钟。问题。
误差函数计算 两个矩阵(给定的值矩阵VS计算矩阵)
- 计算的矩阵是上述整数向量使用一个之间的值差异的平方根的总和。
因此,在误差函数,I堆栈整数载体导入 矩阵作为my.data.var.mat <- matrix(my.data.var,nrow = 4,ncol = 6,byrow = TRUE)
,我必须介绍的是,colSum(my.data.var.mat) <=1
在Optim被定义为
sols<-optim(my.data.var,Error.func,method="L-BFGS-B",upper=c(Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1,Inf,1,1,1,1,1),
lower=c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))
约束
错误功能定义为
Error.func <- function(my.data.var){
my.data.var.mat <- matrix(my.data.var,nrow = ncol(my.data.matrix.prod),ncol = ncol(my.data.matrix.inj)+1,byrow = TRUE)
Calc.Qjk.Value <- Qjk.Cal.func(my.data.timet0,my.data.qo,my.data.matrix.time,
my.data.matrix.inj, my.data.matrix.prod,my.data.var,my.data.var.mat)
diff.values <- my.data.matrix.prod-Calc.Qjk.Value #FIND DIFFERENCE BETWEEN CAL. MATRIX AND ORIGINAL MATRIX
Error <- ((colSums ((diff.values^2), na.rm = FALSE, dims = 1))/nrow(my.data.matrix.inj))^0.5 #sum of square root of the diff
Error_total <- sum(Error,na.rm=FALSE)/ncol(my.data.matrix.prod) # total avg error
Error_total
}
鉴于数据集:my.data.matrix.prod
,my.data.timet0, my.data.qo, my.data.matrix.time, my.data.matrix.inj
所以,我的问题是如何以及应该在哪里引入矩阵相加和约束?或者换句话说,OPTIM如何在Matrix col sum约束下改变整数向量?
@ZheyuanLi:thnks。希望我得到一些建议! – Modi
@ZheyuanLi:用“nloptr”试试我的运气。让我们来看看! – Modi
@ZheyuanLi:解决了。我没有使用Optim,而是使用nloptr求解器。它允许不平等约束。在这里看看..http://stackoverflow.com/questions/37951719/multiple-inequality-constraints-minimization-with-r-nloptr-package – Modi