Skip to content

msmrc/ledovod-ai

Repository files navigation

Проект "Ледокол": Оптимизация расписания проводки судов во льдах

Содержание

  1. Описание проекта
  2. Описание данных
  3. Описание этапов работы
  4. Результаты работы
  5. Используемые библиотеки

Задача и сложности проекта

Идеальное решение для проходимости судов бы выглядело вот так:

Где каждое судно проходит оптимальный путь без ожиданий.

Сложность заключается в том что для того чтобы подобрать оптимальное расписание для всех судов, нужно учитывать множество комбинаций и вариантов проходимости судов в зависимости от ледовой обстановки.

Количество комбинаций всех решений для 42 заявок составляет число с 19 нулями так что нам пришлось испльзовать другие методы для нахождения решения задачи.

Алгоритм составления графа проходимости на основе данных о льдах

Для

  1. Образуем данные проходимости льда и разбиваем их по сетке координат.
  2. Находим две точки на графе и берем их координаты.
  3. Строим путь между этими точками по болшому кругу
  4. Разбиваем путь на n точек
  5. Для каждой точки на пути находим ближайшую точку данных по ледовой обстановке с помощью алгоритма K-d деревьев.
    1. Картинка
  6. Строим граф, добавляя на рёбра метаданные о проходимости на участках пути.
  7. Сохраняем.

Граф с данными о проходимости льда:

Алгоритм поиска оптимального пути на графе

Для нахождения оптимального пути на графе мы использовали алгоритм Djikstra из библиотеки NetworkX, который находит кратчайший путь между двумя вершинами на графе учитывая время прохождения для выбранного судна и ледокола.

Алгоритм работает на принципе поиска кратчайшего пути на графе с помощью обновления весов рёбер в зависимости от времени прохождения. После нахождения кратчайшего пути мы можем узнать время прохождения и оптимальный путь для судна.

Создание изначального расписания

Алгоритм First Come First Serve - Первый пришел - первый обслужен

Изначальное расписание строится так что мы привязываем ледокол, который меньше всего ждать для нашего судна. После этого мы привязываем к следующему судну ледокол, который меньше всего ждать для него и так далее.

В итоге мы получаем расписание где близко к минимуму сумма ожиданий всех ледоколов.

Это решение является нашей отправной точкой, при котором суммарный простой всех кораблей ожидающих ледокол составляет 190 дней или 4560 часов!

Наш бенчмарк - first come first serve алгоритм

  • Корабли потратили ожидая ледоколов: 4560 часов <- нам нужно уменьшить время простоя кораблей в ожидании ледоколов

  • Ледоколы потратили ожидая кораблей: 212 часов

  • Ледоколы потратили на перемещение: 4509 часов

  • Корабли потратили на перемещение: 2748 часов

Симуляция отжига для оптимизации расписания

Сравнение результатов в зависимости от количества итераций

Удобство алгоритма заключается в том, что мы можем подобрать решение близкое к оптимальному, при этом регулируя, сколько времени мы готовы потратить на поиск решения.

# Настройка параметров имитации отжига
initial_temp = 1000
cooling_rate = 0.95 # Коэффициент охлаждения 0.95 значит что температура уменьшается на 5% на каждой итерации

Архитектура бакенда проекта

Интеграция бакенда

Описание API и примеры использования

На что не хватило времени

Создание навигационного решения основываясь на более подробных спутниковых снимков, данных о погоде и течениях

Проводка судов без ледокола

Создание картежей

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published