bbopt / NOMAD.jl

Julia interface to the NOMAD blackbox optimization software
Other
47 stars 5 forks source link

How to use NOMAD with a function that depends on both the parameters to be optimized (x) and fixed parameters (p)? #71

Open martinmestre opened 11 months ago

martinmestre commented 11 months ago

Hi, I would really appreciate an example on this. Thanks.

ctribes commented 11 months ago

We have a parameter called FIXED_VARIABLES for that. https://nomad-4-user-guide.readthedocs.io/en/latest/AdvancedFunctionalities.html

And we have an example for Nomad in batch mode. https://github.com/bbopt/nomad/blob/master/examples/advanced/batch/FixedVariable/param.txt

salomonl commented 11 months ago

@martinmestre The interface of the NOMAD software in Julia does not include the parameter FIXED_VARIABLES, because it is difficult to test it when combined with linear equality constraints (between others). You need to launch it only on non-fixed variables. However, the following example should do the deal:

import NOMAD

function bb1(x, p)
    sum1 = sum(cos.(x) .^ 4)
    sum2 = sum(x)
    sum3 = (1:length(x)) .* x
    prod1 = prod(cos.(x) .^ 2)
    prod2 = prod(x)
    g1 = -prod2 + 0.75
    g2 = sum2 - 7.5 * length(x)
    f = 10 * g1 + 10 * g2
    if (sum3 ≠ 0.0)
        f -= abs((sum1 - 2 * prod1) / sqrt(3))
    end

    # scaling
    f *= 10^(-5) + p
    c2000 = -f - 2000 + p
    return (true, true, [g1; g2; f; c2000])
end

for param in [1.0, 2.0, 2.0, 3.0] #include two times 2.0 for reproducibility
    println("parameter = ", param, "\n")

    pb = NOMAD.NomadProblem(5, 4, ["PB"; "PB"; "OBJ"; "EB"],
                            x -> bb1(x, param))
    pb.options.max_bb_eval = 1000

    result = NOMAD.solve(pb, 7.0 * ones(Float64, 5))
end

On my machine, it returns:

parameter = 1.0

BBE OBJ
1 -168090.044939
A termination criterion is reached: No termination (all). Mesh minimum precision reached (Algo)

Best feasible solution:     Undefined.

Best infeasible solution:   #102716 ( 2.00166e-08 -222.807 6.07192 -97.4832 151.656 )   Evaluation OK    f = -1999                       h =   0.122258619025000001

Blackbox evaluations:         851
Total model evaluations:      97312
Cache hits:                   78
Total number of evaluations:  929
parameter = 2.0

1 -336178.408995
324   -1994.428007
326   -1997.180223
351   -1997.953221
395   -1997.977435
462   -1997.999186
615   -1997.999481
636   -1997.999555
637   -1997.999774
659   -1997.999975
798   -1997.999977
816   -1997.999981
817   -1997.999995
909   -1997.999998
981   -1998
A termination criterion is reached: Maximum number of blackbox evaluations (Eval Global) 1000

Best feasible solution:     #177805 ( -3.75106e-06 -34.3587 -5.3168 27.9054 -50.2317 )  Evaluation OK    f = -1998                       h =   0

Best infeasible solution:   #165855 ( -2.92766e-06 -34.3587 -5.31716 27.9054 -50.2499 ) Evaluation OK    f = -1994.1627410000000964      h =   0.000000000001

Blackbox evaluations:         1000
Total model evaluations:      156157
Cache hits:                   98
Total number of evaluations:  1098
parameter = 2.0

1 -336178.408995
324   -1994.428007
326   -1997.180223
351   -1997.953221
395   -1997.977435
462   -1997.999186
615   -1997.999481
636   -1997.999555
637   -1997.999774
659   -1997.999975
798   -1997.999977
816   -1997.999981
817   -1997.999995
909   -1997.999998
981   -1998
A termination criterion is reached: Maximum number of blackbox evaluations (Eval Global) 1000

Best feasible solution:     #177805 ( -3.75106e-06 -34.3587 -5.3168 27.9054 -50.2317 )  Evaluation OK    f = -1998                       h =   0

Best infeasible solution:   #165855 ( -2.92766e-06 -34.3587 -5.31716 27.9054 -50.2499 ) Evaluation OK    f = -1994.1627410000000964      h =   0.000000000001

Blackbox evaluations:         1000
Total model evaluations:      156157
Cache hits:                   98
Total number of evaluations:  1098
parameter = 3.0

1 -504266.773051
332   -1996.036238
379   -1996.699164
457   -1996.744346
471   -1996.919412
535   -1996.98619
540   -1996.988497
589   -1996.999198
758   -1996.999977

BBE OBJ
891   -1996.999982
915   -1996.999996
A termination criterion is reached: Maximum number of blackbox evaluations (Eval Global) 1000

Best feasible solution:     #183997 ( -42.5891 8.98381 6.27354 0.000322763 -1.31333 )   Evaluation OK    f = -1996.9999960000000101      h =   0

Best infeasible solution:   #189937 ( -42.6005 8.97419 6.27395 0.000233275 -1.3404 )    Evaluation OK    f = -1990.3838189999999031      h =   0.000000000169

Blackbox evaluations:         1000
Total model evaluations:      174204
Cache hits:                   90
Total number of evaluations:  1090

Hope it helps ! We will add a remark in the documentation.