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

Дискретные задачи оптимизации в экономике, планировании и управлении. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
935 Кб
Скачать

Наконец, существует еще гарантированный резерв времени, вычисляемый по формуле

Dгарант ij = Tпj-Tпi-tij.

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

Вопросы и упражнения

1.Как изменится продолжительность проекта, если: 1) продолжительность всех работ увеличится на 10%; 2) производительность всех производственных ресурсов возрастет на 15%; 3) количество работников будет увеличено в 1,3 раза?

2.Могут ли быть работы, увеличение объема которых в полтора раза не скажется на выполнении проекта при сохранении всех остальных параметров сетевого графика? Если да, то в каком случае?

3.Рассчитайте продолжительность рассмотренного проекта, если продолжительности работ 1, 4 и 5 увеличатся на 25%.

41

5.ЗАДАЧА О КРАТЧАЙШЕМ ПУТИ НА ГРАФЕ

ИЕЕ АНАЛОГИ. ВАРИАНТЫ МЕТОДА ДИНАМИЧЕСКОГО ПРОГРАММИРОВАНИЯ

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

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

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

42

этого между любой парой вершин оставляется лишь наиболее эффективное из соединяющих их (однонаправленных) ребер.

Итак, рассматриваемая задача о кратчайшем пути формулируется для произвольного ориентированного связного графа, весá (длины) всех ребер которого положительны. Искомый путь между двумя заданными вершинами (с номерами k и l) имеет минимальную длину – сумму весов своих ребер.

Положительность весов ребер гарантирует наличие оптимального решения, тогда как в графе, имеющем хотя бы один контур с отрицательной суммой весов, его повторение уменьшает «длину», поэтому оптимального пути не существует.

Рассматриваемая задача о кратчайшем пути формулируется для произвольного ориентированного связного графа, весá (длины) всех ребер которого положительны. Задача о кратчайшем пути на неориентированном графе является ее частным случаем: каждому неориентированному ребру ставится в соответствие два встречно направленных ориентированных ребра. Искомый путь между двумя заданными вершинами (с номерами k и l) должен иметь минимальную длину – сумму весóв своих ребер.

Положительность весов ребер гарантирует наличие оптимального решения, тогда как в графе, имеющем хотя бы один контур с отрицательной суммой весов, его повторение уменьшает «длину», поэтому оптимального пути не существует.

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

ее естественных интерпретациях) эти черты не столь негативны и компенсируются простотой и регулярностью вычислительных схем.

5.1. Алгоритм Дейкстры

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

43

Здесь мы будем называть вес ребра (дуги) «длиной»; цель – определение кратчайшего маршрута (если считать весом дуги время ее прохождения, это будет задача о быстрейшем маршруте). Обозначим длину кратчайшего маршрута от i-й до j-й вершины графа Dij, dij – длину ребра, соединяющего вершины i и j, J1j и J2j – множества вершин, смежных с j-й вершиной, служащих соответственно началами ребер, входящих в j-ю вершину, и концами ребер, исходящих из j-й вершины.

Мы будем определять оптимальный маршрут от заданной B-й до J-й вершины и для лаконизма вместо DBj будем писать Dj. Для искомой величины справедливо очевидное соотношение

Dj = min{Di + dij | i J1j}.

(5.3)

На словах оно означает следующее. Оптимальный маршрут в вершину j является оптимальным маршрутом в одну из смежных вершин (заранее неизвестно какую) плюс дуга из этой вершины в j-ю. Если это вершина i, его длина равна Di + dij. Длина оптимального маршрута в вершину j вычисляется как минимальная из всевозможных значений Di + dij .

Имеется следующий ориентир для последовательности расчета Dj: если для некоторого набора вершин K уже известны значения Dj, то среди набора смежных с вершиной j вершин из K, если оно не пусто (формально, если K∩J1j ≠ ), можно оценить Dj как

DjK = min{Di + dij | i K∩J1j}.

(5.2)

Эта оценка сверху, так как мы сузили множество смежных вершин до K∩J1j, т.е. сократили набор значений, из которых мы находим минимальное, отчего минимум может либо остаться прежним, либо возрасти.

А теперь предположим, что, во-первых, множество K представляет собой начала списка вершин, начиная с B-й, в порядке возрастания значений Di, (начиная с DB = 0) и, во-вторых, содержит все вершины, значения Di для которых меньше, чем Dj. В этом случае для всех

i J1j, не входящих в K, Di + dij≤Dj + dij<Dj. На таких вершинах минимум в (5.1), равный Dj, заведомо не может достигаться. Значит, в этом случае DjK = Dj. Эту идею – постепенное расширение множества вершин, для которых найдены Di, в порядке возрастания Di и реализует алгоритм Дейкстры, состоящий в следующем:

