This package provides functions to run a global optimization algorithm, specifically designed to explore the properties of high-dimensional functions through High-Resolution sampling, based on [1]. The package includes tools for defining functions, setting optimization parameters, generating samples, and visualizing empirical probabilities.
The package is available through pip, and may be installed via:
pip install GlobalOptimizationHRLA
In order to use this package, you need to define:
- The target function and its gradient.
- An initial distribution for the search space.
The provided example uses the Rastrigin function as the target for optimization.
import numpy as np
d = 10
U = lambda x: d + np.linalg.norm(x) ** 2 - np.sum(np.cos(2 * np.pi * x))
dU = lambda x: 2 * x + 2 * np.pi * np.sin(2 * np.pi * x)
Define an initial distribution from which samples are generated:
initial = lambda: np.random.multivariate_normal(np.zeros(d) + 3, 10 * np.eye(d))
To execute the global optimization algorithm, use the DNLA.Algorithm class.
import GlobalOptimizationHRLA as HRLA
algorithm = HRLA.Algorithm(d=d, M=100, N=10, K=14000, h=0.01, title=title, U=U, dU=dU, initial=initial)
samples_filename = algorithm.generate_samples(As=[1,2,3,4], sim_annealing=False)
- d (int): Dimension of the search space.
- M (int): Number of particles in the swarm.
- N (int): Number of generations for resampling.
- K (int): Total number of iterations to perform.
- h (float): Step size for gradient descent.
- title (str): Title for the optimization, useful for organizing saved data.
- U (function): The target function to optimize.
- dU (function): The gradient of the target function.
- initial (function): The initial distribution for generating particles.
- As (list): List of tolerances or annealing factors to adjust optimization.
- sim_annealing (bool): Determines whether to apply simulated annealing (default is False).
- samples_filename (str): Path to the file where generated samples are saved.
After running the optimization, use the PostProcessor
object to analyze and plot the empirical probabilities from the generated samples.
postprocessor = HRLA.PostProcessor(samples_filename)
- samples_filename (str): The filename containing the generated samples data.
The PostProcessor object provides multiple methods. One is the plot_empirical_probabilities
method, which generates a plot of the empirical probabilities for different tolerances.
postprocessor.plot_empirical_probabilities(dpi=10, layout="32", tols=[1,2,3,4,5,6], running=False)
- dpi (int): Resolution of the plot, in dots per inch.
- layout (str): Layout of the plot, specified as a string. Must be one of
["13", "23", "32", "22"]
(default is"23"
). - tols (list): List of tolerances for computing empirical probabilities (default is
[1,2,3,4,5,6]
). - running (bool): Whether to display the plot with a running average or not (default is
False
).
Another method is compute_tables
, which generates tables of empirical means and standard deviations.
postprocessor.compute_tables(measured=[K], dpi=100, mode="mean", running="True"")
- measured (list): List with iteration counts to measure the empirical probabilities.
- dpi (int): Resolution of the plot, in dots per inch.
- mode (str): Mode for computing the tables, specified as a string. Must be one of
["mean", "std", "best"]
(default is"mean"
). - running (bool): Whether to display the results are computed with a running average or not (default is
True
).
Examples may in found in the /examples directory of the repository.
[1] Cortild, D., Delplancke, C., Oudjane, N., & Peypouquet, J. (2024). Global Optimization Algorithm through High-Resolution Sampling. arXiv preprint arXiv:2410.13737. https://doi.org/10.48550/arXiv.2410.13737