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