惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
美团技术团队
博客园_首页
罗磊的独立博客
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
Jina AI
Jina AI
V
V2EX
雷峰网
雷峰网
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
O
OpenAI News
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
T
Threatpost
Scott Helme
Scott Helme
Latest news
Latest news
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tor Project blog
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
C
Cyber Attacks, Cyber Crime and Cyber Security
有赞技术团队
有赞技术团队
大猫的无限游戏
大猫的无限游戏
C
CERT Recently Published Vulnerability Notes
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
小众软件
小众软件
I
Intezer
The Hacker News
The Hacker News
Project Zero
Project Zero
博客园 - 叶小钗
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
NISL@THU
NISL@THU
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cybersecurity and Infrastructure Security Agency CISA
博客园 - 【当耐特】
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hugging Face - Blog
Hugging Face - Blog
P
Privacy & Cybersecurity Law Blog
P
Proofpoint News Feed

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Записки специалиста по математической оптимизации
Lozkins · 2026-05-13 · via Все публикации подряд на Хабре

Что есть база в математической оптимизации и моделировании бизнес процессов? Целевая функция, ограничения, алгоритмы решения — безусловно, но есть ещё модели. Насмотренность, портфель типовых моделей и умение распознавать их в задаче придают дополнительный импульс процессу решения сложных задач.

Рассмотрим набор из восьми классических постановок, которые нашли применение в решении широкого спектра задач. Материал будет полезен специалистам по математической оптимизации. Управленцы и менеджеры могут найти актуальные сценарии применения математической оптимизации для своих задач.

Введение

В одной из своих предыдущих работ Искусство математического моделирования кратко упомянул про “типовые модели”. Здесь мы рассмотрим более широкий список таких моделей — с их постановками, примерами применения и текущими тенденциями в соответствующих задачах.

Решить большие оптимизационные задачи не всегда удаётся «в лоб» с помощью стандартного набора алгоритмов или солверов. Один из вариантов перевода такой модели в практическое русло — декомпозиция задачи. Портфель типовых моделей позволяет специалисту выстроить ансамбль моделей и выполнить эту декомпозицию эффективно.

Мне встречались описания вакансий, где в требованиях указывается специфический навык: способность находить среди множества запутанных условий ту самую типовую модель. Это абстрактное, нестандартизированное умение, но интуитивно спрос на него существует.

Речь в статье пойдёт о наборе таких классических паттернов в математической оптимизации (с уклоном на линейные постановки).

Задача о рюкзаке (The Knapsack Problem)

Задача о рюкзаке — это фундаментальная задача комбинаторной оптимизации, в которой необходимо выбрать подмножество предметов с максимальной суммарной ценностью, не превышая ограничение по суммарному весу. В наиболее распространенной форме 0/1 рюкзака каждый предмет либо выбирается целиком, либо нет. Стандартная формулировка в виде задачи целочисленного линейного программирования (ЦЛП) выглядит следующим образом:

\begin{aligned}& \text{max} && \sum_{i=1}^{n} c_i x_i \\& \text{при условиях} && \sum_{i=1}^{n} w_i x_i \leq W, \\& && x_i \in \{0, 1\}, \quad i = 1, \ldots, n.\end{aligned}

Обозначения:

  • n — общее количество предметов;

  • c_i — ценность (стоимость) i-го предмета;

  • w_i — вес i-го предмета;

  • W — максимальная грузоподъёмность рюкзака (ограничение по весу);

  • x_i — бинарная переменная выбора предмета, 1 если i-ый предмет выбран, 0 в противном случае.

Пояснение к структуре:

  1. Целевая функция: мы хотим максимизировать суммарную ценность выбранных предметов.

  2. Ограничение по весу: суммарный вес выбранных предметов не должен превышать грузоподъёмность рюкзака W.

  3. Ограничения на переменные: каждый предмет можно взять только целиком или не брать вовсе, что и определяет тип задачи как 0/1 рюкзак.

Рюкзак инвестиций

Рюкзак инвестиций

