- •Аннотация
- •Оглавление
- •Предисловие
- •ГЛАВА 1. Задачи оптимизации. Основные определения
- •1.1. Задачи оптимизации
- •1.2. Минимум функции одной переменной
- •1.3. Унимодальные функции
- •1.4. Выпуклые функции
- •1.5. Условие Липшица
- •1.6. Классическая минимизация функции одной переменной
- •Вопросы и задания для самоконтроля
- •ГЛАВА 2. Одномерная минимизация функций. Прямые методы
- •2.1. О прямых методах
- •2.2. Метод перебора
- •2.3. Метод поразрядного поиска
- •2.4. Метод дихотомии
- •2.5. Метод золотого сечения
- •2.6. Сравнение методов перебора, дихотомии и золотого сечения
- •2.7. Метод парабол
- •Вопросы и задания для самоконтроля
- •Задание для численной реализации в среде программирования MATLAB
- •ГЛАВА 3. Одномерная минимизация. Методы, использующие информацию о производных целевой функции
- •3.1. Метод средней точки
- •3.2. Метод хорд
- •3.3. Метод Ньютона
- •3.4. Возможные модификации метода Ньютона
- •3.5. Методы минимизации многомодальных функций
- •Вопросы и задания для самоконтроля
- •Задание для численной реализации в среде программирования MATLAB
- •ГЛАВА 4. Задача минимизации функции многих переменных. Необходимые и достаточные условия безусловного экстремума
- •4.1. Постановка задачи и определения
- •4.2. Свойства выпуклых множеств и выпуклых функций
- •4.3. Необходимые и достаточные условия безусловного экстремума
- •Вопросы и задания для самоконтроля
- •5.1. Выпуклые квадратичные функции
- •5.2. Общие принципы многомерной минимизации
- •5.3. Метод градиентного спуска
- •5.4. Метод наискорейшего спуска
- •5.5. Метод сопряженных направлений
- •5.6. Метод сопряженных градиентов
- •5.7. Метод Ньютона
- •5.8. Квазиньютоновские методы
- •Вопросы и задания для самопроверки
- •Задание для численной реализации в среде программирования MATLAB
- •ГЛАВА 6. Прямые методы безусловной минимизации многомерных задач
- •6.1. Проблема минимизации многомерных задач
- •6.2. Минимизация функций по правильному (регулярному) симплексу
- •6.3. Минимизация функций при помощи нерегулярного симплекса
- •6.4. Метод циклического покоординатного спуска
- •6.5. Метод Хука–Дживса
- •6.6. Методы случайного поиска
- •Вопросы и задания для самопроверки
- •Задание для численной реализации в среде программирования MATLAB
- •7.1. Условный экстремум при ограничениях типа равенств
- •7.2. Условный экстремум при ограничениях типа неравенств
- •Вопросы и задания для самопроверки
- •ГЛАВА 8. Линейное программирование
- •8.1. Определения. Примеры задач линейного программирования
- •8.2. Общая и каноническая задачи линейного программирования
- •8.3. Геометрическое истолкование задач линейного программирования
- •8.4. Аналитическое решение задач линейного программирования
- •Вопросы и задания для самоконтроля
- •Литература
ГЛАВА 8.
Линейное программирование
8.1. Определения. Примеры задач линейного программирования
Линейное программирование − математическая дисциплина, посвященная теории и методам решения задач об экстремумах линейных функций на множествах, задаваемых системами линейных неравенств и равенств. Линейное программирование стало развиваться в первую очередь в связи с решением задач экономики, с поиском способов оптимального распределения и использования ресурсов. Оно послужило основой широкого использования математических методов в этой сфере.
Следует подчеркнуть, что в реальных экономических задачах число независимых переменных обычно бывает очень большим (тысячи, десятки тысяч). Поэтому практическая реализация алгоритмов их решения принципиально невозможна без современной вычислительной техники.
Пример 8.1. Для изготовления трех видов сплавов A , B и C используется медь, олово и цинк. Данные о сплавах приведены в табл. 8.1. В ней же указано общее количество метала каждого типа, а так же стоимость реализации одного кг сплава каждого типа.
Процентное содержание и общая масса компонентов |
Таблица 8.1. |
|||||
|
|
|
|
|
|
|
Компоненты сплава |
Содержание компонентов в % |
Общая масса данной |
||||
|
A |
B |
C |
компоненты сплава, т. |
|
|
Медь |
20 |
10 |
30 |
|
120 |
|
Олово |
10 |
80 |
60 |
|
280 |
|
Цинк |
70 |
10 |
10 |
|
240 |
|
Стоимость 1кг. |
10 |
14 |
12 |
|
− |
|
Требуется определить, какое количество сплавов каждого вида следует изготовить предприятию, чтобы стоимость продукции была максимальной.
□ Предположим, что будет изготовлено x1 кг сплава A , x2 кг сплава B и x3 кг сплава C . Тогда для производства такого количества сплавов потребуется затратить 20x1 +10x2 +30x3 кг меди.
151
Так как общая масса меди не может превышать 120 т, то должно выполняться неравенство 20x1 +10x2 +30x3 ≤120000 .
Аналогичные рассуждения относительно возможности использования олова и цинка приведут к неравенствам
10x1 +80x2 + 60x3 ≤ 280000, 70x1 +10x2 +10x3 ≤ 240000.
При этом, так как масса сплавов не может быть отрицательной, то
x1 |
≥ 0, x2 ≥ 0, x3 ≥ 0. |
(8.1) |
Если будет изготовлено |
x1 кг сплава A , x2 кг сплаваB |
и x3 кг сплава C , то |
стоимость продукции составит F =10x1 +14x2 +12x3 .
Таким образом, приходим к следующей математической задаче. Дана система
20x |
+ 40x |
2 |
+50x |
3 |
≤120000 |
|
|
|
1 |
|
|
≤ 280000 |
|
||
10x1 +80x2 |
+ 60x3 |
(8.2) |
|||||
|
|
+10x2 |
+10x3 |
≤ 240000 |
|||
70x1 |
|
из четырех линейных неравенств (8.1) − (8.2) с тремя неизвестными и линейная функция относительно этих же переменных
F =10x1 +14x2 +12x3 . |
(8.3) |
Требуется среди всех неотрицательных решений системы неравенств (8.2) найти такое, при котором функция (8.3) принимает максимальное значение.
Так как функция (8.3) линейная, а система (8.2) содержит только линейные неравенства, то задача (8.1)−(8.3) является задачей линейного программирования. ■ Пример 8.2. Продукцией молочного завода являются молоко, кефир и сметана. На производство 1 т молока, кефира и сметаны требуется соответственно 1010, 1010 и 9450 кг молока. При этом затраты рабочего времени при разливе 1 т молока и кефира составляют 0,18 и 0,19 машино-часов. На расфасовке 1 т сметаны заняты специальные автоматы, работающие в течение 3,25 ч. Всего для производства цельномолочной продукции завод может использовать 136 т молока. Основное оборудование может быть занято в течение 21,4 машино-часа, а автоматы по расфасовке сметаны − в течение 16,25 ч. Прибыль от реализации 1 т молока,
152
кефира и сметаны соответственно равна 30000, 26000 и 150000 руб. Завод должен ежедневно производить не менее 100 т молока, расфасованного в пакеты. Требуется определить, какую продукцию и в каком количестве следует ежедневно изготовлять заводу, чтобы прибыль от ее реализации была максимальной.
□ Предположим, что молочный завод будет ежедневно производить x1 тонн молока, x2 тонн кефира и x3 тонн сметаны. Тогда для производства этой продукции необходимо 1010x1 +1010x2 + 9450x3 кг молока.
Так как завод может использовать ежедневно не более 136000 кг молока, то должно выполняться неравенство 1010x1 +1010x2 +9450x3 ≤136000.
Аналогичные рассуждения, проведенные относительно возможного использования линий разлива цельномолочной продукции и автоматов по расфасовке сметаны, позволяют записать неравенства
0,18x1 +0,19x2 ≤ 21,4
3,25x3 ≤16,25.
Так как ежедневно должно вырабатываться не менее 100т молока, тоx1 ≥100.
По своему экономическому смыслу переменные x2 и x3 могут принимать лишь
неотрицательные значения |
x2 |
≥ 0, x3 ≥ 0. |
Общая прибыль от реализации x1 тонн |
|||
молока, x2 тонн кефира и |
x3 |
тонн сметаны равна 30000x1 + 22000x2 +150000x3 руб. |
||||
Таким образом, приходим к следующей задаче. |
||||||
Дана система |
|
|
|
|
|
|
1010x1 +1010x2 |
+9450x3 |
≤136000 |
||||
|
0,18x1 |
+ |
0,19x2 |
≤ 21,4 |
|
|
|
|
(8.4) |
||||
|
3,25x3 |
≤16,25 |
|
|
||
|
|
|
|
|||
|
x1 ≥100, x2 ≥ 0, |
x3 |
≥ 0. |
|||
|
из четырех линейных неравенств и линейная функция относительно переменных,
x1 , x2 и x3
F = 30000x1 + 22000x2 +150000x3 . |
(8.5) |
Так как система (8.4) представляет собой систему линейных неравенств и функция (8.5) линейная, то эта задача является задачей линейного программирования. ■
153
8.2. Общая и каноническая задачи линейного программирования
Выше были рассмотрены примеры постановки задач линейного программирования. Во всех из них требовалось найти максимум линейной функции при условии, что ее переменные принимали неотрицательные значения и удовлетворяли некоторой системе линейных уравнений или неравенств либо системе, содержащей как линейные уравнения, так и неравенства. Каждая из этих задач является частным случаем общей задачи линейного программирования.
Определение. Общей (основной) задачей линейного программирования называется задача, которая состоит в определении максимального (минимального) значения функции
n |
(8.6) |
F = ∑c j x j |
|
j=1 |
|
при выполнении условий |
(8.7) |
n |
|
∑aij x j ≤ bi (i =1,..., k) |
|
j=1 |
(8.8) |
n |
|
∑aij x j = bi (i = k +1,..., m) |
|
j=1 |
|
xj ≥ 0 ( j =1,..., l ; l ≤ n) |
(8.9) |
где aij , bi и c j − заданные постоянные величины и k ≤ m .
Определение. Функция (8.6) называется целевой функцией задачи (8.6) − (8.9), а условия (8.7) − (8.9) − ограничениями данной задачи.
Определение. Канонической задачей линейного программирования называется задача, которая состоит в определении максимального значения функции (8.6) при выполнении условий (8.8) и (8.9), где k = 0 и l = n .
Определение. |
Вектор |
X = (x1 , x2 , …, xn )T , |
удовлетворяющий ограничениям |
задачи (8.7) − (8.9), называется допустимым решением, или планом. |
|||
Определение. |
План |
X = (x1 , x2 , …, xn )T , |
при котором целевая функция |
принимает свое максимальное (минимальное) значение, называется оптимальным. Чтобы перейти от одной формы записи задачи линейного программирования к другой, нужно в общем случае уметь, во-первых, сводить задачу минимизации функции к задаче максимизации; во-вторых, переходить от ограничений-
154
неравенств к ограничениям-равенствам; в-третьих, заменять переменные, которые не подчинены условиям неотрицательности.
В том случае, когда требуется найти минимум функции F = с1 x1 + с2 x2 +…+ сn xn ,
можно перейти к нахождению максимума функции F1 = −F = −с1 x1 −с2 x2 −…−сn xn ,
поскольку min F = max(−F ) .
Нестрогое ограничение-неравенство общей задачи линейного программирования можно преобразовать в ограничение-равенство добавлением к его левой части дополнительной неотрицательной переменной. Таким образом, ограничение-неравенство
ai1 x1 + ai2 x2 +…+ ain xn ≤ bi
преобразуется в ограничение-равенство
ai1 x1 + ai2 x2 +…+ ain xn + xn+1 = bi , xn+1 ≥ 0,
а ограничение-неравенство
ai1 x1 + ai2 x2 +…+ ain xn ≥ bi
преобразуется в ограничение-равенство
ai1 x1 + ai2 x2 +…+ ain xn − xn+1 = bi , xn+1 ≥ 0.
Вводимые дополнительные переменные имеют вполне определенный смысл в рамках решения экономических задач. Так, если в ограничениях исходной задачи линейного программирования отражается расход и наличие производственных ресурсов, то числовое значение дополнительной переменной в плане задачи, как это будет показано в дальнейших примерах, равно объему неиспользуемого соответствующего ресурса.
Наконец, если переменная xk по условию задачи отрицательна, то ее следует заменить двумя неотрицательными переменными uk и vk , приняв xk = uk −vk .
Пример 8.3. Записать в форме канонической задачи линейного программирования задачу нахождения максимума функцииF = 3x1 − 2x2 −5x4 + x5
при условиях
2x1 + x3 − x4 + x5 ≤ 2,x1 − x3 + 2x4 + x5 ≤ 3,2x1 + x3 − x4 + 2x5 ≤ 6,
x1 + x4 +5x5 ≥ 8, x1 , x2 , x3 , x4 , x5 ≥ 0
155