simulated_annealing_01
Simulated Annealing algorithm (see theory).
df_all, df_best, delta_time, report = simulated_annealing_01(settings)
This function does not perform more than one repetition. To perform multiple repetitions, use the metaheuristic_optimizer function.
Input variables
Name | Description | Type |
---|---|---|
settings | Algorithm settings: [0] setup, [1] initial population, [2] seeds | List |
settings[0] \(=\) setup | Algorithm setup | Dictionary |
setup keys | ||
'number of population' | Number of population | Integer |
'number of iterations' | Number of iterations | Integer |
'number of dimensions' | Problem dimension | Integer |
'x pop lower limit' | Lower limit of the design variables | List |
'x upper lower limit' | Upper limit of the design variables | List |
'none variable' | None variable. Default is None. User can use this variable in objective function | None, list, float, dictionary, str or any |
'objective function' | Objective function. The Metapy user defined this function | Py function (def) |
'algorithm parameters' | Algorithm parameters | Dictionary |
'algorithm parameters' keys | ||
'mutation' | Mutation parameters | Dictionary |
'temp. control' | Temperature parameters | Dictionary |
settings[1] \(=\) initial population | Users can inform the initial population or use initial population functions | List or METApy function |
settings[2] \(=\) seed | Random seed. Use None for random seed | None or Integer |
Output variables
df_all | All data of the population | Dataframe |
df_best | Best data of the population | Dataframe |
delta_time | Time of the algorithm execution in seconds | Float |
report | Report of the algorithm execution | String |
Mutation parameters
'mutation': {
'cov (%)': 20,
'pdf': 'gaussian'
}
Name | Description | Type |
---|---|---|
'cov (%)' | Coefficient of variation in percentage | Float |
'pdf' | Probability density function used in random generator. Options: 'gaussian' or 'uniform' | String |
Temperature parameters
'temp. control': {
'temperature t_0': 15,
'temperature update': 'geometric',
'alpha': 0.9
}
Name | Description | Type |
---|---|---|
'temperature t_0' | Initial temperature. 'auto': Automatic starts cooling temperature. For specific value, use a float number (see theory) | Float or String |
'temperature update' | Cooling schema (see theory):
| String |
'alpha' | Cooling control (see theory) | Float |
Example 1
Use the Simulated Annealing optimization method to optimize the 2D sphere function. Use a total of 100 iterations to perform the optimization. Consider the limits \(\mathbf{x}_L = [-5.0, -5.0]\) and \(\mathbf{x}_U = [5.0, 5.0]\) for the problem design variables. Consider the initial guess (two agents) \(\mathbf{pop}_0 = [-0.74, 1.25]\) and \(\mathbf{pop}_1 = [3.58, -3.33]\). Use \(cov = 20\%\), Gaussian random generator, \(T_0 = 15\) and geometric schedule (\(\alpha = 0.90\)).
"""Object Function: of_file.py"""
def my_function(x, none_variable):
x_0 = x[0]
x_1 = x[1]
of = x_0 ** 2 + x_1 ** 2
return of
"""Run optimization: your_problem.py or your_problem.ipynb"""
# import libray
# pip install metapy-toolbox or pip install --upgrade metapy-toolbox
from metapy_toolbox import simulated_annealing_01
from of_file import my_function # External .py file with your objective function
# Algorithm setup
setup = {
'number of iterations': 100,
'number of population': 2,
'number of dimensions': 2,
'x pop lower limit': [-5, -5],
'x pop upper limit': [5, 5],
'none variable': None,
'objective function': my_obj_function,
'algorithm parameters': {
'mutation': {
'cov (%)': 20,
'pdf': 'gaussian'
},
'temp. control': {
'temperature t_0': 15,
'temperature update': 'geometric',
'alpha': 0.9
}
},
}
# Initial guess
init_pop = [[-0.74, 1.25],
[3.58, -3.33]]
"""
# or random initial guess (real design variables)
from metapy_toolbox import initial_population_01
init_pop = initial_population_01(setup['number of population'],
setup['number of dimensions'],
setup['x pop lower limit'],
setup['x pop upper limit'])
"""
# Seed
seed = None
# Call function
settings = [setup, init_pop, seed]
df_all_results, df_resume, time_cost, report = simulated_annealing_01(settings)