Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ММИОв экономике- учебник.doc
Скачиваний:
68
Добавлен:
05.06.2015
Размер:
10.68 Mб
Скачать

Построение редуцированных матриц и и вычисление оценок снизу

Положим:

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

= d(Х1) +

является оценкой снизу для целевой функции F(x) на множестве .

Рассмотрим теперь множество . Все маршруты из этого множества содержат дугу (r,s). Найдем максимальный связанный путь, который принадлежит всем маршрутам множестваХ1 и содержит дугу (r,s). Пусть этот путь начинается в городе m и заканчивается в городе t (может быть, m = r или t = s, или то и другое одновременно). Чтобы запретить подцикл, начинающийся и заканчивающийся в m, положим (t,m) = +∞. Остальные элементы матрицы полагаем равными соответствующим элементам матрицы , при этом строку, соответствующую городу r, и столбец, соответствующий городу s, в матрицу не включаем, поскольку все маршруты из содержат дуги (r,s).

Редуцированная матрица расстояний для вершины получается из матрицы с помощью операции редуцирования. При этом оценка снизу для функции F(x) на множестве вычисляется по формуле

= d(Х1) + ,

где  – сумма констант редуцирования.

Формирование списка кандидатов на ветвление

После вычисления каждой из оценок (i = 1,2) следует проверить, не состоит ли множество из единственного маршрута. Если в каждой строке и в каждом столбце матрицы оказалось лишь по одному элементу, отличному от +, то множество содержит единственный маршрут, длина которого равна. В этом случае верхняя граница (наименьшее из уже вычисленных значенийF(x)) полагается равной минимуму из предыдущего значения Z0 и , т.е.

Z0 = min {Z0, }.

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

Пример 5.2. Решить методом ветвей и границ задачу коммивояжера с матрицей

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

x0 = {(1,2), (2,3), (3,4), (4,5), (5,1)}.

Тогда F(x0) = 10 + 10 + 20 + 15 + 10 = 65 – текущее значение Z0 – (верхняя граница длин всех маршрутов).

Получим редуцированную матрицу .

0 0 9 12 0

Нижняя граница d(x) = 10 + 1 + 8 + 10 + 8 + 9 + 12 = 58. Данное значение является нижней границей длин всех маршрутов. Заметим, что в идеальном случае поиск решения заключался бы в выборе ровно одного нулевого элемента в каждой строке и каждом столбце. Другими словами, если бы такой маршрут нулевой длины мог быть найден, то длина оптимального маршрута равнялась бы 58. Исходя из верхней и нижней границ, можно заключить, что 58 ≤ F(x*) ≤ 65.

Выберем дугу (r,s) с помощью вычисления значений функции (,).

(1,2) = 0, (2,1) = 0, (3,1) = 0, (4,2) = 4, (1,5) = 1, (2,3) = 5, (3,4) = 2, (5,2) = 2.

Следовательно, (r,s) = (2,3). Осуществим разбиение (ветвление). Правое подмножество X2 будет содержать все маршруты, которые исключают дугу (2,3). Поэтому C2 (2,3) = +∞.

=

Оценка снизу для правого подмножества X2 определяется следующим образом:

d(X2) = d(X) + Θ(2,3) = 58 + 5 = 63 < Z0.

Левое подмножество X1 будет содержать маршруты, которые всегда включают дугу (2,3), и поэтому вторая строка и третий столбец в матрицу C1 не включаются. В результате будем иметь матрицу на единицу меньшего размера. Далее необходимо положить C1 (3,2) = +∞, чтобы запретить подцикл {(2,3),(3,2)}. В результате получим матрицу

C1 = =.

Оценка снизу для левого подмножества:

d(X1) = d(X) +  = 58 + 0 = 58 < Z0,

где  – константа приведения матрицы С1

В списке кандидатов на ветвление множества X1 и X2. Так как d(X1) < d(X2), будем производить ветвление множества X1. Выберем дугу (r,s) с помощью значений функции (,) для матрицы.

