ПРИМІТКА . Наразі ця проблема є мертвою, оскільки я не можу встановити мови, необхідні для проведення матчу. Якщо у когось іншого є час і інтерес на це, я не проти.
Дивіться таблицю лідерів у нижній частині публікації.
Це напівкооперативний виклик короля гірки, де боти будують контури через двовимірний граф сітки. Переможцем є бот, який керує вузлами з найбільшою кількістю трафіку. Однак для побудови з'єднувального шляху фактично потрібно не один ресурс бота, тому ботам доведеться працювати разом - певною мірою.
Ігровий процес
Далі, нехай N > 0
буде кількість ботів у грі.
Сітка
Гра проводиться за двовимірною цілою цілою сіткою розміром , нижня ліва координата якої знаходиться у . Кожна координата з мають вихідні ребра до трьох координатах , і над ним, де -коордінати беруться за модулю . Це означає, що сітка обертається навколо східного та західного країв. Кожна нижня координата є джерелом , а кожна верхня координата - раковиною .⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
На наступному малюнку зображена 8 × 8
сітка.
Кожна вершина графіка або неактивна , активна , або зламана . Усі вершини починаються неактивними і можуть бути активовані ботами, які потім стануть їх власниками. Також боти можуть зламати вершини, і їх неможливо відновити.
Черговий наказ
Поворот складається з фази руйнування та фази активації . У фазі знищення кожен бот може порушити одну неактивну вершину. Ця вершина відтоді порушена і її ніхто не може активувати. У фазі активації кожен бот може активувати одну неактивну вершину. Відтоді вони володіють цією вершиною, і її ніхто не може повторно активувати. Кілька ботів можуть мати одну вершину, якщо всі вони активують її в один і той же поворот. У кожній фазі вибір вершин здійснюється одночасно.
Оцінка балів
Один раунд триває рівно повороти. Після цього раунд набирається так. З кожної вершини активного джерела ми виконуємо раз рандомізований пошук по глибині перших по активних вершинах (мається на увазі, що діти кожної вершини відвідуються у випадковому порядку). Якщо шлях знайдений від джерела до якоїсь раковини, то для всіх вершин на цьому шляху кожен власник вершини отримує одну точку.N2
N
Вся гра триває 100 раундів, а бот із найбільшою кількістю очок - переможець. Я можу збільшити цю кількість, якщо дисперсія балів занадто велика.
Додаткові правила
- Ніякого возитися з контролером чи іншими матеріалами.
- Максимум одне подання на кожного учасника.
- На початку гри жодні зовнішні ресурси, крім одного приватного текстового файлу, не стиралися.
- Не конструюйте свого бота, щоб бити чи підтримувати конкретних супротивників.
- Надайте команди для компіляції та запуску вашого бота. Будь-який компілятор / інтерпретатор, який є у вільному доступі для Debian Linux, є прийнятним.
Контролер
Контролер написаний на Python 3, і його можна знайти в GitHub . Детальні вказівки див. У файлі README. Ось API для початку роботи:
- Боти починаються на початку кожного раунду і зберігаються до кінця раунду. Спілкуйтеся з контролером через STDIN та STDOUT, використовуючи повідомлення, що закінчуються в рядку.
BEGIN [num-of-bots] [num-of-turns] [side-length]
вводиться на початку.DESTROY [turn]
вводиться на початку кожної фази руйнування. Ваш бот повинен відповісти абоVERTEX x,y
вибрати вершину, абоNONE
.BROKEN [turn] [your-choice] [other-choices]
вводиться в кінці кожної фази руйнування. Порядок інших ботів рандомізований на початку кожної гри, але залишається фіксованим під час неї. Вибір подається якx,y
абоN
.ACTIVATE [turn]
іOWNED [turn] [your-choice] [other-choices]
є еквівалентами вищезазначеного для фази активації, і мають однакову семантику.SCORE [your-score] [other-scores]
вводиться в кінці гри.- Ваш бот має 1 секунду для аналізу результатів фази та вибору наступної вершини, а також 1 секунду для виходу з роботи після даної оцінки. Я перевіряю матеріали на своєму відносно старому ноутбуці, тому краще залишити трохи запасів тут.
Будь ласка, не забудьте промити вихідний буфер. Якщо цього не зробити, ви можете повісити контролер у деяких середовищах.
Таблиця лідерів
Оновлено 13.03.2015
Миротворець працює, і Funnelweb також отримав оновлення. Оцінки підскочили на порядок. У двох іграх Connector перевищив обмеження в часі.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
Повний журнал із графікою мистецтва ASCII можна знайти в сховищі контролера, в graphical_log.txt
.
Деякі спостереження:
- З'єднувач можна дуже легко зупинити, порушивши одну вершину перед ним. Я підозрюю, що роздратування часто робить це. Однак в даний час це мало сенсу, оскільки тільки Connector може мислити побудувати шлях.
- Кавун може отримати гідний бал, просто потрапивши на сполучний шлях (оскільки ДФС дуже імовірно використовує свої вершини).
- Провідник любить вирощувати лози з кавунів.
- Оновлений Funnelweb отримує дійсно хороші бали, оскільки Connector зазвичай фіксується на ньому в нижній половині сітки.
- Ігри стають досить довгими, середній раунд займає близько 25 секунд на моїй машині.
4/3*N^2
, і навіть там боти мали проблеми з формуванням дійсних шляхів. Однак Connector був тимчасово дискваліфікований через помилку, і тепер, коли це було виправлено, я очікую, що ігри будуть цікавішими. Я побіжу ще одну партію сьогодні ввечері.