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

Мат_модели

.pdf
Скачиваний:
13
Добавлен:
13.03.2015
Размер:
734.08 Кб
Скачать

ЗАДАЧИ ЦЕЛОЧИСЛЕННОГО

ПРОГРАММИРОВАНИЯ

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

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

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

n

z = c j x j + с0 min (max)

j=1

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

n

aij x j =bi , i =1,K, m,

j=1

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

x j 0, x j Z, j =1,K, n.

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

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

y x 4,y + x 7,

x 0, y 0; x, y Z.

40

n = (4,8)

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

темой ограничений, игнорируя пока условие целочисленности x и y .

Получаем четырехугольник OABC с угловыми точками O(0,0) , A(0,4) ,

B( 32 , 112 ) и С(7,0) ; при этом все решения системы ограничений задачи суть точки с целочисленными координатами на границе и внутри этого четырехугольника.

y

 

B

 

D

A

 

l1

 

 

nr

O

C

 

x

 

l2

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

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

сматривая в качестве возможных решений лишь точки с целочисленными координатами, убеждаемся, что максимум z достигается в точке

D(2,5) и zmax = z(D) = 52 .

Ответ. zmax = z(D) = 52 .

Заметим, что соответствующим решением задачи линейного программирования без условия целочисленности будет точка B( 32 , 112 ) и z(В) = 54.

41

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

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

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

48.

z = 3x1 + 7x2 +3 max при x1, x2 0, x1, x2 Z

и

x1 + x2 3,

 

 

 

 

x1 + x2 8.

 

 

49.

z = 2x1 +3x2 + 7 min при x1, x2 0, x1, x2 Z

и

2x1 + x2 9,

 

 

 

 

 

3x1 4x2 3.

 

 

 

 

 

4x + x

 

29,

50.

z = 3x1 + x2 + 4 min при

x1, x2 0, x1, x2 Z и

 

1

2

 

3x1

x2 15,

 

 

 

 

 

 

+ 2x2 38,

 

 

 

 

 

5x1

 

 

 

 

3x

+14x

78,

51.

z = 5x1 + 7x2 12 min при x1, x2 0, x1, x2 Z

 

1

 

2

и 5x1 6x2 26,

 

 

 

 

x + 4x 25,

 

 

 

 

 

1

2

 

 

 

 

 

 

x1 + x2 + x3 = 4,

52.

z = x1 + x2 +3 max при x 0, xj Z, j =1,K,5

и x1 +3x2 + x4 = 9,

 

 

 

 

3x

+ x

+ x = 0.

 

 

 

 

 

1

2

 

5

53. z = x 2x

2

+ x +3x

4

+8 max

при x 0, x

j

Z, j =1,K,4 и

x1 +12x2 + 4x3 + x4

= 34,

1

3

 

 

 

 

+ 4x2

+ 2x3 + x4

= 22.

 

 

 

 

 

 

 

 

3x1

42

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

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

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

z = c1 x1 +c2 x2 +... + cn xn + c0

при условиях

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

 

x

2

+ a

2,m+1

x

m+1

+... + a

2n

x

n

 

= b

,

 

 

 

 

 

 

 

 

 

2

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

m

+ a

m,m+1

x

m+1

+... + a

mn

x

n

= b ,

 

 

 

 

 

 

 

 

 

 

m

 

 

0,

j =1,.., n.

 

 

 

 

 

 

 

 

x j

 

 

 

 

 

 

 

 

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

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

0 .

Напомним, что, коэффициенты

j , j =1,K, n

называются оценками соот-

ветствующих переменных x j .

 

 

Заметим, что среди чисел bi

могут быть отрицательные. При этом,

хотя точка X = (b1,b2 ,...,bm ,0,...,0) является решением системы нетривиаль-

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

43

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

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

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

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

Теорема 2. Если в псевдоплане X = (b1,b2 ,...,bm ,0,...,0) , имеются от-

рицательные числа bi < 0 такие, что для любого из них существуют чис-

ла aij < 0 , то можно перейти к новому псевдоплану, при котором значе-

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

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

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

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

базис

bi

x1

x2

K xl

K xm

xm+1

K

xn

x1

b1

1

0

K 0 K 0 a1,m+1

K a1n

x2

b2

0

1

K 0 K 0 a2,m+1

K a2n

M

M

M

M

M

M

M M

M

M

M .

xl

bl

0

0

K 1 K 0 al ,m+1

K al ,n

M

M

M

M

M

M K 0

M

M

M

xm

bm

0

0

K 0 K 1 am,m+1

K amn

z

0

0

0

0 0 0 0

m+1

K n

1. Проверяем псевдоплан на оптимальность.

Если

bi 0, i =1,K, m ,

то, так как,

по

предположению,

все

j 0 , псевдоплан

X = (b1,b2 ,...,bm ,0,...,0)

будет оптимальным решением исходной задачи. Если

44

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

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

щего столбца находим минимум модуля отношения элементов строки

