Автор работы: Пользователь скрыл имя, 11 Октября 2011 в 16:04, реферат
Термин линейное программирование появился в Америке в середине 40-х годов (первая американская работа по частной задаче линейного программирования опубликована в 1941 г.). В Советском Союзе исследования в этой области начались ранее. В конце 30-х годов целый ряд существенных результатов по линейному программированию был установлен Л.В. Канторовичем.
Задача линейного программирования – это задача нахождения значений параметров, обеспечивающих экстремум функции при наличии ограничений на аргументы.
α0t+1=αt0-a10/a1s*αts,
Из того, что αts > 0 и a1s
<. О, следует, что a0s > 0, т. е. значение a00
строго уменьшится, что противоречит допущению о неизменности значения a00
. Если a1j≥ 0 для всех j = 1, . . ., s, ... . . .,
n, то задача не имеет допустимых решений. (Заметьте, что ведущий элемент должен
быть отрицательным.)
Таким образом, остается единственная возможность—а10 через конечное
число шагов должно стать некоторым неотрицательным целым числом и больше не
меняться.
Аналогичные рассуждения можно провести и для остальных компонент вплоть до
(n+m)-й, что завершит доказательство конечности. Заметим, что нам надо, чтобы
только первые n + 1 компонент вектора α0 были целыми
неотрицательными числами, a00 <> 0 и aij (i =
n+1,...,n+m) — неотрицательные.
Причем, если неравенства выразить через исходные небазисные переменные, они
будут иметь целые коэффициенты.
Если сохранять все строки, соответствующие слабым переменным Гомори, то эти
слабые переменные могут становиться базисными, после того как они были
небазисными. Если слабая переменная Гомори вошла в базис с неотрицательным
значением, то соответствующая строка представляет собой неравенство,
справедливое при текущем решении, и эта строка может быть вычеркнута. Если
слабая переменная Гомори становится базисной с отрицательным значением,
соответствующую строку следует использовать в качестве ведущей. Если
сохранять все строки, соответствующие всем отсечениям Гомори, то, вообще
говоря,
потребуется меньшее число
увеличение таблицы много более неприятно, чем введение лишних дополнительных
ограничений.
ПОЛНОСТЬЮ ЦЕЛОЧИСЛЕННЫЙ АЛГОРИТМ
Здесь будет описан другой алгоритм для решения задач целочисленного
программирования. Этот алгоритм назван полностью целочисленным, потому что если
исходная таблица состоит из целочисленных элементов, то все таблицы,
получающиеся в процессе работы алгоритма, содержат только целочисленные
элементы.
Подобно двойственному
двойственно допустимой таблицы. Если аi0 (i = 1, . . ., n+m) —
неотрицательные целые, то задача решена. Если для какой-нибудь строки аi0
<
0, то составляется новое
затем служит ведущей. После этого используется двойственный симплекс-метод.
Все элементы дополнительной строки должны быть целыми числами, а ведущий
элемент равен —1. Введенная таким образом ведущая строка сохранит таблицу
целочисленной. Заметим, что в предыдущем алгоритме в качестве производящей
строки выбиралась строка с нецелым аi0. В данном случае производящей
строкой становится строка с отрицательным аi0.
Пусть дана задача целочисленного линейного программирования:
Максимизировать
при условиях
(1)
Условия (1) могут быть записаны как
(2)
Предположим, что для t = 0 (т. е. для исходной таблицы) все аij —
целые и столбцы αj (j = 1, . . ., n) — лексикографически
положительны. Тогда все столбцы на протяжении вычислений остаются
лексикографически положительными.
Прежде чем изложить способ получения дополнительного ограничения из
производящей строки, введем новое представление чисел. Пусть [x] обозначает
наибольшее целое число, не превосходящее х. Для любого числа у
(положительного или отрицательного) и положительного λ можно записать
(3)
где 0≤ry < λ (ry — неотрицательный остаток
от деления нацело у на λ). В частности, 1 = [1/ λ ]λ + г.
Поэтому если λ> 1, то [1/λ] = 0 и г = 1. Если λ = 1, то
[1/λ,] = 1 и г == 0.
Так же как и ранее, вводимое дополнительное неравенство должно выполняться при
любом целом решении задачи (1). Рассмотрим некоторое уравнение в t-таблице
(опуская индекс строки) с a0 < 0:
(4)
где х — соответствующая компонента вектора х, a xtj —
текущие небазисные переменные. Можно выразить x, a0 и аj,
используя введенное выше представление (З):
(5) и (6)
(j=0,1..,n)
Подставив выражения (5) и (6) в (4), и переставив члены, получим
(7)
Поскольку rj ≥0, r≥0 и на переменные х и xt
j наложено требование
неотрицательности, левая часть уравнения (7) всегда неотрицательна. Рассмотрим
выражение в правой части, заключенное в фигурные скобки. Коэффициенты в этом
выражении представляют собой целые числа, а переменные подчинены требованию
целочисленности.
Поэтому все выражение в
его через s, т. е.
(8)
Целочисленная слабая переменная s является неотрицательной. Действительно, если
бы s было отрицательным, т. е. принимало значения —1, —2, . . ., то умножение
на λ (λ > r0) сделало бы всю правую часть уравнения (7)
отрицательной, в то время как левая часть неотрицательна.
Рассмотрим два случая λ=1 и λ>1. Подставляя в уравнение (8)
выражение для x из (4), получим:
S=[a0]+∑[aj] (-xtj)-{a0
+∑aj(-xtj)}=-f0-∑fj
(-xtj). (9)
Полученное уравнение есть не что иное, как отсечение Гомори. Для λ>1
имеем [1/λ]=0[2] и уравнение (8)
приобретает вид
(10)
Уравнение (10) должно выполняться для любого допустимого целочисленного решения
задачи (1). Заметим, что если а0 < О,. то [a0/λ]
<
0 в уравнении (10). Поэтому уравнение
(10) может использоваться в
ведущей строки в двойственном симплекс-методе. В частности, всегда можно
выбрать λ достаточно большим, так чтобы ведущий элемент [aj
/λ] в строке (10) стал:
равным —1, что позволит сохранить целочисленность таблицы. Выбор
соответствующего λ будет влиять на скорость сходимости алгоритма. Прежде
всего опишем сам алгоритм. В качестве начального необходимо взять двойственно
допустимое решение, которое-можно получить добавлением ограничения xn
+m+1 = М — x1 — ... ... —xn, где М —
достаточно большая константа, и проведением одной итерации с добавленной
строкой и с лексикографически минимальным столбцом, взятыми в качестве
ведущих. Алгоритм состоит из следующих шагов.
Ш а г 0. Начать с двойственно допустимой матрицы А° в уравнении (2),
элементы которой — целые числа (как будет видно из дальнейшего, матрица А°
может содержать и нецелые элементы).
Шаг 1. Среди строк с аi0 < 0 (i = 1, . . ., n+m) выбрать строку с
наименьшим значением i; эта строка станет производящей. (Если аi0
≥ 0 (i= 1, . . ., n + m), то задача решена.)
Ш а г 2. Выбрать λ > 0 (правило выбора будет описано дальше) и написать
внизу таблицы дополнительную строку
Эта строка выбирается в качестве ведущей.
Ш а г 3. Провести шаг двойственного симплекс-метода, вычеркнуть
дополнительную строку и вернуться к шагу 1.
Доказательство конечности. Доказательство конечности проводится в
предположении, что существует нижняя граница целевой функции x0.
Использование двойственного метода гарантирует выполнение условия
Если a00 уменьшается, то уменьшается на целое число, поскольку все
числа остаются целыми, и, следовательно, через конечное число шагов a00
станет меньше x0. Если алгоритм бесконечен, то a00 должно
оставаться Неизменным для всех t > to. Рассмотрим тогда компоненту a10
, столбца α0. Если a10 уменьшается, то на целое
число. Когда a10 становится отрицательным, первая строка должна быть
выбрана в качестве производящей. Если а1j< О для всех
j, то задача неразрешима.
Теперь опишем правило выбора λ в шаге 2 полностью целочисленного
алгоритма. Пусть производящая строка имеет вид
и дополнительная строка
Для любого аj<0 всегда можно выбрать λ достаточно большим,
чтобы [aj/λ]|==—1. Согласно лексикографическому двойственному
симплекс-методу, ведущий столбец αs выбирается по правилу
Поскольку [as/λ]=-1 и [aj/λ] – отрицательные
числа, т.е. -1, -2,...., -μj, имеем
(11)
Таким образом, αs должен быть лексикографически минимальным
столбцом. Последнее означает, что среди всевозможных столбцов (с avj
< 0) ведущий столбец должен быть лексикографически минимальным вне
зависимости от того, какое значение λ выбирается.
Теперь рассмотрим два значения К, при каждом из которых выполняется условие [a
Информация о работе Классификация задач линейного программирования