Автор: Пользователь скрыл имя, 13 Марта 2012 в 18:44, курсовая работа
Среди оптимизационных задач в теории принятия решений наиболее известны задачи линейного программирования, в которых максимизируемая функция F(X) является линейной, а ограничения А задаются линейными неравенствами. Начнем с примера.
С ≥ 0 . W3 ≥ 0 .
Минимальное значение в прямой задаче, как и должно быть, равно максимальному значению в двойственной задаче, т.е. оба числа равны 236/9. Интерпретация двойственных переменных: W1 - "стоимость" единицы вещества Т, а W2 - "стоимость" единицы вещества Н, измеренные "по их вкладу" в целевую функцию. При этом W3 = 0, поскольку ограничение на число калорий никак не участвует в формировании оптимального решения. Итак, W1 , W2 , W3 - это т.н. объективно обусловленные оценки (по Л.В. Канторовичу) ресурсов (веществ Т и Н, калорий).
Планирование номенклатуры и объемов выпуска. Вернемся к организации производства. Предприятие может выпускать автоматические кухни (вид кастрюль), кофеварки и самовары [2]. В табл.2 приведены данные о производственных мощностях, имеющихся на предприятии (в штуках изделий).
Таблица 2.
Производственные мощности (в шт.)
|
Кухни |
Кофеварки |
Самовары |
Штамповка |
20000 |
30000 |
12000 |
Отделка |
30000 |
10000 |
10000 |
Сборка |
20000 |
12000 |
8000 |
Объем выпуска |
Х1 |
Х2 |
Х3 |
Удельная прибыль (на одно изделие) |
15 |
12 |
14 |
При этом штамповка и отделка проводятся на одном и том же оборудовании. Оно позволяет штамповать за заданное время или 20000 кухонь, либо 30000 кофеварок, либо и то, и другое, не в меньшем количестве. А вот сборка проводится на отдельных участках.
Задача линейного
Х1 ≥ 0 , Х2 ≥ 0 , Х3 ≥ 0 , (0)
Х1 / 200 + Х2 / 300 + Х3 / 120 ≤ 100 , (1)
Х1 / 300 + Х2 / 100 + Х3 / 100 ≤ 100 , (2)
Х1 / 200 ≤ 100 , (3)
Х2 / 120 ≤ 100 , (4)
Х3 / 80 ≤ 100 , (5)
F = 15 Х1 + 12 Х2 + 14 Х3 → max .
Здесь:
(0) - обычное в экономике
условие неотрицательности
(1) - ограничение по возможностям
штамповки (выраженное для
(2) - ограничение по возможностям отделки,
(3) - ограничение по сборке для кухонь,
(4) - то же для кофемолок,
(5) - то же для самоваров (как уже говорилось, все три вида изделий собираются на отдельных линиях).
Наконец, целевая функция F - общая прибыль предприятия.
Заметим, что неравенство (3) вытекает из неравенства (1), а неравенство (4) - из (2). Поэтому неравенства (3) и (4) можно из формулировки задачи линейного программирования ислючить.
Отметим сразу любопытный факт. Как будет установлено, в оптимальном плане Х3 = 0, т.е. самовары выпускать невыгодно.
Методы решения
задач линейного
С ростом мощности компьютеров необходимость применения изощренных математических методов снижается, поскольку во многих случаях время счета перестает быть лимитирующим фактором, оно весьма мало (доли секунд). Поэтому разберем лишь три метода.
Простой перебор. Возьмем некоторый многомерный параллелепипед, в котором лежит многогранник, задаваемый ограничениями. Как его построить? Например, если имеется ограничение типа 2Х1 + 5Х2 ≤ 10, то, очевидно, 0 ≤ Х1 ≤ 10/2 = 5 и 0 ≤ Х2 ≤ 10/5 = 2. Аналогичным образом от линейных ограничений общего вида можно перейти к ограничениям на отдельные переменные. Остается взять максимальные границы по каждой переменной. Если многогранник, задаваемый ограничениями, неограничен, как было в задаче о диете, можно похожим, но несколько более сложным образом выделить его "обращенную" к началу координат часть, содержащую решение, и заключить ее в многомерный параллелепипед.
Проведем перебор точек параллелепипеда с шагом 1/10n последовательно при n=2,3,…, вычисляя значения целевой функции и проверяя выполнение ограничений. Из всех точек, удовлетворяющих ограничениям, возьмем ту, в которой целевая функция максимальна. Решение найдено! (Более строго выражаясь, найдено с точностью до 1/10n.)
Направленный перебор. Начнем с точки, удовлетворяющей ограничениям (ее можно найти простым перебором). Будем последовательно (или случайно – с помощью т.н. метода случайного поиска) менять ее координаты на определенную величину ∆, каждый раз в точку с более высоким значением целевой функции. Если выйдем на плоскость ограничения, будем двигаться по ней (находя одну из координат по уравнению ограничения). Затем движение по ребру (когда два ограничения-неравенства переходят в равенства)… Остановка - в вершине линейного многогранника. Решение найдено! (Более строго выражаясь, найдено с точностью до ∆. Если необходимо, в окрестности найденного решения проводим направленный перебор с шагом ∆/2 , ∆/4 и т.д.)
Симплекс-метод. Этот один из первых специализированных методов оптимизации, нацеленный на решение задач линейного программирования, в то время как методы простого и направленного перебора могут быть применены для решения практически любой задачи оптимизации. Симплекс-метод был предложен американцем Г. Данцигом в 1951 г. Основная его идея состоит в продвижении по выпуклому многограннику ограничений от вершины к вершине, при котором на каждом шаге значение целевой функции улучшается до тех пор, пока не будет достигнут оптимум. Разберем пример на основе данных табл.2.
Рассмотрим задачу линейного программирования, сформулированную выше при рассмотрении оптимизации номенклатуры и объемов выпуска:
F = 15 Х1 + 12 Х2 + 14 Х3 → max .
Х1 / 200 + Х2 / 300 + Х3 / 120 ≤ 100 ,
Х1 / 300 + Х2 / 100 + Х3 / 100 ≤ 100 ,
Х3 / 80 ≤ 100 .
Неотрицательность переменных
не будем специально указывать, поскольку
в задачах линейного
В соответствии с симплекс-методом введем т.н. "свободные переменные" Х4, Х5, Х6, соответствующие недоиспользованным мощностям, т.е. от системы неравенств перейдем к системе уравнений:
Х1 / 200 + Х2 / 300 + Х3 / 120 + Х4 = 100 ,
Х1 / 300 + Х2 / 100 + Х3 / 100 + Х5 = 100 ,
Х3 / 80 + Х6 = 100 ,
15 Х1 + 12 Х2 + 14 Х3 = F .
У этой системы имеется очевидное решение, соответствующее одной из вершин многогранника допустимых значений переменных:
Х1 = Х2 = Х3 = 0, Х4 = Х5 = Х6 = 100, F = 0.
В терминах исходной задачи это означает, что ничего не надо выпускать. Такое решение приемлемо только на период летних отпусков.
В соответствии с симплекс-методом выбираем переменную, которая входит в целевую функцию F с самым большим положительным коэффициентом. Это Х1 .
Сравниваем частные от деления свободных членов в первых трех уравнениях на коэффициенты при только что выбранной переменной Х1:
100 / (1/200) = 20000, 100 / (1/300) =30000, 100/0 = + ∞ .
Выбираем строку из системы уравнений, которой соответствует минимальное из всех положительных отношений. В рассматриваемом примере - это первая строка, которой соответствует отношение 20000.
Умножим первую строку на 200, чтобы получить Х1 с единичным коэффициентом:
Х1 + 2/3 Х2 + 2/1,2 Х3 + 200 Х4 = 20000 .
Затем умножим вновь полученную строку на (-1/300) и сложим со второй строкой, чтобы исключить член с Х1, получим
7/900 Х2 + 4/900 Х3 - 2/3 Х4 + Х5 = 100/3.
Ту же преобразованную первую строку умножим на (-15) и сложим со строкой, в правой части которой стоит F, получим:
2 Х2 - 11 Х3 - 3000 Х4 = F - 300000.
В результате система уравнений преобразуется к виду, в котором переменная Х1 входит только в первое уравнение:
Х1 + 2/3 Х2 + 2/1,2 Х3 + 200 Х4 = 20000 ,
7/900 Х2 + 4/900 Х3 - 2/3 Х4 + Х5 = 100/3,
Х3 / 80 + Х6 = 100 ,
2 Х2 - 11 Х3 - 3000 Х4 = F - 300000.
Очевидно, у новой системы
имеется улучшенное по сравнению
с исходным решение, соответствующее
другой вершине выпуклого
Х1 = 20000, Х2 = Х3 = Х4 = 0, Х5 = 100/3, Х6 = 100, F = 300000.
В терминах исходной задачи это решение означает, что надо выпускать только кухни. Такое решение приемлемо, если допустимо выпускать только один вид продукции.
Повторим описанную выше операцию. В строке с F имеется еще один положительный коэффициент - при Х2 (если бы положительных коэффициентов было несколько - мы взяли бы максимальный из них). На основе коэффициентов при Х2 (а не при Х1, как в первый раз) образуем частные от деления соответствующих свободных членов на эти коэффициенты:
20000 / (2/3) = 30000, (100/3) / (7/900) = 30000/7, 100/0 = + ∞.
Таким образом, нужно выбрать вторую строку, для которой имеем наименьшее положительное отношение 30000/7. Вторую строку умножим на 900/7 (чтобы коэффициент при Х2 равнялся 1). Затем добавим обновленную строку ко всем строкам, содержащим Х2, предварительно умножив их на подходящие числа, т.е. такие, чтобы все коэффициенты при Х2 стали бы после сложения равны 0, за исключением коэффициента второй строки, который уже стал равняться 1. Получим систему уравнений:
Х1 + 9/7 Х3 + 1800/7 Х4 - 600/7 Х5 = 120000/7 ,
Х2 + 4/7 Х3 - 600/7 Х4 + 900/7 Х5 = 30000/7,
Х3 / 80 + Х6 = 100 ,
- 85/7 Х3 - 19800/7 Х4 - 1800/7 Х5 = F - 308571.
Поскольку все переменные неотрицательны, то из последнего уравнения следует, что прибыль F достигает своего максимального значения, равного 308571, при Х3 = Х4 = Х5 = 0. Из остальных уравнений следует, что при этом Х1 = 120000/7 = 17143, Х2 = 30000/7 = 4286, Х6 = 100. Поскольку в строке с F не осталось ни одного положительного коэффициента при переменных, то алгоритм симплекс-метода закончил свою работу, оптимальное решение найдено.
Практические рекомендации таковы: надо выпустить 17143 кухни, вчетверо меньше, т.е. 4286, кофемолок, самоваров не выпускать вообще. При этом прибыль будет максимальной и равной 308571. Все производственное оборудование будет полностью загружено, за исключением линии по сборке самоваров.
Транспортная задача. Различные технико-экономические и экономические задачи производственного менеджмента, от оптимальной загрузки станка и раскройки стального листа или полотна ткани до анализа межотраслевого баланса и оценки темпов роста экономики страны в целом, приводят к необходимости решения тех или иных задач линейного программирования. В книге [1] приведен обширный перечень публикаций, посвященный многочисленным применениям линейного программирования в металлургии, угольной, химической, нефтяной, бумажной и прочих отраслях промышленности, в проблемах транспорта и связи, планирования производства, конструирования и хранения продукции, сельском хозяйстве, в научных исследованиях, в том числе экономических, и даже при регулировании уличного движения.
В качестве очередного примера рассмотрим т.н. транспортную задачу. Имеются склады, запасы на которых известны. Известны потребители и объемы их потребностей. Необходимо доставить товар со складов потребителям. Можно по-разному организовать "прикрепление" потребителей к складам, т.е. установить, с какого склада какому потребителю и сколько вести. Кроме того, известна стоимость доставки единицы товара с определенного склада определенному потребителю. Требуется минимизировать издержки по перевозке.
Например, может идти речь о перевозке песка - сырья для производства кирпичей. В Москву песок обычно доставляется самым дешевым транспортом - водным. Поэтому в качестве складов можно рассматривать порты, а в качестве запасов - их суточную пропускную способность. Потребителями являются кирпичные заводы, а их потребности определяются суточным производством (в соответствии с имеющимися заказами). Для доставки необходимо загрузить автотранспорт, проехать по определенному маршруту и разгрузить его. Стоимость этих операций рассчитывается по известным правилам, на которых не имеет смысла останавливаться. Поэтому затраты на доставку товара с определенного склада тому или иному потребителю можно считать известными.
Рассмотрим пример транспортной задачи, исходные данные к которой представлены в табл. 3.
В табл.3, кроме объемов потребностей и величин запасов, приведены стоимости доставки единицы товара со склада i, i = 1,2,3, потребителю j, j = 1,2,3,4. Например, самая дешевая доставка - со склада 2 потребителям 1 и 3, а также со склада 3 потребителю 2. Однако на складе 2 имеется 80 единиц товара, а потребителям 1 и 3 требуется 50+70 =120 единиц, поэтому к ним придется вести товар и с других складов. Обратите внимание, что в табл.3 запасы на складах равны суммарным потребностям. Для примера с доставкой песка кирпичным заводам это вполне естественное ограничение - при невыполнении такого ограничения либо порты будут засыпаны горами песка, либо кирпичные заводы не выполнят заказы.
Таблица 3.
Исходные данные к транспортной задаче.
|
Потреби-тель 1 |
Потреби-тель 2 |
Потреби-тель 3 |
Потреби-тель 4 |
Запасы на складах |
Склад 1 |
2 |
5 |
5 |
5 |
60 |
Склад 2 |
1 |
2 |
1 |
4 |
80 |
Склад 3 |
3 |
1 |
5 |
2 |
60 |
Потреб-ности |
50 |
40 |
70 |
40 |
200 |