[R] Relatively Simple Maximization Using Optim Doesnt Optimize
Abby Spurdle
@purd|e@@ @end|ng |rom gm@||@com
Sat Mar 14 05:09:26 CET 2020
> It is correctly signalling that it hasn't converged (look at
> optim.sol$convergence, which "indicates that the iteration limit maxit
> had been reached".) But CG should be taking bigger steps. On a 1D
> quadratic objective function with no errors in the derivatives, it
> should take one step to convergence. Here we're not quadratic (though
> it's pretty close), and we don't have exact derivatives (your ripples),
> so the fact that it is sticking to one step size is a sign that it is
> not working. If those ripples are big enough to matter (and I'm not
> convinced of that), it should take highly variable steps.
Hi Duncan,
I need to apologize.
The problem has nothing to do with little ripples.
(My bad...)
I tried approximating the function with a cubic Hermite spline.
(Essentially smoothing the function).
However, the optim function still returns the wrong result.
Which surprised me...
Then I tried changing the max number of iterations, and found
something quite interesting:
---------
production.wr <- function(L){
cat (L, "\n")
budget=100000
Lcost=12
Kcost=15
K=(budget-L*Lcost)/Kcost
machines=0.05*L^(2/3)*K^(1/3)
return(machines)
}
S1=optim(1001,production.wr,method="CG",control=list(fnscale=-1, maxit=1))
S1=optim(1001,production.wr,method="CG",control=list(fnscale=-1, maxit=2))
S1=optim(1001,production.wr,method="CG",control=list(fnscale=-1, maxit=3))
S1=optim(1001,production.wr,method="CG",control=list(fnscale=-1, maxit=4))
---------
The first iteration calls the function (3 + 2) times.
Subsequent iterations call the function (2 + 2) times.
In the subset-of-3, the step size is exactly 0.001.
And in subsequent leading (but not trailing) subsets-of-2, the step
size is exactly 0.002.
I was wondering (hypothetically) if the first iteration is
approximating the second derivative, and subsequent iterations are
not...???
More information about the R-help
mailing list