src/Iterate.jl

Fri, 27 Dec 2019 22:04:49 +0200

author
Tuomo Valkonen <tuomov@iki.fi>
date
Fri, 27 Dec 2019 22:04:49 +0200
changeset 7
900a7e18ca01
parent 4
59fd17a3cea0
child 22
d5e10d963303
permissions
-rw-r--r--

optimise

#################################
# Tools for iterative algorithms
#################################

__precompile__()

module Iterate

using Printf

##############
# Our exports
##############

export simple_iterate

########################################################################
# Simple itertion function, calling `step()` `params.maxiter` times and 
# reporting objective value every `params.verbose_iter` iterations.
# The function `step` should take as its argument a function that itself
# takes as its argument a function that calculates the objective value
# on demand.
########################################################################

function simple_iterate(step :: Function,
                        params::NamedTuple)
    for iter=1:params.maxiter
        step() do calc_objective
            if params.verbose_iter!=0 && mod(iter, params.verbose_iter) == 0
                v, _ = calc_objective()
                @printf("%d/%d J=%f\n", iter, params.maxiter, v)
                return true
            end
        end
    end
end

function simple_iterate(step :: Function,
                        datachannel::Channel{T},
                        params::NamedTuple) where T
    for iter=1:params.maxiter
        d = take!(datachannel)
        step(d) do calc_objective
            if params.verbose_iter!=0 && mod(iter, params.verbose_iter) == 0
                v, _ = calc_objective()
                @printf("%d/%d J=%f\n", iter, params.maxiter, v)
                return true
            end
        end
    end
end

end

mercurial