Module: EvoSynth::Decoder
- Defined in:
- lib/evosynth/decoder.rb,
lib/evosynth/decoder/gray.rb,
lib/evosynth/decoder/binary_to_real.rb
Overview
This module contains all genome decoders (genotype <-> phenotype conversion).
Class Method Summary collapse
-
.binary_to_gray(binary) ⇒ Object
Converts a standard binary bitstring (either 1/0 or true/false) into a gray code bitstring.
-
.binary_to_real(binary, min_bound = -1.0,, max_bound = 1.0) ⇒ Object
:call-seq: Decoder.binary_to_real() -> Float (between -1.0 and 1.0) Decoder.binary_to_real(, 0.0) -> Float (between 0.0 and 1.0) Decoder.binary_to_real(, -5.12, 5.12) -> Float (between -5.12 and 5.12).
-
.gray_to_binary(gray) ⇒ Object
Converts a binary gray code bitstring (either 1/0 or true/false) into a standard binary bitstring.
Class Method Details
.binary_to_gray(binary) ⇒ Object
Converts a standard binary bitstring (either 1/0 or true/false) into a gray code bitstring.
42 43 44 45 46 47 48 49 50 |
# File 'lib/evosynth/decoder/gray.rb', line 42 def Decoder.binary_to_gray(binary) gray = Array.new(binary) popped = gray.pop gray.unshift(popped ^ popped) gray.each_index { |index| gray[index] = binary[index] ^ gray[index]} gray end |
.binary_to_real(binary, min_bound = -1.0,, max_bound = 1.0) ⇒ Object
:call-seq: Decoder.binary_to_real() -> Float (between -1.0 and 1.0) Decoder.binary_to_real(, 0.0) -> Float (between 0.0 and 1.0) Decoder.binary_to_real(, -5.12, 5.12) -> Float (between -5.12 and 5.12)
This converts a given array of binary values (either 1/0 or true/false) into a Float in a given range.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/evosynth/decoder/binary_to_real.rb', line 36 def Decoder.binary_to_real(binary, min_bound = -1.0, max_bound = 1.0) binary = binary.map do |bin| case bin when false then 0 when true then 1 else bin end end max_bound, min_bound = min_bound, max_bound if min_bound > max_bound range_size = max_bound.to_f - min_bound.to_f integer = Integer("0b#{binary.join}") max_integer = Integer("0b" + ("1" * binary.size)) float = integer * (range_size / max_integer) + min_bound; float end |
.gray_to_binary(gray) ⇒ Object
Converts a binary gray code bitstring (either 1/0 or true/false) into a standard binary bitstring.
30 31 32 33 34 35 36 37 38 |
# File 'lib/evosynth/decoder/gray.rb', line 30 def Decoder.gray_to_binary(gray) rev_stdbin = Array.new(gray.size) gray.reverse! rev_stdbin[gray.size - 1] = gray[gray.size - 1] (gray.size - 2).downto(0) { |index| rev_stdbin[index] = rev_stdbin[index + 1] ^ gray[index] } rev_stdbin.reverse end |