1. Положить D1K = 0, K = , K= {1}.

44

2. Определить i K, на которой достигается минимум DjK для

j K. Перевести i из Kв K и положить Di = DiK. Если i = J, остановиться.

3. Добавить в Kмножество вершин J2i\(K K) и определить для них

DjK = Di + dij.

(5.3)

Для прочих вершин из K∩ J2i положить

 

DjK = min{DjK, Di + dij}.

(5.4)

4. Перейти к п. 2.

Нетрудно убедиться, что алгоритм обеспечивает ввод в K вершин в порядке следования Di. Первая – это вершина B с минимальным возможным значением Di = 0. Вторая – ближайшая к B смежная с ней вершина. Все прочие пути к ней, проходящие через более длинные ребра, заведомо длиннее. Следовательно, для первых двух вершин утверждение верно. Пусть оно верно для N вершин в порядке их ввода в K. Далее, для (N + 1)-й по порядку ввода в K вершины l известен кратчайший маршрут, проходящий через первые N вершин K. Известны такие маршруты и для других вершин, включенных на этот момент в K. Их длины не меньше Dl. Далее, в правых частях формул (5.3), (5.4) (начиная с момента ввода l в K) DjK, Di и тем более Di + dij не меньше Dl, так как любое применение этих формул если и уменьшает значение DjK, то не более чем до минимального из DjK в K, отчего последнее не может убывать. Поэтому Dl заведомо не больше Di для всех последующих вводимых в K вершин. С другой стороны, поэтапное определение DlK по формулам (5.3), (5.4) эквивалентно применению формулы (5.2), которое, как было обосновано выше, при доказанных предпосылках дает оптимальное значение Di. Следовательно, оптимальность очередного Dl имеет место. Повторяя рассуждения для всех последующих вершин, убеждаемся, что алгоритм Дейкстры действительно позволяет вычислить оптимальные пути до вершин в порядке их ввода в K, вплоть до выделенной вершины J.

Из сказанного вытекает важный вывод: вершины, длина кратчайшего маршрута до которых менее DBJ, остаются затронутыми вычислениями. Напротив, вершины, для которых DBj > DBJ, могут быть введены в K, но не в K; длины оптимальных маршрутов до них не определяются. Поиск, таким образом, является ограниченным, но не направленным; грубо говоря, вместо узкой полосы, ориентированной от вершины B к вершине J, мы обсчитываем вершины в условном круге с диаметром DBJ, а также некоторые смежные с ними. Этот недостаток преодолевается, как увидим ниже, с помощью специального

45

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

Проиллюстрируем применение алгоритма Дейкстры на примере дорожной сети, показанной на рис. 5.1.

 

 

 

 

 

2

3

 

4

 

320

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

280

 

 

 

 

 

 

 

 

 

 

260

 

 

5

 

6

7

 

8

 

9

240

 

 

 

 

 

 

 

 

 

 

 

 

 

220

 

 

 

 

 

 

 

 

 

 

200

 

 

10

 

 

11

12

 

13

 

180

 

 

 

 

 

 

160

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

140

 

 

 

 

 

 

 

 

 

 

120

 

 

 

 

16

 

 

 

 

 

100

 

 

 

 

17

 

 

 

 

 

 

 

 

15

 

 

18

 

 

80

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

60

 

14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

40

 

19

20

 

21

 

 

 

22

 

20

40

160

 

360

400

480

 

80

120

200 240,00 280,00 320,00

440

 

 

 

 

 

Рис. 5.1. Дорожная сеть

 

 

 

 

 

Длины ребер равны длинам отрезков, соединяющих вершины, которые имеют координатную привязку. Исходные данные по вершинам и ребрам приведены в табл. 5.1 и 5.2.

 

 

 

 

 

 

 

 

Таблица 5.1

 

 

Координаты вершин узлов сети

 

 

 

 

 

 

 

 

 

 

 

Узел

X

 

Y

 

Узел

 

X

Y

1

40

 

300

 

12

 

360

180

2

280

 

320

 

13

 

440

180

3

360

 

320

 

14

 

80

60

4

440

 

320

 

15

 

160

80

5

120

 

240

 

16

 

240

100

6

240

 

240

 

17

 

320

90

7

320

 

240

 

18

 

400

80

8

400

 

240

 

19

 

80

20

9

480

 

240

 

20

 

120

20

10

120

 

180

 

21

 

240

20

11

280

 

180

 

22

 

440

20

46

 

 

 

 

 

 

Таблица 5.2

 

 

Длины дуг сети

 

 

 

 

 

 

 

 

 

