Метод: Поиск решения линейных задач симплекс-методом
Разработка и оптимизация ИИС
Пример: транспортная задача в SciPy
from scipy.optimize import linear_sum_assignment
# Матрица тарифов
cost = [[3, 5, 7, 6],
[2, 5, 8, 7],
[3, 6, 9, 6]]
# Для закрытой транспортной задачи — scipy.sparsefrom scipy.sparse import csr_matrix
from scipy.optimize import milp, LinearConstraint, Bounds
# Или через PuLP (проще для транспортной задачи):from pulp import *
prob = LpProblem("transport", LpMinimize)
x = [[LpVariable(f"x{i}{j}", lowBound=0)
for j inrange(4)] for i inrange(3)]
prob += lpSum(cost[i][j]*x[i][j]
for i inrange(3) for j inrange(4))
# ограничения по запасам и потребностям...
prob.solve()
print(f"Z* = {value(prob.objective)}") # 520
Разработка и оптимизация ИИС
Программные средства и лабораторные работы
Лабораторная работа «Линейное программирование» — инструменты:
Excel:
Быстрая визуализация задачи
Симплекс-метод встроен в Solver
Удобно для small-scale задач
Python (SciPy, PuLP):
Автоматизация расчётов
Программный доступ к результатам
Масштабирование на большие задачи
Maple:
Аналитические и символьные вычисления
Проверка ручных расчётов
Визуализация ОДР
Разработка и оптимизация ИИС
Заключение
Разработка и оптимизация ИИС
Ключевые выводы лекции
ЗЛП — оптимизация линейной функции при линейных ограничениях
Геометрически: оптимум — в вершине ОДР
Симплекс-метод — универсальный аналитический алгоритм решения ЗЛП
Транспортная задача — важный частный случай ЛП
Двойственность связывает прямую и обратную задачи
Z∗=W∗ — фундаментальный результат теории ЛП
Разработка и оптимизация ИИС
Вопросы для самоконтроля
Что такое задача линейного программирования? Назовите компоненты модели.
В чём разница между канонической и стандартной формами ЗЛП?
Сформулируйте теорему об оптимальности в крайней точке ОДР.
Опишите основные шаги симплекс-метода.
Как выбрать разрешающий элемент в симплекс-таблице?
В каком случае применяется искусственный базис (M-метод)?
Сформулируйте первую теорему двойственности и её экономический смысл.
Опишите алгоритм метода потенциалов для транспортной задачи.
Разработка и оптимизация ИИС
Рекомендуемые ресурсы
Основная литература:
Алексеев, Д. С. Технологии интеллектуального анализа данных.
Маккини, Уэс. Python и анализ данных. — pandas, NumPy.
Дополнительная литература:
Серебряная, Л. В. Методы и алгоритмы принятия решений.
Станкевич, Л. А. Интеллектуальные системы и технологии.
Программные средства:
Python: scipy.optimize.linprog, PuLP
Excel: «Поиск решения» (Solver)
Maple
Кратко пробегитесь по плану: начнём с базовых понятий и математической модели, затем геометрическая интерпретация, после — симплекс-метод и транспортная задача, и завершим двойственностью и программными средствами.
Дайте определение: ЛП — это раздел математического программирования, в котором целевая функция и ограничения линейны. Приведите мотивирующий пример: завод выпускает продукцию и хочет максимизировать прибыль при ограниченных ресурсах.
Подчеркните: задачи оптимизации возникают повсюду — от производства до логистики. Ключевая идея ЛП — описать реальную задачу в виде линейных математических соотношений.
Перейдите к формальной записи. Подчеркните три компонента: целевая функция, система ограничений, условие неотрицательности. Все три обязательны.
Объясните каждый элемент: c — коэффициенты целевой функции (прибыль), a — технологические коэффициенты, b — запасы ресурсов, x — план производства.
Вернитесь к мотивирующему примеру и запишите его в математической форме. Попросите студентов убедиться, что все функции линейны.
Объясните три формы: каноническая, стандартная, общая. Подчеркните, что каноническая форма используется в симплекс-методе, а стандартная — удобна для геометрической интерпретации.
Покажите, как переходить от одной формы к другой. Ключевые операции: добавление балансовых переменных, замена переменных и умножение на $-1$.
Объясните геометрическую интерпретацию: в двумерном случае область допустимых решений — многоугольник. Оптимальное решение всегда в вершине. Это ключевое свойство ЛП.
Постройте ОДР для мотивирующего примера шаг за шагом. Найдите все вершины, вычислите $Z$ в каждой и выберите максимальную.
Подсчитайте $Z$ в каждой вершине и покажите, что максимум достигается в точке $(40, 20)$.
Сформулируйте основные теоремы: о существовании, о конечности и теорему об оптимальности. Подчеркните, что оптимальное решение всегда в крайней точке.
Объясните случаи, когда решение не существует: несовместная система или неограниченная ОДР. Приведите примеры.
Объясните, почему геометрический метод не работает при $n > 2$: невозможно построить ОДР. Поэтому нужен универсальный аналитический метод — симплекс-метод.
Дайте идею симплекс-метода: последовательный переход от одной вершины ОДР к соседней с улучшением целевой функции. Это направленный перебор, а не полный.
Подчеркните связь между геометрией и алгеброй: вершина ОДР = опорный план, а переход между вершинами = замена базиса. Это ключевое для понимания симплекс-метода.
Объясните: свободным переменным придаём нулевые значения, тогда базисные определяются однозначно из системы. Это и есть опорный план.
Разберите на примере канонической формы с балансовыми переменными. Покажите единичную подматрицу — это и есть начальный базис.
Перечислите свойства базиса и свяжите их с геометрией. Подчеркните: невырожденность означает однозначный переход к соседней вершине.
Объясните вырожденность: когда базисная переменная равна нулю, опорный план совпадает с несколькими базисами. Это может привести к зацикливанию.
Подчеркните связь: замена одной базисной переменной на свободную = шаг жорданова исключения в таблице = переход к соседней вершине ОДР.
Подчеркните, что симплекс-метод гарантирует сходимость за конечное число шагов. В худшем случае перебираются все вершины, но на практике сходимость быстрая.
Подробно разберите алгоритм. Начните с канонической формы, затем начальный опорный план, затем симплекс-таблица и критерий оптимальности.
Покажите структуру симплекс-таблицы. Объясните каждую строку и столбец.
Объясните оценочные отношения: минимальное из положительных отношений определяет строку разрешающего элемента. Столбец — по максимальному по модулю отрицательному $\Delta_j$.
Решите мотивирующий пример симплекс-методом. Покажите начальную таблицу и одну-две итерации.
Выполните шаг жорданова исключения и покажите вторую таблицу. Проверьте критерий оптимальности.
Третья итерация — оптимальный план найден. Все $\Delta_j \geq 0$.
Объясните искусственный базис: когда начальный опорный план невозможно получить из балансовых переменных (ограничения-равенства или $\geq$).
Перейдите к транспортной задаче — важному частному случаю ЛП. Объясните постановку: перевозка грузов от поставщиков к потребителям с минимальными затратами.
Приведите конкретный пример с тремя поставщиками и четырьмя потребителями. Запишите матрицу тарифов, векторы запасов и потребностей.
Опишите два метода построения начального плана: северо-западный угол (простой, но далёкий от оптимума) и метод наименьшей стоимости (лучшее начальное приближение).
Разберите пример шаг за шагом. Северо-западный угол: заполняем от левого верхнего угла, вычёркивая по мере исчерпания запаса или потребности.
Теперь метод наименьшей стоимости: на каждом шаге выбираем клетку с минимальным тарифом среди оставшихся.
Опишите метод потенциалов: проверка оптимальности через потенциалы строк и столбцов, затем улучшение плана через цикл перераспределения.
Решаем задачу методом потенциалов, начиная с плана северо-западного угла. Показываем все 4 итерации до достижения оптимума.
Подведите итог по транспортной задаче и перейдите к двойственности — важнейшему понятию ЛП.
Сформулируйте первую теорему двойственности — одну из важнейших в ЛП. Объясните экономический смысл: оптимальная прибыль равна «теневой цене» ресурсов.
Сформулируйте вторую теорему двойственности — критерий оптимальности через дополняющую нежёсткость.
Перечислите основные программные инструменты и покажите, что теория из лекции напрямую применяется в коде.
Покажите, как наша задача решается в SciPy — 3 строки кода вместо ручного симплекс-метода. Подчеркните соответствие параметров компонентам модели.
PuLP позволяет описать задачу в естественной форме, близкой к математической. Покажите разницу подходов: SciPy — матричный, PuLP — декларативный.
Покажите, что Excel Solver решает задачу без программирования — визуально. Подходит для студентов, не владеющих Python.
Транспортная задача в SciPy — покажите применение на нашем примере из лекции. Студенты увидят, что код подтверждает ручной расчёт.
Подчеркните связь лабораторных работ с инструментами: студенты будут решать задачи ЛП на Python.
Подведите итоги лекции. Обратите внимание на связь всех тем: от геометрической интерпретации к симплекс-методу, от симплекс-метода к транспортной задаче и двойственности.
Акцентируйте внимание на ключевых моментах: линейная модель, геометрический смысл, симплекс-метод как универсальный инструмент, двойственность как инструмент анализа.
Предложите студентам несколько вопросов для самопроверки.