Pull to refresh

Comments 43

… да в такое русло, чтоб деньги приносило. Предлагайте!
Сами придумывайте. Просто видно, что у Вас есть знания, упорство и свободное время, а тратите Вы это на всякую хрень. Напишите свой биллиард, или гольф там, ну или боулинг или кёрлинг.
А зачем нужен очередной биллиард, гольф, боулинг или кёрлинг? Ничем не лучше, чем «хрень», описанная в данной статье.
А статья очень классная.
торговый робот — как самое очевидное :)
Да да да. Или покерный бот. Слышал от своих друзей это уже много раз. Осталось решить — покер или биржа =) И там и там — одни боты! Правда, на биржах профессиональные, а в покере...? Чуть «менее» профессиональные? И то и то — игра с неполными условиями.
Пожалуй, посредственная игра с полными условиями, на которой можно заработать — это массовое распознавание капчи. Ну, или майнинг криптовалют. Что ещё?… надо подумать.
Решение с ударами от борта очень красивое, да и вообще проделана огромная работа. В таблице представлена реальная вероятность выигрыша для вашего бота или это просто пример?
Спасибо. Чуточку округлённая в лучшую сторону для чистоты восприятия.
Проделанная работа и результат достойны уважения (если оставить в стороне моральную подоплеку использования бота в игре). Азарт и упорство способны свернуть горы )). В целом статья очень понравилась.
А какие данные ходят между клиентом и сервером? Не проще ли было бы построить модель на них?
Не интересовался, но, исходя из здравого смысла гейм-дизайна, между клиентом и сервером целесообразно было бы пустить только тайм-ауты, чат и инфо о нанесении удара (пара угол/сила). Всё остальное (так как игра строго детерминирована) можно считать на клиенте(тах). Так что врядли в трафике гуляют позиции шаров. Можете подтвердить или опровергнуть мои доводы с WireShark. Тут меня преследовал азарт больше образо-распознавательский, чем трафико-копательский.
Ваш оппонент как-то должен получать расстановку шаров после вашего удара. Скорее всего, сервер обменивается с клиентами всей необходимой информацией.
Если использовать детерминированные вычисления — то оппоненту достаточно узнать действие игрока. Позиция шаров после этого вычисляется однозначно.

Другое дело, что шаров в бильярде все же не настолько много, чтобы имело смысл экономить на их позициях.
Глядя на «моделируемое пространство», подумалось, что можно сделать именно такую «странную» игру — играть на поверхности тора (по сути бесконечной), в которой лузы это просто дырки в поверхности стола… :)
Каков же будет процент играющих в такой бильярд? Целевая аудитория? 80% играющих — это школоло. Им не такие игры нужны. Процент айтишников и математиков, которые смогут потенциально заинтересоваться — капля в море. Это моё личное мнение, которое может не совпадать с действительностью. Надо делать что-нибудь массовое… современное…
Ну, играли же в Lunar Pool :)
image
Генератор абстракций интереснее… и мы все еще ждем сорцы! :)
Не хватает какой-нибудь таблички со статистикой результатов или чего-то такого. Я не готов прям щас смотреть трёхчасовое видео.
А так, очень здорово, круто!
Действительно, совершенно нетривиальная задача. Есть что-то от реверс-инжиниринга. :)
Насколько я понял, элемент самообучаемости напрямую исходит из собранной статистики?
Да. Самообучаемость идёт только в плане выбора комнаты для игры.
Все-таки задумка с чатом неудачно реализована. Есть несколько неудачных фраз, из-за которых очевидно, что играет бот. Ну не может человек повторять как дятел настолько длинные фразы, да еще и не в тему…
Согласен, чат провален и нелеп. Но, во-первых, как минимум, за те короткие 5 минут, которые длится раунд, за то небольшое количество фраз (7 — 10), которые успевает сказать бот, вряд-ли один игрок сможет о чём-то догадаться, и, во-вторых, как максимум, не стояло глобальной цели не выдать бота. Пусть догадаются! Да, будет чуточку забавнее. Это всё for fun!
Играю (нет не ботом, а сам) в 8 Ball Pool на андроиде.
Немного смутили другие пропорции и рикошеты без учета силы удара и направления крута… неестественно всё смотрится, наверно это сильно упрощает программирование?
ожидал в конце таблицу, где первые 100 мест занимают ваши боты!
авторы игры работу не предложили? :)
Бот есть только у меня. Пожалуй, авторы игры вообще не догадываются о моём существовании.
удивлён не стопроцентным показателем побед над человеческим мозгом, не очень сильным в геометрии (в сравнении с машиной).
Вот когда бот будет думать хотя бы на шаг вперед — плюс учитывать кручение — тогда и будет близкий к 100% результат.

