Применение принципов линейного программирования для оптимизации бизнес-процессов
Первая ассоциация, которая приходит на ум при упоминании линейного программирования, это то, что оно связано с линейностью (последовательностью) процесса. На самом деле оно не имеет никакого отношения к «правильности» или последовательности процесса. В реальности всё намного сложнее. А слово «линейный» здесь обозначает базовые функции, в отношении которых осуществляется расчёт. Они линейные, то есть при построении графика вы получите линию.
О том как связаны линии, программирование и оптимизация бизнес-процессов, расскажем далее.
Что такое линейное программирование?
Линейное программирование (ЛП, англ. Linear programming) – это математическая дисциплина, отвечающая за поиск решений систем линейных уравнений. Поскольку множество решений может быть практически бесконечным, задача линейного программирования сводится к поиску экстремумов (минимумов и максимумов), удовлетворяющих условиям задачи.
А теперь простыми словами:
Решение будет нелинейным. Его можно описать сложным графиком, отражающим зависимость между разными уравнениями.
Слово «программирование» здесь не потому, что эта какая-то особая методика написания программ, а потому, что система уравнений может решаться разными способами, и нужно спланировать свой алгоритм решения. Алгоритм решения – это и есть «программа».
Кроме того, создатель одного из самых эффективных алгоритмов решения системы линейных уравнений, Джордж Данциг, использовал в своей работе компьютер, потому и предложил название, включающее слово программирование.
Метод, который предложил Данциг, называется симплекс-метод. Почерпнуть максимум технической информации по этому вопросу можно из Википедии – Симплекс-метод.
Вкратце расскажем, к чему он сводится: сначала находятся исходные вершины множества всех возможных решений, получается некий выпуклый многогранник, а затем, перемещаясь по вершинам многогранника, ведется поиск оптимального значения целевой функции. Так как число вершин и граней не бесконечное, рано или поздно оптимальное решение будет найдено даже простым перебором.
Как линейное программирование связано с оптимизацией производств, управленческих процессов, проектов и т.п.?
И вот тут мы приходим к самому главному.
Математика изначально решала и продолжает решать многие задачи бизнеса. С её помощью считают прибыль, строят прогнозы, высчитывают различные коэффициенты эффективности и многое другое. Достаточно вспомнить, как KPI влияют на заработные платы менеджеров. Цифры могут отобразить даже удовлетворённость клиентов.
Во многих источниках линейное программирование рассматривается как инструмент, способный оптимизировать практически любые бизнес-процессы, снизить издержки и повысить эффективность производства, найти лучший портфель для инвестирования и не только. И всё это при изначально ограниченных ресурсах. Это именно то, о чём мечтают многие инвесторы и владельцы предприятий.
Как это в принципе возможно?
Одной из самых сложных задач при планировании любого производства является расчёт нагрузки на производственную линию. Подобные задачи могут быть в любых других сферах: экономика (расчёт бюджетов и вложений), маркетинг (загрузка специалистов различного профиля при обслуживании разных каналов продаж), IT-проекты и программирование (максимальная производительность команды), логистика (оптимизация товарных запасов, расчёт нагрузки на отдельные направления), инвестирование и прочее.
Например, с помощью линейного программирования можно рассчитать свои потребности в персонале. Ранее мы писали про планирование штата, но без математических моделей.
Примерные расчёты можно сделать и на основе собственного опыта, но все же это будет не то. Хорошо, когда на помощь приходит математика, в частности, линейное и нелинейное программирование.
Линейное программирование способно дать вполне конкретные ответы на достаточно сложные вопросы: нормы выработки, поиск узких мест, оптимальная загрузка всех имеющихся сотрудников, максимальное количество заказов, которое можно взять в обработку, оптимальный бюджет на рекламные каналы и прочее.
При этом линейное программирование работает только с линейными функциями, но именно они чаще всего и используются для описания отдельных компонентов и процессов бизнеса.
Рассмотрим применение линейного программирования на практике.
Оптимизация производительности IT-команды с помощью принципов линейного программирования
Представим, что в команде есть три отдельных сотрудника (С1, С2 и С3), каждый из которых отвечает за определённые виды работ.
Команда разрабатывает для рынка два основных продукта: A и B.
Время работы над своей частью продукта у каждого сотрудника разное. Условно сотрудники тратят единицы своего времени так:
- При работе над продуктом А сотруднику С1 нужно 12 единиц, сотруднику С2 – 4 единицы, сотруднику С3 – 3 единицы.
- При работе над продуктом В сотруднику С1 нужно 4 единицы, сотруднику С2 – 4 единицы, сотруднику С3 – 12 единиц.
Прибыльность у продуктов разная: для продукта А – 30 условных единиц, для В – 40.
Рабочее время сотрудника С1 на заданный период – 300 единиц, сотрудника С2 – 120, а С3 – 252 единицы.
При каких условиях работы прибыль проекта будет максимально высокой?
Составляем систему уравнений:
- 12×1 + 4×2 ≤ 300
- 4×1 + 4×2 ≤ 120
- 3×1 + 12×2 ≤ 252
Где x1 – это количество продуктов типа А, а x2 – количество продукта В. Все переменные должны быть больше нуля.
Цель – найти максимум, который может принимать функция F(x) = 30×1 + 40×2
Для решения задачи уравнения приводятся к равенствам, для этого в них вводятся дополнительные переменные (тоже неотрицательные).
- 12×1 + 4×2 + x3 = 300
- 4×1 + 4×2 + x4 = 120
- 3×1 + 12×2 + x5 = 252
Далее составляется симплекс-таблица (в соответствии с симплекс-методом это будет несколько итераций с разными ведущими строками).
Итоговая таблица без отрицательных значений будет иметь вид:
Целевая функция приобретает следующий вид:
F = 1080 — 20/3 x4 — 10/9×5
Прибыль проекта будет максимальной, если команда будет выпускать 12 продуктов типа А и 18 продуктов типа В. Она составит 1080 условных единиц.
При этом сотрудники С1 и С2 будут загружены на 100%, а сотрудник С3 будет иметь резерв в 84 единицы времени.
Выводы и рекомендации
Математику неслучайно называют царицей наук. И применение линейного программирования лишний раз доказывает это. Метод вполне может применяться на практике – для оптимизации любых бизнес-процессов, которые возможно описать простыми линейными функциями (зависимостями).
При этом руководители и владельцы бизнеса всегда должны помнить, что любая «линейность» может быть нарушена в определённый момент времени, так как сотрудники – это не роботы. Тем не менее, если исключить человеческий фактор и работать только с цифрами, можно существенно повысить эффективность бизнеса в любой сфере.
Чтобы человеческий фактор был минимальным, необходимо использовать правильные методы управления и контроля, мотивации, планирования и коммуникации. Большую часть рутины можно перенести в BPM-систему Projecto.