[R] linear constraint optim with bounds/reparametrization
Spencer Graves
spencer.graves at pdf.com
Tue Aug 10 12:25:22 CEST 2004
If A%*%theta>c, then log(c-A%*%theta) returns NA. if A%*%theta<c, log(A%*%theta-c) returns NA. Only when A%*%theta==c do you get a "number" from log(A%*%theta-c), and that's (-Inf).
However, for an equality constraint, I've had good luck by with an objective function that adds something like the following to my objective function:
constraintViolationPenalty*(A%*%theta-c)^2,
where "constraintViolationPenalty" is passed via "..." in a call to optim. If I want only (A%*%theta>=c), then I might write this as follows:
constraintViolationPenalty*(A%*%theta<c)*(A%*%theta-c)^2
This term is everywhere differentiable and is 0 when the
constraint is satisfied.
I may first run optim with a modest value for
constraintViolationPenalty then restart it with the output of the
initial run as starting values and with a larger value for
constraintViolationPenalty.
hope this helps. spencer graves
Ingmar Visser wrote:
>On 8/9/04 4:52 PM, "Thomas Lumley" <tlumley at u.washington.edu> wrote:
>
>
>
>>On Mon, 9 Aug 2004, Kahra Hannu wrote:
>>
>>
>>
>>>>1) constrOptim does not work in this case because it only fits inequality
>>>>constraints, ie A%*%theta > = c
>>>>
>>>>
>>> --- I was struggling with the same problem a
>>>few weeks ago in the portfolio optimization context. You can impose
>>>equality constraints by using inequality constraints >= and <=
>>>simultaneously. See the example bellow.
>>>
>>>
>>>
>>Ick. You do not want to use constrOptim for equality constraints.
>>constrOptim is a log-barrier interior-point method, meaning that it adds
>>a multiple of log(A%*%theta-c) to the objective function. This is a really
>>bad idea as a way of faking equality constraints.
>>
>>Use Lagrange multipliers and optim.
>>
>>
>
>Is there a package that does all that for me? Or is there example code that
>does something similar?
>
>ingmar
>
>______________________________________________
>R-help at stat.math.ethz.ch mailing list
>https://www.stat.math.ethz.ch/mailman/listinfo/r-help
>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>
>
More information about the R-help
mailing list