Примеры применения

  • Оптимизация инвестиционного портфеля. В финансах модель рюкзака применяется для формирования портфеля ценных бумаг. Каждый актив характеризуется ожидаемой доходностью (ценность) и риск-метрикой, например, значением Value at Risk (вес). Задача инвестора — максимизировать доходность при ограничении на совокупный риск портфеля (аналог вместимости рюкзака). Современные алгоритмы позволяют решать многомерные и стохастические варианты этой задачи для крупных фондов.

  • Динамическое выделение ресурсов в облачных вычислениях. В дата-центрах задача возникает при распределении ограниченных вычислительных ресурсов (CPU, память, пропускная способность) между конкурирующими задачами или виртуальными машинами. Каждая задача имеет «ценность» (приоритет, SLA) и «вес» (потребление ресурсов). Оптимальное распределение максимизирует общую производительность или прибыль провайдера услуг.

Современные тенденции

Направлениями активных исследований являются разработка эффективных эвристик и метаэвристик для многомерных и нелинейных вариантов задачи, а также интеграция с машинным обучением. Алгоритмы на основе обучения с подкреплением (Reinforcement Learning) используются для принятия решений в динамических средах, где параметры задачи меняются со временем. Продолжается работа над специализированными алгоритмами, превосходящими по скорости общие решатели ЦЛП для крупномасштабных экземпляров задачи.

Задача о назначениях (The Assignment Problem)

Это задача поиска паросочетания минимальной (или максимальной) суммарной стоимости между двумя равномощными множествами. Например, между работниками и заданиями, где каждый элемент одного множества назначается ровно одному элементу другого (пример постановки разбирал здесь). Формулировка ЦЛП:

\begin{aligned}& \text{min} && \sum_{i=1}^{n} \sum_{j=1}^{n} c_{ij} x_{ij} \\& \text{при условиях} && \sum_{j=1}^{n} x_{ij} = 1, \quad i = 1, \ldots, n, \\& && \sum_{i=1}^{n} x_{ij} = 1, \quad j = 1, \ldots, n, \\& && x_{ij} \in \{0, 1\}, \quad i, j = 1, \ldots, n.\end{aligned}

Обозначения:

Пояснение к структуре:

  1. Целевая функция: суммарная стоимость всех назначений, которую требуется минимизировать.

  2. Ограничение по строкам: гарантирует, что каждый элемент первого множества назначен ровно на один элемент второго множества.

  3. Ограничение по столбцам: гарантирует, что каждый элемент второго множества выполняется ровно одним элементом первого множества.

Классический алгоритм решения такой задачи — Венгерский метод.

Распределение вычислительных задач в распределенных системах.

Распределение вычислительных задач в распределенных системах.

Примеры применения

  • Распределение вычислительных задач в распределенных системах. В гетерогенных вычислительных кластерах (например, для обучения больших моделей ИИ) необходимо назначить тысячи подзадач на серверы с разной производительностью CPU/GPU, памятью и топологией сети. Оптимальное назначение минимизирует общее время выполнения (makespan) и межсерверный трафик.

  • Планирование хирургических операций. В крупных больницах модель используется для оптимального назначения хирургических бригад (учитывая специализацию и квалификацию) на операции, а операционных залов на временные слоты. Цель минимизировать простои дорогостоящих ресурсов и общее время ожидания пациентов, учитывая различную продолжительность операций. В 2024 году под эгидой сообщества EURO проводилось соревнование по решению этой задачи. Можно попрактиковать навыки на данных этого конкурса.

Современные тенденции

Актуальные исследования сосредоточены на решении динамических и стохастических версий задачи, где информация о задачах или ресурсах становится известной или меняется в реальном времени. Широко изучается применение языковых моделей (LLM) для автоматического преобразования описания бизнес-задачи на естественном языке в формальную постановку задачи о назначениях, что упрощает её использование специалистами-нематематиками.

Раскраска графов (The Graph Coloring Problem)

Задача состоит в присвоении цветов вершинам графа таким образом, чтобы любые две смежные вершины имели разные цвета, а общее количество использованных цветов было минимальным (хроматическое число). Одна из возможных формулировок ЦЛП:

