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

1846

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

Шаг 2. Анализ путей, ведущих к конечному пункту и имеющих по одному промежуточному: 4-7-9, 5-7-9, 5-8-9, 6-8- 9.

Шаг З. Анализ путей с двумя промежуточными пункта-

ми: 2-4-7-9, 2-5-?-9, 3-5-?-9, 3-6-8-9.

Шаг 4. Анализ путей с тремя промежуточными пункта-

ми: 1-2-?-?-9, 1-3-?-?-9.

Длина путей вычисляется одновременно с определением маршрутов. Таким образом, путь 2-5-?-9, анализируемый на третьем шаге, не длиннее путей 2-5-7-9 и 2-5-8-9, поскольку при его определении используется кратчайший из путей 5-7-9 и 5-8-9, полученный на втором шаге. Перед выполнением шага 4 уже известны кратчайшие маршруты между 2 и 9, а также между 3 и 9, в результате чего может быть определен кратчайший путь между 1 и 9.

3.4.6. Метод поиска с возвратом

Для многих задач нет других способов решения, кроме метода проб и ошибок. Динамическое программирование представляет собой один из способов решения подобных задач. Дерево является наиболее наглядным способом изображения множества возможных решений, даже если метод выбора не имеет явно выраженной древовидной структуры [3]. При решении задачи о коммивояжере методом динамического программирования (граф этого решения показан на рис. 3.3) выбор нужного маршрута осуществлялся с использованием метода поиска в глубину по дереву возможных вариантов. Метод поиска в глубину состоит в том, что, когда, согласно дереву вариантов, получено решение, осуществляется возврат к той точке, где был выбран один из альтернативных вариантов. После этого генерируется другой путь и из полученных двух маршрутов выбирается кратчайший, а затем выполняется следующий возврат и т. д.

81

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

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

procedure искать_в_лабиринте (путь) repeat

следовать_путь

until тупик or развилка оr были_здесь_раньше or достигнута_цель;

if развилка

if правый_путь

искать_в_лабиринте (правый_путь); if не_достигнута_цель

if левый_путь

искать_в_лабиринте (левый_путь); if не_достигнута_цель

if прямой_путь

искать_в_лабиринте (прямой_путь) end.

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

82

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

Данный пример иллюстрирует метод поиска, с возвратом к точке альтернативного выбора, обеспечивающий проверку различных возможных вариантов решения. С помощью рекурсии в ЭВМ запоминаются предыдущие состояния, что затем обеспечивает возврат к ним. Если программист не использует рекурсивные обращения, он должен запоминать состояние в каждой точке альтернативного выбора в стеке, а затем для возврата к этой точке извлекать описание соответствующего состояния из этого стека.

Метод поиска с возвратом можно использовать для решения задачи о восьми ферзях, для построения кроссвордов из списка слов, для анализа шахматных ходов, для решения задачи о раскраске карты четырьмя цветами и т. д. Этот метод используется также для решения такой простой задачи, как вычисление арифметического выражения. Пусть задано следующее арифметическое выражение: 2+3*(4+5)-6 (см. рис. 3.4).

2 +

- 6

3 *

4 + 5

Рис. 3.4. Синтаксическое дерево

Если оно сканируется слева направо, после сложения 4 и 5 ЭВМ должна вернуться назад и выполнить умножение результата на 3, затем вернуться назад еще раз и произвести сложение с 2. Указанное выражение может быть представлено в

83

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

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

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

84

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

3.4.7. Метод выделения подцелей

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

Доказательство А следует из истинности В. Доказательство В следует из истинности С. Доказательство С следует из истинности D. Теорема D может быть доказана.

Реальное доказательство проводится от D к С, затем к В и затем к А.

Использование подхода «разделяй и властвуй» может служить примером применения метода выделения подцелей, если, например, процесс решения имеет следующий вид:

Подцели: разделить задачу на части; решить каждую

часть.

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

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

Подцели: найти приближенное решение; уточнить его. Вторая из этих подцелей повторяется до тех пор, пока не

будет получено достаточно точное приближение. В методе на85

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

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

а) кратчайший путь может быть найден, если известно, какие узлы расположены на нем и каким путем можно попасть к каждому из них;

б) вычеркиваются недостижимые со стороны входа уз-

лы;

