Повторно используйте мое старое Дерево с глубиной для большей глубины, ища самый длинный путь - PullRequest
0 голосов
/ 26 февраля 2010

Я ищу самый длинный путь по карте в игре, основанной на пошаговом режиме. У меня есть время вычисления 1 с, и мне нужно двигаться в этот момент.

Прямо сейчас я снова генерирую дерево.

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

На данный момент мой SearchClass основан на интерфейсе, поэтому изменение типа возврата и входных переменных моей функции - большая работа. Есть ли простое решение для моей проблемы?

Ответы [ 2 ]

0 голосов
/ 02 мая 2014

Сможете ли вы сделать дерево (игрока) статичным? Или, если вы единственный игрок, вы можете сделать его глобальной переменной для всей программы на стороне игрока, но это зависит от многих вещей, которыми вы не поделились с нами. Я бы по-прежнему предложил вам взглянуть на MCTS: описание Википедии и Здесь приведен пример кода .

С MCTS идея проста: вы вычисляете все свои 900 мс, а затем делаете движение игрока к узлу с самой высокой вероятностью выигрыша. Если вы можете сохранить дерево как глобальную или статическую (или обе:: D) переменную, первое, что вы сделаете в начале следующего хода (или следующего вычисления), - это избавитесь от всех частей предыдущего дерева. , что вы больше не можете получить доступ - потому что вы не в позиции [0][0], а в позиции, скажем, [1][3] ... так, чтобы уменьшить размер дерева для вас, что хорошо. Итак, вам нужно заменить исходное дерево новым деревом, которое начинается с узла, на котором вы сейчас находитесь. Хорошо, что вы предварительно вычислили некоторые значения, теперь это зависит от вашей реализации, от того, как вы хотите, чтобы узлы были исследованы и / или обновлены по вероятности. Но по ходу игры программа должна иметь достаточно данных, чтобы гарантировать высокую вероятность выигрыша.

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

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

0 голосов
/ 02 мая 2014

Если ваша карта статична и не слишком велика, вы можете сгенерировать дерево заранее.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...