[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