Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Системный анализ / 22. Задачи ЛЦП(б)

.pdf
Скачиваний:
44
Добавлен:
10.05.2014
Размер:
249.1 Кб
Скачать

ЛЦПБ.doc

1

ЗАДАЧИ ЛЦП С БУЛЕВЫМИ ПЕРЕМЕННЫМИ (ЛЦП(Б)- ЗАДАЧИ)

Основная задача ЛЦП(б) имеет форму:

m

F(x)= c j x j max , (cj 0, j=1,2,...,n), (1)

j =1

 

n

 

aij xij bi , (i=1,2,...,m),

(2)

j =1

 

xj {0,1}, (j=1,2,...,n).

(3)

Любую задачу ЛЦП(б) можно свести к форме основной задачи, используя простейшие преобразования:

Равенство в ограничениях заменяется двумя нестрогими неравенствами.

Неравенство смысла "" умножением на "-1" левой и правой части преобразуется в нестрогое неравенство смысла "".

Неотрицательность коэффициента cj обеспечивается заменой переменных:

yj=1 - xj , если cj < 0.

Дерево ветвлений в задаче ЛЦП(б)

Для обоснования различных методов решения задач ЛЦП(б) большое методологическое значение имеет представление множества вариантов решений задачи (1)-(3) в виде "дерева ветвлений".

полное подмножество решений

x1=1 x1=0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2=1

x2=0

 

x2=1

x2=0

 

 

 

 

 

 

 

 

 

Если не учитывать ограничений, то исходное множество возможных решений будет включать 2n вариантов.

Последовательность конкретных значений переменных образует ветвь дерева - по существу, это - некоторый двоичный n- разрядный код.

Ясно, что некоторые ветви не удовлетворяют системе ограничений (2). Такие ветви исключаются из дерева ветвлений.

В ряде случаев удается установить, что все ветви, исходящие из некоторой вершины, с которой связано вполне определенное подмножество вариантов, соответствуют недопустимым решениям.

То есть, это подмножество пустое - оно не содержит ни одного допустимого решения.

Возникает вопрос, как не опускаясь до отдельных элементов подмножества, то есть, не просматривая все ветви, исходящие из соответствующей вершины, установить, что это подмножество

пустое?

Для этого необходимо сформулировать некоторый признак пустого подмножества.

Этот признак введем следующим образом. Преобразуем систему неравенств

n

aij xij bi , (i=1,2,...,m) j=1

ЛЦПБ.doc

2

таким образом, чтобы все слагаемые в левой части этой системы стали неотрицательными. Как это сделать?

Допустим, в i-м ограничении (i=1,2,...,m) имеется отрицательный коэффициент aij < 0. Тогда вместо xj в i-ое ограничение вводится переменная xj =1 - xj .

Очевидно, что xj - это также булева переменная.

При этом замена переменных в других ограничениях не производится.

ai1x1+...- aijxj +...+ ainxn bi (aij 0!!) ai1x1+...+ aij xj +...+ ainxn bi +aij

В результате таких преобразований для всех отрицательных коэффициентов, все коэффициенты левой части должны стать неотрицательными. Коэффициенты правых частей также должны быть неотрицательными.

Очевидно, что если некоторое bi′ = bi aij <0, то i-е ограниче-

ние противоречиво. Ему не может удовлетворить ни один набор значений переменных. Т.е. соответствующее множество решений – пустое. Задача не имеет решений. Это и есть признак пустого множества.

Назовем операцию приведения системы ограничений к виду,

у которого все aij > 0 операцией приведения системы ограничений к стандартному виду.

ПРИМЕР. Привести к стандартному виду задачу:

2x1 4x 2 max,

 

2x1 4 y2 4 max,

2x1 +5x 2 4 ,

 

2x1 5 y2 ≤ −1,

5x1 3x 2 3,

Основная:

5x1 +3y2 6 ,

x1,2 {0,1}.

y2 =1x2

x1 ,y2 {0 ,1}.

 

 

Стандартная

 

 

2x1 4 y2 4 max,

 

 

2x1′ +5 y2′ ≤6 ,

 

 

5x1 +3y2 6 ,

 

 

x1 ,x 2 ,y2 ,y2′ {0 ,1}.

Пусть зафиксированы значения первых k переменных:

x1 ,x 2 ,..., x k . Этому фиксированному набору нулей и единиц

соответствует некоторая вершина в дереве ветвлений. Подставим эти значения в систему ограничений задачи (2) ЛЦП(б):

k

 

n

aij x j +

aij x j bi , ( i =

1,m

) .

j =1

j =k +1

Имеем систему:

 

 

 

 

 

n

k

 

aij x j bi aij x j .

 

j =k +1

j =1

Придадим этой системе стандартную форму:

n

aij xij b'i . j=k +1

ЛЦПБ.doc

 

 

 

 

3

Здесь

x i

x

j

,

если подстановка не производилась ,

=

 

 

 

j

1

x j в противном случае.

Очевидно, что если какой-нибудь свободный член станет отрицательным, например b'i < 0 , то i-е ограничение – противоре-

чивое. То есть, вершину дерева, соответствующую фиксированному набору x1 ,x 2 ,..., x k , можно отбросить вместе со всеми ис-

ходящими из нее ветвями.

В результате такого отсеивания недопустимых ветвей можно существенно сократить размерность задачи.

Но в практических ситуациях полный перебор оставшихся ветвей едва ли может привести к оптимальному решению в приемлемое время.

Здесь приведен просто прием, который используется во многих алгоритмах решения ЛЦП(б) задачи. Первым таким алго-

ритмом является алгоритм плотного заполнения.

Алгоритм плотного заполнения

Этот алгоритм, ориентированный на поиск допустимого решения ЛЦП(б) задачи, служит в качестве основы многих алгоритмов.

Система ограничений приводится к стандартной форме.

Если в некотором ограничении срабатывает признак пустого подмножества (отрицательная правая часть соответствующего неравенства), то задача не имеет решения – множество ее допустимых решений пусто.

Затем переменным задачи поочередно приписываются единичные значения. Одновременно пересчитываются правые части системы ограничений и проверяется признак пустого подмножества.

Пусть переменным x1 , x2 ,..., xk 1 уже присвоены конкретные значения. Система ограничений имеет стандартную форму:

n

 

 

 

 

 

 

aij xij bi(k

1) , ( i =

 

),

 

 

 

1, m

(*)

 

j =1

 

 

 

 

 

 

xij {x j , xj } ; x j = 1 xj ; x j {0,1} ; x j {0,1} ; j =

 

.

k ,n

Рассмотрим общий шаг k.

 

 

 

 

 

 

Шаг k. Попытаемся приписать переменной xk

единичное зна-

чение. Для этого подставим xk =1 в ограничения (*), учитывая

вхождение этой переменной в каждое ограничение в прямом ( xk ) или в инверсном виде ( x k′ =1 x k ).

Пересчитываем правые части ограничений:

 

 

n

 

 

 

 

 

 

 

 

 

aij xij bi(k 1) aik βik

= bi(k ) , ( i =

 

),

(**)

 

 

1,m

 

j=k +1

 

 

 

 

 

где

β

 

 

0 , если x k входит в ограничениев виде x k ;

 

ik

=

 

 

 

 

 

 

 

 

1, если x k входит в ограничениев виде x k.

 

 

Если все b(i k ) 0 , принимаем xk =1 и выполняем шаг k0. В

противном случае - шаг k1 .

 

 

 

 

 

 

Шаг k0. Если k=n, то получено допустимое решение задачи

(Конец). В противном случае выполняется шаг k1.

 

 

Шаг k1.

Попытаемся приписать переменной x k

нулевое

значение. Для этого подставим xk =0 ( x k

=1 ) в ограничения (*)

и пересчитаем правые части ограничений.

 

 

 

 

 

Если все b(i k ) 0 , принимаем

x k =0

и выполняем шаг k0.

В противном случае - шаг k2 .

 

 

 

 

 

 

Шаг k2.

Переменной x k нельзя приписать ни единичного,

ни нулевого значения.

ЛЦПБ.doc

4

Последовательно (в обратном порядке) просматриваем переменные x1, x2 ,..., xk 1 до тех пор, пока не обнаружим некото-

рую переменную x s , которой приписано единичное значение.

Если такой переменной нет, то конец – задача не имеет допустимых решений. В противном случае в исходную систему ограничений подставляем зафиксированные ранее значения переменных x1 ,x 2 ,..., x s1 . Полагаем k=s, приводим систему огра-

ничений к стандартному виду и выполняем шаг k1 .

Пример. Используя алгоритм плотного заполнения, найти допустимое решение следующей задачи ЛЦП(б).

4 y1 +2y2 y3 max, 2y1 + y2 + y3 2,

y1 y2 + y3 1 y j {0 ,1}, j =1,3.

Произведя подстановку y1 = x1 , y2 = x 2 , y3 =1 x3 , приводим задачу к форме основной задачи ЛЦП(б):

4x1 +2x 2 +x3 1 max, 2x1 +x 2 x3 1,

x1 +x 2 +x3 0 x j {0 ,1}, j =1,3.

Приводим систему ограничений к стандартному виду:

4x1 +2x 2 +x3 1 max,

2x1 +x 2 +x3′ ≤ 2, x1′ +x 2 +x3 1

x j ,x j {0 ,1}, x j =1 x j , j =1,3.

x2=1

x'3-1

x30

2x1+x2+x'32 x'1+x2+x31

x1=1

x2+x'30 x2+x31

x2=0

x'30 x31

x3=1

00

11

Т.е. x1 =1 , x 2 =0 ,

x3 =1 . Решение исходной задачи:

y1

= x1

= 1

ЦФ=4.

y2

= x2

= 0

y3

= 1 x3 = 0

 

Этот алгоритм является основой многих алгоритмов решения ЛЦП(б)-задач. Его главный недостаток – резкое увеличение времени работы, если задача не имеет допустимых решений.

ЛЦПБ.doc

5

Метод Фора и Мальгранжа

Этот метод используется для решения задачи ЛЦП(б), в которой все коэффициенты целые.

m

 

 

F(x)= c j x j

max , (cj - целые, j=1,2,...,n),

(1)

j=1

 

 

n

 

 

aij xij

bi , (i=1,2,...,m),

(2)

j=1

 

 

xj {0,1}, (j=1,2,...,n).

(3)

Приведем задачу к виду основной задачи (cj 0, j=1,2,...,n) и попытаемся найти любое ее допустимое решение, используя, например, алгоритм плотного заполнения.

Пусть задача имеет допустимое решение X0. F(X0) – значение ЦФ на этом решении.

К ограничениям задачи (2) добавим новое ограничение:

n

 

c j x j F ( X 0 ) +1

(2')

j=1

Попытаемся найти допустимое решение задачи (1), (2), (2'),

(3). Пусть новая задача имеет допустимое решение X1. F(X1) – значение ЦФ на этом решении.

Заменим ограничение (2') новым ограничением:

n

c j x j F ( X 1 ) +1 и снова попытаемся найти допустимое ре- j=1

шение задачи (1), (2), (2'), (3).

Этот процесс продолжается до тех пор, пока на некотором шаге k+1 задача с дополнительным ограничением

m

c j x j F ( X k ) +1 окажется недопустимой. Очевидно, что j=1

решение предыдущей задачи Xk – оптимальное решение исходной задачи, а F(Xk) – оптимальное значение ЦФ.

Аддитивный алгоритм Э.Балаша

Этот метод – один из наиболее популярных и мощных для решения задач ЛЦП(б).

m

F(x)= c j x j j=1

n

aij xij j=1

max , (cj - целые, j=1,2,...,n),

(1)

bi , (i=1,2,...,m),

(2)

xj {0,1}, (j=1,2,...,n).

(3)

Пусть N={1,2,…,n} – множество номеров переменных зада-

чи.

Основные понятия

Рассмотрим два подмножества множества N - ω и v такие,

что ω v=N и ω ∩ v= .

Каждой переменной xj (j ω) придадим конкретное значение x j (0 или 1). Эти переменные будем называть "фиксированны-

ми".

Переменные xj (j v) оставим в прежнем виде и назовем их

"свободными".

Формально введем вектор y=(y1, y2,…, yn), компоненты которого определим следующим образом:

y

 

x j , если

j ω;

j

=

j v.

 

x j , если

ЛЦПБ.doc

6

Вектор y=(y1, y2,…, yn) будем называть "частичным решени-

ем".

Пример: y=(1,0,x3,1,x5,x6,0) . Здесь ω={1,2,4,7}, v={3,5,6}.

Каждому частичному решению поставим в соответствие вершину дерева ветвлений или, что то же самое, определенное подмножество решений. При этом путь от корня к этой вершине определяется значениями фиксированных переменных.

Для нашего примера (y=(1,0,x3,1,x5,x6,0)):

x1=1

x2=0

x4=1

x7=0

Подмножество из 23=8 элементов

Если ω= , то имеет место частный случай частичного решения – все переменные свободные (vN).

Любому частичному решению соответствует вполне определенная задача ЛЦП(б), которая получается из исходной задачи в результате подстановки в нее фиксированных значений переменных данного частичного решения и приведения полученной задачи к стандартной форме.

c j x j

+ c j x j max,

j ω

j v

aij x j bi aij x j (i =

 

),

1, m

j v

j ω

x j {0,1}, j v.

 

 

c j x j + c j x j max,

j ω

j ~v

 

 

 

 

aij xij bi , (i =1, m),

j v

 

 

 

xij {x j , x' j }, x' j =1 x j , x j {0,1}, j v.

~

Очевидно, что если некоторое bi < 0 , то соответствующее

ограничение противоречиво. Следовательно, данному частичному решению соответствует недопустимая задача: все ветви, выходящие из вершины можно отбросить (как это делается в алгоритме плотного заполнения).

~

В противном случае (все bi 0, i =1, m ) можно предпринять попытку "расширить" частичное решение.

Расширение частичного решения

Рассмотрим некоторое ограничение задачи

 

~

 

 

 

 

 

aij xij bi , (i =1, m) .

j v

 

 

 

Допустим, в этом ограничении существует коэффициент

(*)

~

 

 

aij > bi

Это говорит о том,

что переменная xj не может принять

значение "1", если она входит в данное ограничение в прямом виде (в виде xj ). Если же переменная xj входит в ограничение в инверсном виде – в виде x'j (x'j =1 - xj), то xj не может принять значение "0".

ЛЦПБ.doc

7

Таким образом, наличие условия (*) позволяет приписать переменной xj только определенное значение.

Придадим этой переменной соответствующее значение. Фактически имеем новое частичное решение: один элемент j из подмножества v перешел в подмножество ω.

Для полученного нового частичного решения построим задачу в стандартной форме и проведем аналогичный анализ: снача-

~

ла на допустимость ( bi < 0 ), затем – на предмет существова-

~

ния коэффициента aij > bi .

~

Если признака недопустимости задачи нет (все bi 0 ,

~

i = 1, m ) и aij > bi , придадим переменной xj соответствующее значение и повторим процедуру для нового частичного решения.

Ит.д.

Врезультате рано или поздно возникнет одна из трех ситуа-

ций:

1.На некотором шаге установлена недопустимость задачи.

2.Нет признака пустого подмножества, но условие (*) не выполняется – получено новое частичное решение.

3. Все элементы из подмножества v перешли в подмножество ω (получено полное решение задачи).

Совокупность соответствующих операций до возникновения одной из перечисленных ситуаций назовем "расширением час-

тичного решения".

Рассмотрим подробнее эти ситуации.

1.На некотором шаге установлена недопустимость задачи.

Вэтом случае исходное частичное решение недопустимо:

 

 

Вершина со

 

всеми вет-

Расширение

вями отбра-

сывается

частичного

 

решения

2. Нет признака пустого подмножества, но условие (*) не выполняется – получено новое частичное решение.

Получено новое частичное решение, которое нельзя расширить. В этом случае принудительно производится ветвление. Из одного частичного решения формируются два новых частичных решения: любой свободной переменной сначала приписывается значение "0", а затем "1".

Далее предпринимается попытка расширить оба новых решения.

Расширение

частичного

решения

Новые частичные решения

ЛЦПБ.doc

8

Очевидно, что нужно провести расширение сначала одного нового решения, а затем – другого. То есть, необходимо создать

список частичных решений.

3. Получено полное решение задачи, то есть, допустимое решение исходной задачи.

Возникает вопрос, как наиболее эффективно использовать полученную информацию. Вот здесь-то и используется механизм, который уже рассматривался в методе Фора и Мальгранжа.

Этот механизм позволяет ускорить процесс отсеивания частичных решений, которые не только являются недопустимыми, но и, что самое интересное, - заведомо неоптимальными.

Работа этого механизма будет рассмотрена несколько позже. Сейчас же приведем важнейшее в аддитивном алгоритме опре-

деление (уже знакомое из метода ветвей и границ).

 

Определение. Допустимое решение X * = ( x* , x*

,..., x* ) , ко-

1

2

n

торое доставляет ЦФ значение Z * - большее,

чем любое из-

вестное к данному моменту решение, называется "рекордом".

Рекорды мы будем регистрировать – запоминать только последний рекорд.

В принципе, можно каждое полное частичное решение сравнивать с рекордом: если рекорд не улучшился, отбрасывать это решение.

Мы же воспользуемся механизмом метода Фора и Мальгранжа.

После того, как получен очередной рекорд ( X * , Z * ), в систему ограничений каждой из задач, которая соответствует некоторому, еще не расширенному решению, будем добавлять ограничение:

n

c j x j F ( X * ) +1 j=1

Таким образом, каждое полное расширенное решение будет соответствовать новому рекорду.

Схема аддитивного алгоритма

Шаг 1. Положим

ω= , vN (все переменные

– свобод-

ные). Придадим

задаче стандартную форму и

занесем ее в

предварительно очищенный список задач.

 

Шаг 2. Если список задач пуст, то проверяем, был ли ранее зафиксирован рекорд. Если рекорд был зафиксирован, задача ре-

шена: рекорд X * - оптимальное решение, Z * -оптимальное значение ЦФ. Конец.

Шаг 3. Если при пустом списке рекорд не зафиксирован, задача не имеет допустимых решений. Конец.

Шаг 4. Если список задач не пуст, выберем из него любую за-

~

дачу. По признаку пустого подмножества ( bi < 0 ) проверяем допустимость задачи, и, если признак есть, переходим к шагу 2.

~

Если признака нет (все bi 0, i =1, m ) выполняется следующий шаг.

Шаг 5. Производим расширение частичного решения, которому соответствует выбранная задача. Если устанавливается факт недопустимости задачи, соответствующей расширенному решению

~

( bi < 0 ),переходим к шагу 2.

Шаг 6. Если расширенное частичное решение полное, то полу-

чен новый рекорд ( X * , Z * ). Во все задачи списка вносим дополнительное ограничение

n

c j x j F ( X * ) +1, j=1

учитывая соответствующие частичные решения. Всем задачам списка придаем стандартную форму и переходим к шагу 2.

ЛЦПБ.doc

9

Шаг 7. Имеем неполное расширенное частичное решение. Возьмем любую свободную переменную этого решения xk (k v). Полагая xk=1 и xk=0 (v=v\k, ω=ω k) формируем два частичных решения. Каждому из этих частичных решений ставим в соответствие задачу в стандартной форме (естественно, с учетом дополнительного ограничения, если ранее был зафиксирован рекорд). Заносим эти задачи в список и переходим к шагу 2.

В приведенной выше редакции алгоритма есть некоторые открытые вопросы, а именно, выбор переменной для ветвления и выбор задачи из списка.

Пример. Используя аддитивный алгоритм, решить задачу ЛЦП(б):

10 x

+2x

+

3x

+14 x

max,

4 x1

5x2

10 x 3

+

4 x4

11,

1

2

 

3

 

4

5,

9 x1

+4 x2

+

3x3

5x4

x j {0,1}, j = 1,4.

Положим ω= , v={1,2,3,4}- все переменные частичного решения – свободные. Это решение имеет вид x1 , x2 , x3 , x4

Задача имеет вид основной задачи. Придадим ей стандартную форму.

10 x1

+2x2

+ 3x3

+14 x4

max,

4 x'1

+5x'2

+10 x'3

+ 4 x4

8,

9 x1

+4 x2

+ 3x3

+ 5x'4

10.

Занесем эту задачу в список (для упрощения записи спецификация переменных опущена).

Выберем задачу из списка. Ее частичное решение x1 , x2 , x3 , x4 .

Признака пустого подмножества нет. Начнем расширять частичное решение.

x'3 = 0 x3 = 1 . Новое ЧР x1 , x2 ,1, x4

Новая задача:

10 x1 +2x2 + 14 x4 +3 max, 4 x'1 +5x'2 + 4 x4 8,

9 x1 +4 x2 + 5x'4 7. x1 =0 x'1 =1. Новое ЧР 0, x2 ,1, x4 Новая задача:

2x2 + 14 x4 +3 max, 5 x'2 + 4 x4 4,

4 x2 + 5x'4 7. x'2 =0 x2 =1 . Новое ЧР 0,1,1, x4 Новая задача:

14 x4 +5 max,

4 x4 4,

5 x'4 3.

x'4 =0 x4 =1 . Новое ЧР 0,1,1,1 полное. Получен рекорд.

X * =(0,1,1,1), Z * =19

Список задач пустой. Рекорд зафиксирован. Следовательно, имеем оптимальное решение ЛЦП(б)-задачи:

X opt =(0,1,1,1), Z opt =19