2016-06-20 27 views
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约束下改变整数向量?

+0

@ZheyuanLi:thnks。希望我得到一些建议! – Modi

+0

@ZheyuanLi:用“nloptr”试试我的运气。让我们来看看! – Modi

+1

@ZheyuanLi:解决了。我没有使用Optim,而是使用nloptr求解器。它允许不平等约束。在这里看看..http://stackoverflow.com/questions/37951719/multiple-inequality-constraints-minimization-with-r-nloptr-package – Modi

回答