2016-06-20 28 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

回答