С осени прошлого года подсел на игру с дополненной реальностью Ingress. И поскольку основной моей работой является программирование и автоматизация, то конечно мне захотелось что-нибудь автоматизировать в игре. А пока в игру не ввели фракцию программируемых боевых роботов, решил для интереса собрать статистику по порталам Москвы : )
Если захотите зарегистрироваться в игре после прочтения статьи, то, пожалуйста, не скачивайте игру в магазине. Вместо этого напишите мне вашу gmail-почту в комментариях и дайте мне день для отправки приглашения в игру. Если после всего этого вы к тому же выберете фракцию Enlightened, то гарантирую вам прокачку до 3 уровня в парке Сокольники : )
1. О сборе информации (можно пропустить)
Для получения данных о порталах разработчик не предоставляет никакого API. Единственный легальный способ получить информацию кроме как в самой игре - воспользоваться официальным сайтом https://www.ingress.com/intel .
Путем анализа траффика браузера стало понятно, что полезная информация об игровой обстановке пересылается в виде наборов данных, упакованных в формат JSON. Однако при просмотре карты на крупных масштабах пересылается только самая обзорная информация, а данные об абсолютно всех порталах доступны только на очень высоком зуме. Задумавшись и немного повозившись я решил запустить браузер в эмуляторе ПК с очень-очень большим "монитором". В принципе мне удалось запустить виртуальный ПК с виртуальным монитором 4800х6400 пикселей (портретная ориентация). Но как только я запускал браузер с игровой картой на таком разрешении, виртуальная машина практически подвешивалась. Данные в карту подгружались, но не могу сказать насколько они были полными, да и сдвинуть карту было нереально, хотя при таком разрешении мне потребовалось бы всего 4 полных загрузки карты на всю Москву. В итоге остановился на виртуальном мониторе 3840х2560. Карта кое-как загружалась, информация постепенно накапливалась.
Данные собирались 10 августа примерно с 18 до 20 часов вечера. Старательно просмотрев в браузере всю Москву я собрал ровно 1 Гб сырых данных об игровой обстановке. В них конечно же было полно избыточной информации, но благодаря текстовому формату данных и упаковке их в JSON, удалось быстро в них разобраться, а небольшой скрипт на PHP минут за 10 перекинул всю инфу о порталах в базу данных MySQL. Для каждого портала удалось получить принадлежность фракции, географическую широту и долготу, уровень портала, величину "здоровья" портала, количество установленных резонаторов, ссылку на фотографию портала и наименование портала. Размер базы данных всех порталов Москвы составил всего 6.5 Мб!
2. Можно ли получить в Москве оникса "уникэпчера"? : )
Ну что же. ДА!!! В Москве можно получить оникс Pioneer, т.к. приблизительное количество порталов в городе порядка 30тыс.! Конечно, в зону охвата попало и ближайшее подмосковье, однако также скорее всего информация по каким-то порталам внутри МКАД могла не прогрузиться до конца. Итого, оценку общего числа порталов в городе можно считать достаточно точной. Я постарался визуализировать порталы, которые попали в базу данных на рисунке ниже. Серьезных пропусков с первого взляда не видно.
3. Основная статистика по собранным данным
Поехали! Почти 48% порталов во владении энлайтов, порядка 41% порталов за резистами, чуть больше 11% ничейные:
Больше 25% порталов имеют 1-й уровень. В какой-то степени это связано и с тем, что ничейные порталы также имеют уровень 1. Сюда же попадают порталы начинающих игроков, которые не могут создать портал более высокого уровня. Если исключить П1, то больше всего порталов (22%) имеют уровень 5. Это порталы игроков высоких уровней, которые развернуты в одиночку. Однако не все так плохо, порядка 32% порталов (П6...П8 в сумме) все же "деплоились" как минимум несколькими игроками. Наконец, в Москве всего 451 портал уровня 8, а их доля всего 1.5%. В сумме порталов П1...П4 практически ровно столько же, сколько и порталов П5...П8 (14163 против 16512 соответственно):
Ровно 2/3 порталов (66%) "задеплоены" целиком. Если исключить эту категорию, то распределение остальных порталов по количеству резонаторов показывает идеальное убывание от порталов без резонаторов (11.5%) до порталов с 7-ю резонаторами (2%):
Ого, 35% порталов заряжены на все 100%!!! Больше половины (57%) порталов заряжено более чем на 85%. На графике отлично видны порталы, которые разряжаются естественным образом. Зубцы графика соответствует целому числу дней разрядки полностью заряженных порталов (от 1 до 7 дней справа налево). Все остальные порталы подвергались атакам и не были восстановлены после них, их суммарная доля 30%:
4. ГоркИ vs плАЩАТки!
Без лишних слов, безоговорочная победа ... с четырехкратным отрывом ... в гигантские 600 порталов от ближайшего преследователя ... присуждааааааааается ... Деееееееетским ......... площааааааааааааааааааадкааааааам!!! Congratulations!!! Ну а вся первая сотня лидеров хит-парада ниже:
название портала | количество |
---|---|
Детская Площадка | 797 |
Горка | 198 |
Граффити | 175 |
Фонтан | 173 |
Детский Городок | 172 |
Беседка | 145 |
Площадка | 98 |
Почта России | 90 |
Playground | 72 |
Graffiti | 72 |
Детская Горка | 66 |
Спортивная площадка | 65 |
Графити | 60 |
Мельница | 58 |
Паровозик | 53 |
Кораблик | 52 |
Бабочка | 48 |
Корабль | 47 |
Клумба | 46 |
Библиотека | 43 |
Спортплощадка | 41 |
Качели | 39 |
Домик | 38 |
Церковь | 38 |
Почта | 37 |
Ваза | 32 |
Карусель | 31 |
Детский Комплекс | 30 |
Храм | 30 |
Замок | 29 |
Городок | 29 |
Горки | 28 |
Лев | 28 |
Баскетбольная Площадка | 28 |
Post Office | 27 |
Цветок | 26 |
Игровая Площадка | 25 |
Тренажеры | 25 |
Горы | 25 |
Детская библиотека | 25 |
Часовня | 24 |
Памятник | 24 |
Ленин | 24 |
Паровоз | 24 |
Песочница | 24 |
Барельеф | 23 |
Fountain | 23 |
Фонтанчик | 23 |
Аист | 23 |
Футбольное поле | 22 |
Крест | 22 |
Паутинка | 22 |
Кормушка | 22 |
Машинка | 21 |
Детский Замок | 21 |
Башенка | 21 |
Медведь | 21 |
Арка | 20 |
Табличка | 20 |
Избушка | 19 |
Сова | 19 |
Вход В Парк | 19 |
Children Playground | 18 |
Спорт Площадка | 18 |
Пушка | 17 |
Слоник | 17 |
Часы | 17 |
Дельфин | 17 |
Черепашка | 17 |
Цветы | 17 |
Цветочек | 16 |
Лебеди | 16 |
Лось | 16 |
Детский домик | 16 |
Башня | 16 |
Статуя | 16 |
Аисты | 16 |
Мишка | 16 |
Указатель | 15 |
Колодец | 15 |
Памятник Архитектуры | 15 |
Телега | 15 |
Жираф | 14 |
Church | 14 |
Ворота | 14 |
Ежик | 14 |
Качалка | 14 |
Сцена | 13 |
Ship | 13 |
Олень | 13 |
Карета | 13 |
Корова | 13 |
Памятная Табличка | 13 |
Скульптура | 13 |
Информационный Стенд | 13 |
Якорь | 13 |
фреска | 13 |
Качельки | 13 |
Памятный Камень | 13 |
Лошадки | 13 |
5. Где самые крутые телки фермы? У нас в клубе на районе!
По мере вхождения в роль аналитика стало интересно поискать, где именно в Москве самое большое число порталов для фарма из одной точки. База данных с координатами порталов была быстро экспортирована в файл с++, а среда программирования Qt позволила достаточно быстро набросать примитивную программу. Для каждого портала в базе анализировалось расстояние до всех других порталов, результаты ближе 40 метров подсчитывались. Алгоритм не умеет находить точки, расположенные МЕЖДУ порталами, из которых, возможно, доставалось бы большее число порталов. Тем не менее, результаты впечатляют!
Третье место достается группе порталов в районе Петровки, 25! Например, с портала "The Art Work" гарантировано достается 10 порталов!!!
Второе место у группы порталов в районе Староватутинского проезда, 12! С портала "Дама с собачкой" без проблем достается 11 порталов, а чуть сдвинувшись на север абсолютно точно достается 12 порталов!!!! Карта ниже:
Победитель в номинации крутейшая ферма Москвы у группы порталов по адресу Нежинская, 13к1! С портала Frogs гарантировано достаются 12 порталов и скорее всего чуть южнее получится достать сразу 13 штук!!! Жители этого дома стопудово наживаются на продаже стаффа и сдаче жилья шейперам!
6. На что рассчитывать, если захотеть обойти 100/1000/10000 порталов кратчайшим путем?
Последние силы были направлены на поиски самых коротких маршрутов между заданным числом порталов. Алгоритм случайным образом выбирает первый портал и далее прыгает на ближайший к нему, никогда не возвращаясь на уже посещенные. Расстояние между порталами считается по прямой, в реальности такие маршруты конечно же будут длиннее. Вычисления повторяются десятки / сотни раз, пока результат не станет нравиться.
6.1 Маршруты из 100 порталов
Самый короткий из найденных начинается из Музеона и продолжается до Новокузнецкой и чуть далее. Итоговая длина 4.52 км:
Почти такой же по длине маршрут в восточной части Бульварного кольца, 4.54 км:
Для разнообразия, маршрут по Сокольникам. 4.94 км:
6.2 Маршруты по 1000 порталов
Подавляющее большинство маршрутов по 1000 порталов находятся внутри Садового кольца. Найти маршрут вне Садового прямо скажем проблематично. Самый короткий 54.6 км:
Почти точно такой же, 55.9 км:
Вариант с заходом на юг от Кремля, 57.5 км:
Из Пресненского района через весь центр к Новокузнецкой, 59.6 км:
Через парк Горького и Музеон, 68км:
Из Останкино в центр, 71.8 км:
Из Щукино(!) в центр, 79.3 км:
Ну и один из первых маршрутов вне центра города, Останкино - Сокольники - Измайлово, 82.8 км:
6.3 Маршруты по 10000 порталов
Прямо скажем, компьютер был совершенно не рад обсчитывать такие маршруты. За несколько часов я получил пару десятков вариантов. Самый короткий 868км:
Отличная работа. Но очевидно, увы, что маршруты, где каждый следующий портал - ближайший к предыдущему - далеко не всегда оптимальны... Так что последнее исследование дает, увы, только достаточно грубую оценку.
Изначальная идея была замахнуться на генетические алгоритмы. Но начав что-то читать на эту тему я понял, что точно не хватит ни знаний ни времени в рамках хобби.
Там даже основная проблема была бы не в задаче коммивояжера как таковой, а в учете всех препятствий, ведь виртуальный трек на картинке проходит сквозь реку, многополосные магистрали, железнодорожные пути и жилые массивы где ему вздумается, а ногами ходить так не выйдет.
Тем не менее, Эльдар, не хотите ли оценить масштабы добавлений и пересчитать порталы тем же кодом спустя три года?
Почему бы просто не отдавать запрос к нянтику на получение информации о карте на максимальном приближении вместо извращения с виртуальной машиной?
Например, в IITC я переназначаю функцию, которая теперь всегда возвращает 17 - максимальное приближение, независимо от зума карты:
window.getDataZoomForMapZoom = function() {
return 17;
}
Да, я не разобрался в javascript-коде, хотя и пытался просмотреть "total-conversion-build.user.js". Вот только он состоит из почти 18000 строк и в некоторых местах код идет сплошняком по 500 символов в строке. Функцию попробую, спасибо! Можете заодно написать, на каком уровне наглости забанят учетку? И добавить меня в чат программеров, связанных с Ingress? 🙂
А сможете разработать програмку, которая показывает, какие порталы считаются униками,либо же какие ещё можно хакать/захватывать для медальки?)
Написать такую программы нельзя, потому что эта информация не выдается ни в саму игру, ни в браузер (в том числе и браузеру с плагинами IITC). Т.е. можно перехватывать хоть какой траффик, но там просто не будет этих данных.
https://ingress-guard.tk/#/downloads - здесь есть плагин в бесплатном доступе, который показывает уникапы.
Можно получить базу данных по порталам отдельного региона?
Уверен, что такая база уже есть. Есть сервера, которые отслеживают все события всех агентов на всех порталах (ну хотя бы с целью мониторинга ачивок). И есть программисты, которые занимаются поддержкой этих серверов. Попробуйте выйти на них. А тот способ, который выбрал я, во-первых не автоматизирован, во-вторых, скорее всего очень быстро забанят учетку.
Подскажите пожалуйста можно узнать какие порталы заряжают другие агенты (конкретный агент)?
Нет, эти данные тоже не распространяются серверами Niantic. Т.е. по сути собрать можно только те данные, которые видно в IITC. Да и то, с недавних пор за непрерывный сбор данных прям почти гарантировано наступает бан.