Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методы оптимальных решений.pdf
Скачиваний:
1711
Добавлен:
13.03.2015
Размер:
1.09 Mб
Скачать

Г л а в а 4

Задачи целочисленного программирования

4.1. Постановка задачи. Графический метод решения

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

Итак, требуется найти минимальное (максимальное) значение линейной функции

n

z =сcj xj + 0 min (max)

j=1

при линейных ограничениях

n

 

aij xj = bi ,

i =1, ,m,

j=1

атакже при условии неотрицательности и целочисленности перемен-

ных xj 0, xj Z, j =1, ,n.

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

Пример 4.1. Решить задачу целочисленного программирования с целевой функцией z = x + 2y +1max и ограничениями

y x 4,y + x 7,

x 0, y 0; x, y Z.

Решение. Строим область на плоскости (x, y), определяемую

системой ограничений (рис. 4.1), игнорируя пока условие целочисленности x и y . Получаем четырехугольник OABC с угловыми точ-

ками O(0,0) , A(0,4) , B(3/ 2,1 1/ 2) и С(7,0) ; при этом все решения

системы ограничений задачи суть точки с целочисленными координатами на границе и внутри этого четырехугольника.

53

y

 

 

B

 

D

A

 

l1

 

O

n

C

 

x

 

l2

 

Рис. 4.1

Чтобы найти точку, в которой функция z достигает максимума, как и при решении графическим методом задач линейного программирования, строим вектор нормали n = (4,8) (удобнее взять сонаправ-

ленный ему вектор m = (1,2) ). Перемещая линию уровня в направле-

нии вектора m и рассматривая в качестве возможных решений лишь точки с целочисленными координатами, убеждаемся, что максимум z достигается в точке D(2,5) и zmax = z(D) = 52.

Заметим, что соответствующим решением задачи линейного программирования без условия целочисленности будет точка B и

( ) = 54.

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

Задачи для самостоятельного решения

Графическим методом найти решения следующих задач целочисленного программирования:

x1 + x2 3,

52. z = 3x1 +7x2 +3 max при x1 + x2 8,

x1, x2 0, x1, x2 Z.

54

 

 

 

 

2x + x 9,

 

 

 

53.

z = 2x1

+3x2 +7 min при

 

 

1

2

 

 

 

 

3x1 4x2 3,

 

 

 

 

 

 

x , x 0, x , x Z.

 

 

 

 

 

1

2

1

 

2

 

 

 

 

4x + x 29,

 

 

 

 

 

 

 

 

 

 

1

2

 

 

 

 

54.

z = 3x1

+ x2 +4 min при

 

3x1

x2 15,

 

 

 

 

 

 

 

 

+2x2 38,

 

 

 

 

 

 

5x1

 

 

 

 

 

 

x , x

0, x , x

 

Z.

 

 

 

 

 

1

 

2

1

 

2

 

 

 

 

 

 

3x +14x

 

78,

 

 

 

 

 

 

 

 

1

2

 

 

 

55.

z = 5x1

+7x2 12 min при

5x1 6x2 26,

 

x +4x 25,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

2

 

 

 

 

 

 

 

 

 

x , x 0, x , x Z.

 

 

 

 

 

 

 

1

2

 

 

1

 

2

 

 

 

x

+ x + x = 4,

 

 

 

 

 

 

1

 

 

2

3

 

 

 

 

56.

z = x1 + x2 +3 max при

x1 +3x2 + x4 = 9,

 

 

 

3x + x

+ x

= 0,

 

 

 

 

 

 

 

 

 

 

1

2

5

 

 

 

 

 

 

 

 

 

 

 

0, xj

Z, j =1, ,5.

 

 

 

x

x1 +12x2 +4x3 + x4 = 34, 57. z = x1 2x2 + x3 +3x4 +8 max при 3x1 + 4x2 + 2x3 + x4 = 22,x 0, xj Z, j =1, ,5.

4.2. Двойственный симплекс-метод

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

Пусть требуется найти максимальное значение функции

z = c1x1 +c2 x2 +...+cn xn +c0

при условиях

55

x1 +a1,m+1xm+1 +...+a1n xn = b1,

x

+a

x

+...+ a

x = b ,

 

2

