module ProbDSL

Constants

PNil

Public Instance Methods

collect(pred, tree) click to toggle source
# File lib/probdsl.rb, line 107
def collect(pred, tree)
    tmp = Hash.new(0)
    n   = 0
    while (pred.call)
        tmp[tree.eval_pick] += 1.0
        n += 1
    end
    [PDistribution.new(:MAP, tmp), n]
end
collecting(pred, &blk) click to toggle source
# File lib/probdsl.rb, line 117
def collecting(pred, &blk)
    collect(pred, run_prob(&blk))
end
dist(data) click to toggle source
# File lib/probdsl.rb, line 145
def dist(data)
    shift do |cont|
        map = Hash.new 0
        data.each do |prob, value|
            tmp = proc { cont.call value }
            map[tmp] = prob
        end

        PDistribution.new :MAP, map
    end
end
flip(prob, *data) click to toggle source
# File lib/probdsl.rb, line 161
def flip(prob, *data)
    case data.length
    when 0
        dist [[prob, true], [1 - prob, false]]
    when 1
        dist [[prob, data[0]], [1 - prob, nil]]
    when 2
        dist [[prob, data[0]], [1 - prob, data[1]]]
    else
        raise 'illegal number of arguments'
    end
end
guard(bool) click to toggle source
# File lib/probdsl.rb, line 137
def guard(bool)
    if !bool
        shift do |cont|
            PNil
        end
    end
end
loop_k(ktimes) click to toggle source
# File lib/probdsl.rb, line 121
def loop_k(ktimes)
    tmp = ktimes
    proc {
        ret = tmp > 0
        tmp-=1
        ret
    }
end
loop_t(seconds) click to toggle source
# File lib/probdsl.rb, line 130
def loop_t(seconds)
    start = Time.now
    proc {
        (Time.now - start) < seconds
    }
end
norm_prob(&blk) click to toggle source
# File lib/probdsl.rb, line 99
def norm_prob(&blk)
    prob(&blk).normalize
end
pick(&blk) click to toggle source
# File lib/probdsl.rb, line 103
def pick(&blk)
    run_prob(&blk).eval_pick
end
prob(&blk) click to toggle source
# File lib/probdsl.rb, line 95
def prob(&blk)
    run_prob(&blk).eval
end
run_prob(&blk) click to toggle source
# File lib/probdsl.rb, line 84
def run_prob(&blk)
    reset {
        value = blk.call
        if value == nil
            PNil
        else
            PValue.new value
        end
    }
end
uniform(data) click to toggle source
# File lib/probdsl.rb, line 157
def uniform(data)
    dist(data.map {|x| [1, x]})
end