Разработка и оптимизация ИИС

Линейное программирование

Разработка и оптимизация ИИС

План лекции

1. Введение в линейное программирование

2. Математическая модель задачи линейного программирования

3. Геометрическая интерпретация

4. Симплекс-метод

5. Транспортная задача и метод потенциалов

6. Двойственность в линейном программировании

7. Программные средства решения задач ЛП

Линейное программирование
Разработка и оптимизация ИИС

1. Введение в линейное программирование

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

Область применения:

  • Планирование производства и распределение ресурсов
  • Транспортные задачи и логистика
  • Финансовое планирование и портфельный анализ
  • Управление персоналом и календарное планирование
Линейное программирование
Разработка и оптимизация ИИС

Пример

Завод выпускает два продукта x1x_1 и x2x_2. Нужно максимизировать прибыль при ограниченных ресурсах (сырьё, рабочее время).

         Прибыль
Продукт 1:  3 у.е./шт
Продукт 2:  5 у.е./шт

         Сырьё    Время
Продукт 1:  2 кг    1 ч
Продукт 2:  1 кг    2 ч

Ресурсы:   100 кг   80 ч
Линейное программирование
Разработка и оптимизация ИИС

2. Математическая модель ЗЛП

Общая форма задачи линейного программирования:

Найти x=(x1,x2,,xn)\vec{x} = (x_1, x_2, \ldots, x_n), при котором

Z=c1x1+c2x2++cnxnmax(min)Z = c_1 x_1 + c_2 x_2 + \cdots + c_n x_n \to \max (\min)

при ограничениях:

