Использование линейного программирования для решения задач оптимизации
Оптимизация как раздел математики существует достаточно давно и обозначает выбор, т.е. то, чем постоянно приходится заниматься в повседневной жизни. Термином "оптимизация" в литературе обозначают процесс или последовательность операций, позволяющих получить уточнённое решение. Хотя конечной целью оптимизации является отыскание наилучшего или "оптимального" решения, обычно приходится довольствоваться улучшением известных решений, а не доведением их до совершенства. По этому под оптимизацией понимают скорее стремление к совершенству, которое, возможно, и не будет достигнуто.
Практика порождает все новые и новые задачи оптимизации, причем их сложность растет. Требуются новые математические модели и методы, которые учитывают наличие многих критериев, проводят глобальный поиск оптимума. Другими словами, жизнь заставляет развивать математический аппарат оптимизации.
Реальные прикладные задачи оптимизации очень сложны. Современные методы оптимизации далеко не всегда справляются с решением реальных задач без помощи человека. Нет, пока такой теории, которая учла бы любые особенности функций, описывающих постановку задачи. Следует отдавать предпочтение таким методам, которыми проще управлять в процессе решения задачи.
Таким образом целью данной курсовой работы является : освоить навыки использования линейного программирования для решения задач оптимизации. Для этого были поставлены следующие задачи :
1)Изучить теоретические сведения, необходимые для решения задач оптимизации методом линейного программирования.
2)Изучить методы решения задач линейного программирования.
3)Решить поставленные задачи, используя рассмотренные методы линейного программирования.
I. Теоретический раздел
1.1 Понятие о линейном программировании. Формулировка задачи линейного программирования
Линейное программирование — математическая дисциплина, посвященная теории и методам решения задач об экстремумах линейных функций на множествах n-мерного векторного пространства, задаваемых системами линейных уравнений и неравенств.
Линейное программирование является частным случаем математического программирования. Одновременно оно - основа нескольких методов решения задач целочисленного и нелинейного программирования.
Многие свойства задач линейного программирования можно интерпретировать также как свойства многогранников и таким образом геометрически формулировать и доказывать их.
Термин «программирование» нужно понимать в смысле «планирования». Он был предложен в середине 1940-х годов Джорджем Данцигом, одним из основателей линейного программирования, еще до того, как компьютеры были использованы для
решения линейных задач оптимизации.
Формулировка задачи линейного программирования
Нужно максимизировать
при условиях
при i = 1, 2, 3, . . ., m..
Иногда на xi также накладывается некоторый набор ограничений в виде равенств, но от них можно избавиться, последовательно выражая одну переменную через другие и подставляя ее во всех остальных равенствах и неравенствах (а также в функции f).
Такую задачу называют "основной" или "стандартной" в линейном программировании.
1.2 Виды задач линейного программирования
Поток и паросочетание
Рассмотрим задачу о максимальном паросочетании: есть несколько юношей и девушек; для каждой пары известно, любят ли они друг друга. Нужно поженить максимальное число пар. Введем переменные xij — они соответствуют паре из i-того юноши и j-той девушки. Введем ограничения: xij≥ 0, xij≤ 1, , , . Можно показать, что среди оптимальных решений этой задачи найдется целочисленное. Переменные, равные 1, будут соответствовать парам, которые следует поженить.
Вторая важная задача — максимальный поток. Пусть имеется граф (с ориентированными ребрами), в котором для каждого ребра указана его пропускная способность. И заданы 2 вершины: сток и исток. Нужно указать для каждого ребра, сколько через него будет протекать жидкости (не больше его пропускной способности) так, чтобы максимизировать суммарный поток из стока в исток (жидкость не может появляться или исчезать во всех вершинах, кроме стока и истока). Возьмем в качестве переменных xi — количество жидкости, протекающих через i-тое ребро. Тогда , , где ci — пропускная способность i-того ребра. Эти неравенства надо дополнить равенством количества втекающей и вытекающей жидкости для каждой вершины, кроме стока и истока. В качестве функции f естественно взять разность между количеством вытекающей и втекающей жидкости в истоке.
Обобщение предыдущей задачи — максимальный поток минимальной стоимости. В этой задаче даны стоимости для каждого ребра и нужно среди максимальных потоков выбрать поток с минимальной стоимостью. Эта задача сводится к 2 задачам линейного программирования: сначала нужно решить задачу о максимальном потоке, а потом добавить к этой задаче ограничение , где m — величина максимального потока, и решить задачу с новой функцией f(x) — стоимостью потока.
Все эти задачи могут быть решены быстрее, чем с помощью общих алгоритмов решения задач линейного программирования, за счет особой структуры уравнений и неравенств.
Транспортная задача
Имеется некий однородный груз, который нужно перевести с n складов на m заводов. Для каждого склада i известно, сколько в нем находится груза ai, а для каждого завода известна его потребность bj в грузе. Стоимость перевозки пропорциональна расстоянию от склада до завода (все расстояния cij от i-го склада до j-го завода известны). Требуется составить наиболее дешевый план перевозки. Решающими переменными в данном случае являются xij — количества груза, перевезенного из i-го склада на j-й завод.
Ограничениями будут и
.
Целевая функция имеет вид: , которую надо минимизировать.
Игра с нулевой суммой
Есть матрица A размера . Первый игрок выбирает число от 1 до n, второй — от 1 до m. Затем они сверяют числа и первый игрок получает aij очков, а второй ( − aij) очков (i — число, выбранное первым игроком, j — вторым). Нужно найти оптимальную стратегию первого игрока. Пусть в оптимальной стратегии число i нужно выбирать с вероятностью pi. Тогда оптимальная стратегия является решением следующей задачи линейного программирования: , , , (), в которой нужно максимизировать функцию . c в оптимальном решении будет математическим ожиданием выигрыша первого игрока в наихудшем случае.
1.3 Методы решения задач линейного программирования
Симплекс-метод
Сведём задачу линейного программирования к просмотру крайних точек допустимого множества. Именно направленный перебор крайних точек допустимого множества и осуществляется в симплекс-методе, изложенном ниже.
Рассмотрим связь между геометрическим понятием крайней точки и его аналитической интерпретацией. Для ограниченного множества , описанного с помощью системы неравенств
крайними точками являются решения невырожденных подсистем вида:
(1)
где - некоторое подмножество индексов
и
и матрица, составленная из строк-векторов аi, неособенная.
Обозначим единственное решение системы (3) через x. Предположим теперь, что существуют и такие, что для Поскольку для
то, очевидно, . В силу единственности решения (3) .
С другой стороны, если -- крайняя точка, то можно обозначить через множество равенств
Обозначим через матрицу, составленную из строк Если предположить, что , то существует нетривиальное нуль-пространство
2)
Выбирая достаточно малым по норме, можно добиться того, что для вектор или
для и
для достаточно малых . Аналогично можно показать, что при этом и . Так как то получаем противоречие с определением крайней точки. Для направленного просмотра крайних точек допустимого многогранника применяют симплекс-метод, предложенный Дж. Данцигом и затем усовершенствованный многочисленными математиками. Основная идея метода заключается в разбиении множества переменных x = x1, x2, . . ., xn на базисные и небазисные . Не умаляя общности, можно считать, что базисные переменные являются первыми в векторе x, т.е. x = (xB, xN ).
Система ограничений канонической формы задачи линейного программирования может быть соответственно переписана в виде:
(3)
Предположим, что матрица имеет полный ранг, т.е. - невырожденная. Тогда из равенства (5) следует
4)
Целевая функция задачи ЛПР также может быть разбита на базисную и не базисную части:
Подстановка (6) дает
5)
Предположим, что мы находимся в некоторой начальной точке со значением целевой функции
Каким образом можно уменьшить далее значение целевой функции? Из соотношения (5) следует, что для этого достаточно сделать положительными те компоненты вектора , которым соответствуют отрицательные значения координат вектора модифицированных стоимостей
сохраняя при этом неотрицательность базисных переменных .
Увеличение может быть проделано различным образом, и за время существования симплекс-метода были проделаны многочисленные эксперименты по поиску наиболее эффективных стратегий увеличения
Здесь будет рассмотрена простейшая:
· среди компонент вектора находится минимальная;
· соответствующая небазисная переменная получает максимально возможное приращение, сохраняющее неотрицательность базисных переменных.
Поскольку при увеличении -й компоненты вектор приобретает вид:
где это -й орт, а -- степень увеличения этой переменной или шаг алгоритма, то модифицированный базисный вектор выражается следующим образом:
где - -й столбец матрицы Шаг определяется при этом из условия:
Максимально возможное значение определится при этом как
6)
Пусть -- номер , на которой достигается минимум (6). Очевидно, что при этом
При этом говорят, что переменная выводится из базиса (обращается в нуль), а переменная вводится в базис. Целевая функция при этом уменьшается на величину
Важную роль в теории симплекс-метода играет условие невырожденности, в котором предполагается полный ранг ABи строгая положительность базисного решения β. При этом λ > 0 и δcx < 0, то есть целевая функция уменьшается при переходе к новому базису.
Поскольку в задаче линейного программрования может быть лишь конечное число базисов, а на каждой итерации происходит уменьшение целевой функции, базисы не могут повторяться. Следовательно, после конечного числа итераций вектор модифицированных стоимостей станет неотрицательным, а это означает, что дальнейшее уменьшение целевой функции невозможно, т.е. будет получено одно из оптимальных решений.
В силу выпуклости задачи любое другое оптимальное решение будет иметь также значение целевой функции, т.е. будет в этом смысле эквивалентно.
Геометрический метод
Рассмотрим задачу линейного программирования в стандартной форме с двумя переменными (n = 2). К такой форме может быть сведена и каноническая задача (с ограничениями в виде уравнений), когда число переменных n больше числа уравнений m на 2, т. е. n – m = 2.
Пусть геометрическим изображением системы ограничений является многоугольник ABCDE (рис. 1). Необходимо среди точек этого многоугольника найти такую точку, в которой линейная функция F=c1x1+c2x2 принимает максимальное (или минимальное) значение.
Рассмотрим так называемую линию уровня линейной функции F, т. е. линию вдоль которой эта функция принимает одно и тоже значение a, т.е. F = a, или
c1x1+c2x2 = а (1)
линии уровня широко используются, например, на картах прогноза погоды, где извилистые линии – так называемые изотермы есть ничто иное, как линии уровня температуры Т = с. Ещё более простым примером линий уровня являются параллели на географической карте. Это линии уровня широты.
Предположим надо найти самую северную точку какой-либо области, например страны или материка. Это будет точка, имеющая наибольшую широту, т. е. точка через которую проходит параллель (линия уровня) с самой большой широтой (уровнем).
Именно так и надо поступать при геометрическом решении задач линейного программирования . на многоугольнике решений следует найти точку, через которую проходит линия уровня функции F с наибольшим (если линейная функция максимизируется) или наименьшим (если она минимизируется) уровнем.
Уравнение линии функции (1) есть уравнение прямой линии. При различных уровнях а
Линии уровня параллельны, так как их угловые коэффициенты определяются только соотношением между коэффициентами c1 и c2 и следовательно, равны. Таким образом, линии уровня функции F – это своеобразные “параллели ”, расположенные обычно под углом к осям координат.
Важное свойство линии уровня линейной функции состоит в том, что при параллельном смещении линии в одну сторону уровень только возрастает, а при смещении линии в другую сторону – только убывает.
Пусть имеются три линии уровня :
F=c1x1 + c2x2 = а1 (I)
F=c1x1 + c2x2 = а2 (II)
F=c1x1 + c2x2 = а3 (III)
Причём линия II заключена между линиями I и III. Тогда а1 < а2 < а3 и а1 > а2 >а3.
В самом деле, на штриховой линии (перпендикулярной к линиям уровня на рис. 2) уровень является линейной функцией, а значит, при смещении в одном направлении возрастает, а в другом – убывает.
Для определения направления возрастания рекомендуется изобразить две линии уровня и определить, на какой них уровень больше. Например, одну из линий взять проходящей через начало координат (если линия функция имеет вид F=c1x1 + c2x2, т. е. без свободного члена, то это соответствует нулевому уровню). Другую линию можно провести произвольно, так, например, чтобы она проходила через множество решений системы ограничений. Далее найдём точку, в которой функция принимает максимальное значение, подобно тому как на карте находится самая северная или самая южная точка (на рис. 1 – это точка С или А).
II. Практический раздел2.1 Решение транспортной задачи
Имеются два склада с сырьём. Ежедневно вывозится с первого склада 60 т сырья, со второго – 80 т. сырьё используется двумя заводами, причём первый завод получает – 50 т, а второй – 90 т. нужно организовать оптимальную (наиболее дешёвую) схему перевозок, если известно, что доставка 1 т сырья с первого склада на первый завод стоит 7 рублей, с первого склада на второй завод – 9 рублей, со второго склада на первый завод – 10 рублей, со второго склада на второй завод – 8 рублей.
Решение:
Обозначим через х1,х2 количество сырья, который нужно доставить с первой базы соответственно на первый, второй заводы, а через х3, хколичество сырья, который нужно доставить со второй базы соответственно на первый, второй заводы. Составим выражения, которые в соответствии с исходными данными должны удовлетворять следующим условиям:
х1 +х2 = 60;
х3 + х4 = 80;(1)
х1 +х3 = 50;
х2 +х4 = 90.
Первое и второе уравнения описывают количество сырья, которое необходимо вывезти с первого и второго складов, а третье и четвёртое – сколько нужно завести сырья на первый и второй заводы. К данной системе уравнений нужно добавить систему неравенств:
хi ≥ 0, где i = 1, . ., 4, (2)
которая означает, что сырьё обратно с заводов на склады не вывозится. Тогда общая стоимость перевозок с учётом приведённых в таблице расценок выразится формулой :
f = 7х1 + 9х2 + 10х3 + 8х 4. (3)
Таким образом, мы пришли к типичной задаче линейного программирования : найти оптимальные значения проектных параметров хi(i = 1, . ., 4), удовлетворяющим условиям (2), (3) и минимизирующим стоимость перевозок (3).
Из анализа системы уравнений (1) следует, что только первые два уравнения являются независимыми, а последние можно получить из них. Поэтому фактически имеем систему :
х1 +х2 = 60;
х3 + х4 = 80;(4)
х3 = 50 - х1;
х4 = 90 - х2.
Поскольку в соответствии с (2) все проектные параметры должны быть неотрицательны, то с учётом (4) получим следующую систему неравенств:
х1 ≥ 0, х2 ≥ 0, 50 - х1 ≥ 0, 90 - х2 ≥ 0.
Эти неравенства можно записать в более компактном виде :
0≤ х1 ≤ 50, 0≤ х2 ≤ 90. (5)
Данная система неравенств описывает все допустимые решения рассматриваемой задачи. Среди всех допустимых значений свободных параметров х1 и х2 нужно найти оптимальные, минимизирующие целевую функцию f. Формула (3) для неё с учётом соотношений (4) принимает вид
f = 7х1 + 9х2 + 10(50 - х1)+ 8(90 - х2);
f = -3х1 + х2 + 1220.
Отсюда следует, что стоимость перевозок уменьшается с увеличением значений х1; поэтому нужно взять его наибольшее допустимое значение. В соответствии с (5) х1= 50, тогда получим, что х2 = 60 - х1 = 10. Тогда оптимальные значения остальных параметров можно найти по формулам (4):
х3 = 50 - х1 =50 – 50 = 0, х4 = 90 - х2 = 90 – 10 = 80.
В этом случае минимальная общая стоимость перевозок равна :
f = 7*50 + 9*10+ 10*0+ 8*80 = 350 + 90 + 0 + 640 = 1080.
То есть, минимальная общая стоимость перевозок f = 1080.
Покажем на рисунке схему доставки сырья на заводы. (Числа указывают количество сырья в тоннах).
2.2 Решение производственной задачи
Для производства двух видов изделий А и В предприятие использует три вида сырья. Другие условия задачи приведены в таблице.
Вид сырья | Нормы расхода сырья на одно изделие, кг A B | Общее количество сырья, кг |
I | 2 4 | 300 |
II | 4 4 | 120 |
III | 1 2 | 252 |
Прибыль от реализации одного изделия, ден. ед. | 30 40 |
Составить такой план выпуска продукции, при котором прибыль предприятия от реализации продукции будет максимальной при условии, что изделие В надо выпустить не менее, чем изделия А.
Решение.
Обозначим через х1 и х2 количество единиц продукции соответственно А и В, запланированных к производству. Для их изготовления потребуется (12 х1 +4х2) единиц ресурса I, (4х1 +4х2) единиц ресурса II, (3х1 +12х2) единиц ресурса III. Так кА потребление ресурсов I, II, III не должно превышать их запасов, то связь между потреблением ресурсов и их запасами выразится системой неравенств:
12х1 +4х2 ≤ 300; 3х1 + х2 ≤ 75;
4х1 +4х2 ≤ 120; или х1 + х2 ≤ 30; (6)
3х1 +12х2 ≤ 252. х1 +4х2 ≤ 84.
По смыслу задачи переменные х1 ≥ 0, х2 ≥ 0. (7)
Суммарная прибыль А составит 30х1 от реализации продукции А и 40х 2 от реализации продукции В, то есть : F = 30х1 +40х 2 (8)
Далее будем решать задачу двумя методами:
1способ – симплексный метод
С помощью дополнительных неотрицательных переменных перейдём к системе уравнений. В данном случае все дополнительные переменные вводятся со знаком « + », так как все неравенства имеют вид « ≤ ».
Получим систему ограничений в виде :
31 +х2 +х3 ≤ 75;
х1 +х2 + х4 ≤ 30; (9)
х1 + 4х2 + х5 ≤ 84.
Для нахождения первоначального базисного решения разобьём переменные на две группы – основные и не основные. Так как определитель, составленный из коэффициентов при дополнительных переменных х3, х4, х5 отличен от нуля, то эти переменные можно взять в качестве основных на первом шаге решения задачи.
I шаг.
Основные переменные: х3, х4, х5.
Не основные переменные: х1, х2. .
Выразим основные переменные через не основные :
х3 = 75 - 3х1 - х2 ;
х4 = 30 х1 - х2; (10)
х5 = 84 - х1 - 4х2.
Положив основные переменные равными нулю, то есть х1 = 0, х2 = 0, получим базисное решение Х1 = (0, 0, 75, 30, 84), которое является допустимым. Поскольку это решение допустимо, то нельзя отбросить возможность того, что оно оптимально. Выразим линейную функцию через не основные переменные:
F = 30х1 + 40х2 .
При решении Х1 значение функции равно F(Х1). Легко понять, что функцию F можно увеличить за счёт увеличения любой из не основных переменных, входящих в выражение F с положительным коэффициентом. Это можно осуществить, перейдя к новому базисному решению, в котором эта переменная будет не основной, то есть принимать не нулевое, а положительное значение. При таком переходе одна из основных переменных перейдёт в не основные. В данном примере для увеличения F можно переводить в основные любую переменную, так как и х1 и х2 входят в выражение для F со знаком «+». Для определённости будем выбирать переменную, имеющую больший коэффициент, то есть х2. Система (10) накладывает ограничения на рост переменной х2 . Поскольку необходимо сохранять допустимость решений, то есть все переменные должны оставаться неотрицательными, то должны выполняться следующие неравенства (при этом х1 = 0 как не основная переменная):
х3 = 75 - х2 ≥ 0; х2 ≤ 75;
х4 = 30 - х2 ≥ 0; откуда х2 ≤ 30;
х5 = 84 - 4х2 ≥ 0; х2 ≤ 84.
Каждое уравнение системы, определяет оценочное отношение – границу роста переменной х2, сохраняющую неотрицательность соответствующей переменной. Эта граница определяется абсолютной величиной свободного члена к коэффициенту при х2 при условии, что эти числа имеют разные знаки.
Очевидно, что сохранение неотрицательности всех переменных возможно, если не нарушается ни одна из полученных границ. В данном примере наибольшее возможное значение для переменной х2 определяется как х2 = min {75, 30, 84/4} = 84/4 = 21. При х2 = 21 переменная х = 0 и переходит в не основные.
Уравнение, где достигается наибольшее возможное значение переменной, переводимой в основные (то есть, где оценка минимальна), называется разрешающим. В данном случае – это третье уравнение.
II шаг.
Основные переменные: х2, х3, х4.
Не основные переменные: х1, х. .
Выразим основные переменные через новые не основные, начиная с разрешающего уравнения(его используем для записи выражения для х2 ) :
х2 = (84 - х1 - х5)/4;
х3 = 75 - 3х 1 - 84/4 + х1/4 + х5/4;
х4 = 30 - х1 - 84/4 + х1 /4 + х5/4;
или
х2 =21 0,25 х1 - 0,25х5;
х=54 - 2,75х1 + 0,25х5;
х=9 - 0,75х1 + 0,25х5.
Второе базисное решение Х2 = (0, 21, 54, 9, 0 ) является допустимым.
Выразив линейную функцию через не основные переменные на этом шаге, получаем:
F = 30х1 + 40 (84 - х1 - х5)/4 = 840 + 20х1 - 10х5
Значение линейной функции F2 = F(X2) = 840.
Поскольку необходимо сохранять допустимость решений, то должны выполняться следующие неравенства(при этом х1 = 0 как не основная переменная):
х2 =21 - 0,25х5 ≥ 0; х5 ≤ 84;
х3 =54+ 0,25х5 ≥ 0; откуда х5 ≤ -216; (11)
х4 =9 + 0,25х5 ≥ 0. х5 ≤ -36 .
Обнаруживаем возможность дальнейшего увеличения линейной функции за счёт переменной х1, входящей в выражение для F с положительным коэффициентом. Система уравнений (11) определяет наибольшее возможное значение для х5 :
Х5 = min {84, -216,-36} = -36 .
При х5 = -36 х4 = 0 переходит в неосновные переменные.
Разрешающим будет третье уравнение.
III шаг.
Основные переменные : х1, х2, х3.
Неосновные переменные : х4, х5.
Выразим основные переменные через неосновные:
х1= 12– 4/3х4 + 1/3х5;
х2 = 18 + 1/3х4 - 1/3х5;
х3 = 21 + 11/3х4 - 11/3х5.
Третье базисное решение Х3 = (12, 18, 21, 0, 0) является допустимым.
Выразим линейную функцию через неосновные переменные:
F = 30(12– 4/3х4 + 1/3х5)+ 40(18 + 1/3х4 - 1/3х5) = 1080 – 80/3х4 - 10/3х5.
Значение линейной функции F3 = F(X3) = 1080.
Это выражение не содержит положительных коэффициентов при не основных переменных, поэтому значение F3 = F(X3) = 1080 максимальное. Функцию F невозможно ещё увеличить, переходя к другому допустимому базисному решению, то есть решение X3 – оптимальное. Вспоминая экономический смысл всех переменных можно сделать выводы.
Прибыль предприятия принимает максимальное значение 1080 ден. ед. при реализации 12 единиц продукции Р1(Х1=12) и Р2(Х 2=18). Дополнительные переменные х 3, х 4, х 5.
показывают разницу между запасами ресурсов каждого вида и их потреблением, то есть остатки ресурсов. При оптимальном плане производства х 4 = х 5 = 0, остатки ресурсов S2 и S3 равны нулю, а остатки ресурсов S1 = 21.
Ответ: максимальная прибыль от реализации продукции равна 1080 ден. ед.
2 способ – геометрический метод
Геометрический метод решения задач оптимизации сводится к нахождению оптимального решения задачи в одной из угловых точек многоугольника(рис. 1) для
линейной функции F = 30х1 + 40х2 →max при следующих ограничениях:
3х1 + х2 ≤ 75, (I)
х1 + х2 ≤ 30, (II) (12)
х1 +4х2 ≤ 84, (III), х1 ≥ 0, х2 ≥ 0, х2 ≥ х1
по смыслу задачи.
Изобразим многоугольник решений данной задачи.