\begin{aligned}& \text{min} && \sum_{c=1}^k y_c \\& \text{при условиях} && \sum_{c=1}^{k} x_{vc} = 1, && \forall v \in V, \\& && x_{uc} + x_{vc} \leq 1, && \forall (uv) \in E, \ \forall c \in \{1, \ldots, k\}, \\& && x_{uc} \leq y_c, && \forall u \in V, \ \forall c \in \{1, \ldots, k\}, \\& && x_{vc} \in \{0, 1\}, && \forall v \in V, \ \forall c \in \{1, \ldots, k\}.\end{aligned}

Обозначения:

Пояснение к структуре:

  1. Целевая функция: найти минимальное количество цветов k, достаточное для корректной раскраски графа.

  2. Ограничение на присвоение цвета: гарантирует, что каждой вершине присвоен ровно один цвет.

  3. Ограничение на смежность: обеспечивает правильность раскраски. Никакие две смежные вершины не могут иметь одинаковый цвет.

  4. Связь между переменными x_{uc} и y_{c}: цвет c считается использованным, если хотя бы одной вершине присвоен этот цвет.

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

Составление расписания телекоммуникационных каналов.

Составление расписания телекоммуникационных каналов.

Примеры применения

  • Составление расписания телекоммуникационных каналов. В беспроводных сетях (Wi-Fi, сотовые) необходимо назначить частотные каналы базовым станциям так, чтобы станции, работающие на соседних каналах, не создавали взаимных помех. Граф строится по зонам покрытия станций, а цвета соответствуют доступным частотам. Задача усложняется ограниченным спектром и различными требованиями к пропускной способности.

  • Регистровая аллокация в компиляторах. Это классическое применение, где переменные программы представляются вершинами графа. Ребро между двумя вершинами проводится, если соответствующие переменные одновременно «живы» (используются) в программе. Цвета соответствуют физическим регистрам процессора. Эффективная раскраска позволяет минимизировать количество обращений к медленной оперативной памяти.

Современные тенденции

Основной фокус на создании точных и эвристических алгоритмов для работы с очень большими графами (социальные сети, веб-граф). Получают развитие гибридные методы, комбинирующие эвристики, машинное обучение для предсказания перспективных ветвей поиска (machine learning guided search) и техники сокращения графа (reduction techniques).

Задача коммивояжера (The Traveling Salesman Problem, TSP)

TSP заключается в нахождении кратчайшего гамильтонова цикла — маршрута, проходящего через все заданные города ровно по одному разу с возвратом в начальный пункт (вариацию задачи разбирал здесь). Существует несколько формулировок ЦЛП, одна из распространенных использует переменные для ребер и ограничения на исключение подциклов (subtour elimination constraints). Для множества городов V и расстояний c_{ij}:

\begin{aligned}& \text{min} && \sum_{i \in V} \sum_{\substack{j \in V \\ j \neq i}} c_{ij} x_{ij} \\& \text{при условиях} && \sum_{\substack{j \in V \\ j \neq i}} x_{ij} = 1, && \forall i \in V, \\& && \sum_{\substack{i \in V \\ i \neq j}} x_{ij} = 1, && \forall j \in V, \\& && \sum_{i \in S} \sum_{\substack{j \in S \\ j \neq i}} x_{ij} \leq |S| - 1, && \forall S \subset V, \ 2 \leq |S| \leq |V| - 2, \\& && x_{ij} \in \{0, 1\}, && \forall i, j \in V, \ i \neq j.\end{aligned}

Обозначения:

Пояснение к структуре:

  1. Целевая функция: минимизируется общая длина (стоимость) маршрута, т.е. сумма расстояний по всем рёбрам, включённых в маршрут.

  2. Ограничения на исходящие рёбра: из каждого города i выходит ровно одно ребро. Коммивояжёр должен уехать из каждого города ровно один раз.

  3. Ограничения на входящие рёбра: в каждый город j входит ровно одно ребро. Коммивояжёр должен приехать в каждый город ровно один раз.

  4. Ограничения на исключение подциклов: это ключевое ограничение, предотвращающее появление отдельных замкнутых циклов (подциклов), не охватывающих все города. Для любого подмножества городов S (не пустого, не всего множества и не одноэлементного) количество рёбер маршрута, соединяющих города внутри S, не должно превышать |S| - 1. Это гарантирует, что внутри S не может образоваться отдельный цикл — все города должны быть частью одного большого цикла. Число таких ограничений экспоненциально растёт с n, что делает задачу сложной для прямого решения методами линейного программирования.

