- Введение
- Системные требования
- Сборка проекта
- Использование
- Математическая модель
- Структура проекта
- Анализ
- Источники
Цель проекта - разработка эвристического алгоритма, который находит ограничения с помощью вещественной модели. Далее все найденные ограничения передаются в точную смешано-целочисленную модель. Как показывают опыты это помогает ускорить нахождение оптимального решения для графов небольших размерностей и улучшить нижнюю оценку для графов больших размерностей(задача NP-трудная).
- Компилятор g++ (GCC) 15.2.1 или новее
- Python 3.14 или новее
- Лицензия CPLEX 12.6.1 или новее
- GNU Make 4.4.1 или новее
Чтобы собрать проект вам нужно владеть лицензией программного пакета "CPLEX".
Чтобы собрать проект, в Makefile нужно изменить значения:
...
CPLEXDIR = ../../path-to-cplex/cplex/cplex/
CONCERTDIR = ../../path-to-cplex/cplex/concert/
...
Затем собрать проект командой:
make
Можно запустить тестовый пример командами:
make run
./build/network < ./input/main.txt
Можно запустить точный решатель (без эвристики), добавив флаг -e
./build/network -e < ./input/main.txt
Результаты вычислений записываются в директории output с именем output.txt.
Далее, после запуска виртуального окружения, можно отрисовать граф командой:
python draw.py
Подробнее про отрисовку тут.
Первое число n - количество узлов в сети.
Далее в n строках передаются значения x, y, d, t, где x - координата узла по x, y - координата узла по y, d - потребление/прозводство узла, t - тип узла(0 - электростанция, 1 - город).
Типы переменных:
- x - вещественная
- y - вещественная
- d - вещественная
- t - бинарная
Примеры можно найти в директории input.
В первой строке через пробел передаются значения узлов. Значения узла разделяются символом ";" и содержит:
- x - Координата по оси x
- y - Координата по оси y
- demand - Потребление/производство узла
- type - тип узла
Далее в i строке передаются значения дуг от узла i. Значения дуги содержат параметры:
- j - Номер узла в который ведёт дуга
- y - Значение y
- flow - Значения потока
Все выходные данные сохраняются в директории output с названием output.txt.
Чтобы нарисовать граф нужно:
Создать виртуальное окружение
python -m venv venv
Активировать виртуальное окружение
. venv/bin/activate
Установить требуемые зависимости
pip install -r requirements.txt
Запустить скрипт draw.py:
python draw.py
python draw.py <название-файла-в-output> # например output.txt, а не output/output.txt
ЕСЛИ LATEX НЕ ОТОБРАЖАЕТСЯ: ДИПЛОМ
$\forall S \subset V\space\sum\limits_{\substack{i \in S\j \in V \backslash S}} y_{ij}\geqslant \left\lceil - \dfrac{\sum\limits_{k \in S} P_{k} - \sum\limits_{k \in S} d_{k} - P_{k}^{}}{u^{}} \right\rceil$