(1,2) = 0, (1,5) = 2, (3,1) = 2, (3,4) = 3, (4,2) = 4, (5,2) = 2.

Следовательно, (r,s) = 4, (r,s) = (4,2).

Правая подматрица:

C4 = =.

Оценка снизу для правого подмножества:

d(X4) = d(X1) + Θ(4,2) = 58 + 4 = 62 < Z0.

Левая подматрица. Левое подмножество X3 будет содержать маршруты, которые всегда включают дугу (4,2), и поэтому четвертая строка и второй столбец в матрицу C3 не включаются. В результате будем иметь матрицу на единицу меньшего размера. Далее необходимо положить C3 (3,4) = +∞, чтобы запретить подцикл {(4,2),(2,3),(3,4)}. В результате получим матрицу

C3 = =.

d(X3) = d(X1) +  = 58 + 5 = 63 < Z0.

В списке кандидатов на ветвление множества X3, X4, X2.

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

Определим дугу (r,s) с помощью значений функции (,) для матрицы .

(1,2) = 0, (1,5) = 1, (3,1) = 0, (3,4) = 3, (4,1) = 1, (5,2) = 2.

Следовательно, (r,s) = 3, (r,s) = (3,4).

Правая подматрица:

C6 = =.

Оценка снизу для правого подмножества:

d(X6) = d(X4) + Θ(3,4) = 62 + 3 = 65 = Z0.

Следовательно, множество X6 исключаем из списка.

Левая подматрица. Левое подмножество X5 будет содержать маршруты, которые всегда включают дугу (3,4), и поэтому третья строка и четвертый столбец в матрицу C5 не включаются. В результате будем иметь матрицу на единицу меньшего размера. Далее необходимо положить C5 (4,2) = +∞, чтобы запретить подцикл {(2,3), (3,4), (4,2)}, однако это условие оказалось уже выполненным. В результате получим матрицу

C5 = =.

Оценка снизу для левого подмножества:

d(X5) = d(X4) +  = 62 + 0 = 62 < Z0.

В списке кандидатов на ветвление множества X3, X5, X2.

Минимальная нижняя оценка оказалась у множества X5, следовательно, для дальнейшего разбиения выбираем множество X5. Определим дугу (r,s) с помощью значений функции (,) для матрицы .

(1,2) = 0, (1,5) = 1, (4,1) = 3, (5,2) = 2.

Следовательно, (r,s) = 3, (r,s) = (4,1).

Правая подматрица:

C8 = =.

Оценка снизу для правого подмножества:

d (X8) = d(X5) + Θ(4,1) = 62 + 3 = 65 = Z0.

Следовательно, множество X8 исключаем из списка.

Левая подматрица. Левое подмножество X7 будет содержать маршруты, которые всегда включают дугу (4,1), и поэтому четвертая строка и первый столбец в матрицу C7 не включаются. В результате будем иметь матрицу на единицу меньшего размера. Далее необходимо положить C7 (1,2) = +∞, чтобы запретить подцикл {(2,3), (3,4), (4,1), (1,2)}.

C7 = =.

Оценка снизу для левого подмножества:

d(X7) = d(X5) +  = 62 + 0 = 62 < Z0.

В списке кандидатов на ветвление множества X3, X7, X2. Множество X7 содержит единственный маршрут с минимальной нижней оценкой, поэтому задача решена. X1 = =X*;

Z0= F(x*) = 10 + 8 + 10 + 20 + 14 = 62.

Представим процесс решения в виде дерева (см. рис. 5.7).

Рис. 5.7.

