You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,7 +16,7 @@ There are many ways in which you can contribute to EvoLP!
16
16
17
17
Having a clearer documentation benefits everyone. In this sense, you can help either fixing it or expanding it in multiple ways: with wording or clarification, reporting typos, adding corrections or even creating new pages on topics that could need further explanations.
18
18
19
-
The manuals are written in Markdown, and are built using [Documenter.jl](https://github.com/JuliaDocs/Documenter.jl). All the source files of the documentation can be found [here](https://github.com/ntnu-ai-lab/EvoLP.jl/tree/main/docs).
19
+
The manuals are written in Markdown, and are built using [Documenter.jl](https://github.com/JuliaDocs/Documenter.jl). All the source files of the documentation can be found at the docs [GitHub Page](https://github.com/ntnu-ai-lab/EvoLP.jl/tree/main/docs).
20
20
21
21
If your submission is small (typos or one or two sentences) then probably using GitHub's online editor is the best idea.
22
22
@@ -46,7 +46,7 @@ Contributing code is also possible via fork & pull request:
46
46
EvoLP follows the ColPrac: Contributor's Guide on Collaborative Practices for Community Packages guide from SciML.
47
47
This guide is a collection of best practices when contributing to packages.
48
48
49
-
You can read the full guide [here](https://github.com/SciML/ColPrac).
49
+
You can read the full guide at SciML's [ColPrac repository](https://github.com/SciML/ColPrac).
50
50
51
51
## Code style guidelines
52
52
@@ -55,7 +55,7 @@ You can read the full guide [here](https://github.com/SciML/ColPrac).
55
55
EvoLP follows Invenia's Blue code style guide.
56
56
This is a set of style conventions for Julia code that are based on a series of grounding documents (like Julia's own style guide and PEP8).
57
57
58
-
You can read the full guide [here](https://github.com/invenia/BlueStyle).
58
+
You can read the full guide at Invenia's [Blue Style repository](https://github.com/invenia/BlueStyle).
59
59
60
60
## Source code organisation
61
61
@@ -65,6 +65,7 @@ The following table shows how the EvoLP code is organised:
[](https://github.com/SciML/ColPrac)
@@ -26,6 +26,7 @@
26
26
- Several crossover and mutation methods
27
27
- Test functions for benchmarking
28
28
- Convenient result reporting and a statistics logbook
29
+
- Support for parallelization and island models (via an extension that uses [MPI.jl](https://github.com/JuliaParallel/MPI.jl))
29
30
30
31
Combine these blocks to make your own algorithms or use some of the included minimisers: GA, 1+1EA and PSO.
31
32
Additionally, you can extend EvoLP to create new operators.
@@ -58,7 +59,7 @@ Please report any issues via the GitHub [issues tracker](https://github.com/ntnu
58
59
59
60
## Citing EvoLP.jl
60
61
61
-
If you find EvoLP.jl useful in your work or research, we kindly request that you cite the following [paper](https://ceur-ws.org/Vol-3431/paper7.pdf):
62
+
If you find EvoLP.jl useful in your work or research, we kindly request that you cite the following [conference paper](https://ceur-ws.org/Vol-3431/paper7.pdf):
62
63
63
64
```bibtex
64
65
@inproceedings{Sanchez-DiazEvoLP2023a,
@@ -75,41 +76,51 @@ If you find EvoLP.jl useful in your work or research, we kindly request that you
75
76
}
76
77
```
77
78
79
+
You can also cite EvoLPIslands, our MPI Extension, by citing the following [conference paper](https://www.ntnu.no/ojs/index.php/nikt/article/view/5667):
[](https://github.com/SciML/ColPrac)
9
9
@@ -16,7 +16,7 @@ Welcome to the documentation for EvoLP!
16
16
- Random [population generators](man/generators.md) (vectors and particles)
17
17
- Parent [selection operators](man/selection.md)
18
18
- Several [crossover](man/cross.md) and [mutation](man/mutation.md) methods
19
-
-[Test functions](man/benchmarks.md) for benchmarking
19
+
-[Test functions](man/testfunctions.md) for benchmarking
20
20
- Convenient [result reporting](man/results.md) and a [statistics logbook](man/logbook.md)
21
21
22
22
Combine these blocks to make your own algorithms or use some of the [included](man/algorithms.md)_minimisers_: GA, 1+1EA and PSO.
@@ -26,13 +26,18 @@ Additionally, you can extend EvoLP to create [new operators](man/extending.md).
26
26
27
27
- Read the [quick start](man/quickstart.md) page for information about installation and to get a quick overview.
28
28
- Browse some of the [examples](tuto/oneplusone_onemax.md) to see how to use the built-in algorithms.
29
-
- For a more comprehensive tutorial, read the [8-queens problem](tuto/8_queen.md) where we make an algorithm from scratch.
29
+
- For a more comprehensive tutorial, read the [8-queens problem](tuto/8_queens.md) where we make an algorithm from scratch.
30
30
31
31
Alternatively, you can browse the [type](lib/types.md) and [functions](lib/functions.md) indices to view all available functionality.
32
32
33
+
## Parallel evaluation and Island Models
34
+
35
+
EvoLP provides island support via MPI as an extension.
36
+
Read more [about island models in EvoLP](man/islands.md) and how to achieve [parallel evaluation](tuto/parallel.md).
37
+
33
38
## Citing EvoLP.jl
34
39
35
-
If you find EvoLP.jl useful in your work or research, we kindly request that you cite the following [paper](https://ceur-ws.org/Vol-3431/paper7.pdf):
40
+
If you find EvoLP.jl useful in your work or research, we kindly request that you cite the following [conference paper](https://ceur-ws.org/Vol-3431/paper7.pdf):
36
41
37
42
```bibtex
38
43
@inproceedings{Sanchez-DiazEvoLP2023a,
@@ -49,6 +54,22 @@ If you find EvoLP.jl useful in your work or research, we kindly request that you
49
54
}
50
55
```
51
56
57
+
You can also cite EvoLPIslands, our MPI Extension, by citing the following [conference paper](https://www.ntnu.no/ojs/index.php/nikt/article/view/5667):
title = {{Evolutionary Computation with Islands: Extending EvoLP.Jl for Parallel Computing}},
62
+
shorttitle = {{Evolutionary Computation with Islands}},
63
+
author = {Sánchez-Díaz, Xavier F. C. and Mengshoel, Ole Jakob},
64
+
year = {2023},
65
+
month = nov,
66
+
journal = {Norsk {IKT}-konferanse for forskning og utdanning},
67
+
number = {1},
68
+
issn = {1892-0721},
69
+
copyright = {Copyright (c) 2023 Norsk IKT-konferanse for forskning og utdanning},
70
+
}
71
+
```
72
+
52
73
## Acknowledgements
53
74
54
75
EvoLP started as a toolbox for internal use by PhD students of [NTNU's Open AI Lab](https://www.ntnu.edu/ailab/ai-lab), and whose funding is provided by [Project no. 311284](https://prosjektbanken.forskningsradet.no/en/project/FORISS/311284) by [The Research Council of Norway](https://www.forskningsradet.no/).
This is a somewhat advanced topic. If you are new to parallel computing, we recommend reading the page on [Parallelism](../tuto/parallel.md) first.
5
+
6
+
EvoLP has newly implemented support for island models of evolutionary algorithms as an extension.
7
+
The extension, EvoLPIslands, is implemented using the [weak dependency](https://pkgdocs.julialang.org/v1/creating-packages/#Weak-dependencies) feature added to Julia in v1.9.
8
+
9
+
!!! details "Loading the extension"
10
+
EvoLPIslands will be activated if and only if you have both `EvoLP` and `MPI` loaded into your current scope via the `using` or `import` keywords.
11
+
12
+
## About Island Models
13
+
14
+
In an island model, multiple populations (or _islands_) evolve concurrently, and a subpopulation (or _deme_) occasionally drifts from one island to another in a process called _migration_.
15
+
Migration passively helps with diversity preservation, which in turn benefits the exploration of large search spaces.
16
+
17
+
### Migration
18
+
19
+
The migration process is broken down in three steps: `drift`, `strand` and `reinsert!`:
20
+
21
+

22
+
23
+
To implement these operators, EvoLP uses [MPI.jl](https://juliaparallel.org/MPI.jl/stable/), a wrapper of MPI for Julia.
24
+
MPI is a communication standard available in many parallel computing architectures, most notably High Performance Computing clusters, but it can also be used in your local machine.
25
+
26
+
Specifically, EvoLP uses the `Send` and `Receive` MPI directives, which are **blocking**.
27
+
However, there is no need to use these directly. Instead, using the `drift`, `strand`, and `reinsert!` operators in your algorithms should suffice.
28
+
29
+
```@docs
30
+
drift
31
+
strand
32
+
reinsert!
33
+
```
34
+
35
+
## Selecting a Deme
36
+
37
+
To send, receive, and reinsert a deme, we introduced `DemeSelector`s that allow for two different types of selection: random, and worst.
38
+
39
+
```@docs
40
+
RandomDemeSelector
41
+
WorstDemeSelector
42
+
```
43
+
44
+
As with other operators in EvoLP, the deme selectors can be passed to the `select` method—both for selecting the deme that will _migrate_ as well as selecting the deme that will be replaced.
45
+
46
+
```@docs
47
+
select(::RandomDemeSelector, y)
48
+
select(::WorstDemeSelector, y)
49
+
```
50
+
51
+
We also provide a built-in toy algorithm, the island GA:
52
+
53
+
```@docs
54
+
islandGA!
55
+
```
56
+
57
+
## Further Reading
58
+
59
+
- Our paper [Evolutionary Computation with Islands: Extending EvoLP.jl for Parallel Computing](https://www.ntnu.no/ojs/index.php/nikt/article/view/5667).
0 commit comments