Автор работы: Пользователь скрыл имя, 11 Октября 2011 в 16:04, реферат
Термин линейное программирование появился в Америке в середине 40-х годов (первая американская работа по частной задаче линейного программирования опубликована в 1941 г.). В Советском Союзе исследования в этой области начались ранее. В конце 30-х годов целый ряд существенных результатов по линейному программированию был установлен Л.В. Канторовичем.
Задача линейного программирования – это задача нахождения значений параметров, обеспечивающих экстремум функции при наличии ограничений на аргументы.
целочисленной задачи. В этом случае решение получается сразу, без использования
ограничений целочисленности. Если аi0≥ 0, но не все целые,
добавим к ограничениям (1) еще одно. Новое ограничение записывается внизу
таблицы так, чтобы она перестала быть прямо допустимой, т. е. аi0
<О для i == п + т + 1. Затем используется
двойственный
симплекс-метод с целью
аi0 получаются нецелыми, в таблицу добавляются новые ограничения
до тех пор, пока аi0 (i = 1, . . ., n, . . ., n + m) не станут все
целыми и неотрицательными.
Если после введения дополнительного ограничения текущая таблица перестает
быть прямо допустимой, то текущее решение, представляющее собой вершину
многогранника решений, не удовлетворяет этому дополнительному ограничению.
Другими словами, дополнительное ограничение отсекает часть пространства
решений. Если дополнительные ограничения не отсекают ни одной целочисленной
точки пространства решений исходной задачи, то, вполне вероятно, после
введения достаточного числа дополнительных ограничений вершины суженного
множества решений будут целочисленными. Тогда, используя симплекс-метод,
можно получить оптимальное целочисленное решение. Трудность состоит в
систематическом получении дополнительных ограничений и доказательстве
конечности алгоритма.
Каждый раз после проведения итерации симплекс-метода происходит изменение
множества небазисных переменных. Таблица также меняется. Будем использовать
t для обозначения t-й. таблицы. Матричное уравнение (2) запишется
как
Хt = Аt (-хtn),
(3)
где х° — вектор-столбец с n + т + 1 компонентами, А° — матрица размера
(п + т + 1)*(n + 1) и (—х0n) — вектор с компонентами
(1, —x1, . . ., —xn), представляющими собой
текущие небазисные переменные, взятые со знаком минус. Если в матрице А
а0i≥0 (j = 1, . . ., n), а00 ≡ 0 (mod 1) 1
} и аi0 ≥ 0 (i=1, . . ., п+т) — целые
неотрицательные числа, то получено оптимальное решение целочисленной задачи.
Если аi0 не все целые, введем дополнительное ограничение. Рассмотрим
такое уравнение из (3), в котором аi0m
нецелое. Опуская индексы строки, имеем
(4) x=a0+∑aj(-xj)
где xj в правой части — текущие небазисные переменные и a0
— нецелое. Поскольку требуется, чтобы х было целым, или х
≡[1]0 (mod1), правая часть уравнения
(4)
также должна удовлетворять
0≡a0+∑aj(-xj)
(5)
Это условие должно выполняться при допустимом целочисленном решении. Поскольку
требуется, чтобы xj ,были целыми, можно алгебраически складывать с
(5) отношения 0≡f0+∑jfi(-xi
) (mod1) (0<f0<1, 0≤fj<1).
(6)
Условие (6) эквивалентно следующему:
∑fjxj≡f0 (mod1).
(7)
В соотношении (7) f0 – константа, меньшая единицы ,и поскольку f
j≥0 и xj≥, левая часть всегда положительна. Т.к.
(7)
– отношение сравнения по
значения вида f0, f0+1,.., т.е.
∑fjxj≥f0
(8)
Неравенство (8) можно представить в виде уравнения с помощью введения
неотрицательной целочисленности слабой переменной
S=-f0+∑fjxj≥0.
(9)
Это
уравнение можно приписать
строки.
Таким образом, переменная s войдет
в базис с отрицательным
(—fо)-
После итерации слабая
значением. Ведущая строка превратится в тождество s ≡ (—1) (—s) и может
быть исключена. Будем называть переменную s в уравнении (9) слабой переменной
Гомори. Ниже будет обсуждено, что произойдет, если сохранять все
дополнительные строки, соответствующие слабым переменным Гомори.
Дадим доказательство конечности алгоритма. Доказательство будет проведено в
предположении, что известна некоторая нижняя граница значения Х0, т.
е. если существует целочисленное решение, то оно больше, чем наперед заданная
величина М (М может быть достаточно большой по абсолютной величине
отрицательной константой). Такое предположение не слишком обременительно и
всегда выполняется, если выпуклое множество, определяемое условиями (2),
ограничено. Сначала изложим сам алгоритм.
Шаг 1. Решить задачу целочисленного программирования так, как если бы это была
линейная
программа, т. е. с помощью прямого
или двойственного симплекс-
Если получено оптимальное решение задачи линейного программирования, то ai
0≥0 (i=1, . . ., m + n) и a0i≥0(j = 1, .
. ., n). Требуется также, чтобы аtj > 0 (j = 1, . . .,
n).
Шаг 2. Если аi0 — все целые, то задача решена, и решение получено без
использования дополнительных ограничений. В противном случае пусть аt
i0 — первая нецелочисленная компонента в αt0.
Тогда i-я строка называется производящей строкой. Записать внизу таблицы
уравнение
s=-fti0-∑ftij(-xt
j).
Уравнение (10) называется отсечением Гомори. Проделать шаг двойственного
симплекс-метода, используя в качестве ведущей строки отсечение Гомори (10). При
этом таблица останется двойственно допустимой. Повторять до тех пор, пока все
аi0 (i = 1, . . ., m+n) не станут целыми неотрицательными. Если а
i0 на некотором шаге остается отрицательным, следующий шаг двойственного
метода производится без введения отсечения Гомори. (Если аi0
становится отрицательным, нулевая строка не выбирается в качестве производящей.
Если a00 становится нецелым, следует выбрать нулевую строку в
качестве производящей.)
Изменение элементов аij (i = 0, 1, . . ., n+m; j = 0, . . . . . ., n)
в таблице за одну итерацию называется циклом. Для обозначения циклов
используется буква t. Для доказательства конечности не достаточно условий
αt0 >α0 t+1 >М,
поскольку a00 может изменяться каждый раз на ε(t), а ∑
ε (t) = с.
Примером этого может служить ε (t) =1/2t. Другой возможностью является то,
что а00 остается равным фиксированному значению, большему нижней
границы, в то время как некоторое аi0 неограниченно уменьшается.
Чтобы увидеть, как преодолеваются эти трудности, необходимо в деталях
рассмотреть шаги итерации.
При доказательстве будет показано, что либо после конечного числа шагов все
компоненты 0-го столбца становятся неотрицательными целыми, либо не существует
целого решения. Если a00 остается постоянным для всех t ≥ t
0, то at00 должно быть целым.
Предположим, что аt00—нецелое. Пусть аt00
=nt00+ft00,где nt00
— целое и 0 < ft00 < 1. Тогда 0-я строка становится
производящей и требуется ввести дополнительное ограничение
S=-ft00-∑ft0(-xtj).
Если s-й столбец является ведущим, то
at+100=at00-at0s* ft00/ftos
или
Другими словами, a00 уменьшится по крайней мере до ближайшего целого.
Следовательно, a00 не может уменьшаться на ε(t) при
∑ε (t)<c
Если a00 каждый раз уменьшается до ближайшего целого или на целую
величину, то после конечного числа шагов оно станет меньше любого наперед
заданного М (М — предполагаемая нижняя граница). Если алгоритм бесконечен, то
a00 должно оставаться некоторым фиксированным целым числом для
t> t0. Предположим, что это произошло.
Тогда рассмотрим а10 . Так же как и a00, a10 не
может оставаться нецелым значением. Если бы это было так, то, поскольку a
00 — целое, первая строка стала бы производящей и после введения отсечения
Гомори и итерации симплекс-метода мы получили бы
At+110=at10-at1s*ft10/ft1
где 0<ft1s<l и 0<ft1s<1.
Здесь at1s —неотрицательное число, большее f
t1s. (Если at1s
—отрицательно и αts—лексикографически положителен, то
аt0s положительно и, следовательно, аt
00 не может
не измениться.) Отсюда
at+110≤at10-ft10=[at10],
т. е. а10 уменьшается по крайней мере до ближайшего целого. Поэтому
а10 либо будет оставаться некоторым фиксированным целым числом,
либо после конечного числа шагов станет отрицательным. Если а10
станет отрицательным, то первая строка будет ведущей и
Информация о работе Классификация задач линейного программирования