Начальный

Конечный

Длина

 

Начальный

Конечный

Длина

узел

узел

 

узел

узел

 

 

 

1

2

240,83

 

10

14

126,49

 

 

 

 

 

 

 

1

5

100,00

 

11

12

80,00

 

 

 

 

 

 

 

2

3

80,00

 

11

16

89,44

 

 

 

 

 

 

 

2

6

89,44

 

12

13

80,00

3

4

80,00

 

12

17

98,49

3

7

89,44

 

14

15

82,46

3

8

89,44

 

14

19

40,00

4

9

89,44

 

15

16

82,46

 

 

 

 

 

 

 

5

6

120,00

 

15

20

72,11

 

 

 

 

 

 

 

5

10

60,00

 

16

17

80,62

6

7

80,00

 

16

21

80,00

6

11

72,11

 

17

18

80,62

7

8

80,00

 

18

22

72,11

8

9

80,00

 

19

20

40,00

 

 

 

 

 

 

 

8

12

72,11

 

20

21

120,00

 

 

 

 

 

 

 

9

13

72,11

 

21

22

200,00

 

 

 

 

 

 

 

10

11

160,00

 

 

 

 

Определяется кратчайший путь между 3-й и 19-й вершинами. Процесс представляется в виде табл. 5.3 следующим образом. Порядок строк соответствует порядку ввода вершин (узлов сети) в K, а «Очередь» – в K. В качестве D3j указаны искомые значения длины оптимальных маршрутов, а в следующей строке – другие испытанные значения той же величины в процессе расчета (или те же, но для другого предшествующего узла). Общее их количество указывает на количество применений формул (5.3) и (5.4). В данном случае их было 29 при общем количестве рассчитанных узлов 21. То есть при расчете не были использованы данные по 4 дугам. Закономерно, что последним узлом в расчете был 19-й, поскольку длина маршрута от 3- го до 19-го оказалась самой большой.

А вот для пути из 15-й в 22-ю вершину процесс расчета оказался короче (табл. 5.4). Во множество K 22-я вершина была введена 14-й по очереди, из оставшихся в Kбыло введено еще 4 вершины, еще 4 вообще не были затронуты расчетом.

47

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 5.3

Порядок расчета оптимального маршрута между вершинами 3 и 19

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Узел j

D3j

 

Предшест. j

Очередь

Узел j

D3j

 

Предшест. j

Очередь

3

0,00

 

 

 

1

 

10

 

349,44

 

5

 

 

16

2

80,00

 

 

3

2

 

 

 

401,55

 

11

 

 

 

4

80,00

 

 

3

3

 

16

 

331,00

 

11

 

 

14

7

89,44

 

 

3

4

 

 

 

348,55

 

17

 

 

 

8

89,44

 

 

3

5

 

18

 

340,04

 

13

 

 

15

1

320,83

 

2

13

 

 

 

340,66

 

17

 

 

 

6

169,44

 

2

7

 

14

 

475,93

 

10

 

 

20

9

169,44

 

8

8

 

 

 

535,93

 

10

 

 

 

12

161,55

 

8

6

 

15

 

413,46

 

16

 

 

19

5

289,44

 

6

12

 

21

 

411,00

 

16

 

 

18

11

241,55

 

12

9

 

 

 

593,66

 

22

 

 

 

 

241,55

 

6

 

 

22

 

412,15

 

18

 

 

17

13

241,55

 

12

10

 

20

 

485,57

 

15

 

 

21

 

241,55

 

9

 

 

 

 

521,55

 

21

 

 

 

17

260,04

 

12

11

 

19

 

525,57

 

20

 

 

22

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 5.4

Порядок расчета оптимального маршрута между вершинами 15 и 22

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Узел j

D3j

 

Предшест. j

Очередь

 

Узел j

 

D3j

 

Предшест. j

 

 

Очередь

15

0,00

 

 

 

1

 

12

 

251,90

 

11

 

12

20

72,11

 

15

2

 

5

 

268,95

 

10

 

13

14

82,46

 

15

3

 

22

 

315,82

 

18

 

 

 

16

82,46

 

15

4

 

7

 

324,02

 

6

 

 

 

19

112,11

 

20

5

 

2

 

333,46

 

6

 

 

 

21

162,46

 

16

6

 

13

 

342,20

 

18

 

 

 

17

163,08

 

16

7

 

1

 

368,95

 

5

 

 

 

11

171,90

 

16

8

 

3

 

 

 

 

 

 

 

 

10

208,95

 

14

9

 

4

 

 

 

 

 

 

 

 

18

243,71

 

17

10

 

8

 

 

 

 

 

 

 

 

