This package provides functions to run a global optimization algorithm, specifically designed to explore the properties of high-dimensional functions through High-Resolution sampling. It is based on the following paper. 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.