В настоящее время я пытаюсь разработать решение для TSP, используя NN .
Neuran Network Мой текущий подход - это NN с 2 плотными слоями. Активация - это рул и оптимизатор Nadam. Для 10 точек есть 10 входов и выходов. Каждый слой имеет 0,6666 * NUM_POINTS + NUM_POINTS нейронов.
Ввод для 10 точек: Если точки 2,5,6 уже пройдены, вход будет [0,0,1,0 , 0,0.5,0.25,0,0,0]. Путь закодирован во входе. Первая посещенная точка равна 1, а каждая следующая точка равна 1/2 от предыдущей.
Выход для 10 точек: 10 выходов с softmax. Выход с наивысшей оценкой будет следующей вершиной, которую нужно преодолеть, и я добавлю точку к входу позже.
NN будет прогнозировать следующие точки, точка за точкой, пока не будет доступной точки.
Тренировка : Я использую контролируемое обучение. Набор данных содержит совершенные маршруты из части всех точек. Таким образом, данные тренировки не содержат полной поездки по всем пунктам. Одним из примеров набора данных: input является случайный маршрут, например, 1,2,4,3. Выход для этой комбинации равен 6, потому что 1,2,4,3,6 - самая короткая (дистанционная) комбинация из пяти точек. Поэтому я кормлю NN [0,1,0.5,0.125,0.25,0,0,0,0,0] и ожидаю, что выход 6 будет иметь наибольшую вероятность.
Моя проблема : Это не работает. Я надеялся, что NN найдет лучшую поездку, если я буду кормить ее маленькими идеальными поездками. Возможно, тип обучающих данных неправильный, или архитектура моего NN. Мой опыт работы с NN ограничен, поэтому я надеюсь, что допустил очевидную ошибку, которую, надеюсь, можно легко исправить.
После потери 4 эпох: 2.0431 - точность: 0.286. Я протестировал net с образцом набора данных, потери 2.0197 и точность 0.2500. Поэтому NN имеет очень низкую вероятность для своих предсказаний ~ 0,2 при поиске следующей точки.