lib/dither/ipog.rb in dither-0.0.2 vs lib/dither/ipog.rb in dither-0.0.3
- old
+ new
@@ -1,21 +1,20 @@
module Dither
class IPOG
- attr_reader :params, :t, :prng, :constraints
- private :params, :t, :prng, :constraints
+ attr_reader :params, :t, :constraints
+ private :params, :t, :constraints
def initialize(params, t, opts = {})
@params = params
@t = t
@constraints = opts[:constraints]
unless constraints.nil?
@constraints = constraints.map(&:to_a)
.map { |a| a.map { |b| Param.new(*b) } }
.map(&:to_set)
end
- @prng = Random.new
raise 't must be >= 2' if t < 2
raise 't must be <= params.length' if t > params.length
params.each do |param|
raise 'param length must be > 1' if param.length < 2
end
@@ -49,10 +48,12 @@
end
end
ts.map { |a| fill_unbound(a) }
.delete_if(&:nil?)
+ .to_set
+ .to_a
end
def violates_constraints?(params)
return false if constraints.nil?
constraints.any? { |b| b.subset?(params) }
@@ -94,12 +95,12 @@
arr[param.i] = params[param.i][param.j]
end
arr.each_with_index do |e, i|
if e.nil?
- j = prng.rand(0...params[i].length)
+ j = 0
arr[i] = params[i][j]
- data << Param.new(i,j)
+ data << Param.new(i, j)
end
end
return nil if violates_constraints?(data)
arr
end