Согласно 2-му пункту нашего плана, составим 2 новых системы ограничений для (7):
(12) и (13).Выполним 3-й пункт алгоритма. Для начала, решим задачу (7), (12) с помощью табличного процессора MicrosoftExcel (см. Приложение 2) и получим X2 = (2; 1)[2], z2 = 10 (14). Так как z2 ≥ z0, «оптимальным» становится план Х0.
Решим задачу (7), (13). Из последнего уравнения очевидно, что x2 = 0. Отсюда следует, что x1 = 3 (максимально возможное). Тогда Х3 = (3; 0), z3 = 13 (15), а следовательно, данный план является оптимальным (теперь уже без кавычек).
Нам не пришлось выполнять 4-й пункт нашего алгоритма в связи с тем, что оптимальное решение найдено, переменные целочисленные. К тому же, все необходимые моменты решения уже были показаны в пунктах 1-3.
Пример, в котором всё складывается не так просто, приведен в Приложении 3.
календарное планирование программирование
III. Применение метода ветвей и границ для задач календарного планирования
Метод ветвей и границ является универсальным методом решения комбинаторных задач дискретного программирования. Сложность практического применения метода заключается в трудностях нахождения способа ветвления множества на подмножества и вычисления соответствующих оценок, которые зависят от специфики конкретной задачи.
Для того, чтобы выяснить области применения данного метода и ознакомиться с практической его формой, мы обратимся к задаче трех станков[3], как к классическому примеру.
§1. Алгоритм решения задачи трех станков методом ветвей и границ
Заданыnдеталей di (i= 1, 2, ..., n), последовательно обрабатываемых на трех станках R1, R2, R3, причем технологические маршруты всех деталей одинаковы. Обозначим ai ,bi ,ci — длительность обработки деталей diна первом, втором и третьем станках соответственно.
Определить такую очередность запуска деталей в обработку, при которой минимизируется суммарное время завершения всех работ Tц.
Можно показать, что в задаче трех станков очередность выполнения первых, вторых и третьих операций в оптимальном решении может быть одинаковой (для четырех станков это свойство уже не выполняется). Поэтому достаточно определить очередность запуска только на одном станке (например, третьем).
Обозначимsk = (i1, i2 , ..., ik) — некоторую последовательность очередности запуска длиной k(1 £k£n) и A(sk), В (sk), С (sk) — время окончания обработки последовательности деталей skна первом, втором и третьем станках соответственно.
Необходимо найти такую последовательность sопт, что
С(sопт) = min С (s). (16)
§1.1 Реккурентное вычисление A(sk), В(sk), C(sk) и условие доминирования
Покажем, как можно рекуррентно вычислять A(sk), В (sk), С (sk). Пусть sk+1 = (sk ,ik+i), т. е. последовательность деталей sk+1получена из деталей skс добавлением еще одной детали ik+1. Тогда:
A (sk+1) = A (sk)+
(17),В (sk+1) = max [A(sk+1); В (sk)] +
(18),С (sk+1) = max [В (sk+1); С (sk)] +
(19).Логика выражений (17) – (19) очевидна, особенно если рассмотреть задачу двух станков.
Для задачи трех станков можно использовать следующее правило доминирования:
Если s — некоторая начальная последовательность, а
— подпоследовательность, образованная из s перестановкой некоторых символов, то вариант s доминирует над , когда выполняются следующие неравенства:А (s) £ А (
), В (s) £ В ( ), С (s) £ С ( ) (20),причем хотя бы одно из них выполняется как строгое неравенство.
§1.2 Способ конструирования вариантов последовательностей s и вычисления оценок D(s) для каждого из них
Способ конструирования вариантов последовательностей s и вычисления оценок D(s) для каждого из них состоит в следующем:
Пусть имеется начальная подпоследовательность s. Тогда вычисляются величины:
dC(s) = С(s) +
, (21)dB(s) = В (s) +
+ , (22)dA(s) = A (s) +
+ (23),где J (s) — множество символов, образующих последовательность s.
За оценку критерия С(s) для варианта s можно принять величину
D(s) = max {dA(s), dB (s), dC (s)} (24).
Тогда ход решения задачи трех станков можно представить следующей формальной схемой:
1) Нулевойшаг.Задание множества G(0), образуется всеми возможными последовательностями (s = 0).
Вычисление оценки для множества G0:
D(0) = max {dA(0), dB (0), dC (0)} (25), где
2) Первыйшаг. ОбразованиемножествG1(1), G2(1) , …, Gn(1), подмножествоGkопределяется всеми последовательностями с началом ik(k, ...,n).
Вычисление оценок. Оценку для последовательности skопределяют из соотношения (24), т. е. D(sk) = max {dA(sk), dB (sk), dC (sk)}; k = 1,…,n. (27).
Выбор варианта для продолжения. Из всех подпоследовательностей, построенных на предыдущем шаге, выбирают наиболее перспективную последовательность sk с наименьшей оценкой, т. е. D(sk(1))=minD(sj(1)). (28)
Ветвление. Выбрав наиболее перспективный вариант последовательности sk(1), развивают его построением всех возможных подпоследовательностей длиной 2 с началом sk(1)вида sk+1(2)= (sk(1), j), где j не входит в sk.
Вычисление оценок производят в соответствии с соотношениями (21), (22), (23).
3) k-й шаг. Допустим, что уже проведено kшагов, в результате чего построены варианты s1(k),s2(k) ,…,sk(k), а именно подпоследовательности длиной k.
Выбираем самый перспективный вариант sS(k)такой, что
D(ss(k))=minD(sj(k)).
Множество Gs(k) разбиваем на (n — k) подмножеств, каждое из которых образуется добавлением к последовательности ss(k) некоторого элемента ik+1 такого, что ik+1
.Оценка
определяется в соответствии с соотношениями (21) — (24).В результате строим дерево вариантов следующего вида: вершина О отвечает s = 0, вершины первого уровня G1(1), G2(1)..., Gn(1) соответствуют последовательностям длиной 1, т. е. s1(1) = 1, s2(1) = 2,..., sn(1) = п и т. д. Каждая конечная вершина отвечает последовательности максимальной длины n.
Признак оптимальности.Если sv(n) отвечает конечной вершине дерева, причем оценка
наименьшая из оценок всех вершин, то sv(n) — искомый вариант.§2. Пример использования метода ветвей и границ в задаче трех станков
Для того, чтобы придать формальной схеме прикладное значение, рассмотрим конкретный пример задачи трех станков.
Решим задачу трех станков, условия которой приведены в табл. 1:
Таблица 1
Длительность операций | Деталь | ||||
1 | 2 | 3 | 4 | 5 | |
ai bi ci | 2 3 4 | 5 2 4 | 1 1 2 | 3 4 2 | 3 5 2 |
1) Нулевой шаг.s = 0.
dA(s = 0) = A(0) +
+ = 0 + 14 + 3 = 17;dB(s = 0) = В(0) +
+ = 0 + 15 + 2 = 17;dC(s = 0) = С(0) +
=14 .