Skip to content
Snippets Groups Projects
EvaluatorNESW.java 1.99 KiB
Newer Older
  • Learn to ignore specific revisions
  • istkabra's avatar
    istkabra committed
    package Evaluators;
    
    import Interfaces.Evaluator;
    import MainClasses.Candidate;
    import MainClasses.Config;
    import MainClasses.Vertex;
    
    public class EvaluatorNESW implements Evaluator {
    
        final int POINTS_PER_BOND;
    
        public EvaluatorNESW(int pointsPerBond) {
            this.POINTS_PER_BOND = pointsPerBond;
        }
    
        @Override
        public double evaluateFitness(Candidate candidate) {
            if (candidate.fitness <= -1) { // Not calculated before
                double fitness;
    
                int hydrophobicBonds = evaluateBonds(candidate);
                int overlaps = evaluateOverlaps(candidate);
    
                fitness =(double) (hydrophobicBonds * this.POINTS_PER_BOND) / (double) (overlaps + 1);
    
                candidate.fitness = fitness;
            }
            // Return cached value if this is not the first time the value is needed
            return candidate.fitness;
        }
    
        public int evaluateBonds(Candidate candidate) {
    
    
            for (int i = 0; i < candidate.vertexList.size() - 2; i++) {
                Vertex toCompare = candidate.vertexList.get(i);
    
                if (toCompare.isHydrophobic) {
                    for (int j = i + 2; j < candidate.vertexList.size(); j++) {
                        Vertex vertex = candidate.vertexList.get(j);
                        if (vertex.isHydrophobic) {
                            if (toCompare.neighbouringPosition(vertex)) {
                                bonds++;
    
    istkabra's avatar
    istkabra committed
        }
    
        public int evaluateOverlaps(Candidate candidate) {
    
    
            int overlaps = 0;
            for (int i = 0; i < candidate.vertexList.size(); i++) {
                Vertex toCompare = candidate.vertexList.get(i);
                for (Vertex vertex : candidate.vertexList) {
                    if (toCompare.equalsPosition(vertex) && toCompare != vertex) {
                        overlaps++;
    
            overlaps /= 2;
            overlaps = overlaps;
    
            return overlaps;