Sent from my phone. Please excuse my brevity.
On June 17, 2016 1:07:21 PM PDT, Priyank Dwivedi <dpriyank23 at gmail.com> wrote:
>By mistake, I sent it earlier to the wrong address.
>
>---------- Forwarded message ----------
>From: Priyank Dwivedi <dpriyank23 at gmail.com>
>Date: 17 June 2016 at 14:50
>Subject: Matrix Constraints in R Optim
>To: r-help-owner at r-project.org
>
>
>Hi,
>
>Below is the code snippet I wrote in R:
>
>The basic idea is to minimize error by optimizing set of values (in
>this
>scenario 12) in the form of a matrix. I defined the matrix elements as
>vector "*my.data.var" * and then stacked it into a matrix called
>"*my.data.var.mat"
>in the error function. *
>
>The only part that I can't figure out is "what if the column sum in
>the *my.data.var.mat
>needs to be <=1"; that's the constraint/s.. Where do I introduce it in
>the
>OPTIM solver or elsewhere?*
>
>
>
>
>
>
>*my.data.matrix.inj* <- as.matrix(my.data) #convert DATA FRAME to
>MATRIX
>my.data.matrix.inj
>
>
>*my.data.matrix.time* <- as.matrix(my.data.2) #convert DATA FRAME to
>MATRIX
>my.data.matrix.time
>
>
>*my.data.matrix.prod* <- as.matrix(my.data) #convert DATA FRAME to
>MATRIX
>my.data.matrix.prod
>
>
>*my.data.var* <-
>c(2,0.8,0.5,0.2,0.2,0.1,10,0.01,0.02,0.2,0.1,0.01,2,0.8,0.5,0.2,0.2,0.1,10,0.01,0.02,0.2,0.1,0.01,2,0.8,0.5,0.2,0.2,0.1,10,0.01,0.02,0.2,0.1,0.01)
>my.data.var
>
>*my.data.qo* <- c(5990,150,199,996) #Pre-Waterflood Production
>
>*my.data.timet0* <- 0 # starting condition for time
>
>
>*#FUNCTIONQjk.Cal.func* <-
>function(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)
>{
>
> qjk.cal.matrix <- matrix(,nrow = nrow(my.data.matrix.prod),
>ncol=ncol(my.data.matrix.prod))
>
> count <- 1
> number <- 1
> for(colnum in 1:ncol(my.data.matrix.prod)) # loop through all PROD
>wells columns
> {
> sum <-0
> for(row in 1:nrow(my.data.matrix.prod)) #loop through all the rows
> {
> sum <-0
> deltaT <-0
> expo <-0
>
>
> for(column in 1:ncol(my.data.matrix.inj)) #loop through all the
>injector columns to get the PRODUCT SUM
> {
> sum = sum +
>my.data.matrix.inj[row,column]*my.data.var.mat[colnum,number+column]
> }
>
> if(count<2)
> {
> deltaT<- my.data.matrix.time[row]
> }
> else
> {deltaT <- my.data.matrix.time[row]-my.data.matrix.time[row-1]}
>
>
> expo <- exp(-deltaT/my.data.var.mat[colnum,1]) #
>change here too
>
> if(count<2)
> {
> qjk.cal.matrix[row,colnum] = my.data.qo[colnum]*expo + (1-expo)*sum
> }
> else
> {
> qjk.cal.matrix[row,colnum]=qjk.cal.matrix[row-1,colnum]*expo +
>(1-expo)*sum
> }
> count <- count+1
> }
>
> count <-1
> }
>
> qjk.cal.matrix # RETURN CALCULATED MATRIX TO THE ERROR FUNCTION
>
>}
>
>
>*# ERROR FUNCTION* - FINDS DIFFERENCE BETWEEN CAL. MATRIX AND ORIGINAL
>MATRIX. Miminize the Error by changing my.data.var
>
>*Error.func* <- function(my.data.var)
>{
> #First convert vector(my.data.var) to MATRIX aand send it to calculate
>new MATRIX
> *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
> print(paste(Error))
>
>Error_total <- sum(Error,na.rm=FALSE)/ncol(my.data.matrix.prod) #
>total
>avg error
>
>
> * Error_total*
>}
>
># OPTIMIZE
>
>*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))
>
>
>
>--
>Best Regards,
>PD
>
>
>
>--
>Best Regards,
>Priyank Dwivedi
>
> [[alternative HTML version deleted]]
>
>______________________________________________
>R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>https://stat.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide
>http://www.R-project.org/posting-guide.html
>and provide commented, minimal, self-contained, reproducible code.
[[alternative HTML version deleted]]