1.1 Introduction
AutoOptLib is a Matlab library for automatically designing metaheuristic optimizers. It provides:
Rich library of design choices - Over 40 representative metaheuristic components for designing algorithms for continuous, discrete, and permutation problems with/without constraints and uncertainties (Table 1).
Flexibility to designing diverse algorithms - Design algorithms with diverse structures in a single run, enables great possibility to find novel and efficient algorithms.
Fair benchmark of various design objectives and techniques - Various design objectives, e.g., solution quality, runtime, and anytime performance (Table 2). Different design techniques, e.g., racing, intensification, and surrogate (Table 3).
Good accessibility - Graphical user interface (GUI) for users to input problems, manage the algorithm design process, make experimental comparisons, and visualize results with simple one-clicks.
Easy extensibility - Easily add new algorithmic components, objectives, and techniques by a uniform interface.
AutoOptLib’s benefit includes:
Save labor resources and time - Human experts may cost days or weeks to conceive, build up, and verify the optimizers; AutoOptLib would saves such labor resources and time costs with today’s increasing computational power.
Democratize metaheuristic optimizers - Through automated algorithm design techniques, AutoOptLib would democratize the efficient and effective use of metaheuristic optimizers. This is significant for researchers and practitioners with complicated optimization problem-solving demands but without the expertise to distinguish and manage suitable optimizers among various choices.
Surpass human algorithm design - By fully exploring potential design choices and discovering novelties with computing power, AutoOptLib would go beyond human experience and gain enhanced performance regarding human problem-solving.
Promote metaheuristic research - With a uniform collection of related techniques, AutoOptLib would promote research of the automated algorithm design and metaheuristic fields and be a tool in the pursuit of autonomous and general artificial intelligence systems.
| Component | Description |
|---|---|
| Continuous search: | - |
| cross_arithmetic | Whole arithmetic crossover |
| cross_sim_binary | Simulated binary crossover [DA+95] |
| cross_point_one | One-point crossover |
| cross_point_two | Two-point crossover |
| cross_point_n | n-point crossover |
| cross_point_uniform | Uniform crossover |
| search_cma | The evolution strategy with covariance matrix adaption |
| search_eda | The estimation of distribution |
| search_mu_cauchy | Cauchy mutation [YLL99] |
| search_mu_gaussian | Gaussian mutation [Fog98] |
| search_mu_polynomial | Polynomial mutation [DA+96] |
| search_mu_uniform | Uniform mutation |
| search_pso | Particle swarm optimization's particle fly and update [SE98] |
| search_de_random | The "random/1" differential mutation [SP97] |
| search_de_current | The "current/1" differential mutation |
| search_de_current_best | The "current-to-best/1" differential mutation |
| reinit_continuous | Random reinitialization for continuous problems |
| Discrete search: | - |
| cross_point_one | One-point crossover |
| cross_point_two | Two-point crossover |
| cross_point_n | n-point crossover |
| cross_point_uniform | Uniform crossover |
| search_reset_one | Reset a randomly selected entity to a random value |
| search_reset_rand | Reset each entity to a random value with a probability |
| search_reset_creep | Add a small positive or negative value to each entity with a probability, for problems with ordinal attributes |
| reinit_discrete | Random reinitialization for discrete problems |
| Permutation search: | |
| cross_order_two | Two-order crossover |
| cross_order_n | n-order crossover |
| search_swap | Swap two randomly selected entities |
| search_swap_multi | Swap each pair of entities between two randomly selected indices |
| search_scramble | Scramble all the entities between two randomly selected indices |
| search_insert | Randomly select two entities, insert the second entity to the position following the first one |
| reinit_permutation | Random reinitialization for permutation problems |
| Choose where to search from: | - |
| choose_roulette_wheel | Roulette wheel selection |
| choose_tournament | K-tournament selection |
| choose_traverse | Choose each of the current solutions to search from |
| choose_cluster | Brain storm optimization's idea picking up for choosing solutions to search from [Shi15] |
| choose_nich | Adaptive niching based on the nearest-better clustering |
| Select promising solutions: | - |
| update_always | Always select new solutions |
| update_greedy | Select the best solutions |
| update_pairwise | Select the better solution from each pair of old and new solutions |
| update_round_robin | Select solutions by round-robin tournament |
| update_simulated_annealing | Simulated annealing's update mechanism, i.e., accept worse solution with a probability [KGJV83] |
| Archive: | - |
| archive_best | Collect the best solutions found so far |
| archive_diversity | Collect most diversified solutions found so far |
| archive_tabu | The tabu list [Glo89] |
| Objective | Description |
|---|---|
| quality | The designed algorithm's solution quality on the target problem within a fixed computational budget. |
| runtimeFE | The designed algorithm's running time (number of function evaluations) till reaching a performance threshold on solving the target problem. |
| runtimeSec | The designed algorithm's running time (wall clock time, in second) till reaching a performance threshold on solving the target problem. |
| auc | The area under the curve (AUC) of empirical cumulative distribution function of running time, measuring the anytime performance [YDWB22]. |
| Method | Description |
|---|---|
| exact | Exactly run all the designed algorithms on all test problem instances. |
| approximate | Use low complexity surrogate to approximate the designed algorithms' performance without full evaluation. |
| racing [LIDLC+16] | Save algorithm evaluations by stopping evaluating on the next instance if performance is statistically worse than at least another algorithm. |
| intensification [HHLBS09] | Save algorithm evaluations by stopping evaluating on the next instance if performance is worse than the incumbent. |