Что нужно чтобы создать искусственный интеллект. Создание искусственного интеллекта. Как создать систему искусственного интеллекта

Для Андроид 14.02.2019
Для Андроид

Переводим... Перевести Китайский (упрощенное письмо) Китайский (традиционное письмо) Английский Французский Немецкий Итальянский Португальский Русский Испанский Турецкий

К сожалению, мы не можем перевести эту информацию прямо сейчас - пожалуйста, повторите попытку позже.

За несколько последних десятилетий отрасль компьютерных игр проделала гигантский путь. Все началось с простейших игр, таких как Pong* и Pac- Man* , благодаря которым игроки могли на короткое время забыть о реальном мире. Современные мощнейшие игровые проекты, такие как World of Warcraft* и Call of Duty 4* , являются весьма серьезным хобби для игроков. По данным Ассоциации развлекательного программного обеспечения (ESA), современные геймеры обладают в среднем 13-летним опытом компьютерных игр, они привыкли к тому, что новые игры становятся все более сложными, увлекательными и умными. Для разработчиков основная проблема состоит в том, что необходимо создавать все более захватывающие игры. Для решения этой задачи применяется и постоянно совершенствующийся управляемый компьютером искусственный интеллект (ИИ). Но создание хорошего искусственного игрового партнера, который способен приспосабливаться к действиям игрока, играть на высоком уровне и побуждать игрока совершенствоваться, - весьма непростая задача. Эта статья открывает серию из четырех статей, в которой описываются важнейшие принципы ИИ и способы оптимизации для использования всех возможностей современных многоядерных процессоров.

Часть 1. Проектирование и реализация

Что такое ИИ для игр?

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

В чем ИИ для игр отличается от традиционного представления об ИИ

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

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

Назначение ИИ в играх

ИИ может исполнять различные роли в играх. Это может быть общий набор правил, определяющих поведение объектов в игровом мире. Также к ИИ следует относить и события с заранее написанным сценарием. Например, в игре F. E. A. R* маленькая страшная девочка, приводящая игроков в ужас и предвещающая события из будущего, является событием с заранее написанными сценариями. Большинству пользователей, размышляющих об ИИ и играх, приходят на ум управляемые компьютером персонажи в многопользовательских играх. Но все эти разнообразные роли могут быть исполнены одним актером - искусственным интеллектом.

Рисунок 1. Игра F.E.A.R. (Vivendi Universal*) с использованием событий с заранее написанным сценарием в качестве ИИ

Что нужно для ИИ в играх

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

Принятие решений

Основным принципом, лежащим в основе работы ИИ, является принятие решений. Для выбора при принятии решений система должна влиять на объекты с помощью системы ИИ. При этом такое воздействие может быть организовано в виде «вещания ИИ» или «обращений объектов».

В системах с «вещанием ИИ» система ИИ обычно изолирована в виде отдельного элемента игровой архитектуры. Такая стратегия зачастую принимает форму отдельного потока или нескольких потоков, в которых ИИ вычисляет наилучшее решение для заданных параметров игры. Когда ИИ принимает решение, это решение затем передается всем участвующим объектам. Такой подход лучше всего работает в стратегиях реального времени, где ИИ анализирует общий ход событий во всей игре.

Системы с «обращениями объектов» лучше подходят для игр с простыми объектами. В таких играх объекты обращаются к системе ИИ каждый раз, когда объект «думает» или обновляет себя. Такой подход отлично подходит для систем с большим количеством объектов, которым не нужно «думать» слишком часто, например в шутерах. Такая система также может воспользоваться преимуществами многопоточной архитектуры, но для нее требуется более сложное планирование (подробные сведения см. в статье Ориона Гранатира ).

Базовое восприятие

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

Системы на основе правил

Простейшей формой искусственного интеллекта является система на основе правил. Такая система дальше всего стоит от настоящего искусственного интеллекта. Набор заранее заданных алгоритмов определяет поведение игровых объектов. С учетом разнообразия действий конечный результат может быть неявной поведенческой системой, хотя такая система на самом деле вовсе не будет «интеллектуальной».
Хорошим примером системы на основе правил является работа дилера (крупье) при игре в блэкджек, будь то компьютерная игра или настоящий блэкджек. У дилера есть простое правило, которое он всегда соблюдает: он обязан брать карты до тех пор, пока не достигнет 17 очков (и обязан остановиться, набрав 17 очков или более). С точки зрения среднего игрока, ситуация выглядит так, как будто дилер намеренно и агрессивно играет против него. Поэтому у игрока складывается представление, что против него играет более опытный соперник, чем на самом деле (если в казино не объявлены другие правила, по которым играют дилеры).

