Проектування Змії AI


9

Я новачок у цій гейдевській стекет-обміні, але раніше використовував сайти з математики та cs.

Отже, я змагаюсь створити AI для змії, яка змагатиметься з чотирма іншими зміями за 5 хвилинних раундів, де правила схожі на традиційну гру Nokia Snake, за винятком того, що є п'ять змій, дошка - 30x30 і є ряд невеликих перешкод на полі.

Як і гра Nokia, ваша змія зростає, коли ви доберетеся до плодів, і якщо ви вріжетеся в себе, інша змія або стіна, ви гинете. Гра працює з затримкою 30 мс між рухами, і сервер надсилає новий ігровий стан кожні 50 мс, який код повинен аналізувати, а що ні, і виводити наступний хід.

Переможець - змія, яка мала найдовшу довжину в будь-яку точку гри. Розв'язки вирішують вбивці.

Поки що я зробив це реалізований пошук графіка A * від кожної змії, щоб визначити, чи є моя змія найближчою до яблука, і якщо вона є, вона йде для яблука. В іншому випадку я склав акуратний маленький алгоритм, щоб визначити найпотужнішу площу дошки, на яку йде моя змія, передбачити наступне яблуко.

Крім цього, у мене є кілька невеликих перевірок життєздатності, щоб переконатися, що моя змія не потрапляє у пастку, яку вона не може вийти, і якщо вона застрягне, у мене є щось, що дасть їй кращі шанси вийти.

...

У будь-якому разі, я перевірив свою змію на тестовому сервері, і це дуже добре. Взагалі, моя стратегія - я шукаю лише яблуко, коли його впевнено і знайти простір, коли його не роблять швидше, ніж будь-які інші змії (деякі змії роблять подібну річ, але часто просто йдуть в середину чи кут), іноді вона виграє Ці пробні ігри, але частіше за все не перемагають ту саму змію, яка, схоже, має перевагу в живучості (моя змія росте швидше, але потім якось гине, і ця інша змія просто повільно пливе вздовж і виграє в послідовності.

Тож мені було цікаво про будь-які ідеї, хтось має спробувати вдосконалити мою змію. Або, можливо, ідеї при новому підході. Мої функції та заняття хороші, тому зміни, які можуть здатися різкими, не повинні бути занадто поганими. Я заохочую всі ідеї.

Будь-які думки?

Відповіді:


5

Гарною оборонною стратегією може бути створення ідеальної форми (тому голова і тил завжди на відстані один від одного місця, і ви робите повний квадрат або все, що можливо, щоб сформуватись за заданої довжини), це зробить вас дуже багато безсмертний, оскільки жодна змія ніколи не зможе потрапити у вашу закриту зону, і ви ніколи не наткнетесь на себе (якщо тільки яблуко якимось чином не породилось у вас у роті, але я б уявив, що це неможливо, якщо немає місця).

Це зробило б це так, якщо яблуко насправді з’явиться у вашому закритому приміщенні, ви могли б запрограмувати його не ходити, а інші змії, ймовірно, помруть, намагаючись дістати його, то через деякий час ви зможете перенести його таким чином до переходу повертайтеся у свою форму якнайкраще (це може бути трохи хитромудрим алгоритмом, але здається виконаним)

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


1
Так в основному його "змія" повинна "черепаха". xD +1 хороша ідея.
Cypher

Хороший. Але на дошці є перешкоди. Отже, інші програмісти-змії, мабуть, зробили своїх змій, щоб перевірити, чи є перешкода (чи то яблуко стіни чи іншої змії, що огороджує яблуко). Вони можуть не прийти і просто померти. Для уникнення цієї проблеми можна зробити одне, - це мати значні відстані між головою та хвостом.
Шашват

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

@Ronald Насправді, якщо ви виявите в нересті яблук у роті, ви можете просто повернути всередину і назад назовні та продовжувати, оскільки AI має ідеальний рефлекс, його насправді слід легко виправити (а може навіть виправити), залежно від того, як ви його реалізуєте.
Kevin DiTraglia

0

Змія повинна адаптувати свою стратегію до своєї нинішньої довжини.

Дуже довга змія може використовувати своє тіло для загородження супротивників. Це означає, що на ньому слід зробити пломбу зі стіною.

Якщо змія подорожує на схід, з яблуком на північний схід від неї, вона повинна проїхати всю дорогу до стіни, перш ніж повернути на північ, тому можливі маршрути для інших змій сильно обмежені.

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

Ця змія з головою С повинна повернутись на північ на e9, а не на e8, так що будь-який противник під нею опиниться в пастці і не зможе з'їсти жодного яблука, що нереститься над лінією 'e'.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.