SHARE
TWEET

Untitled

a guest Sep 16th, 2019 84 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.ArrayList;
  2.  
  3. public class SimpleHillClimbing {
  4.     private Problem problem;
  5.  
  6.     private SimpleHillClimbing(Problem problem) {
  7.         this.problem = problem;
  8.     }
  9.  
  10.     //Simple transformation
  11.     private ArrayList<Double> findNewNeighbours(ArrayList<Double> parameters, double stepSize) {
  12.         ArrayList<Double> newNeighbours = new ArrayList<>();
  13.  
  14.         for (int i = 0; i < parameters.size(); i++) {
  15.             int randomInt = (int) (2 * Math.random());
  16.             if (randomInt == 1)
  17.                 newNeighbours.add(parameters.get(i) + stepSize);
  18.             else
  19.                 newNeighbours.add(parameters.get(i) - stepSize);
  20.  
  21.             if (newNeighbours.get(i) > problem.getMaxValues().get(i))
  22.                 newNeighbours.set(i, problem.getMaxValues().get(i));
  23.             else if (newNeighbours.get(i) < problem.getMinValues().get(i))
  24.                 newNeighbours.set(i, problem.getMinValues().get(i));
  25.         }
  26.         return newNeighbours;
  27.     }
  28.  
  29.     private ArrayList<Double> findOptima(int iterations, int neighbours, double stepSize) {
  30.         ArrayList<Double> bestGlobal = new ArrayList<>();
  31.  
  32.         for (int i = 0; i < iterations; i++) {
  33.             ArrayList<Double> bestPoint = createInitPoints();
  34.             double bestPointEval = problem.Eval(bestPoint);
  35.  
  36.             boolean shouldContinue = true;
  37.             while (shouldContinue) {
  38.                 ArrayList<Double> newPoint = findNewNeighbours(bestPoint, stepSize);
  39.                 double newPointEval = problem.Eval(newPoint);
  40.  
  41.                 for (int nb = 0; nb < neighbours - 1; nb++) {
  42.                     ArrayList<Double> newNeighbour = findNewNeighbours(bestPoint, stepSize);
  43.                     if (problem.Eval(newNeighbour) > newPointEval)
  44.                         newPoint = newNeighbour;
  45.                 }
  46.  
  47.                 if (bestPointEval < newPointEval) {
  48.                     bestPointEval = newPointEval;
  49.                     bestPoint = newPoint;
  50.                 } else {
  51.                     shouldContinue = false;
  52.                 }
  53.             }
  54.  
  55. //            System.out.println("-------------Global");
  56. //            System.out.println(bestGlobal);
  57. //            if(bestGlobal.size() != 0)
  58. //                System.out.println(problem.Eval(bestGlobal));
  59. //            System.out.println("-------------Iteration");
  60. //            System.out.println(bestPoint);
  61. //            System.out.println(bestPointEval);
  62.  
  63.  
  64.             if (bestGlobal.size() == 0 || problem.Eval(bestGlobal) < bestPointEval) {
  65.                 bestGlobal = bestPoint;
  66.             }
  67.  
  68.  
  69.             //System.out.println(problem.Eval(randomInitPoints));
  70.         }
  71.         System.out.print("(best eval: " + problem.Eval(bestGlobal) + "");
  72.         return bestGlobal;
  73.     }
  74.  
  75.     private ArrayList<Double> createInitPoints() {
  76.         ArrayList<Double> initPoint = new ArrayList<>();
  77.         for (int dim = 0; dim < problem.getDimensions(); dim++) {
  78.             initPoint.add(problem.getMinValues().get(dim) + Math.random() * (problem.getMaxValues().get(dim) - problem.getMinValues().get(dim)));
  79.         }
  80.         return initPoint;
  81.     }
  82.  
  83.     public static void main(String[] args) {
  84.         //Initial setup
  85.         SimpleHillClimbing climber = new SimpleHillClimbing(new P1());
  86.         int iterations = 10;
  87.         int neighbours = 1;
  88.         double stepsize = 0.01;
  89.  
  90.         //----------------------------------P2------------------------------------------------------//
  91.         System.out.println("--> P1");
  92.  
  93.         System.out.println("-> Iteration Increase");
  94.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  95.         iterations = 100;
  96.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  97.         System.out.println();
  98.         iterations = 1;
  99.  
  100.         System.out.println("-> Neighbour Increase");
  101.         neighbours = 10;
  102.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  103.         neighbours = 100;
  104.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  105.         System.out.println();
  106.         neighbours = 1;
  107.  
  108.         System.out.println("-> Iteration Increase");
  109.         stepsize = 0.1;
  110.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  111.         stepsize = 0.01;
  112.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  113.         System.out.println();
  114.  
  115.         //----------------------------------P2------------------------------------------------------//
  116.         climber = new SimpleHillClimbing(new P2());
  117.         System.out.println("--> P2");
  118.  
  119.         System.out.println("-> Iteration Increase");
  120.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  121.         iterations = 100;
  122.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  123.         System.out.println();
  124.         iterations = 1;
  125.  
  126.         System.out.println("-> Neighbour Increase");
  127.         neighbours = 10;
  128.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  129.         neighbours = 100;
  130.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  131.         System.out.println();
  132.         neighbours = 1;
  133.  
  134.         System.out.println("-> Iteration Increase");
  135.         stepsize = 0.1;
  136.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  137.         stepsize = 0.01;
  138.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  139.         System.out.println();
  140.  
  141.         //----------------------------------P2------------------------------------------------------//
  142.         climber = new SimpleHillClimbing(new RevAckley());
  143.         System.out.println("--> RevAckley");
  144.  
  145.         System.out.println("-> Iteration Increase");
  146.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  147.         iterations = 100;
  148.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  149.         iterations = 200;
  150.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  151.         System.out.println();
  152.         iterations = 1;
  153.  
  154.         System.out.println("-> Neighbour Increase");
  155.         neighbours = 10;
  156.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  157.         neighbours = 100;
  158.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  159.         neighbours = 200;
  160.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  161.         System.out.println();
  162.         neighbours = 1;
  163.  
  164.         System.out.println("-> Iteration Increase");
  165.         stepsize = 0.1;
  166.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  167.         stepsize = 0.01;
  168.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  169.         stepsize = 0.001;
  170.         System.out.println("> Iterations: " + iterations + ", Neighbours: " + neighbours + ", Stepsize: " + stepsize + " Global optima: " + climber.findOptima(iterations, neighbours, stepsize));
  171.         System.out.println();
  172.     }
  173. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top