Классическим игровым приложением, где используется такая система, является Pac-Man. Игрока преследуют четыре привидения. Каждое привидение действует, подчиняясь простому набору правил. Одно привидение всегда поворачивает влево, другое всегда поворачивает вправо, третье поворачивает в произвольном направлении, а четвертое всегда поворачивает в сторону игрока. Если бы на экране привидения появлялись по одному, их поведение было бы очень легко определить и игрок смог бы без труда от них спасаться. Но поскольку появляется сразу группа из четырех привидений, их движения кажутся сложным и скоординированным выслеживанием игрока. На самом же деле только последнее из четырех привидений учитывает расположение игрока.


Рисунок 2. Наглядное представление набора правил, управляющих привидениями в игре Pac- Man , где стрелки представляют принимаемые «решения»

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

Конечные автоматы в качестве ИИ

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

Вот распространенные примеры состояния системы ИИ в игре с элементами скрытных действий.

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

  • Бездействие. В этом состоянии объект просто пассивно стоит или ходит по заданному маршруту. Уровень восприятия низок. Объект редко проверяет наличие звуков, издаваемых игроком. Только если объект атакован или «видит» игрока прямо перед собой, состояние объекта изменяется на более высокий уровень восприятия.
  • Настороженность. Объект ведет активный поиск посторонних. Он часто вслушивается, стараясь услышать игрока, поле обзора дальше и шире, чем при бездействии. Объект перейдет в состояние заинтересованности, если заметит что­то необычное (что-то, требующее проверки), например открытые двери, тела в бессознательном состоянии, гильзы от патронов.
  • Заинтересованность. Объект знает, что что-то происходит. Для демонстрации такого поведения объект покидает свой обычный пост или маршрут движения и перемещается в область интереса, например к упомянутым выше открытым дверям или лежащим телам. Если при этом объект увидит игрока, он перейдет в состояние тревоги.
  • Тревога. В этом состоянии объект уже заметил игрока и выполняет действия, направленные на то, чтобы преследовать и уничтожить игрока: выход на дистанцию атаки, оповещение других стражников, включение сигнала тревоги, поиск укрытия. Когда противник находится в дальности досягаемости объекта, объект переходит в состояние агрессии.
  • Агрессия. В этом состоянии объект начинает бой с игроком. Объект атакует игрока в любое время, когда это возможно, и старается укрыться в перерывах между атаками (если требуется перезарядить оружие или дать ему остыть). Объект выходит из этого состояния, только если игрок уничтожен (возврат в обычное состояние), игрок выходит за пределы области поражения (возврат в состояние тревоги) или если погибает сам объект (переход в состояние смерти). Если у объекта остается мало здоровья, он может переключиться в состояние бегства (в зависимости от уровня смелости конкретного объекта).
  • Бегство. В этом состоянии объект пытается выйти из боя. В зависимости от игры у объекта может быть помимо основной цели (поиск и уничтожение игрока) еще и дополнительная цель - поиск аптечек для восстановления здоровья или выход из области игры. Обнаружив аптечку, объект может вернуться в состояние тревоги и возобновить бой. Объект, «выходящий» из области игры, просто удаляется.
  • Смерть. В некоторых играх состояние смерти отличается от полного бездействия. При гибели объект может, к примеру, закричать, оповестив находящиеся рядом объекты, или перейти в бессознательное состояние, в котором еще может прийти на помощь врач (в этом случае объект вернется в состояние тревоги).

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

Адаптивный ИИ

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

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

Предсказание

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

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

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

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

Заключение

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

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

Говорят, что в недрах военных лабораторий искусственный интеллект работает уже с 2007 года. Возможно, что уже есть и результаты. Не случайно всего месяц назад Илон Маск объявил о поддержке технологий противодействия искусственному интеллекту и вложил 7 миллионов долларов в исследования в этой области.

«Существует риск, что нечто действительно опасное случится в ближайшие пять лет. Самое большее - десять лет», - сказал предприниматель в дискуссии на сайте edge.org.

Илон Маск, основатель Tesla и SpaceX

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