Комментарии:

  • Из‑за огромного числа ограничений на подциклы (их 2^n - 2n) на практике их добавляют итеративно: сначала решают задачу без них, затем проверяют решение на наличие подциклов и добавляют соответствующие ограничения для найденных подциклов, повторяя процесс до получения одного цикла. Реализацию разбирал в статье.

  • Существуют другие способы исключения подциклов (например, с использованием дополнительных переменных «потенциалов» u_i), но приведённая выше является одной из самых классических и понятных.

Маршрут движения ровера-доставщика по заказам

Маршрут движения ровера-доставщика по заказам

Примеры применения

  • Логистика «последней мили» и маршрутизация дронов. Помимо классического планирования маршрутов для фур, TSP и её обобщения (Vehicle Routing Problem, VRP) критически важны для оптимизации доставки дронами или робо-курьерами в условиях плотной городской застройки. Учитываются ограничения по весу, времени полета батареи, зоны с ограниченным доступом.

  • Проектирование и тестирование микрочипов. В электронной промышленности задача возникает при определении оптимальной траектории движения лазера для резки или сверления печатных плат, а также при планировании порядка тестирования тысяч микросхем на одном кристалле кремния для минимизации времени обработки.

Современные тенденции

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

Задача о покрытии множества (The Set Covering Problem)

Дано универсальное множество U и семейство его подмножеств S, каждое с определенной стоимостью. Требуется выбрать подсемейство минимальной суммарной стоимости, объединение которого покрывает все элементы U. Формулировка ЦЛП:

\begin{aligned}& \text{min} && \sum_{j=1}^{m} c_j x_j \\& \text{при условиях} && \sum_{j: \, u_i \in S_j} x_j \geq 1, && \forall u_i \in U, \\& && x_j \in \{0, 1\}, && j = 1, \ldots, m.\end{aligned}

Расшифровка обозначений:

Пояснение к структуре:

  1. Целевая функция: найти подсемейство подмножеств минимальной суммарной стоимости, объединение которых покрывает все элементы U.

  2. Ограничения покрытия: гарантируют, что каждый элемент u_i универсального множества U покрыт хотя бы одним выбранным подмножеством.

Комментарии:

  • При решении расслабленной задачи (когда x_j \in [0, 1]) оптимальное значение целевой функции даёт нижнюю оценку для целочисленной задачи.

  • Из‑за сложности задачи часто используются жадные алгоритмы, которые на каждом шаге выбирают подмножество с наилучшим соотношением «стоимость / число новых покрываемых элементов».

  • Задача о покрытии тесно связана с задачей о точном покрытии (где каждый элемент должен покрываться ровно один раз, рассмотрим далее) и задачей о максимальном покрытии (где нужно покрыть максимальное число элементов фиксированным числом подмножеств).

Покрытие города пожарными частями

Покрытие города пожарными частями

Примеры применения

  • Размещение инфраструктуры экстренного реагирования. Определение минимального количества и мест размещения пожарных депо, станций скорой помощи или пунктов выдачи гуманитарной помощи для обеспечения покрытия всех районов в пределах заданного времени доезда. Модели часто дополняются вероятностными ограничениями (Maximal Covering Location Problem).

  • Минимизация тестов в аппаратном и программном обеспечении. В инженерии качества задача возникает при выборе минимального набора тестовых случаев, который покрывает все требуемые функциональные сценарии, состояния системы или участки кода (покрытие ветвей).

Современные тенденции

Разрабатываются эффективные эвристики и приближенные алгоритмы для крупномасштабных задач, таких как покрытие в сетях 5G/6G (размещение базовых станций) и задачи лотерейного покрытия (lotto set covering). Растет интерес к robust и stochastic set covering, учитывающим неопределенность в параметрах задачи, например, в спросе на услуги.

