2013-05-09 1 views
0

Для этой игры есть доска 10x10 и несколько разных призов со значениями от 1 до 9, есть несколько простых ботов, играющих там, где всегда идет после ближайшего приза, а другой всегда идет за призом с наибольшим количеством назначенных ему очков. Боты и призы размещаются случайным образом на доске. Задача состоит в создании еще одного простого ИИ, который всегда собирает наибольшее количество очков и выигрывает игру.Алгоритм для прогнозирования ботов, продвигающихся к призам

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

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

+2

Этот вопрос слишком расплывчатый и на который можно ответить слишком широко. Это обескураживает SO. – Renan

+0

Пожалуйста, сообщите больше о правилах игры. Например, если бот А идет за дальним призом с 8 шагами, значит ли это, что бот B может получить 2 приза по 4 шага каждый? Кроме того, поскольку приз и боты случайным образом размещены, как может каждый бот побеждать? Представьте, что 2 бота используют ваш «всегда-выигрышный алгоритм», должен быть победитель и проигравший (за исключением рисования). – Faraway

+0

Пожалуйста, отредактируйте ваш вопрос (вместо ответа в комментарии) и ответьте на следующее: все ли боты перемещаются одновременно? Требуется ли одна единица времени для перехода из одной ячейки в другую? Может ли бот перемещаться в любую из соседних 4-х ячеек или по диагонали рядом? Может ли ваш бот получить информацию о том, где находятся другие два бота, и что это? –

ответ

3

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

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

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

Обратите внимание, что могут быть другие листья, где у вас больше балл, но проиграть, потому что один из других ботов доминировал над другим. То есть (вы: 12, a: 1, b: 17) vs. (вы: 11, a: 10, b: 9)

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

+1

Похоже, кроме того, кто первым получает приз, боты фактически не влияют друг на друга.Поэтому вместо того, чтобы перечислять все возможные шаги, вам нужно всего лишь перечислить различные варианты, на которые приз будет идти дальше. Это резко уменьшит размер дерева поиска - всего 9! = 362880 различных результатов для изучения, которые можно сократить еще больше, обрезая пространство поиска (прекратите поиск поддерева, когда вы гарантированно выиграли или проиграли) –

+0

@ BlueRaja-DannyPflughoeft Если вы не считаете другой боты перемещаются, тогда вы планируете курс, который будет включать перемещение в квадраты, где когда-то был приз, но схвачен другим ботом перед вами. Тот факт, что они движутся предсказуемым образом, я думаю, что это ключ к победе. Вы все равно можете уменьшить дерево поиска, остановившись на поддеревьях, где вы находитесь в недоступном положении, I.e. ваша разница между вами и лучшим бомбардиром больше, чем количество призов, оставшихся на доске. – AaronLS

+0

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

Смежные вопросы