Имитация отжига 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