Задача разбиения множества (The Set Partitioning Problem)

Близкая к задаче о покрытии, но с более строгим условием: каждый элемент универсального множества должен быть покрыт ровно одним выбранным подмножеством. Это ключевое отличие делает модель идеальной для задач, где ресурсы нельзя делить или дублировать. Пример реальной задачи разбирал в статье Разделяй и запускай: делим тестовый стенд между департаментами. Формулировка ЦЛП:

\begin{aligned}& \text{min} && \sum_{j=1}^{m} c_j x_j \\& \text{при условиях} && \sum_{j: \, u_i \in S_j} x_j = 1, && \forall u_i \in U, \\& && x_j \in \{0, 1\}, && j = 1, \ldots, m.\end{aligned}

Обозначения:

Пояснение к структуре:

  1. Целевая функция: найти подсемейство подмножеств минимальной суммарной стоимости, объединение которых образует разбиение множества U.

  2. Ограничения разбиения: гарантируют, что каждый элемент u_i универсального множества U принадлежит ровно одному выбранному подмножеству.

Комментарии:

  • В отличие от задачи о покрытии, задача разбиения может не иметь допустимого решения. Например, если в семействе S нет подмножеств, содержащих какой‑то элемент u_i, или если все подмножества, содержащие u_i, пересекаются с другими обязательными подмножествами так, что условие «ровно один раз» невозможно выполнить.

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

Планирование экипажей в авиации

Планирование экипажей в авиации

Примеры применения

  • Планирование экипажей в авиации (Crew Pairing). Это одно из самых известных и экономически значимых применений. Множество рейсов (элементы U) необходимо разбить на «вахты» (pairings) — последовательности рейсов, выполняемые одним экипажем в рамках рабочей смены с соблюдением норм отдыха. Каждая возможная вахта это подмножество S_j. Задача — выбрать набор вахт (подмножеств) минимальной стоимости, покрывающий все рейсы ровно по одному разу.

  • Формирование избирательных округов. При проектировании границ избирательных округов территория (набор избирательных участков) должна быть разбита на округа так, чтобы каждый участок принадлежал ровно одному округу, с соблюдением условий по численности населения и компактности формы.

Современные тенденции

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

Транспортная задача (The Transportation Problem)

Частный и исторически один из первых случаев линейного программирования. Имеется m поставщиков с запасами a_i и n потребителей со спросом b_j. Известна стоимость c_{ij} перевозки единицы груза от i к j. Необходимо найти план перевозок минимальной суммарной стоимости, удовлетворяющий спрос и предложение. Формулировка ЛП:

\begin{aligned}& \text{min} && \sum_{i=1}^{m} \sum_{j=1}^{n} c_{ij} x_{ij} \\& \text{при условиях} && \sum_{j=1}^{n} x_{ij} = a_i, && i = 1, \ldots, m, \\& && \sum_{i=1}^{m} x_{ij} = b_j, && j = 1, \ldots, n, \\& && x_{ij} \geq 0, && i = 1, \ldots, m; \ j = 1, \ldots, n.\end{aligned}

Обозначения:

Пояснение к структуре:

  1. Целевая функция: найти план перевозок x_{ij}, минимизирующий общие транспортные расходы.

  2. Ограничения по предложению: гарантируют, что весь запас каждого поставщика будет вывезен.

  3. Ограничения по спросу: обеспечивают полное удовлетворение спроса каждого потребителя.

Комментарии:

  • Условие баланса. Для существования допустимого решения необходимо выполнение условия баланса:

\sum_{i=1}^{m} a_i = \sum_{j=1}^{n} b_j.

Если суммарное предложение не равно суммарному спросу, задача называется несбалансированной. Её можно привести к сбалансированной путём введения фиктивного поставщика или потребителя с нулевыми стоимостями перевозок.

  • Несмотря на то что переменные x_{ij} могут быть дробными, транспортная задача всегда имеет оптимальное решение с целочисленными значениями, если все a_i и b_j целые. Это важное свойство упрощает практическое применение.

  • Для решения транспортной задачи разработаны специализированные алгоритмы, более эффективные, чем общий симплекс‑метод:

    • метод северо‑западного угла (для построения начального опорного плана);

    • метод потенциалов (для поиска оптимального решения);

    • метод наименьшей стоимости (для улучшения начального плана).

  • Модель применима не только к физическим перевозкам, но и к задачам распределения ресурсов, назначения мощностей, планирования производства и т.д.

  • В статье Искусство создания эффективных математических моделей упоминал постановку с точки зрения отсутствия гэпа между вещественной и целочисленной постановки, что обеспечивает быструю сходимость к оптимальному целочисленному решению.