оценок к

отрицательным элементам l -ой

строки,

т.е. находим

min(j / alj ) ,

где alj < 0 . Пусть это минимальное значение принимается

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

а число alr

является раз-

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

3. Находим новый псевдоплан и переходим к пункту 1.

Пример 2. Найти максимальное значение функции z = x1 + x2 +2x3

при условиях

x1 + x2 + x3 =8,

x1 x2 4,

x1 +2x2 6,

x1 0, x2 0, x3 0.

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

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

z = x1 + x2 +2x3 max

 

x

+ x

2

+ x

=8,

 

1

 

 

3

 

 

, то есть

x1

x2

x4

= 4,

x

+2x

2

x

 

= 6,

 

1

 

 

5

 

 

 

 

 

 

j =1,K,5.

 

x j 0,

 

 

z = x1 + x2 +2x3 maxx1 + x2 + x3 =8,

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

x j 0, j =1,K,5.

45

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

таблицу

базис

bi

x1

x2

x3

x4

x5

x3

8

1

1

1

0

0

x4

4 1 1

0

1

0 .

x5

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 , получаем таблицу

базис

bi

x1

x2

x3

x4

x5

x3

8

1

1

1

0

0

x4

4 1

1

0

1

0

x5

3

1/ 2

1

0

0

1/ 2

z

16

1

1

0

0

0

и переходим к новой симплекс-таблице (разрешающий элемент выделен жирным шрифтом):

базис

bi

x1

x2 x3 x4

x5

x3

5

1/ 2

0

1

0

1/ 2

x4

7 3 / 2 0

0

1

1/ 2 .

x2

3

1/ 2

1

0

0

1/ 2

z

13

1/ 2

0

0

0

1/ 2

46

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

базис

bi

x1

x2 x3

x4

x5

x3

5

1/ 2

0

1

 

0

1/ 2

x4

14 / 3 1

0

0

3 / 2 1/ 3

x2

3

1/ 2 1

0

 

0

1/ 2

z

13

1/ 2

0

0

 

0

1/ 2

и переходим к новой симплекс-таблице

базис

bi

x1 x2

x3

x4

x5

x3

8 / 3 0

0

1

1/ 3

2 / 3

x1

14 / 3 1

0

0

2 / 3

1/ 3 .

x2

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 ) = 323 .

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

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

2x1 2x2 + x5 = −1, 54. z = −x1 10x2 +10 max при x 0 и 2x1 + 2x2 + x3 = −2,4x1 + 2x2 + x4 = −1.

47

 

 

 

2x1 + x2 = −1,

55.

z = −2x2

4x4

3 max при x 0 и x2 + x3 x4

= −2,

 

 

 

2x

2

4x

+ x

 

= −1.

 

 

 

 

4

5

 

 

 

 

2x1 3x2 + x5

= −11,

56.

z = −5x2

4x3

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

 

 

 

x

+ x

= −2.

 

 

 

 

2

4

 

 

 

 

 

 

3x1 4x2 = −17,

57.

z = −2x1

6x3

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

 

 

 

x +3x = −1.

 

 

 

 

 

3

4

 

 

 

 

 

x1 x4 2x5 = −7,

58.

z = −5x4

7x5

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

 

 

 

x

x

4x

 

= −11.

 

 

 

 

2

4

5

 

x2 6x3 + x4 = −5, 59. z = −x2 3x3 max при x 0 и x1 +5x2 19x3 = −13,

3x2 6x3 + x5 = −2.

§3. Метод Гомори

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

принимает дробное значение, то к системе ограничений добавляют неравенство

n

~

~

},

 

 

 

 

 

 

}x j {bi

 

 

{aij

 

 

j=1

 

 

 

 

 

где {a} обозначает дробную часть числа

a , а числа

~ ~

взяты из по-

aij ,bi

следней симплекс таблицы из строки, содержащей переменную xk как

48

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

Замечание. Под дробной частью некоторого числа a понимается наименьшее неотрицательное число такое, что разность a и b есть целое. Например, {1,75} = 0,75;{3,35} = 0,65.

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

Решим теперь задачу из примера 1 методом Гомори. Пример 3. Решить методом Гомори задачу

z = 4x1 +8x2 + 4 max

x1 + x2 4,x1 + x2 7,

x1 0, x2 0; x1 , x2 Z.

Решение. Приведем задачу к каноническому виду

z = 4x1 +8x2 + 4 max

x1 + x2 + x3 = 4,x1 + x2 + x4 = 7,

x1 0, x2 0; x1 , x2 Z.

и решим задачу симплекс-методом (игнорируя условие целочисленности). Выпишем исходную симплекс-таблицу.

базис

bi

x1

x2

x3

x4

x3

4

1

1

1

0

x4

7

1

1

0

1

z

4

4

8

0

0

В последней строке есть два отрицательных числа, поэтому опорное решение X = (0,0,4,7) не является оптимальным. Вводим в базис перемен-

49