Создание бота NetHack: Действительно ли байесовский Анализ является хорошей стратегией?

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

В NetHack проблема является намного более трудной, потому что игра вознаграждает напористое экспериментирование и создается в основном как 1 000 пограничных случаев.

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

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

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

Править: Мой друг поднял GitHub repo его патча NetHack, который позволяет привязку Python. Это находится все еще в довольно примитивном состоянии, но если кто-либо заинтересовал...

27
задан danieltalsky 24 January 2010 в 01:56
поделиться

5 ответов

Необходимо задать атрибут LinearLayout android: clickable = «true» в файле макета xml или setClickable (true) в коде действия java.

-121--1375840-

Нет реального стандарта и существует довольно много различных мнений . Я согласен с womp хотя: вы не должны иметь одинаковые H1 на каждой странице сайта. Я оставляю название сайта на < название > тэгов.

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

Однако, когда дело доходит до SEO, рекомендации обычно заключаются в том, что у вас есть только один H1 на страницу.

Я пошел на гибридный подход на мой дизайн блог : на главной странице, есть H1, описывающий сайт, и каждый пост заголовок < H2 > . Однако на отдельных страницах сообщения заголовок сообщения - < H1 > . Это кажется (пока) навести хороший баланс между семантикой и оптимизацией для поисковых систем.

-121--2980898-

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

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

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

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

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

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

6
ответ дан 28 November 2019 в 05:52
поделиться

Существует прецедент: Monstous Rog-O-Matic Program по-прежнему удалось играть в мошенничестве и даже вернуться с амулетом Йедора в несколько раз. К сожалению, Rogue был выпущен только двоичным, а не источником, поэтому он умер (если только вы не можете настроить систему 4.3BSD на Microvax), оставив Rog-O-Matic, не может воспроизводить любой из клонов. Это просто висит, потому что они не достаточно близки эмуляции.

Однако Rog-O-Matic в том, что я думаю, моя любимая программа всех времен не только из-за того, что она достигла, но из-за читаемости кода и понятного интеллекта его алгоритмов. Он использовал «Генетическое наследство»: новый игрок наследует комбинацию предпочтений из предыдущей пары успешных игроков, с каким-либо случайным смещением, а затем окажется на машине. Более успешные предпочтения будут мигрировать в бассейне гена и менее успешными.

Источник может быть трудно найти в эти дни, но поиск «Rogomatic» установит вас на пути.

4
ответ дан 28 November 2019 в 05:52
поделиться

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

Не нужно снова есть кабарице, есть ли?

Все во всем это зависит от того, сколько «знания» вы хотите дать бот как начала. Вы хотите, чтобы он узнал все «трудный путь», или вы будете кормить его спойлерами, пока он не наполнен?

1
ответ дан 28 November 2019 в 05:52
поделиться

Я сомневаюсь, что Байесовский анализ дарит вам далеко, потому что большая часть Nethack очень контекста Отказ Есть очень мало действий, которые являются всегда плохой идеей; Большинство также являются также жизненные заставки в ситуации «правильной» (крайний пример едят какатриаз: это плохо, если вы не голодаете и в настоящее время полиморфли в каменный монстр, в этом случае есть казатрице, - это правильная вещь ). Некоторые из этих «почти плохих» действий должны выиграть игру (например, возникают по лестнице на уровне 1 или умышленно падают в ловушки для достижения Gehennom).

То, что вы могли бы попытаться попробовать сделать это на уровне «Мета». Разработайте бот, как выбирая случайным образом среди различных «элементарных поведений». Затем попробуйте измерить, как эти боты. Затем извлечь комбинации поведения, которые, кажется, способствуют выживанию; Байесовский анализ мог сделать это среди широкого корпуса игр вместе с их «уровнем успеха». Например, если есть поведение «забрать кинжалы» и «избегайте привлечения монстров в ближнем бою», я бы предположил, что анализ показывает, что эти два поведения хорошо подходят вместе: боты, которые выбирают кинжалы, не используя их, а боты, которые пытаются бросать ракет на монстрах, не собирая такие ракеты, вероятно, будет тариться хуже.

Это как-то имитирует то, что учить геймеры часто спрашивают в rec.games.roguelike.nethack. Большинство вопросов похожи на: «Должен ли я пить неизвестные зелья, чтобы идентифицировать их?» Или «Какой уровень должен быть моим персонажем, прежде чем идти в глубине в темнице?». Ответы на эти вопросы сильно зависят от того, что еще делает игрок, и нет хорошего абсолютного ответа.

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

4
ответ дан 28 November 2019 в 05:52
поделиться

Очевидно, существует большое количество ботов Nethack. Посмотрите это объявление:

3
ответ дан 28 November 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: