Имитация отжига Java из псевдокода

в настоящее время я работаю над проектом (TSP) и пытаюсь преобразовать некоторый имитированный псевдокод отжига в Java. В прошлом мне удалось преобразовать псевдокод в код Java,однако я не могу успешно преобразовать это.

псевдокод является:

T0(T and a lowercase 0)    Starting temperature
Iter    Number of iterations
λ    The cooling rate

1.  Set T = T0 (T and a lowercase 0)
2.  Let x = a random solution
3.  For i = 0 to Iter-1
4.  Let f = fitness of x
5.  Make a small change to x to make x’
6.  Let f’ = fitness of new point
7.  If f’ is worse than f then
8.      Let p = PR(f’, f, Ti (T with a lowercase i))
9.      If p > UR(0,1) then
10.         Undo change (x and f)
11.     Else
12.         Let x = x’
13.     End if
14.     Let Ti(T with a lowercase i) + 1 = λTi(λ and T with a lowercase i)
15. End for
Output:  The solution x

если бы кто-нибудь мог показать мне базовую разметку этого на Java, я был бы очень благодарен - я просто не могу понять это!

Я работаю через несколько классы, использующие ряд функций (которые я не буду перечислять, поскольку это не имеет значения для того, что я прошу). У меня уже есть smallChange() способ и fitness function-может ли быть шанс, что мне нужно будет создать несколько разных версий указанных методов? Например, у меня есть что-то вроде:

public static ArrayList<Integer> smallChange(ArrayList<Integer> solution){

//Code is here.

}

может ли мне понадобиться другая версия этого метода, которая принимает разные параметры? Что-то вроде:

public static double smallChange(double d){

//Code is here.

}

все, что мне нужно, это базовый идея о том, как это будет выглядеть при написании на Java - я смогу адаптировать его к своему коду, как только узнаю, как он должен выглядеть в правильном синтаксисе, но я не могу преодолеть это конкретное препятствие.

спасибо.

Мик

3 ответов


базовый код должен выглядеть так:

public class YourClass {
  public static Solution doYourStuff(double startingTemperature, int numberOfIterations, double coolingRate) {
    double t = startingTemperature;
    Solution x = createRandomSolution();
    double ti = t;

    for (int i = 0; i < numberOfIterations; i ++) {
      double f = calculateFitness(x);
      Solution mutatedX = mutate(x);
      double newF = calculateFitness(mutatedX);
      if (newF < f) {
        double p = PR(); // no idea what you're talking about here
        if (p > UR(0, 1)) { // likewise
          // then do nothing
        } else {
          x = mutatedX;
        }
        ti = t * coolingRate;
      }
    }
    return x;
  }

  static class Solution {
    // no idea what's in here...
  }
}

теперь, когда вы хотите разные версии метода smallChange () - полностью выполнимы, но вы должны прочитать наследование немного


вы можете сравнить свой ответ с кодом, предусмотренным для учебника
искусственный интеллект современный подход.


кроме того, основанный на Java подход к обучению моделируемому отжигу (с образцом кода) здесь:

Келлер, Тодд. Обучение Стохастического Локального Поиска, В I. Рассел и З. Марков, eds. Материалы 18-й Международной конференции FLAIRS (FLAIRS-2005), Clearwater Beach, Florida, May 15-17, 2005, AAAI Press, PP.

связанные ресурсы, ссылки и демки здесь: http://cs.gettysburg.edu / ~tneller/resources/sls/index.html