Skip to content
Snippets Groups Projects
RandomDirection.java 1.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • istkabra's avatar
    istkabra committed
    package InitialGenerationCreators;
    
    import Interfaces.InitialGenerationCreator;
    import MainClasses.Candidate;
    
    import java.util.Random;
    
    public class  RandomDirection<T extends Enum<?>> implements InitialGenerationCreator {
    
        Random rand;
        Class<T> possibleDirections;
    
    
    istkabra's avatar
    istkabra committed
        public RandomDirection(Class<T> possibleDirections, Random rand) {
    
    istkabra's avatar
    istkabra committed
            this.possibleDirections = possibleDirections;
    
    istkabra's avatar
    istkabra committed
            this.rand = rand;
    
    istkabra's avatar
    istkabra committed
        }
    
        @Override
    
        public Candidate[] initializeDirections(int populationSize, int sequenceLength) {
    
    istkabra's avatar
    istkabra committed
            Candidate[] population = new Candidate[populationSize];
    
            for (int i = 0; i < populationSize; i++) {
    
                int[] candidateDirections = new int[sequenceLength];
    
                candidateDirections[0] = this.rand.nextInt(4); // Can start in any direction
                for (int j = 1; j < sequenceLength; j++) {
                    // Make sure there can never be a backtracking overlap while initializing
                    candidateDirections[j] = ((candidateDirections[j-1] - 1 + this.rand.nextInt(3)) + 4 ) % 4;
    
    istkabra's avatar
    istkabra committed
                }
    
                population[i] = new Candidate(candidateDirections);
    
    istkabra's avatar
    istkabra committed
            }
    
            return population;
        }
    }