Skip to content
Snippets Groups Projects
Candidate.java 2.03 KiB
Newer Older
  • Learn to ignore specific revisions
  • istkabra's avatar
    istkabra committed
    package MainClasses;
    
    
    istkabra's avatar
    istkabra committed
    import java.util.ArrayList;
    
    import java.util.Arrays;
    
    import java.util.Comparator;
    
    istkabra's avatar
    istkabra committed
    
    
    public class Candidate implements Comparable<Candidate> {
    
    istkabra's avatar
    istkabra committed
    
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
        private final int[] folding;   // 0 = North | 1 = East | 2 = South | 3 = West
        private ArrayList<Vertex> vertices;
        private double fitness;
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
        public Candidate(int[] folding) {
            this.folding = folding;
            this.vertices = constructVertices();
    
            this.fitness = -1d; // Not calculated yet
    
    istkabra's avatar
    istkabra committed
        }
    
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
        public ArrayList<Vertex> constructVertices() {
    
    istkabra's avatar
    istkabra committed
            ArrayList<Vertex> vertexList = new ArrayList<>();
    
    istkabra's avatar
    istkabra committed
            int currentX = 0;
            int currentY = 0;
    
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
            for (int currentVertex = 0; currentVertex < folding.length; currentVertex++) {
                vertexList.add(new Vertex(currentX, currentY, folding[currentVertex]));
    
    istkabra's avatar
    istkabra committed
    
                // Update position
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
                if (folding[currentVertex] == 0) {
    
    istkabra's avatar
    istkabra committed
                    currentY++;
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
                } else if (folding[currentVertex] == 1) {
    
    istkabra's avatar
    istkabra committed
                    currentX++;
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
                } else if (folding[currentVertex] == 2) {
    
    istkabra's avatar
    istkabra committed
                    currentY--;
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
                } else if (folding[currentVertex] == 3) {
    
    istkabra's avatar
    istkabra committed
                    currentX--;
                }
            }
    
            return vertexList;
        }
    
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
        public ArrayList<Vertex> getVertices() {
            return vertices;
    
    istkabra's avatar
    istkabra committed
        }
    
    
        @Override
        public String toString() {
            return "Canidate{" +
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
                    "outgoingDirection=" + Arrays.toString(folding) +
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
        //TODO What if fitness is not set yet?
        public double getFitness() {
            return fitness;
        }
    
        public void setFitness(double fitness) {
            this.fitness = fitness;
        }
    
        //TODO Try out return folding without copy;
        public int[] getFolding() {
            int[] newOut = new int[this.folding.length];
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
            for(int i = 0; i < this.folding.length; i++) {
                newOut[i] = this.folding[i];
    
    
        @Override
        public int compareTo(Candidate that)
        {
            return (int)(1000.0*(this.getFitness() - that.getFitness()));
        }
    
    istkabra's avatar
    istkabra committed
    }