|
1 | 1 | # 🧮 AlgorithmsInterface.jl |
2 | 2 |
|
3 | | -`AlgorithmsInterface.jl` is a Julia package to provide a common interface to run iterative tasks. |
4 | | -**Algorithm** here refers to an iterative sequence of commands, that are run until a certain stopping criterion is met. |
| 3 | +A small, composable interface for iterative algorithms in Julia. |
5 | 4 |
|
6 | 5 | [![docs][docs-dev-img]][docs-dev-url] [![CI][ci-img]][ci-url] [![runic][runic-img]][runic-url] [![codecov][codecov-img]][codecov-url] [![aqua][aqua-img]][aqua-url] |
7 | 6 |
|
| 7 | + |
| 8 | +## Design |
| 9 | + |
| 10 | +Iterative methods tend to share the same moving parts, which can lead to quite a bit of boilerplate and friction when trying to compose them. |
| 11 | +This package aims to provide abstractions such as the main loop, stopping criteria, and a logging system shared by these methods. |
| 12 | +It does not ship any concrete algorithms; the goal is to provide the tools to build on. |
| 13 | +It does however ship with a useful set of stopping-criterion and logging primitives out of the obx. |
| 14 | + |
| 15 | +The surface is intentionally small. |
| 16 | +The main design goal of the interface is to cleanly separate the implementation of the algorithm itself from the generic tools that surround it. |
| 17 | +Those generic tools, such as stopping, logging and debugging, are written once and then work across every algorithm that adopts the interface. |
| 18 | + |
| 19 | +See the [documentation][docs-dev-url] for the design walk-through, the API reference, and a worked example. |
| 20 | +For background and discussion, see the [initial discussion](https://github.com/JuliaManifolds/AlgorithmsInterface.jl/discussions/1). |
| 21 | + |
| 22 | +Note that this package is still in its design phase, and while SemVer is respected, (breaking) changes might still occur as the design takes shape. |
| 23 | + |
8 | 24 | [docs-dev-img]: https://img.shields.io/badge/docs-dev-blue.svg |
9 | 25 | [docs-dev-url]: https://JuliaManifolds.github.io/AlgorithmsInterface.jl/dev/ |
10 | 26 |
|
|
19 | 35 |
|
20 | 36 | [aqua-img]: https://raw.githubusercontent.com/JuliaTesting/Aqua.jl/master/badge.svg |
21 | 37 | [aqua-url]: https://github.com/JuliaTesting/Aqua.jl |
22 | | - |
23 | | -# Statement of need |
24 | | - |
25 | | -A first approach to algorithms is a simple for-loop for a maximum number of iterations. |
26 | | -Using an interface instead allows to both specify different criteria to stop easily, even in their combination. |
27 | | -Furthermore a generic interface allows to both “hook into” an algorithm easily as well as combining them. |
28 | | - |
29 | | -A common interface for algorithms allows to reuse common code – especially stopping criteria, but especially also logging, debug, recording, and caching capabilities. |
30 | | -Finally, a common interface also allows to easily combine existing algorithms, hence enhancing interoperability, for example using one algorithm as a sub routine of another one. |
31 | | - |
32 | | -# Main features |
33 | | - |
34 | | -See the [initial discussion](https://github.com/JuliaManifolds/AlgorithmsInterface.jl/discussions/1) |
35 | | -as well as the [overview on existing things](https://github.com/JuliaManifolds/AlgorithmsInterface.jl/discussions/2) |
36 | | - |
37 | | -## Further ideas |
38 | | - |
39 | | -* generic stopping criteria `<:AbstractStoppingCriterion` |
40 | | - * `StopAfterIteration(i)` for example |
41 | | -* a factory that turns certain keywords like `maxiter=` into stopping criteria |
42 | | -* still support the `stopping_criterion=` ideas from `Manopt.jl` |
43 | | -* by default `stop()` from above would check such a stopping criterion |
44 | | -* generic debug and record functionality – together with hooks even |
45 | | - |
46 | | -## Possible extensions |
47 | | - |
48 | | -* to `LineSearches.jl` |
49 | | -* |
0 commit comments