Release Notes

2.1.2 [2025-09-09]

This is a patch release with optimizations and bug fixes.

Optimizations

Bug Fixes

2.1.1 [2025-07-11]

This is a patch release with optimizations and bug fixes.

Optimizations

Bug Fixes

2.1.0 [2025-06-05]

This is a minor update release. It introduces features that enable the training of neural network surrogates to be more robust. Furthermore, the state of a surrogate (e.g. the trained weights of a network) is now saved between runs of a study.

New Features

Optimizations

Bug Fixes

2.0.5 [2025-03-07]

This is a patch release that fixes some issues of the installer. The fix introduced in v2.0.2 to use certificate authority files from the default system store lead to problems for some environments.

2.0.4 [2025-02-28]

This is a patch release that fixes some issues of the ActiveLearning driver and the installer.

Optimizations

Bug Fixes

2.0.3 [2025-01-30]

This is a patch release that fixes some issues of the ScipyMinimizer and the BayesianReconstruction driver.

Optimizations

Bug Fixes

2.0.2 [2025-01-15]

This is a patch release that fixes some issues with hyperparameter optimization, state retrieval and installation in environment with proxy servers.

Bug Fixes

2.0.1 [2024-12-31]

This patch release improves the compatibility of the installer and the installation for different environments.

Bug Fixes

2.0.0 [2024-11-15]

This is the first release of the standalone JCMoptimizer. It is a major upgrade of the optimizer previously shipped with JCMsuite based one a new implementation. Scripts using the old JCMsuite optimizer have to be adapted.

Excerpt of New Features

Minimal Required Update Steps

To create a client instance, use the interface of the new optimizer. For example, in Python use

from jcmoptimizer import Server, Client, Study, Observation
server = Server()
client = Client(server.host)

The arguments for creating a new Study instance have changed. For example, the domain argument is now called design_space in order to distinguish it from parameters belonging to the environment:

# Definition of the search domain
design_space = [
    {'name': 'x1', 'type': 'continuous', 'domain': (-1.5,1.5)}, 
    {'name': 'x2', 'type': 'continuous', 'domain': (-1.5,1.5)},
]

# Definition of fixed environment parameter
environment = [
    {'name': 'radius', 'type': 'fixed', 'domain': 1.5},
]

# Definition of a constraint on the search domain
constraints = [
    {'name': 'circle', 'expression': 'sqrt(x1^2 + x2^2) <= radius'}
]

# Creation of the study object with study_id 'vanilla_bayesian_optimization'
study = client.create_study(
    design_space=design_space,
    environment=environment,
    constraints=constraints,
    driver="BayesianOptimization",
    name="Standard Bayesian optimization",
    study_id="vanilla_bayesian_optimization"
)

The objective function is replaced by an evaluator function in order to clarify that the output does not need to be the objective value itself but also physical outputs that can be mapped to the final objective.

# Evaluation of the black-box function for specified design parameters
def evaluate(study: Study, x1: float, x2: float, radius: float) -> Observation:

    time.sleep(2) # make objective expensive
    observation = study.new_observation()
    observation.add(10*2
                + (x1**2-10*np.cos(2*np.pi*x1)) 
                + (x2**2-10*np.cos(2*np.pi*x2))
            )
    return observation

# Run the minimization
study.set_evaluator(evaluate)
study.run()

Please consult the documentation for the description of the arguments and outputs of the new methods.