# 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)](#table1).
+ **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)](#table2).
Different design techniques, e.g., racing, intensification, and surrogate [(Table 3)](#table3).
+ **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.
Table 1: Metaheuristic algorithm components in AutoOptLib.
| Component | Description |
|----------------------------------|----------------------------------------------------------------------------------------------------------------------------------|
| **Continuous search:** | - |
| cross\_arithmetic | Whole arithmetic crossover |
| cross\_sim\_binary | Simulated binary crossover [[DA+95]](../References/ref.html#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]](../References/ref.html#YLL99) |
| search\_mu\_gaussian | Gaussian mutation [[Fog98]](../References/ref.html#Fog98) |
| search\_mu\_polynomial | Polynomial mutation [[DA+96]](../References/ref.html#DA+96) |
| search\_mu\_uniform | Uniform mutation |
| search\_pso | Particle swarm optimization's particle fly and update [[SE98]](../References/ref.html#SE98) |
| search\_de\_random | The "random/1" differential mutation [[SP97]](../References/ref.html#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]](../References/ref.html#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]](../References/ref.html#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]](../References/ref.html#Glo89) |
Table 2: Design objectives involved in AutoOptLib.
| 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]](../References/ref.html#YDWB22). |
Table 3: Algorithm performance evaluation methods provided in AutoOptLib.
| 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]](../References/ref.html#LIDLC+16) | Save algorithm evaluations by stopping evaluating on the next instance if performance is statistically worse than at least another algorithm. |
| intensification [[HHLBS09]](../References/ref.html#HHLBS09) | Save algorithm evaluations by stopping evaluating on the next instance if performance is worse than the incumbent. |