Проектирование Змеиного ИИ


9

Я новичок в этом стеке gamedev, но уже использовал сайты math и cs.

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

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

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

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

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

...

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

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

Какие-нибудь мысли?

Ответы:


5

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

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

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


1
Так что в основном его «змея» должна «черепаха». xD +1 хорошая идея.
Cypher

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

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

@Ronald На самом деле, если вы обнаружите, что во рту нерестится яблоко, вы можете просто повернуться внутрь и назад наружу и продолжить, так как ИИ обладает совершенным рефлексом, его на самом деле должно быть легко исправить (и может даже исправить самому) в зависимости от того, как вы его реализуете.
Кевин ДиТраглия,

0

Змея должна адаптировать свою стратегию к своей текущей длине.

Очень длинная змея может использовать свое тело для ограждения противников. Это означает, что он должен сделать печать со стеной.

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

  0123456789
a ··········
b ··········
c ········A·
d ··········
e ooooooC···
f o·········
g o·········
h oooooooo··
i ··········
j ··········

Эта змея с головой C должна повернуть на север в точке e9, а не в точке e8, так что любой противник под ней окажется в ловушке и не сможет съесть яблоки, появляющиеся выше линии 'e'.

Чем больше площадь, которую вы можете отрезать, и чем дольше вы можете держать ее, тем лучше.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.