Tue, 06 Dec 2022 14:12:20 +0200
v1.0.0-pre-arxiv (missing arXiv links)
0 | 1 | |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
2 | # Proximal methods for point source localisation: the implementation |
0 | 3 | |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
4 | This package contains [Rust][] codes for the manuscript “_Proximal methods for |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
5 | point source localisation_” by Tuomo Valkonen ⟨tuomov@iki.fi⟩. It concerns |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
6 | solution of problems of the type |
0 | 7 | $$ |
8 | \min_{μ ∈ ℳ(Ω)}~ F(x) + λ \|μ\|_{ℳ(Ω)} + δ_{≥ 0}(x), | |
9 | $$ | |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
10 | where $F$ is a data term, and $ℳ(Ω)$ is the space of Radon measures on the |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
11 | (rectangular) domain $Ω ⊂ ℝ^n$. Implemented are $F(x)=\frac12\|Ax-b\|_2^2$ and |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
12 | $F(x)=\|Ax-b\|_1$ for the forward operator $A \in 𝕃(ℳ(Ω); ℝ^m)$ modelling a |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
13 | simple sensor grid. For the 2-norm-squared data term implemented are the |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
14 | algorithms μFB, μFISTA, and μPDPS from the aforementioned manuscript along with |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
15 | comparison relaxed and fully corrective conditional gradient methods from the |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
16 | literature. For the 1-norm data term only the μPDPS is applicable. |
0 | 17 | |
18 | ## Installation and usage | |
19 | ||
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
20 | ### Installing dependencies |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
21 | |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
22 | Most dependencies are managed by the Cargo build system of [Rust][]. You will |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
23 | only need to install the “nightly” Rust compiler and the |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
24 | [GNU Scientific Library][gsl] manually. At the time of writing this README, |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
25 | [alg_tools][] also needs to be downloaded separately. |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
26 | |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
27 | 1. Install the [Rust][] infrastructure (including Cargo) with [rustup][]. |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
28 | 2. Install a “nightly” release of the Rust compiler. With rustup, installed in |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
29 | the previous step, this can be done with |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
30 | ```console |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
31 | rustup toolchain install nightly |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
32 | ``` |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
33 | 3. Install [GNU Scientific Library][gsl]. On a Mac with [Homebrew] installed, |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
34 | this can be done with |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
35 | ```console |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
36 | brew install gsl |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
37 | ``` |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
38 | For other operating systems, suggestions are available in the |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
39 | [rust-GSL crate documentation][rust-GSL]. |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
40 | On Windows, you will likely need to pass extra `RUSTFLAGS` options to |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
41 | Cargo in the following steps to locate the library. |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
42 | |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
43 | 4. Download [alg_tools][] and unpack it under the same directory as this |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
44 | package. |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
45 | |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
46 | [rustup]: https://rustup.rs |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
47 | [alg_tools]: https://tuomov.iki.fi/software/alg_tools/ |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
48 | [Rust]: https://www.rust-lang.org/ |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
49 | [rust-GSL]: https://docs.rs/GSL/6.0.0/rgsl/ |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
50 | [gsl]: https://www.gnu.org/software/gsl/ |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
51 | [Homebrew]: https://brew.sh |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
52 | |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
53 | ### Building and running the experiments |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
54 | |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
55 | To compile the code and run the experiments in the manuscript, use |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
56 | ```console |
9
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
57 | cargo run --release -- -o results |
0 | 58 | ``` |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
59 | When doing this for the first time, several dependencies will be downloaded. |
9
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
60 | The double-dash (`--`) separates the arguments of Cargo and this software, |
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
61 | `pointsource_algs`. The `--release` option to Cargo is required for `rustc` to |
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
62 | build optimised high performance code. Without that flag the performance will |
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
63 | be significantly worse. The `-o results` option tells `pointsource_algs` to |
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
64 | write results in the `results` directory. The option is required. |
0 | 65 | |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
66 | Alternatively, you may build the executable with |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
67 | ```console |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
68 | cargo build --release |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
69 | ``` |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
70 | and then run it with |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
71 | ``` |
9
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
72 | target/release/pointsource_algs -o results |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
73 | ``` |
0 | 74 | |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
75 | ### Documentation |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
76 | |
9
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
77 | Use the `--help` option to get an extensive listing of command line options to |
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
78 | customise algorithm parameters and the experiments performed. As above with |
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
79 | `-o`, if using `cargo` to run the executable, you have to pass any arguments |
21b0e537ac0e
Command line parameter passing simplifications and make `-o` required.
Tuomo Valkonen <tuomov@iki.fi>
parents:
6
diff
changeset
|
80 | to `pointsource_algs` after a double-dash: |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
81 | ```console |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
82 | cargo run --release -- --help |
0 | 83 | ``` |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
84 | |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
85 | ## Internals |
0 | 86 | |
6
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
87 | If you are interested in the program internals, the integrated source code |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
88 | documentation may be built and opened with |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
89 | ```console |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
90 | cargo doc # build dependency docs |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
91 | misc/cargo-d --open # build and open KaTeX-aware docs for this crate |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
92 | ``` |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
93 | The `cargo-d` script ensures that KaTeX mathematics is rendered in the |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
94 | generated documentation. Unfortunately, `rustdoc`, akin to Rust largely itself, |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
95 | is stuck in 80's 7-bit gringo ASCII world, and does not support modern markdown |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
96 | features, such as mathematics. Instead, to render mathematics, an ugly |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
97 | workaround is needed together with lots of painful raw HTML escapes in the |
bcb508479948
README fine-tuning and build.rs for uglifying it for rustdoc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
98 | documentation. |
0 | 99 |