Решить средствами Excel транспортную задачу
0. | 1. | 2. | |
3. | 4. | 5. | |
6. | 7. | 8. | |
9. | |||
Тема 3. Целочисленное программирование и дискретная оптимизация
При решении задач из этой темы нужно ознакомиться с методами решения задач целочисленного программирования [1, гл. 2, § 8, с. 111-116; 2, гл. 9, п. 9.3, с. 397-437].
Экстремальная задача, переменные которой принимают лишь целочисленные значения, называется задачей целочисленного программирования.
при условиях
xj ³ 0, j = 1,…,n, xj – целые.
Метод ветвей и границ.
Сначала решаем задачу симплекс методом и находим оптимальный план задачи без учета целочисленности переменных. Пусть им является план Х0. Если среди компонент этого плана нет дробных чисел, то тем самым найдено искомое решение данной задачи и fextr = f(X0).
Если же среди компонент плана Х0 имеются дробные числа, то Х0 не удовлетворяет условию целочисленности и необходимо осуществить упорядоченный переход к новым планам, пока не будет найдено решение задачи. Покажем, как это можно сделать, предварительно отметив, что f(Х0) > f(X) для всякого последующего плана X.
Предполагая, что найденный оптимальный план Х0 не удовлетворяет условию целочисленности переменных, тем самым считаем, что среди его компонент есть дробные числа. Пусть, например, переменная xi0 приняла в плане Х0 дробное значение.
Тогда в оптимальном целочисленном плане ее значение будет, по крайней мере, либо меньше или равно ближайшему меньшему целому числу Кi0 либо больше или равно ближайшему большему целому числу Кi0 + 1. Определяя эти числа, находим симплексным методом решение двух задач линейного программирования:
|
(I) (II)
xi0 £ Кi0, xi0 ³ Кi0 + 1,
xj ³ 0, j = 1,…,n. xj ³ 0, j = 1,…,n.
Найдем решение задач линейного программирования (I) и (II). Очевидно, здесь возможен один из следующих четырех случаев:
1. Одна из задач неразрешима, а другая имеет целочисленный оптимальный план. Тогда этот план и значение целевой функции в нем и дают решение исходной задачи.
2. Одна из задач неразрешима, а другая имеет оптимальный план, среди компонент которого есть дробные числа. Тогда рассматриваем вторую задачу и в ее оптимальном плане выбираем одну из компонент, значение которой равно дробному числу, и строим две задачи, аналогичные задачам (I) и (II).
3. Обе задачи разрешимы. Одна из задач имеет оптимальный целочисленный план, а в оптимальном плане другой задачи есть дробные числа. Тогда вычисляем значения целевой функции в этих планах и сравниваем их между собой. Если на целочисленном оптимальном плане значение целевой функции больше или равно ее значению на плане, среди компонент которого есть дробные числа, то данный целочисленный план является оптимальным для исходной задачи, и он вместе со значением целевой функции на нем дает искомое решение. Если же значение целевой функции больше на плане, среди компонент которого есть дробные числа, то следует взять одно из таких чисел и для задачи, план которой рассматривается, необходимо построить две задачи, аналогичные (I) и (II).
4. Обе задачи разрешимы, и среди оптимальных планов обеих задач есть дробные числа. Тогда вычисляем значение целевой функции на данных оптимальных планах и рассматриваем ту из задач, для которой значение целевой функции является наибольшим. В оптимальном плане этой задачи выбираем одну из компонент, значение которой является дробным числом, и строим две задачи, аналогичные (I) и (II).
|
Таким образом, описанный выше итерационный процесс может быть представлен в виде некоторого дерева, на котором исходная вершина отвечает оптимальному плану Х0 задачи, а каждая соединенная с ней ветвью вершина отвечает оптимальным планам задач (I) и (II). Каждая из этих вершин имеет свои ветвления. При этом на каждом шаге выбирается та вершина, для которой значение функции является наибольшим. Если на некотором шаге будет получен план, имеющий целочисленные компоненты, и значение функции на нем окажется больше или равно, чем значение функции в других возможных для ветвления вершинах, то данный план является оптимальным планом исходной задачи целочисленного программирования и значение целевой функции на нем является максимальным.
Процесс нахождения решения задачи целочисленного программирования методом ветвей и границ включает следующие основные этапы:
1°. Находят решение задачи линейного программирования без учета целочисленности переменных.
2°. Составляют дополнительные ограничения для одной из переменных, значение которой в оптимальном плане задачи является дробным числом.
3°. Находят решение задач (I) и (II), которые получаются из первоначальной задачи в результате присоединения дополнительных ограничений.
4°. В случае необходимости составляют дополнительные ограничения для переменной, значение которой является дробным, формулируют задачи, аналогичные задачам (I) и (II), и находят их решение. Итерационный процесс продолжают до тех пор, пока не будет найдена вершина, соответствующая целочисленному плану задачи и такая, что значение функции в этой вершине больше или равно значению функции в других возможных для ветвления вершинах.
|
Пример 3.1. Методом ветвей и границ найти решение задачи, состоящей в определении максимального значения функции
f(x) = 2 х1 + х2,
6 х1 + 4 x2 + х3 = 24,
3 х1 – 3 x2 + х4 = 9,
– х1 + 3 x2 + х5 = 3,
хi ³ 0, i = 1,2,3,4,5, хi – целые.
Решение.
Находим решение задачи симплексным методом без учета условия целочисленности переменных. В результате устанавливаем, что такая задача имеет оптимальный план Х0 = (18/5, 3/5, 0, 0, 24/5). При этом плане f(Х0) = 39/5. Так как в плане Х0 значения трех переменных являются дробными числами, то Х0 не удовлетворяет условию целочисленности и, следовательно, не является оптимальным планом исходной задачи.
Возьмем какую-нибудь переменную, значение которой является дробным числом, например х1. Тогда эта переменная в оптимальном плане исходной задачи будет принимать значение, либо меньшее или равное трем: х1 £ 3, либо большее или равное четырем: х1 ³ 4.
Рассмотрим две задачи линейного программирования:
(I) f(x) = 2 х1 + х2 ® max (II) f(x) = 2 х1 + х2 ® max
6 х1 + 4 x2 + х3 = 24, 6 х1 + 4 x2 + х3 = 24,
3 х1 – 3 x2 + х4 = 9, 3 х1 – 3 x2 + х4 = 9,
– х1 + 3 x2 + х5 = 3, – х1 + 3 x2 + х5 = 3,
х1 £ 3, х1 ³ 4,
хi ³ 0, i = 1,…,5 хi ³ 0, i = 1,…,5
Задача (I) имеет оптимальный план = (3, 3/2, 0, 9/2, 3/2), на котором значение целевой функции f() = 15/2. Задача (II) неразрешима.
Исследуем задачу (I). Так как среди компонент оптимального плана этой задачи есть дробные числа, то для одной из переменных, например х2, вводим дополнительные ограничения: х2 £ 2, х2 ³ 1.
Рассмотрим теперь следующие две задачи:
(III) f(x) = 2 х1 + х2 ® max (IV) f(x) = 2 х1 + х2 ® max
6 х1 + 4 x2 + х3 = 24, 6 х1 + 4 x2 + х3 = 24,
3 х1 – 3 x2 + х4 = 9, 3 х1 – 3 x2 + х4 = 9,
– х1 + 3 x2 + х5 = 3, – х1 + 3 x2 + х5 = 3,
х1 £ 3, х1 £ 3,
х2 ³ 1, х2 £ 2,
хi ³ 0, i = 1,…,5 хi ³ 0, i = 1,…,5
Задача (IV) имеет оптимальный план
= (3, 3/2, 0, 9/2, 3/2), на котором значение целевой функции f() = 15/2.
Следовательно, задача (IV) не имеет целочисленного решения, а задача (III) имеет оптимальный план = (3, 1, 2, 3, 3), на котором значение целевой функции задачи f() = 7. Таким образом, исходная задача целочисленного программирования имеет оптимальный план Х*= = (3, 1, 2, 3, 3).
При этом плане целевая функция задачи принимает максимальное значение fmax = 7.
Схему реализованного выше вычислительного процесса можно представить в виде дерева, изображенного на рисунке 3.1.
Рис. 3.1. Решение примера 3.1 методом ветвей и границ