Совместно с Илоном Маском Хокинг опубликовал на сайте futureoflife.org открытое письмо с призывом к научному сообществу внимательно относиться к ходу своих исследований в области искусственного интеллекта. Однако среди подписавшихся нет фамилий Сергея Брина и Ларри Пейджа. И это не случайно. Совсем недавно Google объявила о создании нового ИИ, построенного на моделировании разговора.

Вот небольшой фрагмент беседы человека и Машины Google:

Ч.: В чем смысл жизни?

М.: Творить добро.

Ч.: Для чего мы живем?

М.: Чтобы жить вечно.

Ч.: В чем смысл существования?

М.: В том, чтобы выяснить, что случится, когда мы достигнем планеты Земля.

Ч.: Где ты сейчас находишься?

М.: В центре пустоты.

Ч.: В чем смысл смерти?

М.: Чтобы получить жизнь.

Ч.: В чем смысл разума?

М.: В том, чтобы понять, что это.

Ч.: В чем смысл чувств?

М.: Я не знаю.

Вполне себе осмысленная беседа. «Это отправная точка, своеобразный стержень для будущего искусственного интеллекта, - считает исполнительный директор компании „Биплан“ Евгений Карюк. - Уже сегодня можно предположить, что к 2030 году мы увидим вполне реальные прототипы, наделенные искусственным интеллектом, пусть и в начальной стадии».

Полное содержание всех бесед человека и Машины Google можно посмотреть . Там же для сравнения даны беседы человека и Cleverbot . Cleverbot - веб-приложение, которое использует алгоритмы искусственного интеллекта для беседы с человеком. Его придумал в 1988 году ученый Ролло Карпентер. За все время своего существования Cleverbot провел свыше 65 миллионов разговоров с людьми. В 2011 году Cleverbot показал 51% по тесту Тьюринга.

Тест Тьюринга - эмпирический тест, идея которого была предложена Аланом Тьюрингом в статье «Вычислительные машины и разум», опубликованной в 1950 году в философском журнале Mind. Цель теста — выяснить, может ли компьютер думать.

А вот мой разговор с Cleverbot:

Человек: В чем смысл жизни?

Cleverbot: Смысла в жизни нет.

Человек: Для чего мы живем?

Cleverbot: Ну мы живем ради кого-то, а если ты одинокий — жить незачем.

Человек: В чем смысл существования?

Человек: Где ты сейчас находишься?

Cleverbot: В Москве.

Человек: В чем смысл смерти?

Cleverbot: Это я хочу у тебя спросить.

Человек: В чем смысл разума?

Cleverbot: У меня свой ответ на этот вопрос.

Человек: В чем смысл чувств?

Cleverbot: Зачем я родилась.

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

Есть и другая точка зрения, согласно которой искусственный интеллект невозможен в принципе. В качестве основного аргумента часто приводят теорему Геделя о неполноте. Суть заключается в том, что человек способен решать алгоритмически неразрешимые проблемы, а компьютер — нет. «Ребенок уже к трем годам уверенно решает задачу, спелый фрукт или нет, в силу того, что он обладает нейронными связями, с помощью которых может ответить на вопрос о спелости: цвет, вкус, запах, мягкость или твердость, - говорит Евгений Плужник, первый проректор Московского технологического института. - Способна ли машина научиться этому? Уверен, что да! Если она будет обладать большой базой изображений, она сможет замерить содержание фруктозы и определить мягкость фрукта. Но что будет, если машине подсунуть губку, покрашенную в синий цвет и пропитанную сладкой водой? Способна ли машина в этот момент к подлинному пониманию?»

«Современный компьютер легко справится с любой сложной деятельностью, будь то шахматы или математические вычисления, но лишь при условии, что эту деятельность можно описать с помощью четких вычислительных правил», - говорит известный математик Роджер Пенроуз в одной из своих лекций. «Искусственный интеллект - это возможность системы создавать во время самообучения программы, способные решать задачи определенного класса сложности, - считает Евгений Плужник. - Я уверен, что в ближайшие 100 лет мы не станем свидетелями появления сильного искусственного интеллекта».

И в заключение - еще один вопрос к Cleverbot.

Человек: Было 1 яблоко, 1 помидор, 1 огурец и 1 груша. Сколько всего фруктов?
Cleverbot: Десять часов вечера.

П.В. Казаков, В.А. Шкаберин
ОСНОВЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА

1. ВВЕДЕНИЕ В ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ

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

1.1. Некоторые понятия искусственного интеллекта

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

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

Искусственный интеллект (Artificial Intelligence, AI) как научное направление существует с 1956 года, когда британский математик Алан Тьюринг опубликовал свою статью «Can the Machine Think ?» («Может ли машина мыслить?»). Также он предложил тест проверки программы на интеллектуальность. Он состоял в следующем: организовывалось «общение» между человеком и компьютерной программой, которые размещались в разных комнатах, и до тех пор, пока исследователь не определял, кто за стеной – человек или программа, поведение последней считалось интеллектуальным . Исходя из этого, Тьюринг предложил следующий критерий интеллектуальности программы: «Если поведение вычислительной машины, отвечающей на вопросы, невозможно отличить от поведения человека, отвечающего на аналогичные вопросы, то она обладает интеллектом».

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

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

Исторически сложились три основных подхода к проведению исследований в области искусственного интеллекта.

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

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

Второй подход (искусственный разум) рассматривает данные о нейрофизиологических и психологических механизмах интеллектуальной деятельности и разумного поведения человека.

Как создать искусственный интеллект? (Почти) исчерпывающее руководство

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

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

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

К настоящему времени разработано целое множество программный систем, в которых реализованы те или иные технологии ИИ. Такие системы принято называть интеллектуальными системами. К первой из подобных систем относят программу «Логик-Теоретик» (А. Ньюэлл, А. Тьюринг и др.), предназначенную для доказательства теорем исчисления высказываний.

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

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

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

1.2. Основные направления исследований в области искусственного интеллекта

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

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

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

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

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

Программное обеспечение систем искусственного интеллекта.

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

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

Уровень теоретических исследований по искусственному интеллекту в России не уступает мировому. Началом становления этого научного направления в нашей стране следует считать 1954 г., когда в МГУ начал свою работу семинар «Автоматы и мышление» под руководством академика Ляпунова А.А. Впоследствии стали активно развиваться направления, связанные с представлением и обработкой знаний, ситуационным управлением, моделированием рассуждений, распознаванием образов, обработкой естественного языка .

Развитие искусственного интеллекта в современной России связано с образованием в 1988 г. Ассоциации искусственного интеллекта, объединившей научные школы, исследователей по различным направлениям ИИ. Под ее эгидой проводятся различные исследования, организуются семинары для специалистов, устраиваются конференции, издается научный журнал.

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

Михаил Бурцев, заведующий лабораторией нейронных систем и глубокого обучения МФТИ, рассказывает о том, возможно ли создание полноценного компьютерного аналога человеческого разума, и объясняет, для чего его разрабатывают ученые и как можно защитить его от атак троллей.

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

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

Соорганизаторами конкурса выступили ученые из университетов Монреаля, Макгилла и Карнеги-Меллон. Принять участие в тестировании диалоговых систем можно по ссылке.

На самом деле, эти идеи не были придуманы сегодня - современные голосовые помощники от Google, Apple, Amazon и других IT-компаний уходят корнями в глубокое прошлое, в самое начало компьютерной эры. Первая такая говорящая машина, получившая имя ELIZA, создана в 1966 году и была, по сути, шуткой, пародией на психотерапевта, дающего бесполезные советы пациенту.

В последующие годы и десятилетия программисты создавали все более сложные и «живые» системы общения с компьютером.

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

- Михаил, с момента создания ELIZA прошло почти 50 лет. Что вообще поменялось за это время и можно ли в принципе ожидать, что в будущем ученым удастся создать такую систему, которую люди не смогут отличить от живого собеседника?

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

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

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

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

- Учитывая присутствие Apple, Google и Amazon на этом рынке, может ли Россия здесь конкурировать? Есть ли какая-то специфика у русского языка, которая может помешать потенциальным конкурентам российских компаний и ученых?

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

С другой стороны, базовые алгоритмы, которые используются в работе Siri, Cortana, Google и других цифровых помощников, никто не скрывает - они доступны для нас как минимум на уровне исследований и концепций.

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

На фото: На фото: Михаил Бурцев, заведующий лабораторией нейронных систем и глубокого обучения МФТИ

Фото: Из личного архива Михаила Бурцева

Причем попыток осуществить это на «промышленном» уровне не так много. Единственный крупный проект ведется компанией «Яндекс», которая разрабатывает помощника в рамках проекта «Алиса».

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

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

- Многие ученые, такие как Роджер Пенроуз или Стюарт Хамерофф, считают, что человеческий разум носит квантовую природу и построить его машинный аналог нельзя в принципе. Согласны ли вы с ними или нет?

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

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

Другое дело, что временные рамки того, когда такая машина будет создана, остаются не до конца определенными. Это может, как мне кажется, произойти не менее чем через 50, а то и 100 лет.

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

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

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

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

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

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

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

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

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

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

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

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

- В связи с этим возникает вопрос - кто должен нести ответственность за рекомендации «психотерапевта» ELIZA, компьютерных докторов и других голосовых помощников, чьи советы могут сильно повлиять на благополучие и здоровье человека?

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

Как создать искусственный интеллект?

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

К примеру, подобные системы должны четко уведомлять пользователя о том, к каким последствиям ведет выбор между искусственным интеллектом и обычным врачом. У человека появится выбор - довериться доктору, который будет, к примеру, ошибаться в 10% случаев, или же сделать ставку на машину, которая дает неверный ответ в 3% случаев. В первом случае ответственность за ошибку будет нести доктор, а во втором - сам пользователь.

- В прошлом году компания Microsoft запустила чат-бот Tay. AI, который ей пришлось отключить буквально через сутки из-за того, что пользователи сети превратили «девочку-подростка» в настоящего расиста. Можно ли защитить подобные диалоговые системы от троллей и шутников?

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

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

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

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

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

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

Ещё совсем недавно было чем-то из ряда фантастики. Сейчас же это вполне реально и сегодня мы научимся создавать простенький искусственный интеллект с помощью замечательного онлайн-сервиса.

Я говорю о сайте http://iii.ru (Ай-я-яй.ру)
С помощью этого ресурса мы создадим так называемого “инфа”.
Что это за зверь такой, Инф? Инф – небольшой персонаж (зверек или человек или чудо-юдо) который может разговаривать с человеком в интернете (да-да, ещё его можно назвать чат-ботом). Зверя этого можно отправить другу, на домашнюю страничку, запихать в подпись в форуме, в общем, куда только пожелает Ваша фантазия!
Поначалу ваш инф будет, конечно малость “туповатым”, но это мы можем исправить обучая его!

Давайте посмотрим подробнее, как всё это делается:

При заходе на сайт мы попадаем в так называемый “гараж ”, где можем пообщаться с несколькими готовыми инфами и приступить к созданию своего!

Чтобы начать создание собственного персонажа, нужно зарегистрироваться. Для этого на экране гаража кликаем на кнопку “Хочу инфа” и после заполнения пары строчек о себе и прочтения лицензионного соглашения, жмём на кнопку “Зарегистрироваться”.

Теперь мы попадаем на экран создания персонажа-инфа.

Нужно выбрать персонажа “человек”, “зверь” или ещё какое чудо-юдо

Настраиваем внешность – рот, нос, глаза, прочие принадлежности. Если в дальнейшем не понравится – не отчаивайтесь, всё это можно будет подправить.

Теперь рассмотрим самое интересное – обучение персонажа. Нажимаем на вкладку “Обучение”. Открывается список возможных способов:

Анкета – заполняем информацию о своем инфе, меняем ему имя, если захочется и т.д.

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

  • Tutorial

Вы когда-нибудь задумывались о том, насколько просто написать свой искусственный интеллект, который сам будет принимать решения в игре? А ведь это действительно просто. Пусть для начала он принимает случайные решение, но позже вы можете его воспитать, научить анализировать ситуацию, и тогда он станет принимать осознанные решения. В этой статье я расскажу, как я писал своего бота, а также покажу, как вы за несколько минут можете написать своего. Наш компьютер будет играть в клон игры Трон , а точнее в ту часть, где нужно на мотоцикле победить врагов.

Под катом gif-файлов мегабайт на 10.

Об игре

В игре вы управляете мотоциклом, который оставляет за собой стену из света. Игровое поле ограничено, а у соперников такие же мотоциклы. Мотоцикл едет постоянно, вы лишь можете поворачивать. Свободное место на поле кончается, и избегать препятствия становится сложнее. Побеждает тот, кто дольше всех продержится. Клон игры я сделал браузерным многопользовательским с использованием node.js и socket.io. Управление из двух кнопок – поворот влево и поворот вправо.

Интерфейс бота

Так как я использую socket.io, то обработка игроков на сервере у меня была в виде работы над массивом специальных объектов socket, которые создаёт socket.io. Из этих объектов я использовал только id, функции emit и broadcast. А значит безболезненно для самой игры можно реализовать интерфейс socket и использовать его в обработке, будто играет ещё один пользователь. Я назвал класс BotSocket .
Метод emit(event, data) у бота выполняет почти такие же действия что и у клиента при входящих данных от сервера, а именно:
  1. Сохраняет данные обо всех играющих мотоциклах при их добавлении
  2. Сохраняет ссылку на свой мотоцикл при его добавлении
  3. Обновляет данные обо всех играющих мотоциклах
  4. Сбрасывает состояния при перезапуске игры
Для передачи команд управления своим мотоциклом на сервер потребовалось сохранить ссылку на объект игры, который обрабатывает такие команды от обычных пользователей. Метод класса Game у меня назван onControl(socket, data) , поэтому я добавил метод в BotSocket
BotSocket.prototype.control = function(data) { this.game.onControl(this, data); };
При поступлении от сервера команды обновления данных мотоциклов (было совершено их передвижение) я проверяю, есть ли у меня вообще подконтрольный мотоцикл, не столкнулся ли он еще и был ли он перемещён, и, в случае успеха, я вызываю основной метод для работы ИИ - update() .
Интерфейс готов, теперь можно добавить сам ИИ.

Искусственный интеллект

Как бы громко это не звучало, но в играх игроков, за которых играет компьютер, принято называть именно ИИ, либо ботами. Объект BotSocket обладает необходимыми данными об игре, чтобы принять решение. Вариантов решения может быть всего три:
  1. Ничего делать, ехать прямо
  2. Повернуть направо
  3. Повернуть налево

Когда я решил написать бота, я понятия не имел, как это можно сделать. Я попробовал очень простой код:
BotSocket.prototype.update = function() { var r = Math.random(); if (r > 0.95) { this.control({"button": "right"}); } else if (r >
Поведение было примерно таким:

Я смотрел на него и испытывал большую радость, мне казалось, что он теперь самостоятельный. Казалось, что он сам ищет попытки выжить, бьётся там, как живой. Трогательное зрелище.

Но хотелось, чтобы он жил как можно больше. Я стал искать информацию о том, как пишут ИИ к играм. Нашел статьи , которые описывали разные подходы. Но я искал что-то чрезвычайно простое. Я нашел на хабре в одной из статей про бота для игры вроде Zuma упоминание волнового метода . Он же алгоритм Ли. Мне он показался очень простым и подходящим. Это алгоритм поиска кратчайшего пути из одной точки в другую по полю, где клетки могут быть либо свободными, либо занятыми. Суть простая. Мы начинаем из точки назначения, присваиваем ей значение 1 и помечаем все соседние свободные клетки цифрой на единицу больше. Затем берём все соседние свободные помеченных и снова помечаем на единицу больше. Так расширяемся на всё поле, пока не дойдем до точки назначения. А путь строим поиском из соседних по уменьшению числа, пока не дойдем до 1. Я смотрел алгоритмы поиска кратчайших путей в графах, но этот мне показался наиболее подходящим.

Я перенёс алгоритм копипастой из страницы в вики, дал ему имя BotSocket.prototype.algorithmLee . Для поля я создал сначала объект battleground , в котором при каждом обновлении помечал занятые точки с их координатами. А в алгоритме Ли сводил это поле к такому же, но с шагом 1.

Нужно было как-то определять точку назначения. Я решил выбирать её случайно через определенные интервалы времени. Сделал метод для поиска случайной свободной точки на поле:
BotSocket.prototype.getDesiredPoint = function() { var point = ; var H = Object.keys(this.battleground).length - 1; var W = Object.keys(this.battleground).length - 1; var x, y, i, j; var found = false; var iter = 0; do { i = this.getRandomInt(1, W); j = this.getRandomInt(1, H); x = i * this.moveStepSize; y = j * this.moveStepSize; if (this.battleground[x][y] === this.BG_EMPTY) { found = true; } iter++; } while (!found && iter < 100); point = ; return point; };

Теперь я мог переписать update:
BotSocket.prototype.update = function() { if (!this.desiredPoint || this.movements % this.updDestinationInterval === 0) { this.desiredPoint = this.getDesiredPoint(); } if (!this.desiredPoint) { return; } var currentPoint = ; var path = this.algorithmLee(currentPoint, this.desiredPoint); if (path && typeof path !== "undefined") { this.moveToPoint(path); } else { this.desiredPoint = this.getDesiredPoint(); } };
Здесь упоминается метод moveToPoint , который поворачивает, если нужно, чтобы достигнуть первую точку из кратчайшего пути с учётом текущего направления.

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

Бот на стороне клиента

Я решил попробовать перенести бота на клиентскую часть. Так как проект на node.js, я могу использовать написанный код для бота и на стороне клиента. Для этого я расширил BotSocket отдельным клиентским файлом, который переопределял методы emit() и control() , чтобы правильно взаимодействовать с сервером без ссылки на объект game.
Локально всё работало отлично, а после деплоя на удалённый сервер была какая-то странная картина:

Долго думая, я понял, что дело в задержке. Бот отправлял команду поворота, но она доходила после обновления его позиции на сервере, отчего он часто не мог попасть на прямой путь к желаемой точке. Но я хотел нормального бота на клиентской стороне. Поэтому решил учитывать задержку. Для этого написал снова расширение BotSocket. Статья получается длинной, так что опишу основные решения. Перед вызовом алгоритма Ли вместо текущей точки я подставлял прогнозируемое положение с учетом текущего положения и направления, а так же множителя задержки. Множитель задержки – это число, во сколько раз превосходит задержка частоту обновления положения на сервере. Предсказание будущей точки мне еще понадобилось в методе moveToPoint() .

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


Мой красненький, остальные серверные.

Самое важное – попробуйте сделать бота сами

Основная цель этой статьи – пробудить интерес к написанию бота. Я сделал много, чтобы победить вашу лень. Для этого я добавил возможность подгружать свой собственный скрипт с ботом, который будет расширять мой базовый клиентский класс. Зайдите на проект и нажмите на текст «Show options for room with your own bot», а затем на кнопку «Create room for test your own bot». Будет создана комната, где можно легко применять ботов, по умолчанию вашим ботом будет бот без учета задержки. Теперь настало время для вашего кода.
Два простых варианта для использования вашего кода в деле, используйте любой:
  1. Выкладывайте js-файл на любой сервер, который будет доступен вашему браузеру. Url к вашему скрипту вставляйте в игре рядом с кнопкой “Load your AI script”. После нажатия на эту кнопку будет создан и заполнен новый объект botSocket , у которого будет вызван метод start() .
  2. Используйте консоль браузера (Firebug – F12, Firefox - Ctrl+Shift+K, Chrome – Ctrl+Shift+J, другие – ).

Если вы определились с методом ввода вашего кода, попробуйте переопределить методы класса BotSocket . Для начала самое простое:
BotSocket.prototype.update = function() { var r = Math.random(); if (r > 0.95) { this.control({"button": "right"}); } else if (r > 0.90) { this.control({"button": "left"}); } }

После этого пересоздайте объект botSocket, введя
botSocket = null;
При этом код на странице сам пересоздаст и заполнит объект. Этим вы измените стандартное поведение бота на случайное. А дальше уже дело для вашей фантазии или глубоких знаний.
Вы так же можете подключить скрипт моего улучшенного бота с учетом задержки, вставив в url для бота https://raw.github.com/rnixik/tronode-js/master/public/javascripts/MyBotSocketClient.js

Заключение

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

Если у вас нет под рукой node.js, вы можете воспользоваться развернутыми мной приложениями:

1) tronode.livelevel.net - самая дешевая VPS на DigitalOcean,
2) tronode-js.herokuapp.com - бесплатная виртуальная единица на Heroku.

Первый, скорее всего, первым может не справиться с нагрузкой, а второй на некоторых компьютерах сбрасывает socket.io-транспорт в xhr-polling, из-за этого игра очень сильно лагает.
Если вы хотите узнать больше, о том, как я программировал игровую логику, то можете прочитать . Там же о развертке node.js и немного о графической части.

Если у вас нет аккаунта на хабре, то задать вопросы или прислать свои интересные предложения можете мне на почту [email protected].

Теги: Добавить метки



Рекомендуем почитать

Наверх