Hello,

Thanks a lot for the replies.

I tried to use the "optim" function in R, and chose the "L-BFGS-B" method
of optimization. Now the result is very sensitive to the starting values. I
use the same function, but I give the line of  code I use for "optim".

optim(0.25, f, method= "L-BFGS-B", lower = 0, upper=5). Here 0.25 is the
starting value.

Result: $ par = 0, $Value = 1 (this is correct). $par indicates that the
maximum value of the function is at 0, and $ Value says that the maximum
value is 1.

However, I produced a quick table for the results with different starting
values:
Starting Value         $par                 $Value
 Result
0.25                             0                          1
          Correct
0.5                              0.4999                  4.1223e-09
Wrong
1                                    1                           0
               Wrong
3                                     3                           0
              Wrong

I wanted to optimise the logistic function, as the logistic function
approximates an indicator function. The indicator function is defined as
follows:  I(u), where I(u) = 1, where u = 0, and I(u) = 0, for all other
 u. u is strictly positive.

My objective function contains a indicator function.As the indicator
function is non-continuous, the optimization would become non-convex. To
bypass this limitation, I used the logistic function to approximate the
indicator function.

A simple example: f(u) = I(u) + u/6;    Maximise f(u) where u is between (0
to 5).
Correct Answer: f(u) =1, where u=0.
Code:
f= function (k) {
T_s = 20
result = (2- 2/(1+ exp(-2*T_s*k))) + (k/6)
return(result)
}
optim(0.15, f, method= "L-BFGS-B", lower = 0, upper=5,control =
list(fnscale=-1) )
## Here 0.15 is the starting value. I produce a similar table as above:

Starting Value         $par                 $Value
 Result
0.15                             0                          1
          Correct
0.16                             5                       0.833
         Wrong
0.17                             5                       0.833
         Wrong
2                                   5                       0.833
           Wrong

Questions:
1. If my objective function contains an Indicator function, is there an
efficient way to implement it?
2. Does R have any quick non-convex optimiser functions?

Best Regards,
Shantanu Mullick
PhD Candidate
ESSEC Business School

On 28 October 2013 22:01, Rolf Turner <r.tur...@auckland.ac.nz> wrote:

>
> This could be described as a bug, perhaps.  Or it could be described as
> an indication that numerical optimization is inevitably tricky. Notice that
> if you narrow down your search interval from [0,5] to [0,0.5] you get the
> right answer:
>
> > optimize(f, c(0, 0.5), maximum= TRUE,tol=1e-10)
> $maximum
> [1] 4.192436e-11
>
> $objective
> [1] 1
>
> I guess there's a problem with finding a gradient that is effectively
> (numerically) zero when "k" is equal to 5.
>
>
>     cheers,
>
>     Rolf Turner
>
>
>
> On 10/29/13 06:00, Shantanu MULLICK wrote:
>
>> Hello Everyone,
>>
>> I want to perform a 1-D optimization by using the optimize() function. I
>> want to find the maximum value of a "logistic" function. The optimize()
>> function gives the wrong result.
>>
>> My code:
>> f= function (k) {
>> T_s = 20
>> result = (2- 2/(1+ exp(-2*T_s*k)))
>> return(result)
>> }
>> optimize(f, c(0, 5), tol = 0.0000000000001, maximum= TRUE)
>>
>> The maximum value for the function happens at k=0, and the maximum value
>> is
>> 1. Yet  the optimise function, says that the maximum value happens at k=
>> 4.9995, and the maximum value is 0.
>>
>>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to