Розв’язувач задачі комівояжера
Навчальний desktop-застосунок для розв’язання задачі комівояжера з матричним введенням, візуалізацією маршруту та покроковим виводом алгоритму.
Огляд
Traveling Salesman Problem Solver — це навчальний desktop-застосунок для розв’язання та візуалізації задачі комівояжера (Traveling Salesman Problem, TSP).
Програма поєднує алгоритми оптимізації, матричне введення даних, графічну візуалізацію маршруту та текстовий пояснювальний вивід у межах автономного Windows-застосунку.
Проект створювався як навчальна та демонстраційна утиліта з акцентом на візуалізацію алгоритмів, перевірку даних та зрозумілість процесу розв’язання.
Контекст
Метою проекту було створення desktop-застосунку, здатного:
- розв’язувати задачі комівояжера;
- перевіряти коректність матриць відстаней;
- візуалізувати побудований маршрут;
- демонструвати алгоритми оптимізації;
- формувати зрозумілі навчальні пояснення процесу обчислень.
Застосунок орієнтувався на курсові, демонстраційні та навчальні сценарії, пов’язані з оптимізацією та алгоритмами на графах.
Відповідальність
У межах проекту були реалізовані:
- архітектура застосунку;
- алгоритми розв’язання TSP;
- графічний інтерфейс;
- обробка матриць;
- система валідації;
- візуалізація маршруту;
- форматований навчальний вивід;
- проектування workflow оптимізації.
Рішення
Рішення реалізоване як WPF desktop-застосунок на .NET 8 із використанням стандартних бібліотек платформи.
Програма дозволяє:
- генерувати та редагувати матриці відстаней;
- обирати стартове місто;
- обчислювати оптимізовані маршрути;
- візуалізувати побудований шлях;
- переглядати покроковий журнал роботи алгоритму.
Система підтримує:
- повний перебір для невеликих наборів даних;
- евристичний алгоритм найближчого сусіда для більших задач.
Інтерфейс був спроектований так, щоб залишатися навчальним та візуально зрозумілим при роботі з алгоритмами оптимізації.
Технічні деталі
Стек
- C#
- .NET 8
- WPF
- System.Data
Архітектура
У проекті розділено:
- парсинг та перевірку матриць;
- алгоритми оптимізації;
- візуалізацію маршруту;
- форматування результатів;
- GUI-логіку.
Для ізоляції обчислювальної логіки використовуються окремі моделі:
- опису задачі;
- представлення результату;
- solver-компонента.
Функціональність
Реалізовано:
- редаговані матриці відстаней;
- генерацію симетричних demo-матриць;
- перевірку коректності матриці;
- brute-force розв’язання для малих наборів;
- евристичне nearest-neighbor розв’язання для більших наборів;
- обчислення довжини маршруту;
- покрокові журнали алгоритму;
- кругову візуалізацію маршруту через Canvas.
Візуальний шар допомагає користувачу зрозуміти побудований маршрут та поведінку алгоритму.
Виклики
Основними викликами були:
- баланс між складністю алгоритмів та швидкодією desktop-застосунку;
- безпечна перевірка великих матриць;
- візуалізація маршрутів у легковаговому навчальному інтерфейсі;
- зрозуміле розділення точного та евристичного підходів;
- підтримка читабельності UI при одночасному відображенні журналу та графічного результату.
Результат
У результаті було створено застосунок, який демонструє:
- структуровану WPF-архітектуру;
- реалізацію алгоритмів оптимізації та роботи з графами;
- обробку матричних даних;
- графічну візуалізацію маршрутів;
- навчальне представлення алгоритмів;
- розділення обчислювальної логіки та UI-компонентів.
Проект також став прикладом поєднання алгоритмів оптимізації, візуалізації та desktop GUI-розробки на .NET.
Медіа
Галерея містить:
- приклади введення матриць;
- попередній перегляд візуалізації маршруту;
- результати роботи алгоритмів та журнали обчислень.
Примітки
- Навчальний/демонстраційний проект.
- Україномовний інтерфейс.
- Використовує brute-force та евристичні алгоритми залежно від розміру задачі.
- Реалізовано без сторонніх залежностей.