Powered by OpenAIRE graph
Found an issue? Give us feedback
addClaim

BEACON-M: Continuous Benchmark problems with Explicit Adjustable COrrelatioN control

BEACON-M: Continuous Benchmark problems with Explicit Adjustable COrrelatioN control

Abstract

# BEACON-M: Continuous Benchmark problems with Explicit Adjustable COrrelatioN control BEACON-M is a framework for generating continuous many-objective optimisation problems (MOPs) where the correlation between the objectives can be explicitly controlled. It utilizes Random Fourier Features (RFF) of the Radial Basis Function (RBF) kernel and a linear transformation to create landscape functions that adhere to a specified correlation matrix. ## Installation To run this project, you need Python installed along with several scientific computing libraries. ### Prerequisites Create a virtual environment (recommended) and install the dependencies. **Important Note on Pymoo:** This project relies on `pymoo`, and for performance reasons, it is highly recommended to use the version with compiled C extensions. The standard pip installation might not include these extensions for all platforms or configurations. See https://pymoo.org/installation.html for insttuctions on installing the compiled version. Then install the remaining dependencies: ```bash pip install -r requirements.txt ``` ## Structure The core logic is contained within `beaconm_generator.py`: * **`BEACONMProblemSampler`**: This class defines the problem parameters. It handles sampling problems and saving/loading them as well * **`BEACONMProblem`**: A wrapper class that inherits from `pymoo.core.problem.Problem`. It connects the `BEACONMProblemSampler` to the `pymoo` interface, allowing `pymoo` algorithms to interact with the generated problem. * **`BEACONMOptimiser`**: A utility class to streamline the execution of optimisation algorithms on a `BEACONMProblem`. It handles running the algorithm and saving results. * **`BEACONMCallback`**: A simple callback for `pymoo` to track metrics Functions for generating grouped correlation matrices are in `utils.py`. ## Usage ### Running Experiments Run the experiments with: ```bash python3 experiments.py ``` ##### Please note that these experiments are run on a single core. We used extensive multi-threading on powerful computers to run our experiments. Running experiments this way will yield the same results... but it may take a while... ### Example: Single Problem Execution Here is how to generate a single problem instance and evaluate a point: ```python import numpy as np import torch from beaconm import * from utils import CorrelationMatrix # 1. Define parameters # Hyperparameters - we reccmmend not to change them num_features = 1000 lengthscale = 0.01 # Problem parameters input_dim = 10 # number of decision variables output_dim = 3 # number of objectives lb=0.0 # remains the same for all decision variables ub=1.0 # remains the same for all decision variables # corr matrix based on Group-structure - define single group or two group matrix structure. For example, if you want a single group, a correlation matrix with single correlation value among objectives can look like this. single_group = CorrelationMatrix(M=3).single_group(rho=0.5) # If you want to two group matrix structure, a correlation matrix with two correlation values (intra and inter group) among objectives can look like this ..., where ... is intra-group and ... is inter group two_group = CorrelationMatrix(M=3).two_group(rho_w=0.5, rho_b=-0.5) # Optionally you can define just `rho_w`, in which case `rho_b = -rho_w` by default two_group = CorrelationMatrix(M=3).two_group(rho_w=0.5) # Or you can define your own correlation matrix (as long as it is positive definite) corr_matrix = np.array([ [1, 0.5, 0.5], [0.5, 1, 0.5], [0.5, 0.5, 1] ]) # 3. Instantiate the BEACON-M sampler beaconm_sampler = BEACONMProblemSampler( correlation_matrix=corr_matrix, num_features=num_features, input_dim=input_dim, output_dim=output_dim, lengthscale=lengthscale, identifier='example_problem' ) # 4. Save the problem instance (the filepath will be chosen from a combination of objective space dimensionality, decision space dimensionality and the 'itentifier' value) beaconm_sampler.save_problem(lb=lb, ub=ub) # --------------------------------------- # 5. Sampling the problem - meaning getting the objective function values. An example is shown below: # Randomly sample points from the problem # decision variable values decision_points = np.random.uniform(lb, ub, size=(1000, input_dim)) decision_points = torch.tensor(decision_points, dtype=torch.float64) # objective function samples samples = beaconm_sampler.sample(decision_points) # 6. An example of solving rhe multi-objective problem with NSGA-II from pymoo.algorithms.moo.nsga2 import NSGA2 # Convert the problem to a Pymoo problem problem = BEACONMProblem( beaconm_sampler=beaconm_sampler, lb=lb, ub=ub ) # Initialise the optimiser wrapper for BEACON-M in Pymoo algorithm = NSGA2(pop_size=100) optimizer = BEACONMOptimiser( problem=problem, algorithm=algorithm, iteration=0 ) # Run the optimization res = optimizer.minimise_problem( n_gen=1000, save_data=True ) ```

  • BIP!
    Impact byBIP!
    selected citations
    These citations are derived from selected sources.
    This is an alternative to the "Influence" indicator, which also reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically).
    0
    popularity
    This indicator reflects the "current" impact/attention (the "hype") of an article in the research community at large, based on the underlying citation network.
    Average
    influence
    This indicator reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically).
    Average
    impulse
    This indicator reflects the initial momentum of an article directly after its publication, based on the underlying citation network.
    Average
Powered by OpenAIRE graph
Found an issue? Give us feedback
selected citations
These citations are derived from selected sources.
This is an alternative to the "Influence" indicator, which also reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically).
BIP!Citations provided by BIP!
popularity
This indicator reflects the "current" impact/attention (the "hype") of an article in the research community at large, based on the underlying citation network.
BIP!Popularity provided by BIP!
influence
This indicator reflects the overall/total impact of an article in the research community at large, based on the underlying citation network (diachronically).
BIP!Influence provided by BIP!
impulse
This indicator reflects the initial momentum of an article directly after its publication, based on the underlying citation network.
BIP!Impulse provided by BIP!
0
Average
Average
Average