
- •Задачи линейного программирования
- •3.1. Методы решения задач
- •3.1.1. Постановка задачи
- •3.1.2. Задача распределения ресурсов
- •3.1.3. Основные положения симплекс-метода
- •Признак 1
- •Признак 2
- •3.2. Методы анализа задач
- •3.2.1. Если решения нет
- •3.2.2. Двойственность в задачах линейного программирования
- •3.2.3. Анализ оптимального решения
- •Анализ влияния изменения cj
- •Анализ влияния изменения bi
- •3.2.4. Вариантный анализ
- •Первая постановка
- •Вторая постановка
- •3.3. Решение задач линейного программирования с помощью Excel
- •3.3.1. Блок-схема решения задачи
- •3.3.2. Ввод условий задачи
- •3.3.3. Решение задачи
- •Максимальное время
- •Предельное число итераций
- •3.3.4. Графическое представление результатов решения
- •3.3.5. Преодоление несовместности
- •3.3.6. Устранение неограниченности целевой функции
- •3.4. Анализ задач линейного программирования в Excel
- •3.4.1. Анализ оптимального решения
- •Отчет по результатам
- •Отчет по устойчивости
- •Отчет по пределам
- •3.4.2. Параметрический анализ
- •2.2. Сервис, Поиск решения...
- •3.4.3. Решение по нескольким целевым функциям
- •3.4.4. Решения по заказу
- •3.4.5. Решение задач при условных исходных данных
- •3.5. Список алгоритмов
Задачи линейного программирования
3.1. Методы решения задач
3.1.1. Постановка задачи
Задача линейного программирования, которая является частным случаем задачи оптимизации (1.1.9), записывается следующим образом:
(3.1.1)
Задача линейного программирования является достаточно распространенной задачей принятия оптимальных решений, особенно в экономике. Решение этой задачи рассмотрим на примере задачи распределения ресурсов. Но сначала маленькое отступление.
Чтобы смотреть телевизор, совсем не обязательно иметь представление о принципах его работы. Большинство авиапассажиров не знает, что такое подъемная сила и почему самолеты летают на больших высотах. Точно так же, чтобы принимать оптимальное решение на основе математической модели, совершенно не обязательно знать достаточно сложные алгоритмы, по которым это решение находится.
С другой стороны, когда известно, каким путем получен результат, больше уверенности в его правильности и на душе спокойнее. Поэтому любознательному читателю мы предоставляем возможность познакомиться с алгоритмами решения задач линейного программирования.
Задачу линейного программирования можно решать аналитическими и графическими методами. Аналитические методы, которые представляют собой последовательность вычислений по некоторым правилам, являются основой для решения задачи на компьютере. Их единственный недостаток заключается в том, что в отличие от графических методов, они совершенно не наглядны. Графические же методы достаточно наглядны, но они пригодны лишь для решения таких задач, в которых число переменных n = 2, что дает возможность представлять задачу на плоскости. Однако, учитывая наглядность графических методов, идею решения задачи линейного программирования мы рассмотрим с их помощью.
Начнем с простых примеров.
Как известно, уравнение прямой имеет вид
a1x1+a2x2=b. (3.1.2)
Построим прямую
2х1+х2=2.
Для этого запишем уравнение в виде
. (3.1.3)
При такой форме записи в знаменателе показаны отрезки, которые отсекает прямая (3.1.3) на осях координат, что показано на рис. 3.1.1.
Рис.
3.1.1
2х1+х2 2, (3.1.4)
то его можно представить графически, как это показано на рис. 3.1.2.
Из приведенных рисунков видно, что если линейное уравнение с двумя неизвестными представляет собой прямую линию, то линейное неравенство — полуплоскость.
Рис.
3.1.2
Построим теперь систему неравенств:
(3.1.5)
х1 0; х2 0
Для удобства построения запишем ее в форме уравнения в отрезках:
(3.1.6)
Рис.
3.1.3
Поскольку в ОДР бесчисленное множество точек, значит, рассматриваемая система имеет бесчисленное множество допустимых решений.
Если мы хотим найти оптимальное решение, то должны принять целевую функцию. Допустим, мы хотим, чтобы решение было оптимальным в смысле максимизации целевой функции
(3.1.7)
Эта зависимость на рис 3.1.4 представлена в форме уравнения прямой с угловым коэффициентом
х2 = F x1,
из которого видно, что tg = 1. При этом угол = 135°, а величина F равна отрезку, отсекаемому прямой на оси координат. Если прямую перемещать параллельно самой себе в направлении, указанном стрелками, то величина F будет возрастать. Совместим теперь ОДР, изображенную на рис. 3.1.3, с линией целевой функции (3.1.7), построенной на рис. 3.1.4, как это показано на рис. 3.1.5.
Рис.
3.1.4
Рис. 3.1.5
Поскольку требуется найти оптимальное решение, при котором целевая функция
,
т. е. стремится к максимуму, будем перемещать график целевой функции в направлении увеличения F. Очевидно, что оптимальным решением будут координаты точки С, равные х1* и х2*. При этом F = F*.
На основании рассмотренного можно сделать исключительно важный вывод: оптимальным решением являются координаты вершины ОДР.
На этом выводе базируется аналитический метод решения задач линейного программирования, который заключается в следующем:
Найти вершины ОДР, как точки пересечения ограничений.
Определить последовательно значения целевой функции в вершинах.
Вершина, в которой целевая функция приобретает оптимальное (максимальное или минимальное) значение, является оптимальной вершиной.
Координаты этой вершины и являются искомыми оптимальными значениями переменных.
Эти правила, сформулированные на основании графического решения задачи на плоскости, т. е. в двухмерном пространстве, справедливы и для трехмерного. В этом случае ОДР представляет собой многогранник. Координаты каждой его вершины — это допустимые решения. Координаты той вершины, в которой целевая функция имеет максимальное (или минимальное) значение, являются оптимальным решением задачи. Для трехмерного пространства, где число переменных равно трем, это нетрудно себе представить. В практических же задачах число переменных может исчисляться десятками и даже сотнями. В этом случае никакое пространственное воображение не поможет. Что же делать? А выход один — решать задачу аналитически.
Но чтобы читатель не думал, что мы занимаемся чистой теорией, прервем ненадолго теоретические рассуждения и рассмотрим содержательную сторону типовой задачи линейного программирования.