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