Skip to content

Commit ff30e20

Browse files
authoredOct 10, 2023
adding_plotting_curve (#1564)
* adding_plotting_curve * addgomea (#1565) * addgomea * fix_missing_import * fix_missing_import * fix_missing_import * fix_missing_import * fix_missing_import * fix_missing_import * Update test_optimizerlib.py * fix * fix * fix
1 parent a4016ae commit ff30e20

File tree

9 files changed

+55
-4
lines changed

9 files changed

+55
-4
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import nevergrad as ng
2+
3+
def f(x):
4+
return sum((x-1.234)**2)
5+
opt = ng.optimizers.TwoPointsDE(3, 500)
6+
opt.minimize(f)
7+
print(opt.optim_curve)

‎mypy.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[mypy]
22

33
#[mypy-scipy.*,requests,smac,smac.*,pandas,compiler_gym,compiler_gym.*,gym,gym.*,gym_anm,matplotlib.*,pytest,cma,bayes_opt.*,torchvision.models,torch.*,mpl_toolkits.*,fcmaes.*,tqdm,pillow,PIL,PIL.Image,sklearn.*,pyomo.*,pyproj,IOHexperimenter.*,tensorflow,koncept.models,cv2,imquality,imquality.brisque,lpips,mixsimulator.*,networkx.*,cdt.*,]
4-
[mypy-scipy.*,requests,pandas,compiler_gym,compiler_gym.*,gym_anm,matplotlib.*,pytest,cma,bayes_opt.*,torchvision.models,torch.*,mpl_toolkits.*,fcmaes.*,tqdm,pillow,PIL,PIL.Image,sklearn.*,pyomo.*,pyproj,IOHexperimenter.*,tensorflow,koncept.models,cv2,imquality,imquality.brisque,lpips,mixsimulator.*,networkx.*,cdt.*,pymoo,pymoo.*,bayes_optim.*,olympus.*,pymoo,pymoo.*,pybullet,pybullet_envs,pybulletgym,pyvirtualdisplay,nlopt,aquacrop.*]
4+
[mypy-scipy.*,requests,pandas,compiler_gym,compiler_gym.*,gym_anm,matplotlib.*,pytest,cma,bayes_opt.*,torchvision.models,torch.*,mpl_toolkits.*,fcmaes.*,tqdm,pillow,PIL,PIL.Image,sklearn.*,pyomo.*,pyproj,IOHexperimenter.*,tensorflow,koncept.models,cv2,imquality,imquality.brisque,lpips,mixsimulator.*,networkx.*,cdt.*,pymoo,pymoo.*,bayes_optim.*,olympus.*,pymoo,pymoo.*,pybullet,pybullet_envs,pybulletgym,pyvirtualdisplay,nlopt,aquacrop.*,gomea]
55
ignore_missing_imports = True
66

77
[mypy-nevergrad.functions.rl.*,torchvision,torchvision.*,nevergrad.functions.games.*,nevergrad.functions.multiobjective.pyhv,nevergrad.optimization.test_doc,nevergrad.functions.gym.multigym,nevergrad.functions.gym.tuple_gym_env,nevergrad.common.sphere,nevergrad.examples.*]

‎nevergrad/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@
1515
__all__ = ["optimizers", "families", "callbacks", "p", "typing", "errors", "ops"]
1616

1717

18-
__version__ = "0.14.0"
18+
__version__ = "1.0.0"

‎nevergrad/common/sphere.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -776,7 +776,7 @@ def quasi_randomize(pointset, method):
776776
if len(shape) > 1 and shape[0] > 5:
777777
x = dispersion(n, shape, conv=[int(s / 3) for s in list(shape)[:-1]])
778778
else:
779-
x = rs_metric_all(n, shape)
779+
x = rs_ng_DiagonalCMA(n, shape)
780780
else:
781781
x = get_a_point_set(n, shape, method)
782782
x = normalize(x)

‎nevergrad/optimization/base.py

+5
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ def __init__(
9090
# you can also replace or reinitialize this random state
9191
self.num_workers = int(num_workers)
9292
self.budget = budget
93+
self.optim_curve: tp.List[tp.Any] = []
9394

9495
# How do we deal with cheap constraints i.e. constraints which are fast and use low resources and easy ?
9596
# True ==> we penalize them (infinite values for candidates which violate the constraint).
@@ -348,6 +349,10 @@ def tell(
348349
raise TypeError(
349350
f'"tell" method only supports float values but the passed loss was: {loss} (type: {type(loss)}.'
350351
)
352+
if isinstance(loss, float) and (
353+
len(self.optim_curve) == 0 or self.num_tell > self.optim_curve[-1][0] * 1.1
354+
):
355+
self.optim_curve += [(self.num_tell, loss)]
351356
# check Parameter
352357
if not isinstance(candidate, p.Parameter):
353358
raise TypeError(

‎nevergrad/optimization/recastlib.py

+32
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ def __init__(
4242
method
4343
in [
4444
"CmaFmin2",
45+
"gomea",
46+
"gomeablock",
47+
"gomeatree",
4548
"SMAC3",
4649
"BFGS",
4750
"LBFGSB",
@@ -362,6 +365,32 @@ def smac2_obj(p, seed: int = 0):
362365
# best_res = cost
363366
# best_x = weakself._normalizer.backward(np.asarray(x, dtype=float))
364367
#
368+
369+
elif "gomea" in weakself.method:
370+
import gomea
371+
372+
class gomea_function(gomea.fitness.BBOFitnessFunctionRealValued):
373+
def objective_function(self, objective_index, data): # type: ignore
374+
if weakself._normalizer is not None:
375+
data = weakself._normalizer.backward(np.asarray(data, dtype=np.float32))
376+
return objective_function(data)
377+
378+
gomea_f = gomea_function(weakself.dimension)
379+
lm = {
380+
"gomea": gomea.linkage.Univariate(),
381+
"gomeablock": gomea.linkage.BlockMarginalProduct(2),
382+
"gomeatree": gomea.linkage.LinkageTree("NMI".encode(), True, 0),
383+
}[weakself.method]
384+
rvgom = gomea.RealValuedGOMEA(
385+
fitness=gomea_f,
386+
linkage_model=lm,
387+
lower_init_range=0.0,
388+
upper_init_range=1.0,
389+
max_number_of_evaluations=budget,
390+
)
391+
rvgom.run()
392+
best_x = gomea_f.best_x
393+
365394
elif weakself.method == "CmaFmin2":
366395
import cma # type: ignore
367396

@@ -469,6 +498,9 @@ def __init__(self, *, method: str = "Nelder-Mead", random_restart: bool = False)
469498
BOBYQA = NonObjectOptimizer(method="BOBYQA").set_name("BOBYQA", register=True)
470499
NelderMead = NonObjectOptimizer(method="Nelder-Mead").set_name("NelderMead", register=True)
471500
CmaFmin2 = NonObjectOptimizer(method="CmaFmin2").set_name("CmaFmin2", register=True)
501+
GOMEA = NonObjectOptimizer(method="gomea").set_name("GOMEA", register=True)
502+
GOMEABlock = NonObjectOptimizer(method="gomeablock").set_name("GOMEABlock", register=True)
503+
GOMEATree = NonObjectOptimizer(method="gomeatree").set_name("GOMEATree", register=True)
472504
# NLOPT = NonObjectOptimizer(method="NLOPT").set_name("NLOPT", register=True)
473505
Powell = NonObjectOptimizer(method="Powell").set_name("Powell", register=True)
474506
RPowell = NonObjectOptimizer(method="Powell", random_restart=True).set_name("RPowell", register=True)

‎nevergrad/optimization/test_optimizerlib.py

+5
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ def check_optimizer(
144144
"NLOPT_GN_CRS2_LM",
145145
"NLOPT_GN_ISRES",
146146
"NLOPT_GN_ESCH",
147+
"GOMEABlock",
148+
"GOMEA",
149+
"GOMEATree",
147150
]
148151

149152

@@ -299,6 +302,7 @@ def test_optimizers_minimal(name: str) -> None:
299302
"CMAbounded",
300303
"Tiny",
301304
"iscrete",
305+
"GOMEA",
302306
"para",
303307
"SPSA",
304308
"EDA",
@@ -314,6 +318,7 @@ def test_optimizers_minimal(name: str) -> None:
314318
"Small",
315319
"small",
316320
"Chain",
321+
"Tree",
317322
"Mix",
318323
"Micro",
319324
"Naive",

‎nevergrad/optimization/test_suggest.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
def suggestable(name: str) -> bool:
2525
# Some methods are not good with suggestions.
26-
keywords = ["TBPSA", "BO", "EMNA", "EDA", "BO", "Stupid", "Pymoo"]
26+
keywords = ["TBPSA", "BO", "EMNA", "EDA", "BO", "Stupid", "Pymoo", "GOMEA"]
2727
return not any(x in name for x in keywords)
2828

2929

@@ -75,6 +75,7 @@ def good_at_suggest(name: str) -> bool:
7575
"Multi",
7676
"Anisotropic",
7777
"BSO",
78+
"GOMEA",
7879
"Sparse",
7980
"Adaptive",
8081
"Doerr",

‎requirements/bench.txt

+1
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,4 @@ pytest-circleci-parallelized
5656
Py-BOBYQA>=1.2
5757
ax-platform
5858
loguru # for fcmaes
59+
gomea

0 commit comments

Comments
 (0)
Please sign in to comment.