А сейчас бот периодически попросту мажет, как видно на видео.
Имеет смысл записывать игры (позиции до/после удара) чтобы тестировать модели физики. Судя по всему вращение и проскальзывание как-то странно реализованы.

Для предотвращения игры чужими шарами достаточно чтобы функция определения типа выдавала еще «уверенность определения». Потом достаточно прицелиться в хорошо определенный шар (или пару) и посмотреть на зеленый/красный ободок.
Я думал об этом. Даже вводил весовые функции на множестве {выбор_лучшего_удара, выбор_достоверного_шара}. Глючило.
В бильярде есть пара очень важных вещей, которые должны быть обязательно запрограммированы:
1. Кручение (качение вращающегося шара, столкновение вращающихся шаров, закручивание от столкновения с бортом и т.д.) Я пробовал писать бота, но понял что именно здесь начинается такая математика, что придется потратить на неё много времени. (играл на мейл.ру)
2. В результате удара шары должны встать так, чтобы следующий удар можно было сделать очень легко, а потом опять и опять — надо думать всю игру наперед, наподобие как в шахматах, тогда результат будет убойный. Все живые игроки, которых показывают по телевизору пытаются так думать насколько у них это получается.

Информация о расстановке шаров должна обязательно раздаваться всем клиентам. Т.к. клиенты аппаратно и программно разные, в том числе в математике может присутствовать рандом.
Спасибо за чёткие рекомендации. Я, как играющий в снукер, знаю о них не по наслышке. Пока что так, а вот во второй версии надеюсь улучшиться. Есть куда расти.
Браво! Хабр торт, автор великолепен — куча удивительно красивых решений.

А почему не стали использовать embedded browser (тот же IE, либо CEF)? С «палевом» проблем не будет, зато автоматизация многих действий должна стать значительно проще (честно, меня очень смутила реализация получения текстовых данных путем выделения мышью и копированием) + это будет одно окно, что визуально приятнее + есть возможность стрипнуть лишнее со страницы в принципе, во имя эстетики, конечно же :)

В целом же, очень хочется увидеть следующую статью, где вы все-таки найдете способ «виртуализировать мышь» и не трогать настоящий курсор вообще + реализацию новых стратегий, там есть куда копать, уверен (кручение, позиционирование и много чего еще). Это круто, мы ждем, однозначно!

И да, лучше не публикуйте исходники / продукт, игра будет обречена, либо придется переквалифицировать ее в соревнование ботов.
Посмотрел видео — стоит шевелить кием, имитируя прицеливание, в момент калькуляции варианта удара (да и в целом перед ударом, это резко отличает вас от обычного игрока). Иногда расчеты занимают продолжительное время, а кий фиксирован, противник видит это. Решение не найдено, срабатывает ваш failback на последних секундах, кий резко переключается на запасной вариант и делает удар. Наличие 3-4 повторений этого сценария за игру уже ставит под сомнение «человечность» оппонента.
Спасибо, обязательно буду стремиться к embedded browser.
У меня есть подозрение, что перебор позиций можно сильно ускорить (срезать дубли / учесть зеркальность) — это где рикошеты
По поводу ваших функций подгонки. Посмотрите в сторону логистической регрессии и как на её основе строят скоринговые модели.
Sign up to leave a comment.

Articles