Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class Context {
- public static abstract void init();
- public static Comparator<Solution> getComprator() { //На минимум или на максимум задача
- return new MinComparator();
- }
- private static class MinComarator implements Comparator<Solution> {
- @Override
- public int compare(Solution o1, Solution o2) {
- return Double.compare(o1.fitness(), o2.fitness());
- }
- }
- }
- public interface Solution {
- double fitness(); //Целевая функция
- }
- public interface Generation extends Collection<Solution> {
- public Generation getBest(); // Из поколения возвращает экземпляры с лучшим fitness
- }
- public interface Initialization() {
- // возвращает начальное поколение
- public Generation getInitialGeneration();
- }
- public interface Generator() {
- // основываясь исключительно на данных о g, возвращает новое поколение
- public Generation getNext(Generation g);
- }
- public interface Selector() {
- // "процеживает" g, оставляя в нём одно или более наилучших решений
- public Generation keepTheBestSolutions(Generation g);
- }
- public interface StoppingCriteria() {
- // принимает решение об остановке на основе полученного g и,
- // может быть, контекста
- public boolean isSatisfied(Generation g);
- }
- public interface TransitionCriteria() {
- // на основе переданных ему поколений решает, совершить
- // ли переход от g к h
- public boolean isSatisfied(Generation g, Generation h);
- }
- public class Algorithm
- {
- private Initialization init;
- private Generator generator;
- private StoppingCriteria stoppingCriteria;
- private Selector selector;
- private TransitionCriteria transitionCriteria;
- public Algorithm(Initialization i, Generator g, StoppingCriteria stop, Selector selector, TransitionCriteria trans) {
- this.init = i;
- this.generator = g;
- this.stoppingCriteria = stop;
- this.selector = selector;
- this.transitionCriteria = trans;
- }
- public Generation solve() //Разрешается переопределять
- {
- Generation g = Initialization.getInitialGeneration();
- while ( !stoppingCriteria.isSatisfied(g) ) {
- nextG = generator.getNext(g);
- h = selector.keepTheBestSolutions(nextG);
- if ( transitionCriteria.isSatisfied(g, h) ) {
- g = h;
- }
- }
- return g.getBest();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement