Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
20121209_Metod_AI.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
504.83 Кб
Скачать

2.8. Реализация рекурсивного поиска

Алгоритм минимакс. Рассмотрим реализацию алгоритма минимакс с помощью рекурсивной функции (Color − номер игрока):

SearchBestMove(Depth, Color)

1. Score := -100000, оценку близка к бесконечности.

2. Если Depth = 0, то в качестве результата вернуть оценку Evalate(Color) текущего состояния, перейти к пункту 10.

3. Сгенерировать все ходы из текущего состояния.

4. Сделать ход MakeMove(Move).

5. Rating := -SearchBestMove(Depth-1, not(Color)), вычислить оценку хода.

6. Сделать ход обратно UnMakeMove(Move).

7. Если Rating > Score, то Score := Rating.

8. Повторить пункты 4-8 для каждого возможного хода.

9. В качестве результата вернуть оценку Score.

10. Останов.

Алгоритм минимакс с альфа-бета-отсечением. Рассмотрим реализацию алгоритма с помощью рекурсивной функции:

SearchBestMoveAB(Depth, Color, MaxWhite, MaxBlack)

1. Score := -100000, оценку близка к бесконечности.

2. Если Depth = 0, то в качестве результата вернуть оценку Evalate(Color)текущего состояния, перейти к пункту 15.

3. Сгенерировать все ходы из текущего состояния.

4. Сделать ход MakeMove(Move).

5. Rating := -SearchBestMoveAB(Depth-1, not(Color), MaxWhite, MaxBlack), вычислить оценку хода.

6. Сделать ход обратно UnMakeMove(Move).

7. Если Rating <= Score, то переход к пункту 13.

8. Если Color = White, то переход к пункту 9, иначе переход к пункту 11.

9. Если Score > MaxWhite, то MaxWhite := Score.

10. Если −MaxWhite <= MaxBlack, то в качестве результата вернуть MaxWhite, перейти к пункту 15.

11. Если Score > MaxBlack, то MaxBlack := Score.

12. Если −MaxBlack <= MaxWhite, то в качестве результата вернуть MaxBlack, перейти к пункту 15.

13. Повторить пункты 4-12 для каждого возможного хода.

14. В качестве результата вернуть оценку Score.

15. Останов.

Первый вызов функции:

SearchBestMoveAB(4, White, -100000, -100000).

Рассмотрим более компактный вариант рекурсивной реализации алгоритма минимакс с альфа-бета-отсечением:

SearchBestMoveAB2(Depth, Color, Alpha, Beta)

1. Если Depth = 0, то в качестве результата вернуть оценку Evalate(Color) текущего состояния, перейти к пункту 9.

2. Сгенерировать все ходы из текущего состояния.

3. Сделать ход MakeMove(Move).

4. Rating := -SearchBestMoveAB2(Depth-1, not(Color), -Beta, -Alpha), вычислить оценку хода.

5. Сделать ход обратно UnMakeMove(Move).

6. Если Rating > Alpha, то Alpha := Rating.

7. Повторить пункты 3-6 для каждого возможного хода.

8. В качестве результата вернуть оценку Alpha.

9. Останов.

3. Курсовая работа

3.1. Цель работы

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

3.2. Задание на выполнение работы

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

При просмотре дерева состояний использовать один из методов:

− просмотр дерева состояний на полную глубину;

− просмотр дерева состояний на ограниченную глубину.

При просмотре дерева состояний использовать один из алгоритмов:

− «жадный» алгоритм;

− минимаксный алгоритм;

− минимаксный алгоритм с альфа-бета-отсечением.

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

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