Игрушка про охоту

Подсел тут на игру theHunter: Call of the Wild (sic). Одна из самых красивых игр с исключительно детально прорендеренными пейзажами. Для локаций такого масштаба просто удивительно — прорисованы как горы, находящиеся на огромном расстоянии, так и каждая травиночка рядом.

В игре много разных заказников, где можно охотиться. Я пока охочусь в Тихоокеанском Северо-Западе, сиречь, территории штатов Орегона и Вашингтона. Этот официальный скриншот, по-моему, именно оттуда.

Любая игра-симулятор (а это именно симулятор), это, конечно, только приближение к настоящему.

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

1. Бегать по горкам, таская сразу и винтовку и дробовик, и пистолет — удовольствие сильно ниже среднего. А аватар, ничего, бегает аки вышколенный пехотинец.
2. Дичи в игре — просто валом, непролазно. Такое не встречается в реальной жизни, плотность крупных диких животных намного меньше.
3. Дичь исключительно хорошо отзывается на манки. Один раз в манок пукнешь — и всё, олени на тебя прут табунами.
4. Следы животных намного сложнее искать в реальной жизни. Хотя я понимаю, что ограничение тут вполне себе техническое.

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

1. Стрелять надо по месту. Это особенно важно на первом этапе игры, когда у тебя только плохонькая винтовка калибра 6mm. Ну подстрелишь ты лося в жопу, и что дальше? Ты за ним будешь полдня бегать, ждать, пока он окочурится. А он может и вообще не окочуриться, у него рана может затянуться и привет. Поздравляю, ты сделал подранка.

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

Попал ей в левую переднюю ногу и левое лёгкое. Чаще всего в игре попадаешь именно по лёгким (ну, понятно, почему — они большие). Это хорошо, ранение в лёгкое смертельно. Пробежала 70 метров и всё. Вот и правильно, пусть не страдает.

Конечно, стрелять было бы правильнее немного правее. Как говорится, “за локоток”. Ну, вот на это и даются уроки анатомии.

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

2. Передвигаясь по лесу бегом, устраивая шум и треск ты только распугаешь всю дичь. Особенно предательски ведут себя деревья, их нижние ветки громко вжикают по одежде. Ну, если кто когда шатался по лесу, тот знает, на что это похоже.
3. От человека для диких животных жутко пахнет хищником. В игре есть очень полезный указатель ветра, показывающий конус человеческого запаха, исходящий от охотника. Пытаться подкрасться к оленю, имея ветер со спины — пустой номер.
4. Руки у охотника трясутся. Особенно сильно они трясутся если ты только что отмахал километр по горкам. Надо сесть, успокоиться, а стрелять, слегка задержав дыхание. Слегка — потому что продолжительное задержание дыхания поднимает сердечный пульс, и у тебя снова начинают трястись руки, даже ещё хуже.

Вот, пожалуй, самые важные пункты по игре. Охотиться можно на самую разную дичь — всякого типа оленей, от белохвостого до американского лося (Moose). Можно поехать на сафари в Африку или в Австралию, заваливать кенгуру. Утки, гуси — само собой. Медведи, и даже есть кабаны. Очень, очень хорошая игра. Отзывы на Стиме — 9 из 10.

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

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

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

Но для того, чтобы научить нейросеть чему угодно, для начала надо сделать набор данных для обучения. В случае с играми, соответственно, это будут партии различных игр. Для начала я выбрал что-нибудь попроще: крестики-нолики. Благо ПОЛНОЕ дерево решений для этой игры очень небольшое. Чисто теоретически там 9! игр (около 360 000), в реальности намного меньше: не все игры идут 9 шагов, многие являются отражениями других игр, развёрнутых на 90, 180, и 270 градусов. И так далее.

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

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

Программа должна выбирать не ход, который приводит к победе. А ход, который не приводит к поражению. Вот такая логическая загогулина. Ничего, завтра переделаю программу и попробую заново. Может быть, даже до нейросети — изначального места назначения — дело дойдёт.

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

Вообще, если есть возможность строить игровое дерево — лучше строить игровое дерево. Такие программы будут играть в игру лучше, чем нейросети (которые по сути только распознают паттерны и реагируют на них). Но игровое дерево строить возможно далеко не всегда. Скажем, Го не поддавалось, поэтому нормально играть компьютер в Го наконец-то научились именно, что через нейросети. Потому что игровое дерево для шахмат — 10E120 (число Шеннона), а игровое дерево для Го — 1.74E172! Но даже Го меркнет перед огроменным деревом крайне (на первый взгляд) простой игры Стратего, чей размер составляет 10E535!!! Неудивительно, что компьютер играет в Стратего крайне слабо. Может быть, именно что нейросети научатся. В лоб, через построение дерева — путь тупиковый.