6

244,02

 

11

11

 

9

 

 

 

 

 

 

 

 

5.2. Оценка трудоемкости решений. Модификация Грибова

Вычисления величин в формулах (5.3), (5.4) настолько просты, что при рассмотренных и даже значительно больших размерностях вполне выполнимы на бумаге, даже без калькулятора. Наибольшее затруднение может вызвать выполнение следующей операции: «определить i K, на которой достигается минимум DjK для j K». Для этого нужно сравнить ряд чисел, количество которых имеет тенден-

48

цию к возрастанию до величины порядка m , где m —количество узлов (для типичной сети на местности, примерно одинаково простирающейся в разных направлениях).

Оценим трудоемкость алгоритма Дейкстры при компьютерных вычислениях. Предположим, что множества K и Kкодируются простейшим образом: для каждой вершины определяется признак ci принадлежности к K и K: ci = 2, если i K; ci = 1, если i K, иначе ci = 0. С учетом такого обозначения изменение принадлежности элемента к множествам требует всего лишь одной операции присваивания, а для всего алгоритма – 2m операций. Вычислений по формулам (5.3), (5.4) в совокупности не больше, чем количество ребер – n, так как каждое ребро участвует лишь в одной формуле. Поэтому самой трудоемкой операцией оказывается вычисление на каждой итерации минимума DjK, j K, поскольку для этого необходимо выполнить количество сравнений лишь на единицу меньшее количества элементов K, которое в ходе выполнения алгоритма может оказываться порядка m .

Именно в силу этого обстоятельства трудоемкость алгоритма имеет порядок m3/2 + n.

Впрочем, в связи со сравнительно высокой трудоемкостью операции нахождения минимума DjK обычным способом предложены более рациональные способы ее выполнения. Один из первых способ «раскладывания по ведрам» был предложен А.Б. Грибовым. Согласно ему, ряд значений DjK, j Kразбивается на несколько диапазонов. При этом нужно выбирать значение только из первого содержащего значения диапазона. Довольно логично будет установить количество таких диапазонов порядка m1/4, тогда можно рассчитывать, что в диапазон в среднем попадет вершин порядка m1/4 и трудоемкость алгоритма составит порядка m5/4 + n, а не m3/2 + n. Правда, коэффициент при m5/4 может быть существенно большем, чем единица, но и в этом случае для больших разреженных сетей эта разница может иметь существенное значение.

Еще более надежный способ уменьшить объем вычислений состоит в хранении списка вершин из Kв виде АВЛ-дерева, упорядоченного по значению DjK. Высота такого дерева составит O(log2n), а общее количество перестроек не превысит n, так что трудоемкость расчета составит O(nlog2n). Для графов высокой размерности с ограниченной степенью вершин, что характерно для дорожных сетей, такая реализация алгоритма Дейкстры наиболее эффективна.

49

5.3. Алгоритм Левита

Алгоритм Левита имеет видимое преимущество перед алгоритмом Дейкстры в любой реализации последнего в том отношении, что никакой операции минимизации он не требует, нужно лишь перебрасывать вершины из одной очереди в другую – преимущественно из начала одной очереди в конец другой. Убедительные теоретические доказательства его эффективности отсутствуют, но результаты тестов неоднократно доказывали ее для типичных случаев «географических» сетей, в которых вершины имеют координатную привязку и длины соединяющих их дуг приблизительно соответствуют расстояниям между вершинами.

В алгоритме Левита множество Kпредставлено двумя очередями K1(обычной) и K0(приоритетной). Начальная вершина помещается в K1. На очередной итерации в K переводится i-я вершина – первый элемент K0, если она не пуста, иначе – первый элемент K1. При этом пересчитываются значения DjK для всех вершин, смежных с i-й. Ранее не рассчитанные вершины при этом переводятся в K1, вершины из K0и K1остаются на своих местах, а вершины из K, если значение DjK для них уменьшилось, переводятся в конец K0. При заданной конечной вершине критерий останова здесь менее очевиден, поскольку значения Dj для вершин из K могут быть неокончательными. С уверенностью можно сказать только то, что те значения, которые меньше минимального значения DjK в K0K1, обновляться уже не будут, однако расчет этого минимального значения алгоритмом не предусматривается.

Что касается вычислительной трудоемкости, то существенной операцией оказывается отыскание в K, K0или K1вершины по ее номеру. Для ее эффективного осуществления целесообразно список всех вершин хранить с дополнительными атрибутами каждой – текущим значением Dj и ее порядковым местом в очереди.

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

Вторая таблица показывает, что уменьшение расстояния между вершинами мало сказывается на уменьшении объема вычислений.

50

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]