- •Системы искуственного интеллекта.
- •Глава 8 Моделирование структуры мозга с помощью нейронных сетей………… 4
- •Глава 9 Моделирование деятельности человеческого коллектива
- •Глава 10 Поиск альтернативных решений…………………………………………………
- •Контрольные вопросы и задание……………………………………………………
- •Глава 11 Моделирование общения, восприятия и осуществления действий человеком.
- •11.15. Контрольные вопросы и задание
- •Глава 12 Настоящее и будущее искусственного интеллекта………………
- •Лекция 18 Глава 8 Моделирование структуры мозга с помощью нейронных сетей.
- •8.1. Биологический нейрон.
- •8.2. Модель искусственного нейрона.
- •8.3. Классификация нейронных сетей и их свойства.
- •Лекция 19
- •8.4. Теоретические основы построения и обучения нейронных сетей.
- •8.5. Алгоритм «обучение с учителем».
- •8.6. Алгоритм «обучение без учителем».
- •Лекция 20
- •8.7. Способы реализации нейронных сетей.
- •Практическое применение нейросетевых технологий.
- •Выводы по 8-ой главе.
- •Контрольные вопросы и задание.
- •Лекция 21
- •Глава 9 Моделирование деятельности человеческого коллектива
- •9.1. Основные понятия теории агентов.
- •Агент Датчики
- •Исполнительные механизмы
- •9.2. Поведение агентов.
- •Лекция 22
- •9.3. Определение характера среды.
- •Лекция 23
- •9.4. Структура агентов
- •Лекция 24
- •9.5. Мультиагентные системы.
- •9.6. Коллективное поведение агентов.
- •Лекция 25
- •9.7. Примеры мультиагентных систем
- •9.8. Технологии проектирования мультиагентных систем
- •9.9. Перспективы мультиагентных технологий.
- •9.10. Выводы по 9-ой главе.
- •9.11. Контрольные вопросы и задание.
- •Лекция 26
- •Глава 10 Поиск альтернативных решений.
- •Поиск в пространстве состояний.
- •Лекция 27
- •10.2. Алгоритмы поиска в пространстве состояний.
- •10.2.1. Алгоритм поиска с возвратом.
- •10.2.2. Алгоритм поиска в ширину.
- •Лекция 28.
- •10.2.3. Алгоритм поиска в глубину.
- •14 16 Цель
- •10.2.4. Поиск в глубину с итерационным заглублением.
- •10.3.1. "Жадный" алгоритм поиска
- •Лекция 29
- •10.4. Поиск на графах «и-или»
- •Лекция 30
- •10.5. Игровые модели и их классификация.
- •10.6. Игры с полной информацией и двумя участниками.
- •10.6.1. Оптимальные стратегии.
- •Лекция 31
- •10.6.2.Минимаксный алгоритм.
- •30Х30≈ 1000 позиций
- •10.6.3. Альфа-бета алгоритм.
- •10.6.4. Программы игры в шахматы.
- •10.6.5.Современные игровые программы.
- •Лекция 32
- •Локальный поиск.
- •10.7.1. Алгоритм поиска с восхождением к вершине
- •Лекция 33
- •10.7.2.Алгоритм отжига.
- •Лекция 34
- •10.7.3. Генетический алгоритм.
- •Анализ начальной популяции на первом шаге простого генетического алгоритма.
- •Контрольные вопросы и задание
- •Глава 11 Моделирование общения, восприятия и осуществления действий человеком.
- •12.15. Контрольные вопросы и задание.
- •Глава 13 Настоящее и будущее искусственного интеллекта.
10.3.1. "Жадный" алгоритм поиска
Наиболее простой путь эвристического поиска - это применение процедуры поиска экстремума (hill climbing). Стратегии, основанные на поиске экстремума, оценивают не только текущее состояние поиска, но и его потомков. Для дальнейшего поиска выбирается наилучший потомок; при этом о его братьях и родителях просто забывают. Поиск прекращается, когда достигается состояние, которое лучше чем любой из его наследников. Поиск экстремума - название стратегии, которая может быть использована энергичным, но слепым альпинистом, поднимающимся вдоль наиболее крутого склона до тех пор, пока он не сможет идти дальше. Так как в этой стратегии данные о предыдущих состояниях не сохраняются, то алгоритм не может быть восстановлен из точки, которая привела к "неудаче".
Основная проблема стратегий поиска экстремума - это их тенденция останавливаться в локальном максимуме. Другими словами, как только они достигают состояния, имеющего лучшую оценку, чем его потомки, алгоритм завершается. Если это состояние является не решением задачи, а только локальным максимумом, то такой алгоритм неприемлем для данной задачи. Это значит, что решение может быть оптимальным на ограниченном множестве, но из-за формы всего пространства, возможно, никогда не будет выбрано наилучшее решение. Пример такого локального экстремума появляется в игре в"пятнашки". Часто для того, чтобы передвинуть фишку в нужную позицию, необходимо
сдвинуть фишку, находящуюся в наилучшей позиции. Без этого невозможно решить головоломку, но в то же время на данном этапе это ухудшает состояние системы. Дело в том, что "лучший" не означает "идеальный". Методы поиска без механизмов возврата или других приемов восстановления не могут отличить локальный максимум от глобального. Существуют методы приближенного решения этой проблемы, например, случайное возмущение оценки. Однако гарантированно решать задачи с использованием техники поиска экстремума нельзя.
Несмотря на эти ограничения, алгоритм поиска экстремума может быть достаточно эффективным, если оценивающая функция позволяет избежать локального максимума и зацикливания алгоритма. В общем, однако, эвристический поиск требует более гибкого метода, предусмотренного в "жадном" алгоритме поиска, где при использовании приоритетной очереди возможно восстановление алгоритма из точки локального максимума.
Подобно алгоритмам поиска в глубину и алгоритмам поиска в ширину, описанными ранее, "жадный" алгоритм поиска использует списки сохраненных состояний: список open
отслеживает текущее состояние поиска, а в closed записываются уже проверенные
153
На каждой итерации функция best_first_search, реализующая «жадный» алгоритм удаляет первый элемент из списка open. Достигнув цели, алгоритм возвращает путь, который ведет к решению. Заметим, что каждое состояние сохраняет информацию о предшествующем состоянии, чтобы впоследствии восстановить его и позволить алгоритму найти кратчайший путь к решению.
Если первый элемент в списке open не является решением, то алгоритм использует процедуры, чтобы сгенерировать все возможные потомки данного элемента. Если потомок уже находится в списке open или closed, то алгоритм выбирает кратчайший из двух возможных путей достижения этого состояния. Затем функция best_first_search вычисляет эвристическую оценку состояний в списке open и сортирует список в соответствии с этими эвристическим значениям. При этом "лучшие" состояния ставятся в начало списка. Заметим, что из-за эвристической природы оценивания следующее состояние должно проверяться на любом уровне пространства состояний. Отсортированный список open часто называют прuорuтетной очередью (priority queue).
А-5
C-4
B-4
D-6
E-5
F-5
G-4
1
H-3
J
K
L
M
N
O-2
P-3
Q
R
T
S
Рис. 10.12. Эвристический поиск в гипотетическом пространстве состояний.
На рис. 10.12 показано гипотетическое пространство с эвристическими оценками некоторых из его состояний. Состояния, рядом с которыми стоит их эвристическая оценка, были сгенерированы функцией best_first_search. Состояния, по которым велся эвристический поиск, отмечены полужирном шрифтом; заметьте, что поиск не ведется по всему пространству. Другими словами, цель "жадного" алгоритма поиска состоит в том, чтобы прийти к целевому состоянию кратчайшим путем. Чем более обоснованной является эвристика, тем меньше состояний нужно проверить при поиске цели.
Путь, по которому функция best_first_search находит целевое состояние, показан на рисунке жирными стрелками. Предположим, что Р- целевос состояние (см. рис. 10.12). Поскольку Р - цель, состояния на пути к Р имеют низкие эвристические значения. Эвристика подвержена ошибкам: состояние О имеет более низкое эвристическое значение, чем целевое, и поэтому было исследовано раньше. В отличие от поиска экстремума, который не сохраняет приоритетную очередь для отбора "следующих" состояний, данный алгоритм восстанавливается после ошибки и находит целевое состояние.
Ниже показан процесс реализации алгоритма best_first_search для графа из рис. 10.12., при этом Р - это желаемое целевое состояние.
После итерации |
Список open |
Список closed |
0 |
[А-5] |
[ ] |
1 |
[ В-4, С-4, D-6 ] |
[А-5] |
2 |
[С-4, Е-5, F-5, D-6 ] |
[В-4, А-5] |
3 |
[Н-3, G-4, Е-5, F-5, D-6 ] |
[С-4, В-4, А-5] |
4 |
[ O-2, P-3, G-4, Е-5, F-5, D-6 ] |
[Н-3, С-4, В-4, А-5] |
5 |
[P-3, G-4, Е-5, F-5, D-6] |
[ O-2, Н-3, С-4, В-4, А-5 ] |
6 |
[G-4, Е-5, F-5, D-6] |
[ P-3, O-2, Н-3, С-4, В-4, А-5 ] |
Таблица 10.4. Состояние списков после каждой итерации «жадного» алгоритма поиска для графа на рис. 10.12.
0 итерация - Инициализируем списки. Список open =[A-5]; Список closed =[ ];
1 итерация – Выбираем первую вершину из списка open и определяем её как текущее состояние Х=А-5. Применяем процедуру определения потомков к Х=А-5, потомки есть, ими являются вершины В-4, С-4, D-6. Записываем слева направо эти вершины в список open в порядке возрастания эвристических оценок этих вершин, удаляя слева из этого списка вершину А-5 и записывая эту вершину в список closed слева направо. Далее алгоритм переходит к следующей итерации.
2 итерация – Выбираем первую вершину из списка open и определяем её как текущее состояние Х=В-4. Применяем процедуру определения потомков к Х= В-4, потомки есть, ими являются вершины Е-5, F-5. Записываем слева направо эти вершины в список open в порядке возрастания эвристических оценок этих вершин, удаляя слева из этого списка вершину В-4 и записывая эту вершину в список closed слева направо.
Далее алгоритм переходит к следующей итерации. Эти итерации продолжаются до тех пор пока текущее состояние Х не будет равно целевому состоянию P-3.
"Жадный" алгоритм поиска всегда выбирает наиболее перспективное и лучшее состояние в open для продолжения, кстати поэтому его назвали «жадным». Однако, поскольку при выборе состояния используется эвристика, которая может оказаться ошибочной, алгоритм не отказывается от остальных состояний, и сохраняет их в списке open. В данном случае эвристика обеспечивает поиск вниз; этот путь оказывается ошибочным, но алгоритм в итоге возвращается к некоторому ранее сгенерированному "лучшему" состоянию в open и затем продолжает поиск в другой части пространства. В примере на рис. 10.12 после нахождения потомков состояния В оказалось, что они имеют плохие эвристические оценки, и поэтому поиск сместился к состоянию С. При этом потомки состояния В были сохранены в open на случай, если алгоритму необходимо будет вернуться к ним позже. В функции best_first_search, как и в описаных ранее алгоритмах, список open позволяет возвращаться назад по ошибочному пути.
