package bsearch.representations; import java.util.LinkedHashMap; import org.nlogo.util.MersenneTwisterFast; import bsearch.space.SearchSpace; /** * A Chromosomal representation that uses standard ordering of bits to encode integer (and discretized continuous) values */ public strictfp class StandardBinaryChromosome extends BinaryChromosome { public StandardBinaryChromosome( SearchSpace searchSpace , MersenneTwisterFast rng ) { super(searchSpace, rng); } public StandardBinaryChromosome( SearchSpace searchSpace , LinkedHashMap<String,Object> paramSettings ) { super(searchSpace, paramSettings); } public StandardBinaryChromosome( boolean[] bitstring, SearchSpace searchSpace ) { super(bitstring, searchSpace); } @Override public StandardBinaryChromosome clone() { return new StandardBinaryChromosome(bitstring, searchSpace); } @Override public void binaryEncode(long binval, boolean[] bits, int offset, int len) { long bitMask = 1; for (int i = 0 ; i < len ; i++) { bits[offset + i] = ((binval & bitMask) != 0) ; bitMask = bitMask << 1; } } @Override public long binaryDecode(boolean[] bits, int offset, int len ) { long binval = 0; for (int i = len - 1 ; i >= 0 ; i--) { binval <<= 1; if (bits[offset + i]) { binval = binval + 1; } } return binval; } public static class Factory implements ChromosomeFactory { public Chromosome createChromosome(SearchSpace searchSpace, MersenneTwisterFast rng) { return new StandardBinaryChromosome(searchSpace, rng); } public Chromosome createChromosome( SearchSpace searchSpace, LinkedHashMap<String,Object> paramSettings) { return new StandardBinaryChromosome(searchSpace, paramSettings); } public String getHTMLHelpText() { return "<strong>StandardBinaryChromosome</strong> In this encoding, every parameter is converted " + "into a string of binary digits, and these sequences are concatenated together into one " + "large bit array. Mutation and crossover then occur on a per-bit basis."; } } }