в) направления, ведущие в тупики или к рассматриваемым в настоящий момент узлам, вычеркиваются;

г) тупики исключаются путем последовательного удаления позиций, имеющих только одну соседнюю;

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

Такой способ предварительного анализа лабиринта позволяет получить кратчайший путь следующим образом:

1.Вычеркнуть все позиции, имеющие только одну со-

седнюю.

2.Найти вход, выход и все узлы.

3.Определить и измерить прямые пути между соседними узлами.

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

5.Вычеркнуть узлы, из которых возможно движение только в двух направлениях.

86

6.Удалить прямые пути между каждыми двумя узлами, если между ними есть более короткие непрямые пути.

7.Выбрать кратчайший оставшийся путь.

Примером применения метода выделения подцелей служит хорошо известная универсальная программа решения задач GPS, созданная Ньюэллом, Шоу, Саймоном и Эрнстом. Для этой программы описание среды задается с помощью определения объектов и операции над ними. Задается также описание желаемой среды. Программа должна рассчитать, как выполнить необходимые преобразования. Например, может быть задано множество аксиом, а также правила, позволяющие производить преобразования этих аксиом, и при этом требуется доказать простые математические теоремы. Могут быть заданы какие-либо логические головоломки, например, задача о миссионерах и каннибалах. В этой задаче требуется определить, как переправить трех миссионеров и трех каннибалов, подошедших к реке, с одного берега на другой на лодке, способной поднять только двух человек. По условию задачи во время перевоза число каннибалов на каждом берегу не должно превышать числа миссионеров. Программа GPS решает эту задачу автоматически с помощью метода выделения подцелей, решая сначала соответствующие им задачи.

3.4.8. Метод моделирования

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

87

В том смысле, что ЭВМ все время делает то, что обычно выполняют люди, процесс счета представляет собой моделирование. Однако этот термин чаще употребляется в том случае, когда главным является сам процесс, а не его результат [2].

Моделирование дискретных событий и моделирование переходов состояний представляют собой близкие по типу задачи. В обоих случаях проблемная среда описывается как совокупность функциональных единиц и действий. Действия производятся не непрерывно, а лишь в дискретные моменты времени, приводя к изменениям в среде. В задаче типа моделирования переходов состояний определяются по крайней мере n состояний среды, где n сравнительно мало, и последовательность действий устанавливается в соответствии со средой. В задачах моделирования дискретных событий рассматривается большое число состояний или используется случайная величина.

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

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

88

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

Классическим примером моделирования дискретных событий является процесс обслуживания клиентов единственным мастером. Течение времени отмечается событиями двух видов: появлением клиента и окончанием обслуживания клиента мастером. Если клиент появляется в тот момент, когда мастер не занят, он обслуживается немедленно. В противном случае он встает в очередь на обслуживание. Когда мастер, закончил обслуживание клиента и обнаруживает, что его ждут другие клиенты, он обслуживает клиента, находящегося первым в очереди. Иначе он переходит в состояние ожидания клиентов. Этот вариант, соответствующим образом дополненный, может служить моделью процессов операционной системы или управления дорожным перекрестком. Состояния процессоров или очередей машин на перекрестке изменяются в дискретные моменты времени и остаются постоянными до следующего события.

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

89

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

Метод моделирования дискретных событий осуществляется в основном с помощью обмена значениями между различными переменными. Этот обмен можно выполнить с помощью временных переменных

temp:= х; х:=у;

у: = temp.

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

Классическим примером моделирования переходов состояний является машина Тьюринга, представляющая собой упрощенную модель ЭВМ. Машина Тьюринга в качестве входной и выходной информации имеет двоичные данные на ленте. Набор команд состоит из инструкций: читать, писать-0, пи- сать-1, сдвинуть вправо, сдвинуть влево и стоп. Кроме этого, машина Тьюринга имеет память, в которой может храниться только один символ из ограниченного алфавита. В языке программирования для этой машины содержатся обычные управляющие структуры. Данная модель представляет собой теоретическую абстракцию, используемую для изучения основных возможностей вычислительных машин. Несмотря на ее простоту, возможности машины Тьюринга такие же, как и у любой ЭВМ, и поэтому она может служить моделью работы любых ЭВМ. Поскольку в этом случае в памяти и на ленте могут на-

90

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