Применение принципов линейного программирования для оптимизации бизнес-процессов

Первая ассоциация, которая приходит на ум при упоминании линейного программирования, это то, что оно как-то связано с линейностью (последовательностью) процесса. На самом деле это не так, никакого отношения к «правильности» или последовательности процесса здесь нет. В реальности всё намного сложнее. А слово «линейный» здесь обозначает базовые функции, в отношении которых осуществляется расчёт. Они линейные, то есть при построении графика вы будете получать линию.

О том как связаны «линии», программирование и оптимизация бизнес-процессов, расскажем ниже.

Что такое линейное программирование?

Линейное программирование (ЛП, англ. 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 единицы.

При каких условиях работы прибыль проекта будет максимально высокой?

Составляем систему уравнений:

  • 12x1 + 4x2 ≤ 300
  • 4x1 + 4x2 ≤ 120
  • 3x1 + 12x2 ≤ 252

Где x1 – это количество продуктов типа А, а x2 – количество продукта В. Все переменные должны быть больше нуля.

Цель – найти максимум, который может принимать функция F(x) = 30x1 + 40x2

Для решения задачи уравнения приводятся к равенствам, для этого в них вводятся дополнительные переменные (тоже неотрицательные).

  • 12x1 + 4x2 + x3 = 300
  • 4x1 + 4x2 + x4 = 120
  • 3x1 + 12x2 + x5 = 252

Далее составляется симплекс-таблица (в соответствии с симплекс-методом это будет несколько итераций с разными ведущими строками).

Итоговая таблица без отрицательных значений будет иметь вид:

Целевая функция приобретает следующий вид:

F = 1080 — 20/3 x4 — 10/9x5

Прибыль проекта будет максимальной, если команда будет выпускать 12 продуктов типа А и 18 продуктов типа В. Она составит 1080 условных единиц.

При этом сотрудники С1 и С2 будут загружены на 100%, а сотрудник С3 будет иметь резерв в 84 единицы времени.

Выводы и рекомендации

Математику не зря называют царицей наук. И применение линейного программирования это лишний раз доказывает. Метод вполне может применяться на практике – для оптимизации любых бизнес-процессов, которые можно описать простыми линейными функциями (зависимостями).

При этом руководители и владельцы бизнеса всегда должны помнить, что любая «линейность» может быть поломана в определённый момент времени, так как сотрудники – это не роботы. Но тем не менее, если исключить человеческий фактор и работать только с цифрами, можно существенно повысить эффективность чего угодно.

Чтобы человеческий фактор был минимальным, нужно использовать правильные методы управления и контроля, мотивации, планирования и коммуникации. Большую часть рутины можно перенести в BPM-систему Projecto.