Контрольные вопросы

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

  2. Сформулируйте алгоритм метода ветвей и границ.

  3. Перечислите область применения ЗЦЛП.

  4. С какими трудностями приходится сталкиваться при алгоритмизации методов решения ЗЦЛП?

  5. Приведите классификацию методов решения ЗЦЛП.

  6. Какая задача называется задачей с ослабленными ограничениями?

  7. Сформулируйте принцип ветвления в методе ветвей и границ.

  8. Какую задачу решает понятие границы в методе ветвей и границ?

  9. Сформулируйте постановку задачи коммивояжера.

  10. Сформулируйте алгоритм метода ветвей и границ для решения задачи коммивояжера.

Задание №14

Решите ЗЦЛП методом ветвей и границ.

1. max(3x1 + 4x2) 2. max(3x1 + 4x2)

4x1 + 5x2  20 x1 + 7x2  21

x1 + 6x2  12 x1 + x2  4

0 x1 5 0 x1 4

0 x2 4 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. ` x1 , x2 – целые.

3. max(x1 + x2) 4. max(4x1 + x2)

3x1 + 4x2  12 2x1 - 3x2  6

3x1 + 2x2  9 4x1 + 9x2  18

0 x1 4 0 x1 2

0 x2 2 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

5. max(3x1 + x2) 6. max(x1 + 2x2)

4x1 + 3x2  18 x1 + x2  5

x1 + 2x2  6 3x1 + 8x2  24

0 x1 5 0 x1 5

0 x2 3 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

7. max(2x1 + x2) 8. max(3x1 - 2x2)

5x1 + 2x2  30 2x1 + 3x2  6

3x1 + 8x2  48 x1 - x2  2

0 x1 6 0 x1 3

0 x2 6 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

9. max(3x1 + 2x2) 10. max(x1 + 2x2)

2x1 + x2  7 5x1 + 9x2  45

4x1 + 3x2  18 x1 + 3x2  12

0 x1 3 0 x1 9

0 x2 4 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

11. max(2x1 + 5x2) 12. max(4x1 + 6x2)

4x1 + 5x2  20 3x1 + 7x2  21

x1 + 6x2  12 x1 + x2  4

0 x1 6 0 x1 5

0 x2 5 0 x2 4

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

13. max(2x1 + 3x2) 14. max(5x1 + 2x2)

3x1 + 4x2  12 2x1 - 3x2  6

3x1 + 2x2  9 4x1 + 9x2  18

0 x1 6 0 x1 3

0 x2 3 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

15. max(4x1 + 2x2) 16. max(2x1 + 5x2)

4x1 + 3x2  18 x1 + x2  5

x1 + 2x2  6 3x1 + 8x2  24

0 x1 6 0 x1 4

0 x2 4 0 x2 4

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

17. max(3x1 + 2x2) 18. max(5x1 - 3x2)

5x1 + 2x2  30 2x1 + 3x2  6

3x1 + 8x2  48 x1 - x2  2

0 x1 7 0 x1 3

0 x2 6 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

19. max(4x1 + 3x2) 20. max(x1 + 3x2)

2x1 + x2  7 5x1 + 9x2  45

4x1 + 3x2  18 x1 + 3x2  12

0 x1 4 0 x1 8

0 x2 4 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

21. max(4x1 + 4x2) 22. max(3x1 + 3x2)

4x1 + 5x2  20 3x1 + 7x2  21

x1 + 6x2  12 x1 + x2  4

0 x1 6 0 x1 4

0 x2 5 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

23. max(2x1 + 3x2) 24. max(5x1 + x2)

3x1 + 4x2  12 2x1 - 3x2  6

3x1 + 2x2  9 4x1 + 9x2  18

0 x1 4 0 x1 2

0 x2 2 0 x2 3

x1 , x2  0 x1 , x2  0

x1 , x2 – целые. x1 , x2 – целые.

  1. max(4x1 + x2)

4x1 + 3x2  18

x1 + 2x2  6

0 x1 5

0 x2 3

x1 , x2  0

x1 , x2 – целые.

Задание №15

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

1. 2.

3. 4.

5. 6.

7. 8.

9. 10.

11. 12.

13. 14.

15. 16.

17. 18.

19. 20.

21. 22.

23. 24.

25.