Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.78 KB | None | 0 0
  1. public abstract class Context {
  2.    
  3.     public static abstract void init();
  4.    
  5.     public static Comparator<Solution> getComprator() {  //На минимум или на максимум задача
  6.         return new MinComparator();                      
  7.     }
  8.    
  9.     private static class MinComarator implements Comparator<Solution> {
  10.  
  11.         @Override
  12.         public int compare(Solution o1, Solution o2) {
  13.             return Double.compare(o1.fitness(), o2.fitness());
  14.         }
  15.        
  16.     }
  17. }
  18.  
  19. public interface Solution {
  20.       double fitness(); //Целевая функция    
  21. }
  22.  
  23. public interface Generation extends Collection<Solution> {  
  24.     public Generation getBest(); // Из поколения возвращает экземпляры с лучшим fitness
  25. }
  26.  
  27.  
  28. public interface Initialization() {
  29.     // возвращает начальное поколение
  30.     public Generation getInitialGeneration();
  31. }
  32.  
  33. public interface Generator() {
  34.     // основываясь исключительно на данных о g, возвращает новое поколение
  35.     public Generation getNext(Generation g);
  36. }
  37.  
  38. public interface Selector() {
  39.     // "процеживает" g, оставляя в нём одно или более наилучших решений
  40.     public Generation keepTheBestSolutions(Generation g);
  41. }
  42.  
  43. public interface StoppingCriteria() {
  44.     // принимает решение об остановке на основе полученного g и,
  45.     // может быть, контекста
  46.     public boolean isSatisfied(Generation g);
  47. }
  48.  
  49. public interface TransitionCriteria() {
  50.     // на основе переданных ему поколений решает, совершить
  51.     // ли переход от g к h
  52.     public boolean isSatisfied(Generation g, Generation h);
  53. }
  54.  
  55. public class Algorithm
  56. {
  57.     private Initialization init;
  58.     private Generator generator;
  59.     private StoppingCriteria stoppingCriteria;
  60.     private Selector selector;
  61.         private TransitionCriteria transitionCriteria;
  62.     public Algorithm(Initialization i, Generator g, StoppingCriteria stop, Selector selector, TransitionCriteria trans) {
  63.         this.init = i;
  64.         this.generator = g;
  65.         this.stoppingCriteria = stop;
  66.         this.selector = selector;
  67.             this.transitionCriteria = trans;
  68.     }
  69.    
  70.     public Generation solve()   //Разрешается переопределять
  71.     {
  72.         Generation g = Initialization.getInitialGeneration();
  73.                 while ( !stoppingCriteria.isSatisfied(g) ) {
  74.  
  75.                  nextG = generator.getNext(g);
  76.                  h = selector.keepTheBestSolutions(nextG);
  77.  
  78.                  if ( transitionCriteria.isSatisfied(g, h) ) {
  79.                 g = h;
  80.                  }
  81.                 }
  82.                 return g.getBest();
  83.     }
  84.  
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement