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

Жолобов Ввведение в Математическое 2008

.pdf
Скачиваний:
294
Добавлен:
16.08.2013
Размер:
2.42 Mб
Скачать

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

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

2.6.1. Дерево ветвления в задачах булева программирования

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

ний" (рис. 2.29).

x1

=0

=1

полное подмножество

решений x1

x2

x2

x2

x2

=1

=0

=1

=0

Рис.2.29. Дерево ветвлений

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

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

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

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

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

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

321

Для этого необходимо сформулировать некоторый признак пустого подмножества [8,9]. Этот признак введем следующим образом.

Преобразуем систему неравенств

n

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

j 1

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

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

дится переменная x j =1 - xj .

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

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

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

ai1x1+...+ aij x j +...+ ainxn bi +aij .

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

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

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

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

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

кстандартному виду [8,9].

322

Пример 2.23

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

2x1 4x2 max

 

 

2x1 4 y2 4 max

2x1 5x2

4

Основная:

2x1 5 y2 1

5x1 3x2

3

5x 3y

 

6

y2

1 x2

2

x1,2 0,1

1

 

 

 

x1 , y2 0,1

Стандартная

2x1 4 y2 4 max 2x1 5 y2 6

5x1 3y2 6

x1 , x2 , y2 , y2 0,1

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

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

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

k

n

aij xj

aij xj bi , ( i

 

) .

1, m

j 1

j k 1

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

 

 

 

n

j k 1

k

aij xj bi aij xj . j 1

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

n

aij xij b'i . j k 1

Очевидно, что если какой-нибудь свободный член станет отрицательным, например b'i 0 , то i-е ограничение – противоречивое. То есть вершину дерева, соответствующую фиксированному набору x1, x2 ,..., xk , можно отбросить вместе со всеми исходящими из нее ветвями.

323

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

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

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

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

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

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

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

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

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

 

n

 

 

 

 

 

 

 

 

aij xij bi(k 1)

( i

 

),

 

 

 

 

1, m

(2.40)

 

j k

 

 

 

 

 

 

 

xij {xj , xj } ;

xj 1 xj ;

xj {0,1}; xj {0,1}; i

 

.

 

1, m

 

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

Шаг k. Попытаемся приписать переменной xk единичное значение. Для этого подставим xk =1 в ограничения (2.40), учитывая вхождение этой переменной в каждое ограничение в прямом ( xk ) или в инверсном виде ( xk ).

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

n

 

 

aij xij bi(k 1) aik βik bi(k )

( i 1, m ),

(2.41)

j k 1

324

где

0,

если xk

входит в ограничение в виде xk ;

ik =

1,

если xk

входит в ограничение в виде xk .

 

 

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

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

Шаг k0. Если k=n, то получено допустимое решение задачи. Конец. В противном случае выполняется шаг k+1.

Шаг k1. Попытаемся приписать переменной xk нулевое значение. Для этого подставим xk =0 ( xk ) в ограничения (2.40) и пересчитаем правые части ограничений.

Если все b(k ) 0

, принимаем

x

k

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

i

 

 

 

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

 

 

 

Шаг k2. Переменной

xk нельзя приписать ни единичного, ни ну-

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

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

ременную xk , которой приписано единичное значение. Если такой

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

зафиксированные ранее значения переменных x1, x2 ,..., xk 1 . Полага-

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

Пример 2.24

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

4 y1 2 y2 y3 max 2 y1 y2 y3 2 y1 y2 y3 1

y j 0,1 ,

 

 

j 1,3

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

325

4x1 2x2 x3 1 max 2x1 x2 x3 1

x1 x2 x3 0

xj 0,1 ,

 

 

j 1, 3

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

 

 

 

 

 

4x1 2x2

x3

1 max

 

 

 

 

 

 

 

 

 

2x

x

2

x 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

x

2

x

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

3

 

 

 

 

 

 

 

 

j

j

 

 

 

 

 

 

 

 

j

 

 

j

 

 

 

 

 

 

x

 

, x

 

0,1

,

 

x

 

 

1

x ,

j 1, 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2x1+x2+x'3 2

 

 

 

 

 

 

 

 

x1=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2+x'3 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2=0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x'3 -1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x'3 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x3 0

 

 

 

 

 

 

x3=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Т.е. y1 x1 , y1

 

x1 ,

 

x3

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

 

 

 

 

y1 x1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y2

x2

0

 

 

 

 

 

 

ЦФ=4.

y3 1 x3 0

326

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

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

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

m

 

 

F(x)= c j x j max (cj – целые, j=1,2,...,n)

(2.42)

j 1

 

 

n

 

 

aij xij bi

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

(2.43)

j 1

 

 

xj {0,1}

(j=1,2,...,n).

(2.44)

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

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

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

n

 

cj xj F ( X 0 ) 1 .

(2.45)

j 1

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

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

n

cj xj F (X 1 ) 1 и снова попытаемся найти допустимое решение

j 1

задачи (2.43)-(2.45).

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

m

ем cj xj F ( X k ) 1 не имеет допустимых решений. Очевидно,

j 1

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

327

2.6.4. Аддитивный алгоритм

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

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

v=N и v= .

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

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

свободными.

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

x

, если

j ω;

 

j

 

 

y j

x

, если

j v.

 

j

 

 

 

 

 

 

Будем называть этот вектор частичным решением.

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

Пример 2.25

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

Для этого частичного решения дерево ветвлений выглядит следующим образом:

x1=1

x2=0

x4=1

x7=0

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

328

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

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

cj xj cj xj max

 

j

j v

 

aij xj bi aij xj (i

 

)

 

1, m

 

j v

j

 

xj {0,1}, j v

 

 

 

 

cj xj c j xj max

 

j

j v

 

aij xij bi , (i

 

)

 

1, m

 

j v

 

 

 

 

 

 

xij {xj , x ' j },

x ' j 1 xj , xj {0,1},

j v

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

раничение противоречиво.

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

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

попытку расширить частичное решение. Рассмотрим некоторое ограничение задачи:

aij xij bi ,

(i

 

) .

1, m

j v

 

 

 

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

aij bi .

(2.46)

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

329

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

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

множества v перешел в подмножество .

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

на допустимость ( bi 0 ), затем – на предмет существования коэффициента aij bi . Если признака недопустимости задачи нет

(все

b

0 ,

i

 

) и a

 

b

, придадим переменной xj соответ-

1, m

ij

 

i

 

 

 

 

i

 

ствующее значение и повторим процедуру для нового частичного решения и т.д.

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

ций:

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

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

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

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

ного решения.

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

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

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

(рис. 2.30).

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

330