Кто с детьми в игрушки играет?

Приобрёл подержаный Плейстешен 4. Кто какие игры порекомендуют, чтобы с детьми было интересно? У нас хиты пока вот такие:

1. Little Big Planet 3 (с большим отрывом)
2. Minecraft (куда же без него)
3. Baja: Edge of Control

Какие ещё кто порекомендует? Интересует именно чтобы можно было играть вдвоём-втроём, либо split screen, либо как в LBP — несколько аватаров на одном экране. Я б, конечно, зарядил бы Rock Band (лучшая игра всех времён и народов для локального мультиплеера), но дети слишком маленькие пока. Не врубятся.

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

Интересное математическо-игровое

Если есть возможность научить компьютер что-то делать — он это будет делать намного лучше человека. В том числе — и играть в игры.

Большинство игр типа шашек, шахмат, домино и даже крестиков-ноликов компьютер играет через постройку дерева решений. Для крестиков-ноликов это вполне тривиальная задача, так как количество возможных игр в крестиках-ноликах равно факториалу 9 или примерно 363 тысячам. Для современных компьютеров это ерунда. Шашки уже посложнее — там 500 квинтиллионов (500 000 000 000 000 000 000) возможных игр. И полное дерево решений для шашек таки было построено. Число возможных игр в шахматах же несколько превышает… кгм… количество атомов в наблюдаемой Вселенной, поэтому с построением полного дерева ожидаемо возникает затык. Да и с шашками, вообще-то, тоже, так как 500 квинтиллионов поместятся далеко не во всякий компьютер 🙂 Ну, полное дерево, в принципе, и не нужно. Чтобы выиграть в шахматы, например, у меня, достаточно построить дерево ну хотя бы в четыре уровня, потому что я архихреново в них играю. Чтобы выиграть у гроссмейстера, понадобится дерево пошЫрше и поглЫбже; но это тоже не является проблемой — компьютер теперь с гарантией выигрывает у лучших в мире гроссмейстеров, тема, по сути, закрыта.

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

Чуваки из конторы DataGenetics провели математический разбор “Морского боя”:

http://www.datagenetics.com/blog/december32011/

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

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

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

Карта плотностей вероятностей на 12 ходу после 5 попаданий:

Хотя люди тоже пользуются примерно такой же стратегией — статистически компьютер всё же будет выигрывать. Вот такие пироги с кремниевыми котятами.

За неимением руля

Вернее, места, куда поставить руль, приобрёл игровой контроллер для коробокса и подключил его к компьютеру. Это, как бы, штатный вариант подключения для Windows 10. В теории можно подключить контроллер от плейстешена, но там надо мудрить с эмуляцией и прочим. Оно того, на мой взгляд, не стоило.

Забег по мудям (Mudrunner 😉 ) заиграл новыми красками. Рулить стало намного проще, т.к. рулишь не в режиме ШИМ =) Но самое главное улучшение это даже не руление, а плавный контроль над акселератором. В любом заезде по чему-то скользкому, будь то снег, лёд или мокрая глина самое важное — это сохранение контроля над сцеплением колёс с дорогой. При трогании на льду, например, надо газовать осторожно, медленно, и иногда даже полезно врубить передачу повыше, чтобы крутящий момент поменьше был. Иначе дрыгатель ревёт, колёса крутятся, а толку ноль — даже вперёд толком не едешь. А тут осторожненько, на мягких лапках, намного проще доехать до места назначения.

В-общем, рекомендую такой контроллер, хорошая штука.

Стратегический заезд по говнам-2

Приобрёл наконец обновлённый Spintires под названием Mudrunner.

Очень нравится. Камера стала более нормальной, улучшилась графика (отдельно порадовали радужные следы от горючки/масла, остающиеся на воде, когда хорошенько так газанёшь). И, конечно, новые громыхайки — включая эпичный Советский трактор К-700 “Кировец” и “Шишигу”.

Захотелось купить себе игровой руль с механической коробкой (“а куда мы всё это будем ставить, дорогой мой?” — тихо спросила жаба), было бы прикольно… да ещё если бы на три экрана размазать…