Skip to content
Prev 394818 / 398502 Next

Noisy objective functions

On Sun, 13 Aug 2023, Hans W writes:
Since Nelder--Mead worked /relatively/ well: in my
experience, its results can sometimes be improved by
restarting it, i.e. re-initializing the simplex.  See this
note here: http://enricoschumann.net/R/restartnm.htm ,
which incidentally also uses the Rosenbrock function.

Just for the record, I think Differential Evolution (DE)
can handle such problems well, though it would usually
need more iterations.  As computational "proof" ;-) , I
run DE 50 times for the k == 1 case, and each time store
whether the resulting objective-function value is below
1e-6.  I let DE take way more function evaluations
(population of 100 times 500 generations = 50000 function
evaluations); but it gets a value below 1e-6 in all 50
cases.


    library("NMOF")
    ofv.below.threshold <- logical(50)
    for (i in seq_along(ofv.below.threshold)) {
        sol <- DEopt(fnk,
                     algo = list(
                         nP = 100, nG = 500,
                         min = rep(  5, 5), max = rep(   10, 5)))
        
        ofv.below.threshold[i] <- sol$OFvalue < 1e-6
    }
    sum(ofv.below.threshold)/length(ofv.below.threshold)


(These 50 runs take less than half a minute on my
machine.) Note that I have on purpose initialized the
population in the range 5 to 10, i.e. way off the optimum.
Message-ID: <87y1iew3z6.fsf@aldus>
In-Reply-To: <CAML4n3NEdWX8841d=i-0bPURvgkpjs2cMBeX2WcVyu0=U09A8A@mail.gmail.com> (Hans W.'s message of "Sun, 13 Aug 2023 21:28:19 +0200")