Giter Club home page Giter Club logo

Comments (13)

jakobbossek avatar jakobbossek commented on June 1, 2024

Thanks for the report. Going to fix this within the next hour.

from smoof.

giuseppec avatar giuseppec commented on June 1, 2024

And:, Exponential Function has a multimodal tag?

from smoof.

jakobbossek avatar jakobbossek commented on June 1, 2024

Ok, there is a FIXME in the Eggholder function. It is implemented as a scalable function, but I did not figure out the global optimum for dimensions > 2L. That's why I removed the dimension argument for this special generator. For now I will remove the scalable tag.

Fixed the other two issues as well.

Let's leave this open for now. Maybe you will find some more minor issues. Unfortunately for some function there exist different sources with different opt value specifications.

from smoof.

giuseppec avatar giuseppec commented on June 1, 2024
getGlobalOptimum(makeAlpine02Function(2))
# $param
#     x1    x2
# 1 7.917 7.917
# 
# $value
# [1] 7.884864

but in http://infinity77.net/global_optimization/test_functions_nd_A.html it says that
f(x_i) = -6.1295 for all i=1,...,n

from smoof.

jakobbossek avatar jakobbossek commented on June 1, 2024

Yeah, I remember that Alpine02 case. I think the specification on the website is wrong.
The function is implemented correctly via `prod(sqrt(x) * sin(x)). Take a look at the 3D plot:

fn = makeAlpine02Function(2L)
plot3D(fn)
  1. Since the function is expected to be maximized, a negative global optimum is not possible.
  2. The 3D plot revelas, that the optimum has a value above 7. In fact fn(c(7.917, 7.917)) results in 7.886

from smoof.

giuseppec avatar giuseppec commented on June 1, 2024

Aggreed. I think they used the gobal "minimum" of the function, which is indeed f(x_i) = -6.1295, however, not at c(7.917, 7.917). So this function wants to be maximized and not minimized.

from smoof.

giuseppec avatar giuseppec commented on June 1, 2024

Further strange things:

  1. In http://infinity77.net/global_optimization/test_functions_nd_B.html it says "Global optimum: f(x_i) = 0 for \mathbf{x} = [-10, 0]", but the function is defined in "x_1 \in [-15, -5], x_2 \in [-3, 3]"
getGlobalOptimum(makeBukinN2Function())$value
# [1] 0
makeBukinN2Function()(c(-15,-3))
# [1] -424.75

also plot3D(makeBukinN2Function()) looks a bit strange, right? It is at least completely different from http://infinity77.net/global_optimization/_images/Bukin02.png

  1. This seems to be a good page http://al-roomi.org/component/tags/tag/20-matlab. They have, for example information about the global optimum for the michalewicz function (for n=1,2).

plot3D(makeCosineMixtureFunction(2)) # looks like a maximum, but:
getGlobalOptimum(makeCosineMixtureFunction(2))
$param
  x1 x2
1  0  0

$value
[1] -0.2

$is.minimum
[1] TRUE

same for Keane.

  1. plot3D(makeBochachevskyFunction(2)) does not look like http://al-roomi.org/benchmarks/unconstrained/2-dimensions/10-bohachevsky-s-function-no-1
    Also:
makeBochachevskyFunction(2)(c(-15,-0.3))
# -13.49639, although getGlobalOptimum says that 0 is the optimum
  1. plot3D(makeRosenbrockFunction(2)) does not look like the rosenbrock function from https://en.wikipedia.org/wiki/Rosenbrock_function

from smoof.

jakobbossek avatar jakobbossek commented on June 1, 2024

Thanks for the report. Going to check this soon.

from smoof.

jakobbossek avatar jakobbossek commented on June 1, 2024

Ok, I fixed all the stuff above. For the Rosenbrock function there obviously exist different function definitions. I now changed the defintion to the specification of infinity77

The implementation of the BukinN2 function is given by:

makeBukinN2Function = function() {
  makeSingleObjectiveFunction(
    name = "Bukin Function N. 2",
    fn = function(x) {
      100 * (x[2] - 0.01 * x[1]^2 + 1) + 0.01 * (x[1] + 10)^2
    },
    par.set = makeNumericParamSet(
      len = 2L,
      id = "x",
      lower = c(-15, -3),
      upper = c(-5, 3),
      vector = TRUE
    ),
    tags = attr(makeBukinN2Function, "tags"),
    global.opt.params = c(-10, 0),
    global.opt.value = 0
  )
}

This corresponds with the infinity77 formula, but the 3D plot does not resemble the plot given on the website. If you have a look at the formula, than you can see, that the contribution x_2 is not squared ans thus the plot cannot look like the one on the website.

from smoof.

jakobbossek avatar jakobbossek commented on June 1, 2024

@giuseppec: What do you think about the Bukin02 function (see my last comment here)?

from smoof.

giuseppec avatar giuseppec commented on June 1, 2024

Hm, I googled a little bit and it is difficult to find more infos for this function. I think there is more info in "Differential Evolution: Fundamentals and Applications in Electrical Engineering (Anyong Qing)" but I don't have access to this book right now. By plotting this Bukin02 function, it does not seem to be a "cool" function that should be optimized...

What about removing this Bukin02 function and just keep http://al-roomi.org/benchmarks/unconstrained/2-dimensions/51-bukin-s-function-no-4
and http://al-roomi.org/benchmarks/unconstrained/2-dimensions/52-bukin-s-function-no-6, which seem to be much more "well-known"?

from smoof.

jakobbossek avatar jakobbossek commented on June 1, 2024

Ok, I found the Bukin02 function definition in two more papers. It is correct. As a consequence, the plot on the infinity77 website must be wrong. Not removing for now.

from smoof.

jakobbossek avatar jakobbossek commented on June 1, 2024

Closing for now. Reopen if needed.

from smoof.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.