>> То что не реализуют защиту муравейника
Её реализуют, конечно, просто не первым делом.
>> Пробовал на PHP прикрутить A*
Мне, кроме стратегии, очень интересно как раз оптимизация быстродейтсвия — т.е. получится ли PHP боту соревноваться с быстрыми языками?
Сейчас мой бот при управление 300 муравьями (пути найдены с помощью A*) тратит на ход около 0.05..0.1 секунды, при таймауте в 0.5, что вполне приемлемо.
И ещё есть хороший резерв по оптимизации.
К сожалению, надо очень много времени (которого всегда нет) на реализацию сложного поведения — поэтому та же защита муравейника у меня только сейчас выбилась в неотложные задачи.
>> двух в одну клетку послать, а это бот контролирует
Насколько я вижу, команды муравьям не кэшируются перед отправкой, и возможность походить анализируется для каждого муравья непосредственно перед его ходом.
В этом случае в следующей ситуации муравьи могут погибнуть:
клетка c окружена водой, оттуда можно походить только на b.
муравей B стоит на клетке b, и ходит на клетку c (туда ещё никто не походил), приказ ушёл серверу.
муравей A стоит на клетке а, и ходит на клетку b (туда ещё никто не походил), приказ ушёл серверу.
муравей C стоит на клетке c, и единственное место, куда он может пойти — клетка b (остальное — вода).
Но теперь он хоть пойдёт туда, хоть нет — он столкнётся с другим муравьём.
Такие ситуации возникают достаточно часто при большом скоплении муравьёв. Проще всего это решить кэшированием ходов, чтобы их можно было поменять (не отправлять сразу серверу).
>> Хватает чтобы держаться в рейтинге примерно в 50-60 позициях (max skill 49).
Сейчас у сотой позиции скилл 63.39 :)
>> Бот почти переписан с нуля в ООП формат.
Не опасаетесь, что потеряете в быстродействии? Для такого большого числа итераций, которые необходимы, это может быть существенно.
>> блокирование для хода клеток, у которых с 3-х сторон вода
Смысл в них есть — если, например, куча своих муравьёв столпится рядом, может оказаться, что одному из муравьёв нужно будет туда спрятаться, чтобы его не убило своим же муравьём. (Кстати, я мог пропустить, но, кажется, в статье не упомянуто, что свои муравьи, походившие на одну и ту же клетку, погибают.)
Интересные факты:
Изначально организаторы рассчитывали использовать 2 сервера, но их уже 5.
Боту доступно как минимум 1.5 GB памяти.
Процессоры, используемые на серверах, уровня примерно i7.
>> В большинстве ботов не реализована защита муравейника
Подозреваю, это потому, что в первую очередь все реализуют поиск пути и распределение муравьёв на сбор еды.
При этом боты в топе — совершенно не показатель, потому что это — как правило сильно устаревшие версии.
Дело в том, что после загрузки новой версии бота на сервер его рейтинг сбрасывается, и ему нужно сыграть 10-15 игр, чтобы вернуться на предыдущую (хотя бы) позицию.
Т.к. серверов не очень много, а ботов — в избытке, то игры проводятся относительно медленно, и чтобы отыграть одну игру, надо 4-6 часа простоять в очереди. Т.е. если старая версия бота и так более-менее справляется и не сдаёт откровенно позиции, имеет смысл аплоадить следующую версию только при значительных изменениях.
Текующую же версию очень удобно тренировать на TCP-серверах. В этом случае код исполняется на вашей машине, вы только обмениваетесь ходами с сервером.
Во-первых, это позволяет играть практически без пауз, во-вторых, там по-настоящему сильные и развивающиеся противники, и в-третьих — очень удобно дебажить бота, т.к. весь вывод можно делать в файл у себя — тайминги и т.п.
По поводу этого многословного описания правил битв имеется хороший комментарий:
«The real gem is Battle Resolution:
[цитата — два абзаца тезисных описаний битв]
Really? That's the Battle Resolution „specification“?
Then they point to a separate page (I guess it's not technically part of the Game Specification), which uses 2 descriptions, a bad analogy, a bunch of examples (kind of useful), and an obtuse math formula to try and get this idea across. Finally, at the very end of all of this, are 5 crystal clear, concise, simple lines of code:»
Code: Select all
for every ant:
for each enemy in range of ant:
if (enemies in range of ant) >= (enemies in range of enemy) then
the ant dies
break out of enemy loop
Вольный перевод:
«Настоящий перл — это определение исхода боя:
[цитата — два абзаца тезисных описаний битв]
Да ну? Это и есть „спецификация“ поединков?
После этого они отсылают на отдельную страницу [...], которая предлагает ещё два описания, плохую аналогию, кучу примеров (отчасти полезных), и нереальные формулы, чтобы осветить проблему со всех сторон. В конце концов, после всей этой мути, имеется 5 кристально ясных, чётких, простых строчек кода:»
Не хватает возможности выполнить обычный клик по элементу в режиме «Documents».
Например, если скрытый блок показывается по нажатию на кнопку, то чтобы на неё нажать (а не выделить и подсветить в DF) мне приходится или закрывать DF, или переключаться в другой режим.
Проще всего, наверное, было бы считать «обычным» клик с зажатым ctrl или shift.
Спасибо, давно хотел подобную вещь.
Бывает, заходишь в пост просто чтобы получить некоторое представление о интересной теме, к которой не имеешь отношение и не разбираешься. И делаеш это за пятиминутным перерывом на чай.
И в этом случае хочется как раз прочитать только основные комментарии, которые существенно дополняют статью. В остальных комментариях зачастую прения специалистов, которые могут быть не очень понятны и неинтересны.
А если обсуждение заинтересует или мне есть что сказать по теме — я, конечно, разверну ветку или отключу виджет вообще.
Из пожеланий — было бы удобно разворачивать ветку не только вниз, но и вверх.
Мне кажется, пост незаслуженно получил такую низкую оценку.
И у меня такая. Кроме сумочки, переходников и аккумуляторов (4 АА и 4 ААА) в комплекте, 9009 отличается ещё тем, что можно использовать токи 900 и 1800 mA для быстрой зарядки. Правда, при 1800 вроде нельзя заряжать больше двух аккумуляторов одновременно: их нельзя ставить в соседние слоты, чтобы не перегревались.
В остальном ЗУ такое же, как описанное в посте.
Ещё можно менять по ctrl+колёсико. А выпадающий список масштаба, чтобы его всё время было видно, можно просто добавить на панель справа от адресной строки.
Понял. Да, такой подход позволяет решить большую часть коллизий, если нет толпы.
Её реализуют, конечно, просто не первым делом.
>> Пробовал на PHP прикрутить A*
Мне, кроме стратегии, очень интересно как раз оптимизация быстродейтсвия — т.е. получится ли PHP боту соревноваться с быстрыми языками?
Сейчас мой бот при управление 300 муравьями (пути найдены с помощью A*) тратит на ход около 0.05..0.1 секунды, при таймауте в 0.5, что вполне приемлемо.
И ещё есть хороший резерв по оптимизации.
К сожалению, надо очень много времени (которого всегда нет) на реализацию сложного поведения — поэтому та же защита муравейника у меня только сейчас выбилась в неотложные задачи.
>> двух в одну клетку послать, а это бот контролирует
Насколько я вижу, команды муравьям не кэшируются перед отправкой, и возможность походить анализируется для каждого муравья непосредственно перед его ходом.
В этом случае в следующей ситуации муравьи могут погибнуть:
клетка c окружена водой, оттуда можно походить только на b.
муравей B стоит на клетке b, и ходит на клетку c (туда ещё никто не походил), приказ ушёл серверу.
муравей A стоит на клетке а, и ходит на клетку b (туда ещё никто не походил), приказ ушёл серверу.
муравей C стоит на клетке c, и единственное место, куда он может пойти — клетка b (остальное — вода).
Но теперь он хоть пойдёт туда, хоть нет — он столкнётся с другим муравьём.
Такие ситуации возникают достаточно часто при большом скоплении муравьёв. Проще всего это решить кэшированием ходов, чтобы их можно было поменять (не отправлять сразу серверу).
Сейчас у сотой позиции скилл 63.39 :)
>> Бот почти переписан с нуля в ООП формат.
Не опасаетесь, что потеряете в быстродействии? Для такого большого числа итераций, которые необходимы, это может быть существенно.
>> блокирование для хода клеток, у которых с 3-х сторон вода
Смысл в них есть — если, например, куча своих муравьёв столпится рядом, может оказаться, что одному из муравьёв нужно будет туда спрятаться, чтобы его не убило своим же муравьём. (Кстати, я мог пропустить, но, кажется, в статье не упомянуто, что свои муравьи, походившие на одну и ту же клетку, погибают.)
Интересные факты:
Изначально организаторы рассчитывали использовать 2 сервера, но их уже 5.
Боту доступно как минимум 1.5 GB памяти.
Процессоры, используемые на серверах, уровня примерно i7.
Подозреваю, это потому, что в первую очередь все реализуют поиск пути и распределение муравьёв на сбор еды.
При этом боты в топе — совершенно не показатель, потому что это — как правило сильно устаревшие версии.
Дело в том, что после загрузки новой версии бота на сервер его рейтинг сбрасывается, и ему нужно сыграть 10-15 игр, чтобы вернуться на предыдущую (хотя бы) позицию.
Т.к. серверов не очень много, а ботов — в избытке, то игры проводятся относительно медленно, и чтобы отыграть одну игру, надо 4-6 часа простоять в очереди. Т.е. если старая версия бота и так более-менее справляется и не сдаёт откровенно позиции, имеет смысл аплоадить следующую версию только при значительных изменениях.
Текующую же версию очень удобно тренировать на TCP-серверах. В этом случае код исполняется на вашей машине, вы только обмениваетесь ходами с сервером.
Во-первых, это позволяет играть практически без пауз, во-вторых, там по-настоящему сильные и развивающиеся противники, и в-третьих — очень удобно дебажить бота, т.к. весь вывод можно делать в файл у себя — тайминги и т.п.
Вот самый вроде активный сервер.
«The real gem is Battle Resolution:
[цитата — два абзаца тезисных описаний битв]
Really? That's the Battle Resolution „specification“?
Then they point to a separate page (I guess it's not technically part of the Game Specification), which uses 2 descriptions, a bad analogy, a bunch of examples (kind of useful), and an obtuse math formula to try and get this idea across. Finally, at the very end of all of this, are 5 crystal clear, concise, simple lines of code:»
Code: Select all
for every ant:
for each enemy in range of ant:
if (enemies in range of ant) >= (enemies in range of enemy) then
the ant dies
break out of enemy loop
Вольный перевод:
«Настоящий перл — это определение исхода боя:
[цитата — два абзаца тезисных описаний битв]
Да ну? Это и есть „спецификация“ поединков?
После этого они отсылают на отдельную страницу [...], которая предлагает ещё два описания, плохую аналогию, кучу примеров (отчасти полезных), и нереальные формулы, чтобы осветить проблему со всех сторон. В конце концов, после всей этой мути, имеется 5 кристально ясных, чётких, простых строчек кода:»
Спасибо.
Приходится всё время в крестик целиться.
Например, если скрытый блок показывается по нажатию на кнопку, то чтобы на неё нажать (а не выделить и подсветить в DF) мне приходится или закрывать DF, или переключаться в другой режим.
Проще всего, наверное, было бы считать «обычным» клик с зажатым ctrl или shift.
Или позволить самому задавать сочетание в стандартном менеджере быстрых кнопок (сейчас же этого сделать нельзя?)
Какой вы используете?
Бывает, заходишь в пост просто чтобы получить некоторое представление о интересной теме, к которой не имеешь отношение и не разбираешься. И делаеш это за пятиминутным перерывом на чай.
И в этом случае хочется как раз прочитать только основные комментарии, которые существенно дополняют статью. В остальных комментариях зачастую прения специалистов, которые могут быть не очень понятны и неинтересны.
А если обсуждение заинтересует или мне есть что сказать по теме — я, конечно, разверну ветку или отключу виджет вообще.
Из пожеланий — было бы удобно разворачивать ветку не только вниз, но и вверх.
Мне кажется, пост незаслуженно получил такую низкую оценку.
Действительно, на фото в посте, вероятно, показывается ток зарядки или разрядки, т.е. исходное состояние не совсем понятно.
В остальном ЗУ такое же, как описанное в посте.
Правда, приходится использовать прокси на винде (privoxy).