Задание
В настоящее время теория искусственного интеллекта активно развивается. Одним из направлений является решение логических игр. Это позволяет разработчику формализовать поиск в пространстве состояний, что является ключевым методом искусственного интеллекта. Игровые задачи легко представимы в компьютерной программе, поэтому разработка не сильно затруднена.
Целью работы является получение практических навыков решения сложных задач на примере логических игр с помощью подходов СИИ и закрепление теоретических знаний методам поиска по дереву состояний.
Необходимо проанализировать пространство состояний и дерево решений игры Ним, разработать программу на языке высокого уровня, моделирующую данную игру.
Функционал программы
Программа состоит из таких функций как:
void GenerateGame() – функция создания условий для игры;
int nim_sum() – функция определения ним-суммы для текущего хода;
void choose_first_move() – функция выбора первого хода (игрок или искусственный интеллект);
void show_piles() – функция показывает камни в кучах и ним-сумму;
void ai_move() – функция хода искусственного интеллекта;
void player_move() – функция хода игрока;
void new_move() – функция нового хода;
bool game_ended() – функция проверки окончания игры;
void win() – функция проверки победы или проигрыша;
int main() – главная функция.
Содержание отчета к программе
1 Постановка задачи 3
2 Краткое описание 4
3 Формирование и разбор правила 5
4 Формализация дерева состояний 10
5 Описание предложенных эвристик 12
6 Алгоритмы 13
6.1 Краткое описание использованных алгоритмов 13
6.2 Адаптация алгоритмов 14
7 Структура программы 16
8 Контрольный пример 19
9 Программный код 21
Заключение 28
Список источников 29
Фрагмент программного кода
void choose_first_move() //выбор первого хода (игрок или ИИ) { system("cls"); cout << "Выбор первого хода: \n"; cout << "Нажмите 'y' для передачи первого хода Компьютеру, любая другая клавиша - первый ход за Игроком"; if (_getch() == 'y') { if (nim_sum() == 0) { cout << "\nВы уверены в своем выборе? нажмите 'y' еще раз для подтверждения. \n"; if (_getch() == 'y') { cout << "\nПервый ход за Компьютером \n"; curent_move = 0; } else { cout << "\nПервый ход за Игроком \n"; curent_move = 1; } } else { cout << "\nПервый ход за Компьютером \n"; curent_move = 0; } } else { cout << "\nПервый ход за Игроком \n"; curent_move = 1; } cout << "\nДля начала игры нажмите любую клавишу... \n"; _getch(); } void show_piles() //показывает камни в кучах и ним-сумму { system("cls"); cout << "Текущие условия: \n"; for (int i = 0; i < numbers_of_piles; i++) cout << "[" << piles[i] << "] камней в куче № " << i + 1 << "\n"; cout << "Текущая ним-сумма: " << nim_sum() << "\n"; }
Скриншот архива с проектом
Пояснения по запуску программы
Скопировать код из пояснительной записки в проект в Visual Studio и запустить.
Smitsonit