src/Iterate.jl

changeset 0
888dfd34d24a
child 4
59fd17a3cea0
equal deleted inserted replaced
-1:000000000000 0:888dfd34d24a
1 #################################
2 # Tools for iterative algorithms
3 #################################
4
5 module Iterate
6
7 using Printf
8
9 ##############
10 # Our exports
11 ##############
12
13 export simple_iterate
14
15 ########################################################################
16 # Simple itertion function, calling `step()` `params.maxiter` times and
17 # reporting objective value every `params.verbose_iter` iterations.
18 # The function `step` should take as its argument a function that itself
19 # takes as its argument a function that calculates the objective value
20 # on demand.
21 ########################################################################
22
23 function simple_iterate(step :: Function,
24 params::NamedTuple)
25 for iter=1:params.maxiter
26 step() do calc_objective
27 if params.verbose_iter!=0 && mod(iter, params.verbose_iter) == 0
28 v, _ = calc_objective()
29 @printf("%d/%d J=%f\n", iter, params.maxiter, v)
30 return true
31 end
32 end
33 end
34 end
35
36 function simple_iterate(step :: Function,
37 datachannel::Channel{T},
38 params::NamedTuple) where T
39 for iter=1:params.maxiter
40 d = take!(datachannel)
41 step(d) do calc_objective
42 if params.verbose_iter!=0 && mod(iter, params.verbose_iter) == 0
43 v, _ = calc_objective()
44 @printf("%d/%d J=%f\n", iter, params.maxiter, v)
45 return true
46 end
47 end
48 end
49 end
50
51 end
52

mercurial