2016-06-20 8 views
0

Ich habe einen Vektor von ganzen Zahlen als Eingabewerte (Werte für optim par Start)Set Constraints in einer Matrix - OPTIM in 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) 
  • Optimierungsproblem ist eine min. Problem.

  • Die Fehlerfunktion berechnet Summe der Quadratwurzel diff in Werte zwischen zwei Matrizen (Gegebene Werte Matrix vs Berechnete Matrix)

  • Die berechnete Matrix ist die eine, die oben ganzzahligen Vektor verwendet.
    Daher wird in der Fehlerfunktion I stapeln den ganzzahligen Vektor in eine Matrix als my.data.var.mat <- matrix(my.data.var,nrow = 4,ncol = 6,byrow = TRUE)

der Einschränkung, dass ich, dass colSum(my.data.var.mat) <=1

Optim als

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)) 
definiert ist, einzuführen, müssen

Fehler Funktion ist definiert als

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 
} 

Datensatz Gegeben: my.data.matrix.prod, my.data.timet0, my.data.qo, my.data.matrix.time, my.data.matrix.inj

Also, meine Frage ist, wie und wo soll ich die Matrix col Summe Einschränkung einführen? Oder anders ausgedrückt: Wie würde OPTIM den ganzzahligen Vektor unter der Matrix-Col-Summen-Einschränkung variieren?

+0

@ZheyuanLi: thnks. Ich hoffe, ich bekomme einen Rat! – Modi

+0

@ZheyuanLi: Versuche mein Glück mit "nloptr". Mal schauen! – Modi

+1

@ZheyuanLi: Gelöst es. Anstatt Optim zu verwenden, habe ich nloptr solver verwendet. Es berücksichtigt Ungleichheitsbeschränkungen. Schau mal hier ..http: //stackoverflow.com/questions/37951719/multiple-inequality-constraints-minimization-with-r-nloptr-package – Modi

Antwort