[R] Optimization Problem in R

Berend Hasselman bhh at xs4all.nl
Sat Feb 9 21:57:45 CET 2013


On 09-02-2013, at 21:08, Axel Urbiz <axel.urbiz at gmail.com> wrote:

> Dear List,
> 
> I'm new in R. I'm trying to solve a simple constrained optimization
> problem.
> 
> Essentially, let's say I have a matrix as in the object 'mm' inside the
> function below. My objective function should have a matrix of parameters,
> one parameter for each element 'mm'  (4 in this case). The problem is to
> select the value of the parameters to maximize the function 'ff' s.t. (1)
> each parameter being either 0 or 1, and (2) the sum of each row in the
> parameter matrix should equal 1.
> 
> I'm using the function constrOptim as shown below, but obviously I'm not
> doing things right. Any help is much appreciated.
> 
> ff <- function (x) {
> 
>  mm <- matrix(c(10, 25, 5, 10), 2, 2)
>  matx <- matrix(NA, 2, 2)
> 
>  for (i in 1:nrow(x)) {
>    for (j in 1:ncol(x)) {
> 
>      matx[i, j] <- x[i, j]
>    }
> 
>  }
> 
>  -sum(apply(mm ^ matx, 1, prod))
> 
> }
> 
> constrOptim(theta = c(0, 0, 0, 0), f = ff, ui=rbind(c(1, 1),
>                                                    c(1, 1)),
>                                                    ci=c(1, 1))


1. your parameter vector has length(4)
2. the ui matrix is 2x2 so ui %*% theta can't be done

3. ui should be something like rbind(c(1,1,0,0),c(0,0,1,1))

4. you haven't specified the gradient function (grad); should be a function or NULL

5. in your function ff on entry x is a vector.  It can be simplified to

ff <- function (x) {   
    mm <- matrix(c(10, 25, 5, 10), 2, 2)    
    matx <- matrix(x,2,2)
    -sum(apply(mm ^ matx, 1, prod))
}

then

constrOptim(theta = c(1, 1, 1, 1), f = ff, grad=NULL, ui=rbind(c(1, 1,0,0),c(0,0,1, 1)),ci=c(1, 1))

gives:

$par
[1]  -63.16203  120.71655 -135.39084  139.50023

$value
[1] -1.797693e+308

$counts
function gradient 
     501       NA 

$convergence
[1] 0

$message
NULL

$outer.iterations
[1] 2


$barrier.value
[1] 0


which is probably not at all what you are looking for.

Look in the CRAN Task View for Optimization for possible options for your optimization problem.

Berend



More information about the R-help mailing list