Проект симулирует производственный процесс с учетом ограниченного количества работников и производственных центров, которые связаны друг с другом взвешенными ребрами. Алгоритм распределяет работников между центрами на основе их загрузки и производительности, оптимизируя производственный процесс. В ключевые классы проекта добавлена документация JavaDoc для упрощения понимания кода.
- Укажите путь к входному Excel-файлу.
- Укажите путь, где будет сохранен выходной CSV-файл.
- После выполнения симуляции результаты будут записаны в указанный вами CSV-файл.
- Описание: Моделируют производственные узлы. Каждый центр имеет буфер для деталей.
- Поля:
id— уникальный идентификатор центра.name— название центра.maxWorkers— максимальное количество работников.performance— время обработки одной детали.
- Используется: Для хранения состояния и свойств каждого производственного центра.
- Описание: Представляют собой ориентированные взвешенные ребра между центрами.
- Поля:
fromCenter— исходный центр.toCenter— конечный центр.
- Используется: Для построения графа производственного процесса.
- Описание: Потокобезопасные очереди
LinkedBlockingQueueиспользуются для хранения деталей, ожидающих обработки. - Преимущества:
- Поддерживают блокирующие операции
offer()иpoll(). - Исключают гонки потоков в многопоточном окружении.
- Поддерживают блокирующие операции
- Используется: Для хранения деталей в буферах производственных центров.
- Описание: Карта
ConcurrentHashMapиспользуется для хранения текущего количества работников, прикрепленных к каждому центру. - Преимущества: Обеспечивает потокобезопасный доступ в условиях многопоточности.
Работа программы организована через следующие основные модули:
- Точка входа в приложение. Отвечает за:
- Ввод данных.
- Запуск симуляции.
- Запись результатов.
- Основная логика симуляции:
- Управление распределением работников.
- Параллельная обработка деталей.
- Запись результатов симуляции.
- Реализация алгоритмов:
- Распределение работников между центрами.
- Выбор следующего соединения.
- Корректировка избыточных работников.
- Используется: В методе
selectNextConnectionдля выбора следующего центра на основе минимального веса соединений. - Описание:
- Рассчитывается вес соединений на основе:
- Размер буфера (
buffer.size()). - Производительности центра (
performance). - Количества текущих работников.
- Размер буфера (
- Центры с меньшим значением веса имеют приоритет для обработки деталей.
- Рассчитывается вес соединений на основе:
- Используется: В методах
redistributeWorkersMoreиredistributeWorkersLess. - Описание:
- Центры сортируются по убыванию значений (
buffer.size() * performance). - Работники назначаются начиная с наиболее загруженных центров.
- Жадный подход минимизирует простои и гарантирует максимальное использование ресурсов.
- Центры сортируются по убыванию значений (
- Используется: В классе
SimulationRunnerдля параллельной обработки деталей. - Описание:
- Применяется
ExecutorServiceс фиксированным пулом потоков, равным числу доступных работников. - Потокобезопасные структуры данных (
ConcurrentHashMap,BlockingQueue) исключают гонки потоков.
- Применяется
- Преимущества:
- Ускоряет выполнение симуляции за счет распараллеливания задач.
- Обеспечивает корректную работу программы даже при увеличении количества работников и центров.