Пример энергосистемы для балансирования нагрузки

Пример энергосистемы для балансирования нагрузки

Примеры применения

  • Балансировка нагрузки в энергосистемах. Задача применяется для оптимального распределения потоков электроэнергии между генерирующими станциями и узлами потребления с минимальными потерями в сети, учитывая переменную стоимость производства на разных типах станций (ТЭЦ, ГЭС, ВИЭ).

  • Глобальная оптимизация цепочек поставок. Модель лежит в основе планирования потоков сырья, компонентов и готовой продукции между заводами, распределительными центрами и розничными точками по всему миру. В современных условиях она расширяется до многоэтапных, многопродуктовых моделей с учетом тарифов, квот и ограничений на пропускную способность.

Современные тенденции

Интеграция с системами реального времени на основе IoT-датчиков позволяет динамически обновлять параметры спроса и предложения. Развиваются устойчивые (sustainable) модели, включающие в целевую функцию минимизацию углеродного следа от перевозок.

Задача о максимальной клике (Maximum Clique Problem)

Клика — это подмножество вершин графа, все пары которых соединены ребрами. Задача заключается в нахождении клики максимального размера в данном графе. Формулировка ЦЛП на максимум:

\begin{aligned}& \text{max} && \sum_{i \in V} x_i \\& \text{при условиях} && x_i + x_j \leq 1, && \forall (i,j) \notin E, \\& && x_i \in \{0, 1\}, && \forall i \in V.\end{aligned}

Обозначения:

Пояснение к структуре:

  1. Целевая функция: найти подмножество вершин максимального размера, образующее клику, т.е. максимизировать количество вершин, входящих в клику.

  2. Ограничения на несмежность: гарантируют, что в клику не попадут две вершины, не соединённые ребром.

Комментарии:

  • Иногда задачу формулируют через дополнение графа: поиск максимальной клики в графе G эквивалентен поиску максимального независимого множества в дополнении графа \overline{G}.

  • Хроматическое число. Размер максимальной клики (\omega(G)) является нижней оценкой хроматического числа графа (\chi(G)): \omega(G) \leq \chi(G).

  • Дей и Санков описывали задачу построения эволюционных деревьев как поиск максимальных клик в графе, где вершины представляют характеристики, а рёбра — возможность их совместной эволюции

Примеры применения

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

  • Биоинформатика и анализ биологических сетей. В сетях белково-белкового взаимодействия (PPI) или генетических сетях клики часто соответствуют функциональным модулям или комплексам белков, совместно участвующим в определенном клеточном процессе. Их обнаружение помогает в понимании биологических механизмов.

Современные тенденции

Несмотря на вычислительную сложность, разрабатываются всё более эффективные точные алгоритмы (branch-and-bound) и эвристики для работы с большими реальными графами. Активно используются методы редукции графа (kernelization) и параллельные вычисления.

Заключение

Выбор базовой модели формирует фундамент для всего оптимизационного решения. Инвестиции в подбор типовых моделей на старте могут с лихвой оправдать затраты времени на разработку общего решения.

Сейчас ИИ‑ассистенты позволяют быстро получить обзор применяемых типовых моделей для решения той или иной задачи. Это углубляет экспертизу и помогает определить стратегию решения более эффективно. Однако комбинирование моделей в ансамбли для решения задач по‑прежнему остаётся в руках специалиста.

Представил восемь достаточно распространённых моделей. Спектр их применения широк, поэтому выделил современные тенденции по каждой из них. Никогда не знаешь, что пригодится в реальных условиях. Этот список позволит расширить арсенал инструментов или взглянуть на задачу с другой стороны.