src/Iterate.jl

Sat, 20 Feb 2021 16:26:31 -0500

author
Tuomo Valkonen <tuomov@iki.fi>
date
Sat, 20 Feb 2021 16:26:31 -0500
changeset 22
d5e10d963303
parent 4
59fd17a3cea0
permissions
-rw-r--r--

Add "extra" string output to simple_iterate.

0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
1 #################################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
2 # Tools for iterative algorithms
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
3 #################################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
4
4
59fd17a3cea0 Add __precompile__() for what it is worth
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
5 __precompile__()
59fd17a3cea0 Add __precompile__() for what it is worth
Tuomo Valkonen <tuomov@iki.fi>
parents: 0
diff changeset
6
0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
7 module Iterate
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
8
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
9 using Printf
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
10
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
11 ##############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
12 # Our exports
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
13 ##############
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
14
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
15 export simple_iterate
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
16
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
17 ########################################################################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
18 # Simple itertion function, calling `step()` `params.maxiter` times and
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
19 # reporting objective value every `params.verbose_iter` iterations.
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
20 # The function `step` should take as its argument a function that itself
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
21 # takes as its argument a function that calculates the objective value
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
22 # on demand.
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
23 ########################################################################
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
24
22
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
25 function simple_verbosity(iter, params, calc_objective)
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
26 if params.verbose_iter!=0 && mod(iter, params.verbose_iter) == 0
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
27 v, extra₀ = calc_objective()
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
28 if isa(extra₀, AbstractString)
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
29 extra = " [$extra₀]"
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
30 else
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
31 extra = ""
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
32 end
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
33 @printf("%d/%d J=%f%s\n", iter, params.maxiter, v, extra)
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
34 return true
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
35 end
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
36 end
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
37
0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
38 function simple_iterate(step :: Function,
22
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
39 params :: NamedTuple)
0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
40 for iter=1:params.maxiter
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
41 step() do calc_objective
22
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
42 simple_verbosity(iter, params, calc_objective)
0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
43 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
44 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
45 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
46
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
47 function simple_iterate(step :: Function,
22
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
48 datachannel :: Channel{T},
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
49 params :: NamedTuple) where T
0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
50 for iter=1:params.maxiter
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
51 d = take!(datachannel)
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
52 step(d) do calc_objective
22
d5e10d963303 Add "extra" string output to simple_iterate.
Tuomo Valkonen <tuomov@iki.fi>
parents: 4
diff changeset
53 simple_verbosity(iter, params, calc_objective)
0
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
54 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
55 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
56 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
57
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
58 end
888dfd34d24a Initialise
Tuomo Valkonen <tuomov@iki.fi>
parents:
diff changeset
59

mercurial