List of Algorithm Components¶
This page provides a comprehensive overview of all algorithm components available in the Mork framework. Components are organized by their role in the optimization process.
Metaheuristics¶
High-level algorithmic strategies that guide the search process. These are the main algorithms you'll use to solve optimization problems.
| Algorithm | Description | Documentation |
|---|---|---|
| Variable Neighborhood Search (VNS) | Systematically changes neighborhood structures to escape local optima | VNS Documentation |
| Simulated Annealing (SA) | Temperature-based probabilistic technique inspired by metallurgy | SA Documentation |
| Iterated Greedy (IG) | Destruction-reconstruction metaheuristic that iteratively destroys and rebuilds solutions | IG Documentation |
| Scatter Search | Population-based metaheuristic using reference sets and solution combination | Scatter Search Documentation |
| Multi-Start Algorithm | Simple but effective strategy that runs constructive+improvement methods multiple times | Multi-Start Documentation |
Constructive Methods¶
Components that build initial solutions from scratch. These methods create feasible solutions that can then be improved.
| Constructor | Description | Documentation |
|---|---|---|
| Constructive (Base) | Abstract base class for all constructive methods | Constructive Documentation |
| GRASP Constructive | Greedy Randomized Adaptive Search Procedure for construction phase | GRASP Documentation |
| Reconstructive | Specialized constructor for rebuilding partially destroyed solutions | Reconstructive Documentation |
Improvement Methods¶
Components that take a solution and try to improve it. These methods cannot return worse solutions than their input.
| Improver | Description | Documentation |
|---|---|---|
| Improver (Base) | Abstract base class for all improvement methods | Improver Documentation |
| Local Search | Base class for local search algorithms that explore neighborhoods and host the supported descent strategies | Local Search Documentation |
| LocalSearchBestImprovement | Local search that always picks the best improving move in the neighborhood | Best-improvement strategy |
| LocalSearchFirstImprovement | Local search that applies the first improving move found | First-improvement strategy |
| Simulated Annealing (as Improver) | SA can be used as an improvement method with temperature-based acceptance | SA Documentation |
| Variable Neighborhood Descent (VND) | Systematic exploration of multiple neighborhood structures in a descent manner | VND Documentation |
Shake/Perturbation Methods¶
Components that perturb solutions to escape local optima. Unlike improvers, these can worsen the solution.
| Shake Method | Description | Documentation |
|---|---|---|
| Shake (Base) | Abstract base class for all perturbation methods | Shake Documentation |
| Destructive | Interface for destruction operators that remove parts of a solution | Destructive Documentation |
| Random Move Shake | Simple perturbation that applies random moves to the solution | Random Move Documentation |
Component Integration¶
All components follow a consistent design pattern and can be combined flexibly:
graph TD
A[Instance] --> B[Constructive]
B --> C[Initial Solution]
C --> D[Improver]
D --> E[Improved Solution]
E --> F{Continue?}
F -->|Yes| G[Shake]
G --> H[Perturbed Solution]
H --> D
F -->|No| I[Final Solution]
Using Components¶
Components are designed to be:
- Modular: Each component has a single, well-defined responsibility
- Composable: Components can be combined in different ways to create complex algorithms
- Reusable: The same component can be used in multiple algorithms
- Extensible: Easy to create new components by extending existing ones
Advanced Topics¶
Component Autodetection¶
Components are automatically detected by the framework when annotated with @AlgorithmComponent or when extending framework-provided base classes.
Automatic Algorithm Configuration¶
Components can be automatically configured using irace integration. See irace documentation for details.
Custom Component Types¶
You can create your own component hierarchies by extending existing types or creating new ones. See intro documentation for more information.