Skip to content
Snippets Groups Projects
EvaluatorNESW.java 2.09 KiB
Newer Older
  • Learn to ignore specific revisions
  • istkabra's avatar
    istkabra committed
    package Evaluators;
    
    import Interfaces.Evaluator;
    import MainClasses.Candidate;
    import MainClasses.Vertex;
    
    public class EvaluatorNESW implements Evaluator {
    
        final int POINTS_PER_BOND;
    
        final int[] isHydrophobic;
    
        public EvaluatorNESW(int pointsPerBond, int[] isHydrophobic) {
    
    istkabra's avatar
    istkabra committed
            this.POINTS_PER_BOND = pointsPerBond;
    
            this.isHydrophobic = isHydrophobic;
    
    istkabra's avatar
    istkabra committed
        }
    
        @Override
    
        public Candidate evaluateFitness(Candidate candidate) {
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
            //TODO Is it a good idea to "cache" fitness this way? Maybe
            //If fitness was not calculated yet, calculate it
            if (candidate.getFitness() <= -1) { // Not calculated before
    
    istkabra's avatar
    istkabra committed
                double fitness;
    
                int hydrophobicBonds = evaluateBonds(candidate);
                int overlaps = evaluateOverlaps(candidate);
    
                fitness =(double) (hydrophobicBonds * this.POINTS_PER_BOND) / (double) (overlaps + 1);
    
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
                candidate.setFitness(fitness);
    
            return candidate;
    
    istkabra's avatar
    istkabra committed
        }
    
        public int evaluateBonds(Candidate candidate) {
    
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
            for (int i = 0; i < candidate.getVertices().size() - 2; i++) {
                Vertex toCompare = candidate.getVertices().get(i);
    
                if (isHydrophobic[i]==1) {
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
                    for (int j = i + 2; j < candidate.getVertices().size(); j++) {
                        Vertex vertex = candidate.getVertices().get(j);
    
                        if (isHydrophobic[j]==1) {
    
                            if (toCompare.neighbouringPosition(vertex)) {
                                bonds++;
    
    istkabra's avatar
    istkabra committed
        }
    
        public int evaluateOverlaps(Candidate candidate) {
    
    
            int overlaps = 0;
    
    Lennart Eichhorn's avatar
    Lennart Eichhorn committed
            for (int i = 0; i < candidate.getVertices().size(); i++) {
                Vertex toCompare = candidate.getVertices().get(i);
                for (Vertex vertex : candidate.getVertices()) {
    
                    if (toCompare.equalsPosition(vertex) && toCompare != vertex) {
                        overlaps++;
    
            overlaps /= 2;
    
            return overlaps;