Имитация отжига TSP
Я ищу реализовать алгоритм имитации отжига в Java, чтобы найти оптимальный маршрут дляЗадача коммивояжераДо сих пор я реализовал грубую силу и собираюсь изменить этот код для использования имитации отжига. Очевидно, что грубая сила и имитация отжига очень разные и используют очень разные функции.
Я понимаю, что в моделируемом отжиге используется переменная, известная как температура, которая затем охлаждается при работе алгоритма; с высокой начальной температурой и постепенно остывающей. Хотя температура высокая, алгоритм с большей вероятностью выберет решения, которые хуже текущих, исключая локальные максимумы, как вы могли бы найти в аналогичном алгоритме восхождения на холм. Поскольку он охлаждается, алгоритм вряд ли будет принимать худшие решения, и поэтому он может сосредоточиться на конкретной области, и оптимальный маршрут будет найден быстро.
Я верю, что понимаю, как работает алгоритм, но у меня проблемы с переносом этого в Java, у меня есть 2 класса; один называется Город, который просто содержит методы для разработки деталей каждого города, такие какgetIndex
, getDistance
и т. д. Класс алгоритма читает из входного файла и сохраняет его в массиве (int [][]
)
Приведенный ниже код является алгоритмом грубой силы, который я хочу изменить, чтобы вместо этого выполнять имитационный отжиг, если кто-нибудь может мне помочь, я бы это очень высоко оценил.
public static void doBF()
{
int random1 = generateRand();
if (towns2.size() > random1)
{
Town town = towns2.get(random1);
visitedTowns[i] = town;
towns2.remove(town);
i++;
if (lastTown != 1000)
{
journey += town.getDistance(lastTown);
}
lastTown = town.getIndex();
}
else
{
doBF();
}
}