Я ищу для реализации алгоритма имитированного отжига в Java, чтобы найти оптимальный маршрут для Travelling Salesman Problem, до сих пор я реализовал грубую силу и хочу изменить этот код, чтобы использовать имитируемый отжиг. Очевидно, что грубая сила и имитированный отжиг очень разные и используют очень разные функции.Simulated Annealing TSP
Я понимаю, что имитационный отжиг использует переменную, известную как температура, которая затем охлаждается по мере запуска алгоритма; с высокой температурой, и она постепенно охлаждается. В то время как температура высокая, алгоритм с большей вероятностью будет выбирать решения, которые хуже, чем ток, устраняя локальные максимумы, как вы находите в аналогичном алгоритме альпинизма. Поскольку он остывает, алгоритм вряд ли примет худшие решения, и поэтому он может сосредоточиться на определенной области и найти оптимальный маршрут.
Я считаю, что я понимаю, как работает алгоритм, но у меня проблемы с его внедрением в 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();
}
}