2,m+1 m+1

 

2n n

2

................................................

 

 

 

 

 

 

 

 

x

+ a

x

 

+...+ a

x

= b ,

 

m

m,m+1 m+1

 

mn n

m

 

 

0,

j =1,..,n.

 

 

xj

 

 

Присоединим к системе ограничений целевую функцию z , исключив из нее базисные переменные и записав ее в виде уравнения

z +∆m+1xm+1 +...+∆n xn = ∆0 .

Напомним, что, коэффициенты j , j =1, ,n называются оценками соответствующих переменных xj .

Заметим, что среди чисел bi могут быть отрицательные. При этом, хотя точка X = (b1,b2 ,...,bm ,0,...,0) является решением системы

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

Определение 4.1. Решение X = (b1,b2 ,...,bm ,0,...,0) системы не-

тривиальных ограничений называется псевдопланом (псевдорешением) задачи линейного программирования, если j 0, j =1, ,n.

Основными предпосылками для решения задачи линейного программирования двойственным симплекс-методом являются следующие две теоремы.

Теорема 4.1. Если в псевдоплане X = (b1,b2 ,...,bm ,0,...,0), есть хотя бы одно отрицательное число bi < 0 такое, что все aij 0 при

i =1, ,m , то задача не имеет решений.

Теорема 4.2. Если в псевдоплане X = (b1,b2 ,...,bm ,0,...,0), имеются отрицательные числа bi < 0 такие, что для любого из них существуют числа aij < 0 , то можно перейти к новому псевдоплану, при ко-

тором значение целевой функции задачи не уменьшится.

Сформулированные теоремы дают основание для построения алгоритма двойственного симплекс-метода.

Пусть X = (b1,b2 ,...,bm ,0,...,0) – псевдоплан исходной задачи. На

основе условия задачи составляем симплекс-таблицу, в которой элементы свободного столбца могут быть отрицательными числами:

56

базис

bi

x1

x2

xl

xm

xm+1

 

xn

x1

b1

1

0

0

0

a1,m+1

a1n

x2

b2

0

1

0

0

a2,m+1

a2n

 

 

 

 

 

 

 

 

 

.

xl

bl

0

0

1

0

al,m+1

al,n

 

 

 

 

 

0

 

 

 

xm

bm

0

0

0

1

am,m+1

amn

z

0

0

0

0 0

0 0

m+1

n

1. Проверяем псевдоплан на оптимальность. Если bi 0 (i =1, ,m ), то, так как, по предположению, все j 0 , псевдоплан

X = (b1,b2 ,...,bm ,0,...,0) будет оптимальным решением исходной зада-

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

2. Выбираем разрешающую строку как содержащую наибольшее по абсолютной величине отрицательное число в столбце свободных членов (пусть это строка со свободным членом bl ). Для выбора раз-

решающего столбца находим минимум модуля отношения элементов строки оценок к отрицательным элементам l -ой строки, т.е. находим min(−∆j / alj ), где alj < 0 . Пусть это минимальное значение принима-

ется при j = r , тогда в базис вводят переменную xr , а число alr явля-

ется разрешающим элементом. Переход к новой симплекс-таблице производят по обычным правилам симплексного метода.

3. Находим новый псевдоплан и переходим к пункту 1. Пример 4.2. Найти максимальное значение функции

z = x1 + x2 +2x3 при условиях

x1 + x2 + x3 =8,x1 x2 4,x1 +2x2 6,

x1 0, x2 0, x3 0.

Решение. Запишем исходную задачу линейного программирования в канонической форме, введя балансовые переменные x4 , x5 , а

затем перепишем ее так, чтобы коэффициенты при базисных переменных были равны 1.

57

z = x1 + x2 +2x3 max

 

x

+ x

+ x

=8,

 

1

2

 

3

 

 

 

x1

x2

x4

= 4,

, то есть

x

+2x

x

 

= 6,

 

1

 

2

5

 

 

 

 

 

j =1, ,5.

 

xj 0,

 

 

Исключив из целевой функции x3 , плекс-таблицу

z = x1 + x2 +2x3 max

x1 + x2 + x3 =8,

x1 + x2 + x4 = −4,x1 2x2 + x5 = −6,

