Разработка AI-системы планирования производства Production Scheduling
Производственное расписание — NP-hard задача оптимизации с тысячами переменных. Традиционный подход: ручное планирование или простые правила (FIFO, SPT). AI находит near-optimal расписание за секунды.
Постановка задачи
Job Shop Scheduling Problem (JSSP)
N заданий, каждое требует M операций в определённой последовательности на специфических машинах. Цели: минимизировать makespan, WIP, due date violations, переналадки.
NP-hard: для 10 заданий × 10 машин — 10^70 возможных расписаний. Точный алгоритм практически невозможен при промышленных масштабах (100+ заданий, 50+ машин).
Реальные ограничения
- Machine availability (плановые простои, поломки)
- Tooling и fixture constraints (один инструмент не может быть на двух станках)
- Worker skills (только сертифицированный оператор может выполнять операцию X)
- Material availability (нельзя начать операцию без компонентов)
- Sequence-dependent setup times (переналадка A→B ≠ B→A)
AI-методы для планирования
Reinforcement Learning
RL-агент учится политике составления расписания:
- State: текущее состояние всех машин, очереди, незавершённые задания
- Action: выбор следующего задания для конкретной машины
- Reward: -1 за unit time makespan, penalty за due date нарушения
L2D (Learning to Dispatch): GraphNN захватывает топологию JSSP как граф → Policy network → dispatching rule. Превосходит классические эвристики на 5–15%.
from stable_baselines3 import PPO
from torch_geometric.nn import GATConv
import torch
class JSSPScheduler(torch.nn.Module):
"""GNN для job shop scheduling"""
def __init__(self, node_features, hidden_dim):
super().__init__()
self.gat1 = GATConv(node_features, hidden_dim, heads=4)
self.gat2 = GATConv(hidden_dim*4, hidden_dim, heads=1)
self.policy_head = torch.nn.Linear(hidden_dim, 1) # Score per job
def forward(self, data):
x, edge_index = data.x, data.edge_index
x = torch.relu(self.gat1(x, edge_index))
x = self.gat2(x, edge_index)
return self.policy_head(x) # Job scores → select highest
Genetic Algorithms / Evolutionary Optimization
Эволюционные алгоритмы хорошо работают для JSSP:
- Chromosome = последовательность операций
- Fitness = makespan / sum of tardiness
- Crossover: PMX, LOX для permutation scheduling
- Mutation: 2-opt swap, insertion
GA + Local Search гибрид: GA находит хорошую область → LS оптимизирует внутри.
Constraint Programming
OR-Tools (Google): CP-SAT solver для точных задач среднего масштаба (<500 заданий). Декларативное описание задачи + solver находит оптимум с гарантиями.
from ortools.sat.python import cp_model
model = cp_model.CpModel()
# Переменные: начало каждой операции
task_starts = {}
for job, machine, duration in jobs:
task_starts[(job, machine)] = model.NewIntVar(0, horizon, f'start_{job}_{machine}')
# Ограничения последовательности
for job in jobs:
for i in range(len(job)-1):
model.Add(task_starts[(job, i+1)] >= task_starts[(job, i)] + job[i].duration)
# Ограничения машин (не-параллельность)
for machine in machines:
model.AddNoOverlap([intervals[(job, machine)] for job in jobs_on_machine])
# Цель
makespan = model.NewIntVar(0, horizon, 'makespan')
model.AddMaxEquality(makespan, [task_ends[last_op_of_job] for last_op in jobs])
model.Minimize(makespan)
Predictive Scheduling
Интеграция с demand forecast: прогноз продаж → backward scheduling → когда нужно запустить производство → оптимальное расписание.
Dynamic re-scheduling: при срочном заказе или отказе машины → немедленный пересчёт расписания с минимальными disruptions.
Интеграция с ERP/MES
SAP PP (Production Planning) ↔ AI Scheduler: SAP содержит заказы, маршруты, мощности. AI scheduler получает данные через BAPI/API, возвращает оптимизированный план.
Реальное время: при новом заказе или изменении условий — пересчёт за секунды. Диспетчер видит обновлённый план немедленно.
KPI: On-time delivery improvement +15–25%, makespan reduction -10–20%, machine utilization +8–15%.
Срок разработки: 5–8 месяцев с интеграцией в ERP.