{a11x1+a12x2++a1nxnb1a21x1+a22x2++a2nxnb2am1x1+am2x2++amnxnbmxj0,j=1,,n\begin{cases} a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n \leq b_1 \\ a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n \leq b_2 \\ \vdots \\ a_{m1}x_1 + a_{m2}x_2 + \cdots + a_{mn}x_n \leq b_m \\ x_j \geq 0, \quad j = 1, \ldots, n \end{cases}

Линейное программирование
Разработка и оптимизация ИИС

Компоненты модели

Обозначение Смысл Пример
xjx_j Переменные решения (план) Объём выпуска продукции
cjc_j Коэффициенты целевой функции Прибыль на единицу продукции
aija_{ij} Технологические коэффициенты Расход ресурса ii на продукт jj
bib_i Правые части ограничений Запас ресурса ii
ZZ Целевая функция Общая прибыль
Линейное программирование
Разработка и оптимизация ИИС

Математическая модель

Z=3x1+5x2maxZ = 3x_1 + 5x_2 \to \max

{2x1+x2100(сырьё)x1+2x280(время)x10,  x20\begin{cases} 2x_1 + x_2 \leq 100 \quad \text{(сырьё)} \\ x_1 + 2x_2 \leq 80 \quad \text{(время)} \\ x_1 \geq 0, \; x_2 \geq 0 \end{cases}

Линейное программирование
Разработка и оптимизация ИИС

Формы записи ЗЛП

Каноническая форма:

  • Все ограничения — равенства
  • Все переменные 0\geq 0
  • maxZ\max Z (или minZ\min Z)

Стандартная форма:

  • Все ограничения — неравенства одного знака (\leq или \geq)
  • Все переменные 0\geq 0
Линейное программирование
Разработка и оптимизация ИИС

Переход к канонической форме

Добавление балансовых (добавочных) переменных:

2x1+x21002x1+x2+x3=100,x302x_1 + x_2 \leq 100 \quad \Rightarrow \quad 2x_1 + x_2 + x_3 = 100, \quad x_3 \geq 0

Замена переменных:

xj0    xj=xj+xj,xj+0,  xj0x_j \leq 0 \;\Rightarrow\; x_j = x_j^+ - x_j^-, \quad x_j^+ \geq 0, \; x_j^- \geq 0

Умножение на 1-1:

2x1+x2102x1x2102x_1 + x_2 \geq 10 \quad \Rightarrow \quad -2x_1 - x_2 \leq -10

Линейное программирование
Разработка и оптимизация ИИС

3. Геометрическая интерпретация

Для задачи с двумя переменными (n=2n = 2):

  • Каждое линейное ограничение — полуплоскость
  • Область допустимых решений (ОДР) — пересечение полуплоскостей (выпуклый многоугольник)
  • Целевая функция — семейство параллельных прямых (линий уровня)
  • Оптимальное решение — в вершине ОДР (или на ребре)
Линейное программирование
Разработка и оптимизация ИИС

Геометрическое решение примера

Z=3x1+5x2max,{2x1+x2100x1+2x280x1,x20Z = 3x_1 + 5x_2 \to \max, \quad \begin{cases} 2x_1 + x_2 \leq 100 \\ x_1 + 2x_2 \leq 80 \\ x_1, x_2 \geq 0 \end{cases}

Вершины ОДР: (0,0)(0,0), (50,0)(50,0), (0,40)(0,40), (40,20)(40,20)

Линейное программирование
Разработка и оптимизация ИИС

Вычисление ZZ в вершинах

Вершина (x1,x2)(x_1, x_2) Z=3x1+5x2Z = 3x_1 + 5x_2
(0,0)(0, 0) 00
(50,0)(50, 0) 150150
(0,40)(0, 40) 200200
(40,20)(40, 20) 220220

Оптимальный план: x1=40x_1^* = 40, x2=40x_2^* = 40, Z=220Z^* = 220

Линейное программирование
Разработка и оптимизация ИИС

Основные теоремы ЛП

Теорема 1 (о существовании):
Если ОДР непуста и ограничена, то ЗЛП имеет оптимальное решение.

Теорема 2 (о крайней точке):
Если ЗЛП имеет оптимальное решение, то оно достигается хотя бы в одной крайней точке ОДР.

Следствие:
Для нахождения оптимума достаточно проверить конечное число крайних точек.

Линейное программирование
Разработка и оптимизация ИИС

Особые случаи

ОДР пуста:

  • Ограничения противоречат друг другу
  • Решения не существует

ОДР неограничена:

  • Целевая функция не ограничена на ОДР
  • Z+Z \to +\infty (или -\infty)

Альтернативный оптимум:

  • Оптимальное значение достигается на целом ребре ОДР
  • Бесконечно много оптимальных планов
Линейное программирование
Разработка и оптимизация ИИС

Ограничения геометрического метода

  • Геометрический метод работает только для n=2n = 2 (иногда n=3n = 3)
  • При n>2n > 2 — невозможно визуализировать ОДР
  • Необходим аналитический метод для произвольного числа переменных
  • Такой метод — симплекс-метод (Джордж Данциг, 1947)
Линейное программирование
Разработка и оптимизация ИИС

4. Симплекс-метод

Симплекс-метод — универсальный аналитический метод решения ЗЛП, основанный на последовательном улучшении опорного плана.

Идея:

  1. Найти начальную вершину (опорный план) ОДР
  2. Проверить, является ли она оптимальной
  3. Если нет — перейти к соседней вершине с лучшим значением ZZ
  4. Повторять до достижения оптимума
Линейное программирование
Разработка и оптимизация ИИС

Базис и опорный план

Для системы mm линейных уравнений с nn переменными (n>mn > m) в канонической форме:

{a11x1+a12x2++a1nxn=b1am1x1+am2x2++amnxn=bm\begin{cases} a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n = b_1 \\ \vdots \\ a_{m1}x_1 + a_{m2}x_2 + \cdots + a_{mn}x_n = b_m \end{cases}

Базис — это набор из mm линейно независимых векторов-столбцов коэффициентов матрицы AA.

  • Переменные, вошедшие в базис, называются базисными (xBx_B)
  • Остальные nmn - m переменных — свободные (xNx_N)
Линейное программирование
Разработка и оптимизация ИИС

Опорный план

Опорный план (допустимое базисное решение) — решение, получаемое приравниванием свободных переменных к нулю и решением системы относительно базисных:

xN=0xB=AB1bx_N = 0 \quad \Rightarrow \quad x_B = A_B^{-1} b

Опорный план называется допустимым, если xB0x_B \geq 0.

Геометрический смысл:

  • Каждый опорный план соответствует вершине ОДР
  • Смена базиса = переход к соседней вершине
  • Симплекс-метод перебирает вершины алгебраически, через базисы
Линейное программирование
Разработка и оптимизация ИИС

Пример: начальный базис

2x1+x2+x3=1002x_1 + x_2 + x_3 = 100

x1+2x2+x4=80x_1 + 2x_2 + x_4 = 80

Матрица коэффициентов:

A=(21101201)A = \begin{pmatrix} 2 & 1 & \mathbf{1} & 0 \\ 1 & 2 & 0 & \mathbf{1} \end{pmatrix}

Начальный базис: столбцы переменных x3x_3 и x4x_4 образуют единичную матрицу II.

xN=(x1,x2)=(0,0)xB=(x3,x4)=(100,80)0x_N = (x_1, x_2) = (0, 0) \quad \Rightarrow \quad x_B = (x_3, x_4) = (100, 80) \geq 0

Это допустимый опорный план \Rightarrow вершина ОДР (0,0,100,80)(0, 0, 100, 80).

Линейное программирование
Разработка и оптимизация ИИС

Свойства базиса

Свойство 1 (размерность):
Базис всегда содержит ровно mm векторов, где mm — число ограничений-равенств.

Свойство 2 (линейная независимость):
Столбцы базисных переменных линейно независимы \Rightarrow определитель подматрицы AB0A_B \neq 0.

Свойство 3 (конечность):
Число различных базисов конечно Cnm\leq C_n^m. Следовательно, число опорных планов конечно.

Свойство 4 (выпуклость):
Множество опорных планов покрывает все вершины ОДР. Если существует оптимальное решение, оно среди них.

Линейное программирование
Разработка и оптимизация ИИС

Вырожденные и невырожденные опорные планы

Невырожденный опорный план: все базисные переменные xB>0x_B > 0 (строго положительны).

Вырожденный опорный план: хотя бы одна базисная переменная xB=0x_B = 0.

  • Вырожденный план соответствует вершине ОДР, в которой сходится более mm гиперплоскостей
  • При вырождении возможен зацикливание (возврат к ранее рассмотренному базису)
  • На практике применяется правило Бланда: выбирать переменную с наименьшим индексом
Линейное программирование
Разработка и оптимизация ИИС

Смена базиса в симплекс-методе

На каждой итерации симплекс-метод выполняет смену базиса:

  1. Вводимая переменная: свободная переменная xjx_j с отрицательной оценкой Δj<0\Delta_j < 0 входит в базис (может улучшить ZZ)
  2. Выводимая переменная: базисная переменная xix_i, для которой θi=minbiaij\theta_i = \min \dfrac{b_i}{a_{ij}} при aij>0a_{ij} > 0, выходит из базиса
  3. Жорданово исключение: пересчёт таблицы относительно разрешающего элемента aija_{i^* j^*}

Новый базис=(старый базис{xi}){xj}\text{Новый базис} = (\text{старый базис} \setminus \{x_{i^*}\}) \cup \{x_{j^*}\}

Линейное программирование
Разработка и оптимизация ИИС

Свойства симплекс-метода

  • Конечность — алгоритм завершается за конечное число итераций (при отсутствии вырождения или с правилом Бланда)
  • Монотонность — значение ZZ не ухудшается на каждом шаге
  • Универсальность — решает любую задачу ЛП
  • Сложность: в худшем случае — экспоненциальная, на практике — полиномиальная
Линейное программирование
Разработка и оптимизация ИИС

Алгоритм симплекс-метода

Шаг 1. Привести задачу к канонической форме

Шаг 2. Выбрать начальный базис (обычно — балансовые переменные) и составить опорный план

Шаг 3. Заполнить симплекс-таблицу

Шаг 4. Проверить оптимальность (все Δj0\Delta_j \geq 0 для max\max)

Шаг 5. Если не оптимально — выполнить смену базиса (выбрать разрешающий элемент, жорданово исключение)

Шаг 6. Вернуться к шагу 4

Линейное программирование
Разработка и оптимизация ИИС

Симплекс-таблица

Базис x1x_1 x2x_2 \ldots xnx_n xn+1x_{n+1} \ldots Решение
xn+1x_{n+1} a11a_{11} a12a_{12} \ldots a1na_{1n} 11 \ldots b1b_1
xn+2x_{n+2} a21a_{21} a22a_{22} \ldots a2na_{2n} 00 \ldots b2b_2
\vdots \vdots \vdots \ddots \vdots \vdots \ddots \vdots
Δ\Delta Δ1\Delta_1 Δ2\Delta_2 \ldots Δn\Delta_n 00 \ldots Z0Z_0
Линейное программирование
Разработка и оптимизация ИИС

Правила выбора разрешающего элемента

Разрешающий столбец (для maxZ\max Z):

  • Выбираем jj^*, где Δj=minΔj<0\Delta_{j^*} = \min \Delta_j < 0

Разрешающая строка:

  • Вычисляем оценочные отношения: θi=biaij\theta_i = \dfrac{b_i}{a_{i j^*}}, при aij>0a_{i j^*} > 0
  • Выбираем ii^*, где θi=minθi\theta_{i^*} = \min \theta_i

Разрешающий элемент: aija_{i^* j^*}

Линейное программирование
Разработка и оптимизация ИИС

Пример: начальная симплекс-таблица

Каноническая форма:

Z3x15x2=0Z - 3x_1 - 5x_2 = 0

2x1+x2+x3=1002x_1 + x_2 + x_3 = 100

x1+2x2+x4=80x_1 + 2x_2 + x_4 = 80

Базис x1x_1 x2x_2 x3x_3 x4x_4 Решение
x3x_3 2 1 1 0 100
x4x_4 1 2 0 1 80
Δ\Delta 3-3 5-5 0 0 0

Разрешающий элемент: a22=2a_{22} = 2 (столбец x2x_2, строка x4x_4)

Линейное программирование
Разработка и оптимизация ИИС

Пример: вторая симплекс-таблица

Базис x1x_1 x2x_2 x3x_3 x4x_4 Решение
x3x_3 3/23/2 0 1 1/2-1/2 60
x2x_2 1/21/2 1 0 1/21/2 40
Δ\Delta 1/2-1/2 0 0 5/25/2 200

Разрешающий элемент: a11=3/2a_{11} = 3/2

Линейное программирование
Разработка и оптимизация ИИС

Пример: оптимальная таблица

Базис x1x_1 x2x_2 x3x_3 x4x_4 Решение
x1x_1 1 0 2/32/3 1/3-1/3 40
x2x_2 0 1 1/3-1/3 2/32/3 20
Δ\Delta 0 0 1/31/3 7/37/3 220

Все Δj0\Delta_j \geq 0оптимальный план найден!

x1=40x_1^* = 40, x2=20x_2^* = 20, Z=220Z^* = 220

Линейное программирование
Разработка и оптимизация ИИС

Искусственный базис (M-метод)

Когда начальный опорный план не очевиден (ограничения вида == или \geq):

  • Вводятся искусственные переменные wi0w_i \geq 0
  • В целевую функцию добавляется штраф: MwiM \cdot w_i, где MM — большое число
  • Решается расширенная задача
  • Если wi=0w_i^* = 0 — исходная задача имеет решение
  • Если wi>0w_i^* > 0 — исходная задача несовместна
Линейное программирование
Разработка и оптимизация ИИС

5. Транспортная задача

Транспортная задача — задача ЛП о минимизации стоимости перевозки грузов от mm поставщиков к nn потребителям.

Z=i=1mj=1ncijxijminZ = \sum_{i=1}^{m} \sum_{j=1}^{n} c_{ij} x_{ij} \to \min

{j=1nxij=ai,i=1,,m(запасы)i=1mxij=bj,j=1,,n(потребности)xij0\begin{cases} \sum\limits_{j=1}^{n} x_{ij} = a_i, \quad i = 1, \ldots, m \quad \text{(запасы)} \\ \sum\limits_{i=1}^{m} x_{ij} = b_j, \quad j = 1, \ldots, n \quad \text{(потребности)} \\ x_{ij} \geq 0 \end{cases}

Линейное программирование
Разработка и оптимизация ИИС

Пример транспортной задачи

         Потребители
         B1  B2  B3  B4   Запасы
A1       3   5   7   6     30
A2       2   5   8   7     40
A3       3   6   9   6     30
Потребн. 20  30  25  25

m=3m = 3 поставщика, n=4n = 4 потребителя

Условие баланса: ai=bj=100\sum a_i = \sum b_j = 100

Линейное программирование
Разработка и оптимизация ИИС

Методы построения начального плана

Северо-западный угол:

  • Заполняем клетку (1,1)(1,1), затем (1,2)(1,2) и т.д.
  • Простой, но часто далёк от оптимума

Метод наименьшей стоимости:

  • Заполняем клетку с минимальным тарифом cijc_{ij}
  • Даёт план, близкий к оптимальному
Линейное программирование
Разработка и оптимизация ИИС

Пример: метод северо-западного угла

          B1   B2   B3   B4   Запасы
   A1    [20] [10]       —     30
   A2     —   [20] [20]  —     40
   A3     —    —   [5]  [25]   30
Потребн.  20   30   25   25

Порядок заполнения:

  1. (1,1)(1,1): min(30,20)=20\min(30, 20) = 20 → запас A1=10A_1 = 10
  2. (1,2)(1,2): min(10,30)=10\min(10, 30) = 10 → запас A1=0A_1 = 0, потребность B2=20B_2 = 20
  3. (2,2)(2,2): min(40,20)=20\min(40, 20) = 20 → потребность B2=0B_2 = 0
  4. (2,3)(2,3): min(20,25)=20\min(20, 25) = 20 → запас A2=0A_2 = 0
  5. (3,3)(3,3): min(30,5)=5\min(30, 5) = 5 → потребность B3=0B_3 = 0
  6. (3,4)(3,4): min(25,25)=25\min(25, 25) = 25

Число занятых клеток: 6=3+416 = 3 + 4 - 1 — опорный план

Стоимость: 203+105+205+208+59+256=60+50+100+160+45+150=56520 \cdot 3 + 10 \cdot 5 + 20 \cdot 5 + 20 \cdot 8 + 5 \cdot 9 + 25 \cdot 6 = 60 + 50 + 100 + 160 + 45 + 150 = 565

Линейное программирование
Разработка и оптимизация ИИС

Пример: метод наименьшей стоимости

Тарифы:          B1  B2  B3  B4
            A1   3   5   7   6
            A2   2   5   8   7
            A3   3   6   9   6

Шаги:

  1. mincij=2\min c_{ij} = 2 → клетка (2,1)(2,1): x21=min(40,20)=20x_{21} = \min(40, 20) = 20
  2. min=3\min = 3 → клетка (1,1)(1,1): x11=min(30,0)=0x_{11} = \min(30, 0) = 0 (пропускаем, B1B_1 исчерпан)
  3. min=3\min = 3 → клетка (3,1)(3,1): пропускаем. min=5\min = 5(1,2)(1,2): x12=min(30,30)=30x_{12} = \min(30, 30) = 30
  4. min=6\min = 6(3,4)(3,4): x34=min(30,25)=25x_{34} = \min(30, 25) = 25
  5. (3,2)(3,2): x32=min(5,0)=0x_{32} = \min(5, 0) = 0 (пропускаем). (2,2)(2,2): x22=min(20,0)=0x_{22} = \min(20, 0) = 0
  6. (1,3)(1,3): x13=min(0,25)=0x_{13} = \min(0, 25) = 0. (2,3)(2,3): x23=min(20,25)=20x_{23} = \min(20, 25) = 20
  7. (3,3)(3,3): x33=min(5,5)=5x_{33} = \min(5, 5) = 5
Линейное программирование
Разработка и оптимизация ИИС

Пример: метод наименьшей стоимости (результат)

          B1   B2   B3   B4   Запасы
   A1     —   [30]       —     30
   A2    [20]      [20]  —     40
   A3     —    —   [5]  [25]   30
Потребн.  20   30   25   25

Занятые клетки: (1,2),(2,1),(2,3),(3,3),(3,4)(1,2), (2,1), (2,3), (3,3), (3,4) — 5 шт. (=3+41= 3 + 4 - 1)

Стоимость: 305+202+208+59+256=150+40+160+45+150=54530 \cdot 5 + 20 \cdot 2 + 20 \cdot 8 + 5 \cdot 9 + 25 \cdot 6 = 150 + 40 + 160 + 45 + 150 = 545

Сравнение:

  • Северо-западный угол: Z=565Z = 565
  • Наименьшая стоимость: Z=545Z = 545 (лучше на 20)
Линейное программирование
Разработка и оптимизация ИИС

Метод потенциалов

Алгоритм:

  1. Построить начальный опорный план (m+n1m + n - 1 заполненных клеток)
  2. Найти потенциалы uiu_i и vjv_j: ui+vj=ciju_i + v_j = c_{ij} для занятых клеток
  3. Вычислить оценки свободных клеток: Δij=cijuivj\Delta_{ij} = c_{ij} - u_i - v_j
  4. Если все Δij0\Delta_{ij} \geq 0 — план оптимален
  5. Иначе — выбрать клетку с minΔij<0\min \Delta_{ij} < 0, построить цикл, перераспределить грузы
  6. Вернуться к шагу 2
Линейное программирование
Разработка и оптимизация ИИС

Пример: метод потенциалов — итерация 1

Начальный план (северо-западный угол), занятые клетки: (1,1),(1,2),(2,2),(2,3),(3,3),(3,4)(1,1), (1,2), (2,2), (2,3), (3,3), (3,4).

Потенциалы из ui+vj=ciju_i + v_j = c_{ij}, u1=0u_1 = 0:

v1=3v_1 = 3 v2=5v_2 = 5 v3=8v_3 = 8 v4=5v_4 = 5
u1=0u_1 = 0 3 5
u2=0u_2 = 0 5 8
u3=1u_3 = 1 9 6

Оценки свободных клеток: Δij=cijuivj\Delta_{ij} = c_{ij} - u_i - v_j

B1B_1 B2B_2 B3B_3 B4B_4
A1A_1 0 0 1\mathbf{-1} 1
A2A_2 1\mathbf{-1} 0 0 2
A3A_3 1\mathbf{-1} 0 0 0
Линейное программирование
Разработка и оптимизация ИИС

Пример: итерация 1 — цикл и новый план

minΔij<0\min \Delta_{ij} < 0: Δ13=1\Delta_{13} = -1 — клетка (1,3)(1,3).

Цикл: (1,3)+(2,3)(2,2)+(1,2)(1,3)(1,3)^{+} \to (2,3)^{-} \to (2,2)^{+} \to (1,2)^{-} \to (1,3)

θ=min(x23,x12)=min(20,10)=10\theta = \min(x_{23},\, x_{12}) = \min(20,\, 10) = 10

          B1   B2   B3   B4   Запасы
   A1    [20]       [10]  —     30
   A2     —   [30]  [10]  —     40
   A3     —    —    [5]  [25]   30

Z=203+107+305+108+59+256=555Z = 20 \cdot 3 + 10 \cdot 7 + 30 \cdot 5 + 10 \cdot 8 + 5 \cdot 9 + 25 \cdot 6 = 555

Линейное программирование
Разработка и оптимизация ИИС

Пример: метод потенциалов — итерация 2

Занятые клетки: (1,1),(1,3),(2,2),(2,3),(3,3),(3,4)(1,1), (1,3), (2,2), (2,3), (3,3), (3,4).

v1=3v_1 = 3 v2=4v_2 = 4 v3=7v_3 = 7 v4=4v_4 = 4
u1=0u_1 = 0 3 7
u2=1u_2 = 1 5 8
u3=2u_3 = 2 9 6
B1B_1 B2B_2 B3B_3 B4B_4
A1A_1 0 1 0 2
A2A_2 2\mathbf{-2} 0 0 2
A3A_3 2\mathbf{-2} 0 0 0
Линейное программирование
Разработка и оптимизация ИИС

Пример: итерация 2 — цикл и новый план

minΔij<0\min \Delta_{ij} < 0: Δ21=2\Delta_{21} = -2 — клетка (2,1)(2,1).

Цикл: (2,1)+(1,1)(1,3)+(2,3)(2,1)(2,1)^{+} \to (1,1)^{-} \to (1,3)^{+} \to (2,3)^{-} \to (2,1)

θ=min(x11,x23)=min(20,10)=10\theta = \min(x_{11},\, x_{23}) = \min(20,\, 10) = 10

          B1   B2   B3   B4   Запасы
   A1    [10]       [20]  —     30
   A2    [10] [30]        —     40
   A3     —    —    [5]  [25]   30

Z=103+207+102+305+59+256=535Z = 10 \cdot 3 + 20 \cdot 7 + 10 \cdot 2 + 30 \cdot 5 + 5 \cdot 9 + 25 \cdot 6 = 535

Линейное программирование
Разработка и оптимизация ИИС

Пример: метод потенциалов — итерация 3

Занятые клетки: (1,1),(1,3),(2,1),(2,2),(3,3),(3,4)(1,1), (1,3), (2,1), (2,2), (3,3), (3,4).

v1=3v_1 = 3 v2=6v_2 = 6 v3=7v_3 = 7 v4=4v_4 = 4
u1=0u_1 = 0 3 7
u2=1u_2 = -1 2 5
u3=2u_3 = 2 9 6
B1B_1 B2B_2 B3B_3 B4B_4
A1A_1 0 1\mathbf{-1} 0 2
A2A_2 0 0 2 4
A3A_3 2\mathbf{-2} 2\mathbf{-2} 0 0
Линейное программирование
Разработка и оптимизация ИИС

Пример: итерация 3 — цикл и новый план

minΔij<0\min \Delta_{ij} < 0: Δ31=2\Delta_{31} = -2 — клетка (3,1)(3,1).

Цикл: (3,1)+(1,1)(1,3)+(3,3)(3,1)(3,1)^{+} \to (1,1)^{-} \to (1,3)^{+} \to (3,3)^{-} \to (3,1)

θ=min(x11,x33)=min(10,5)=5\theta = \min(x_{11},\, x_{33}) = \min(10,\, 5) = 5

          B1   B2   B3   B4   Запасы
   A1    [5]        [25]  —     30
   A2    [10] [30]        —     40
   A3    [5]              [25]  30

Z=53+257+102+305+53+256=525Z = 5 \cdot 3 + 25 \cdot 7 + 10 \cdot 2 + 30 \cdot 5 + 5 \cdot 3 + 25 \cdot 6 = 525

Линейное программирование
Разработка и оптимизация ИИС

Пример: метод потенциалов — итерация 4

Занятые клетки: (1,1),(1,3),(2,1),(2,2),(3,1),(3,4)(1,1), (1,3), (2,1), (2,2), (3,1), (3,4).

v1=3v_1 = 3 v2=6v_2 = 6 v3=7v_3 = 7 v4=6v_4 = 6
u1=0u_1 = 0 3 7
u2=1u_2 = -1 2 5
u3=0u_3 = 0 3 6
B1B_1 B2B_2 B3B_3 B4B_4
A1A_1 0 1\mathbf{-1} 0 0
A2A_2 0 0 2 2
A3A_3 0 0 2 0
Линейное программирование
Разработка и оптимизация ИИС

Пример: итерация 4 — цикл и новый план

minΔij<0\min \Delta_{ij} < 0: Δ12=1\Delta_{12} = -1 — клетка (1,2)(1,2).

Цикл: (1,2)+(2,2)(2,1)+(1,1)(1,2)(1,2)^{+} \to (2,2)^{-} \to (2,1)^{+} \to (1,1)^{-} \to (1,2)

θ=min(x22,x11)=min(30,5)=5\theta = \min(x_{22},\, x_{11}) = \min(30,\, 5) = 5

          B1   B2   B3   B4   Запасы
   A1         [5]  [25]  —     30
   A2    [15] [25]       —     40
   A3    [5]             [25]  30

Z=55+257+152+255+53+256=520Z = 5 \cdot 5 + 25 \cdot 7 + 15 \cdot 2 + 25 \cdot 5 + 5 \cdot 3 + 25 \cdot 6 = 520

Линейное программирование
Разработка и оптимизация ИИС

Пример: проверка оптимальности

Занятые клетки: (1,2),(1,3),(2,1),(2,2),(3,1),(3,4)(1,2), (1,3), (2,1), (2,2), (3,1), (3,4).

Потенциалы: u1=0,  u2=0,  u3=1,  v1=2,  v2=5,  v3=7,  v4=5u_1 = 0, \; u_2 = 0, \; u_3 = 1, \; v_1 = 2, \; v_2 = 5, \; v_3 = 7, \; v_4 = 5

Δ11=302=1,Δ14=605=1\Delta_{11} = 3 - 0 - 2 = 1, \quad \Delta_{14} = 6 - 0 - 5 = 1

Δ23=807=1,Δ24=705=2\Delta_{23} = 8 - 0 - 7 = 1, \quad \Delta_{24} = 7 - 0 - 5 = 2

Δ32=615=0,Δ33=917=1\Delta_{32} = 6 - 1 - 5 = 0, \quad \Delta_{33} = 9 - 1 - 7 = 1

Все Δij0\Delta_{ij} \geq 0 — план оптимален!

Z=520\boxed{Z^* = 520}

Прогресс метода потенциалов: 565555535525520565 \to 555 \to 535 \to 525 \to 520

Линейное программирование
Разработка и оптимизация ИИС

6. Двойственность в линейном программировании

Каждой задаче ЛП (прямая) соответствует двойственная задача.

Прямая задача:

Z=cTxmax,Axb,x0Z = c^T x \to \max, \quad Ax \leq b, \quad x \geq 0

Двойственная задача:

W=bTymin,ATyc,y0W = b^T y \to \min, \quad A^T y \geq c, \quad y \geq 0

Линейное программирование
Разработка и оптимизация ИИС

Первая теорема двойственности

Если прямая задача имеет оптимальное решение x\vec{x}^*, то двойственная также имеет оптимальное решение y\vec{y}^*, причём:

Z=WZ^* = W^*

Экономическая интерпретация:

  • yiy_i^* — «теневая цена» (двойственная оценка) ресурса ii
  • Показывает, на сколько увеличится прибыль при увеличении запаса ресурса ii на единицу
  • Помогает анализировать чувствительность решения
Линейное программирование
Разработка и оптимизация ИИС

Вторая теорема двойственности (дополняющая нежёсткость)

Для оптимальных планов x\vec{x}^* и y\vec{y}^* выполняется:

yi(ai1x1++ainxnbi)=0y_i^* (a_{i1}x_1^* + \cdots + a_{in}x_n^* - b_i) = 0

(cja1jy1amjym)xj=0(c_j - a_{1j}y_1^* - \cdots - a_{mj}y_m^*) x_j^* = 0

Смысл: если ресурс не полностью используется, его двойственная оценка равна нулю; если продукция не производится, её «стоимость» не превышает цену.

Линейное программирование
Разработка и оптимизация ИИС

7. Программные средства решения задач ЛП

Класс инструментов:

Инструмент Тип Плюсы Минусы
scipy.optimize.linprog Библиотека Python Бесплатный, программируемый Только непрерывные задачи
PuLP Библиотека Python Декларативный синтаксис, солверы Требует установки солвера
Excel Solver Надстройка Excel Наглядный, доступный Ограничения по размеру
Maple Система компьютерной алгебры Символьные вычисления Платный
MATLAB linprog Среда вычислений Мощный, документированный Платный
Линейное программирование
Разработка и оптимизация ИИС

Пример: SciPy (scipy.optimize.linprog)

from scipy.optimize import linprog

# Z = 3x1 + 5x2 -> max  =>  -Z = -3x1 - 5x2 -> min
c = [-3, -5]              # коэффициенты целевой функции

# Ax <= b
A_ub = [[2, 1], [1, 2]]  # матрица ограничений
b_ub = [100, 80]          # правые части

# x >= 0 (по умолчанию)

result = linprog(c, A_ub=A_ub, b_ub=b_ub, method='highs')
print(result.x)   # [40. 20.]
print(-result.fun) # 220.0
Линейное программирование
Разработка и оптимизация ИИС

Пример: PuLP

from pulp import *

prob = LpProblem("example", LpMaximize)

x1 = LpVariable('x1', lowBound=0)
x2 = LpVariable('x2', lowBound=0)

prob += 3*x1 + 5*x2
prob += 2*x1 + x2 <= 100
prob += x1 + 2*x2 <= 80

prob.solve()
print(f"x1 = {x1.varValue}, x2 = {x2.varValue}")
print(f"Z = {value(prob.objective)}")
# x1 = 40.0, x2 = 20.0, Z = 220.0
Линейное программирование
Разработка и оптимизация ИИС

Пример: Excel Solver («Поиск решения»)

Настройка:

  1. Ячейки B1B1 (переменная x1x_1) и B2B2 (переменная x2x_2) — изменяемые
  2. Ячейка C1C1: =3*B1 + 5*B2 — целевая (максимизировать)
  3. Ячейка C2C2: =2*B1 + B2 — ограничение 100\leq 100
  4. Ячейка C3C3: =B1 + 2*B2 — ограничение 80\leq 80

Параметры Solver:

  • Оптимизировать: C1C1Максимум
  • Изменяя: B1:B2B1{:}B2
  • Ограничения: C2100C2 \leq 100, C380C3 \leq 80, B1:B20B1{:}B2 \geq 0
  • Метод: Поиск решения линейных задач симплекс-методом
Линейное программирование
Разработка и оптимизация ИИС

Пример: транспортная задача в SciPy

from scipy.optimize import linear_sum_assignment

# Матрица тарифов
cost = [[3, 5, 7, 6],
        [2, 5, 8, 7],
        [3, 6, 9, 6]]

# Для закрытой транспортной задачи — scipy.sparse
from 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 in range(4)] for i in range(3)]

prob += lpSum(cost[i][j]*x[i][j]
              for i in range(3) for j in range(4))

# ограничения по запасам и потребностям...
prob.solve()
print(f"Z* = {value(prob.objective)}")  # 520
Линейное программирование
Разработка и оптимизация ИИС

Программные средства и лабораторные работы

Лабораторная работа «Линейное программирование» — инструменты:

Excel:

  • Быстрая визуализация задачи
  • Симплекс-метод встроен в Solver
  • Удобно для small-scale задач

Python (SciPy, PuLP):

  • Автоматизация расчётов
  • Программный доступ к результатам
  • Масштабирование на большие задачи

Maple:

  • Аналитические и символьные вычисления
  • Проверка ручных расчётов
  • Визуализация ОДР
Линейное программирование
Разработка и оптимизация ИИС

Заключение

Линейное программирование
Разработка и оптимизация ИИС

Ключевые выводы лекции

  • ЗЛП — оптимизация линейной функции при линейных ограничениях

  • Геометрически: оптимум — в вершине ОДР

  • Симплекс-метод — универсальный аналитический алгоритм решения ЗЛП

  • Транспортная задача — важный частный случай ЛП

  • Двойственность связывает прямую и обратную задачи

  • Z=WZ^* = W^* — фундаментальный результат теории ЛП

Линейное программирование
Разработка и оптимизация ИИС

Вопросы для самоконтроля

  1. Что такое задача линейного программирования? Назовите компоненты модели.
  2. В чём разница между канонической и стандартной формами ЗЛП?
  3. Сформулируйте теорему об оптимальности в крайней точке ОДР.
  4. Опишите основные шаги симплекс-метода.
  5. Как выбрать разрешающий элемент в симплекс-таблице?
  6. В каком случае применяется искусственный базис (M-метод)?
  7. Сформулируйте первую теорему двойственности и её экономический смысл.
  8. Опишите алгоритм метода потенциалов для транспортной задачи.
Линейное программирование
Разработка и оптимизация ИИС

Рекомендуемые ресурсы

Основная литература:

  1. Алексеев, Д. С. Технологии интеллектуального анализа данных.
  2. Маккини, Уэс. Python и анализ данных. — pandas, NumPy.

Дополнительная литература:

  1. Серебряная, Л. В. Методы и алгоритмы принятия решений.
  2. Станкевич, Л. А. Интеллектуальные системы и технологии.

Программные средства:

  • 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.

Подведите итоги лекции. Обратите внимание на связь всех тем: от геометрической интерпретации к симплекс-методу, от симплекс-метода к транспортной задаче и двойственности.

Акцентируйте внимание на ключевых моментах: линейная модель, геометрический смысл, симплекс-метод как универсальный инструмент, двойственность как инструмент анализа.

Предложите студентам несколько вопросов для самопроверки.

Порекомендуйте литературу из учебной программы.