xj 0, j =1, ,5.

получаем следующую сим-

Б.П.

с.ч. х1

х2 х3 х4 х5

х3

8

1

1

1

0

0

х4

-4

-1

1

0

1

0

х5

-6

-1 -2

0

0

1

 

 

 

 

 

 

 

z

16

1

1

0

0

0

Так как в столбце свободных членов имеются два отрицательных числа 4 и 6, а в последней строке нет отрицательных чисел, то в соответствии с алгоритмом двойственного симплекс-метода переходим к новой симплекс-таблице. Заметим, что в данном случае это можно сделать, так как в строках, содержащих отрицательные свободные члены (4 и 6) есть отрицательные числа. Так как наибольшее по модулю отрицательное число в столбце свободных членов есть 6, то исключаем из базиса переменную x5 . Чтобы определить раз-

решающий столбец, находим

 

1

 

 

1

 

 

1

, т.е. минимальное

min

 

 

,

 

 

=

 

1

2

2

 

 

 

 

 

 

отношение элементов строки оценок к отрицательным числам разре-

шающей строки (с противоположным знаком)

дает столбец x2 . Ум-

ножаем третью строку

на

1/ 2

и переходим к

новой симплекс-

таблице

 

 

 

 

 

 

 

 

Б.П.

с.ч. х1

х2

х3

х4

х5

 

 

х3

5

1/2

0

1

0

1/2

 

 

х4

-7

-3/2

0

0

1

1/2

 

 

х2

3

1/2

1

0

0

-1/2

 

 

 

 

 

 

 

 

 

 

 

z

13

1/2

0

0

0

1/2

 

Аналогично, так как в свободном столбце последней таблицы есть отрицательное число 7, то рассмотрим элементы второй строки. Среди этих чисел есть одно отрицательное 3/ 2 . Если бы такое число отсутствовало, то исходная задача была бы неразрешима. Выбор раз-

58

решающего элемента здесь однозначен, умножаем вторую строку на 2/3 и переходим к новой симплекс-таблице

Б.П. с.ч. х1 х2 х3 х4 х5

х3

8/3

0

0

1

1/3

2/3

х1

14/3

1

0

0

-2/3

-1/3

х2

2/3

0

1

0

1/3

-1/3

 

 

 

 

 

 

 

z

32/3

0

0

0

1/3

2/3

Таким образом, в последней строке и в столбце свободных чле-

нов нет отрицательных элементов, поэтому план X

*

 

14

,

2

,

8

 

явля-

 

=

3

3

3

 

 

 

 

 

 

 

 

ется оптимальным и zmax = z(X ) = 32 / 3.

Задачи для самостоятельного решения

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

 

 

2x

2x

+ x = −1,

 

 

 

 

 

1

 

 

2

 

 

 

5

58.

z = −x1 10x2

+10 max при x 0 и 2x1 +2x2 + x3 = −2,

 

 

4x +

2x + x = −1.

 

 

 

 

 

1

 

 

2

 

 

 

4

 

 

2x + x

 

= −1,

59.

z = −2x2 4x4

 

 

 

1

2

 

 

 

 

= −2,

3 max при x 0 и x2

+ x3 x4

 

 

2x

 

4x

 

+ x

 

= −1.

 

 

 

2

 

4

 

 

5

 

 

 

2x

3x

 

+ x

 

= −11,

 

 

 

 

1

 

2

 

 

 

5

 

60.

z = −5x2 4x3

+4 max при x 0 и 2x2 +3x3 x5 = −9,

 

 

x

+ x

 

= −2.

 

 

 

 

2

4

 

 

 

 

 

 

 

 

3x 4x

 

= −17,

61.

z = −2x1 6x3

 

 

 

1

 

 

2

 

 

 

 

+44 max при x 0 и 2x2 3x3 +2x5 = −9,

 

 

x +3x

= −1.

 

 

 

 

 

3

 

4

 

 

 

 

 

 

x

 

x

2x

 

= −7,

 

 

1

 

4

 

 

5

 

 

 

62.

z = −5x4 7x5

7 max при x 0 и x3 +3x4 6x5 = −3,

 

 

x

x

 

4x

 

= −11.

 

 

 

 

2

4

 

 

 

5

 

59