Skip to content

Commit 7efd248

Browse files
committed
update Readme
1 parent f87561f commit 7efd248

1 file changed

Lines changed: 18 additions & 30 deletions

File tree

Readme.md

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,26 @@
11
# 🧮 AlgorithmsInterface.jl
22

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.
54

65
[![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]
76

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+
824
[docs-dev-img]: https://img.shields.io/badge/docs-dev-blue.svg
925
[docs-dev-url]: https://JuliaManifolds.github.io/AlgorithmsInterface.jl/dev/
1026

@@ -19,31 +35,3 @@
1935

2036
[aqua-img]: https://raw.githubusercontent.com/JuliaTesting/Aqua.jl/master/badge.svg
2137
[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

Comments
 (0)