Chat:Ru/2020-06-06
tutubalin: Uljahn а как ты частоту процессора узнаёшь?
gybson_samara: Uljahn есть трехмерный массив нампи, как бы сравнить arr[y,x] == [0,0,2] ?
shegeley: Блин. Как же меня задрал этот Бэтман. Тривиальнейшая задача. Уже третий день фейлится на трех тесткейсах.
Uljahn: tutubalin: выполняю линуксовую команду "cat /proc/cpuinfo"
Uljahn: gybson_samara: np.any(), np.all() не то?
gybson_samara: Uljahn спасибо, проверю
ilt: Uljahn а что такое tecless move?
735487: ilt: если это первый ход в доску. то походить так чтобы противник ходил в ту же доску
Uljahn: чтобы если заранее использовать этот ход, если он вдруг войдёт в выигрышную комбинацию - иначе ты противнику подаришь фри мув
Uljahn: -если
Uljahn: т.е. если этим ходом выигрываешь, противник посывлается на завершённую мини-доску
Uljahn: tutubalin: http://chat.codingame.com/pastebin/b8e27b02-f843-4c98-a34e-a85584f7c783
tutubalin: а зачем делать cat?
tutubalin: нельзя сразу файл открыть и прочитать?
gybson_samara: крестики забавные конечно
tutubalin: Uljahn file = open("/proc/cpuinfo","r") for line in file:
print(line)
tutubalin: http://chat.codingame.com/pastebin/31932d1e-e719-4f58-ae5c-decf191d5328
rmuskovets: tutubalin file = open("/proc/cpuinfo", "r") print(file.read())
tutubalin: rmuskovets тоже можно. но по ссылке вариант, который парсит данные
tutubalin: так-то можно вообще print(open("/proc/cpuinfo", "r").read())
tutubalin: интересно, на меньшей частоте делает больше сим
tutubalin: один и тот же код запускаю. на 3GHz делает 2.4m сим. на 2.2GHz делает 2.8m сим.
rmuskovets: bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds
rmuskovets: tutubalin что такое сим?)
tutubalin: симуляция одного хода
tutubalin: UTTT
rmuskovets: tic-tac-toe (крестики-нолики)?
tutubalin: ага. https://www.codingame.com/ide/puzzle/tic-tac-toe
tutubalin: один из самых популярных подходов - Monte Carlo Tree Search.
tutubalin: его успех во многом зависит от того, как быстро симулируешь игры. на местном жаргоне ролаут - разыгрывание одной игры до конца, сима - симуляция одного ход (а так же вообще симуляция, например во фразах "а симу уже написали?")
Uljahn: rollout - это стандартный термин в MCTS, означает фазу алгоритма, где дерево разворачивается (roll out) до терминального состояния, что-то типа доигровки
Uljahn: соответственно, нужно реализовать правила игры, а это и есть симуляция
gybson_samara: и противника реализовать
tutubalin: да у противника всё то же самое
tutubalin: я тут обнаружил, что мой бот в CSB, занимавший 3814 место из 5330 (то есть лучше примерно 30% ботов) просто крашится на первом ходу из-за несовместимого инпута
735487: tutubalin: надо считать роллауты. кол-во ходов мне кажется не очень потому что рандомные роллауты могут быть разной длины. а вот более тяжелая функция это выбор ноды поэтому там больше корреляция должна быть если роллауты считать
735487: tutubalin: про CSB в голде там инпуты меняются
735487: запили правильные инпуты будешь еще выше ))
tutubalin: amurushkin количество ролаутов не такое стабильное. в начале игры они длиннее, в конце короче
Uljahn: надо код резетить, тогда правильные инпуты появятся
Uljahn: самые длинные - на втором ходе, поэтому ими и меряются
tutubalin: по количеству ходов оценивать именно производительность кода проще
tutubalin: да, я переключился на JS, получил норм инпуты, по традиции загольфил это всё до 5 строчек и засабмитил
tutubalin: уже в топ500 голды
Uljahn: буст запилил?
tutubalin: не. -3v )
Uljahn: мда, концепция open("/proc/cpuinfo","r") чужда моему виндузовому мышлению :(
735487: tutubalin: поэтому меряют на 2 ходу. так сравнивать проще
735487: Uljahn: почему? cat же делает тоже самое. читает файл
tutubalin: создай на том же диске где и код в корне папку proc, в неё файл cpuinfo, напиши туда чо хошь, и будет работать и под виндой тоже )
Uljahn: а кто положит туда нужную инфу?
tutubalin: ты )
tutubalin: ты ж знаешь параметры проца
Uljahn: :confused:
Uljahn: т.е. к линуксе кто-то ручками положил файл с параметрами проца в папку?
Uljahn: *в
tutubalin: не, там автоматика делает. я говорю, как можно сделать, чтобы код можно было локально под виндой тестировать
tomatoes: а что потом предполагается с этим процессором делать?
tutubalin: можно конечно просто вставить условие на винду
tutubalin: tomatoes мы выясняли, как узнать частоту проца на CG. это бывает важно для оценки производительности, потому что каждый бой может играться на другом железе. да и того же самого железа частота прыгает (особенно когда кто-то слишком активно использует AVX2)
tomatoes: вроде понял. я просто на 95 мс стопаю и выдаю что насчитало :thinking:
tutubalin: ты считаешь, сколько ролаутов/ходов успел просчитать?
tomatoes: роллауты считаю
tutubalin: от запуска к запуску сильно меняется?
735487: у меня на разных процах бывала разница от 60к до 90к
735487: а на одном и том же проце разница меньше 1000 обычно
tutubalin: вот чтоб понять, зависит ли это от проца, и нужно как раз добыть инфу про проц. это ответ на вопрос tomatoes
735487: я раньше так наивно полагал что в csb улучшил код в 1.5 раза )) а оказалось там были разные процы ))
tomatoes: то есть как бы для отладки/профилирования?
tomatoes: я просто подумал какието фичи/константы перебрасываются в зависимости от проца :thinking:
Uljahn: правильно говорят - невозможно улучшить то, что нельзя измерить
tutubalin: под проц подстраиваться - это уже высший пилотаж
735487: под проц пусть компилятор подстраивается. у него это неплохо получается
Uljahn: а смысл? у противника такой же проц
735487: ну один использовал аvx а другой нет. уже есть разница
Uljahn: на CG вроде все процы имеют поддержку AVX2
tutubalin: самая жесть, что у моего проца нет ни AVX2, но POPCNT, ни PDEP
tutubalin: приходится самописными инструкциями заменять или на CG тестить
735487: у меня тоже кстати не все инструкции на домашнем есть
YurkovAS: amurushkin проверял инставины в крестиках?
vrabosh: подскажите как узнать здесь идекст?
vrabosh: azCount2,6,8.min()
YurkovAS: тяжелая операция, проверял неоптимальным способом - только все ухудшилось, очень сильно.
vrabosh: это numpy
735487: YurkovAS: нет не проверял. мне так и казалось что будет хуже только
YurkovAS: понял, когда-нибудь еще раз проверю. там не просто это сделать, чтобы быстро работало.
YurkovAS: может конечно показалось, но вроде бы, смитс писал как-то в чате, что у него без книги, бот в крестиках доходит до 2-го места. значит можно еще улучшить.
YurkovAS: миарэм сейчас без книги на 11 месте, а с книгой на 4-5.
735487: у него более 120к роллаутов
735487: ну я вот без книги на 6-12 смотря как запушат-спустят ))
735487: я вот пока не понимаю как можно получить в 2 раза больше роллаутов чем у меня сейчас есть
735487: там наверное куча хитрых инструкций. одну он мне подсказал когда я задал конкретный вопрос как сделать то и то. у меня это сразу около 5к роллаутов тогда дало кажется
735487: если не больше
Uljahn: vrabosh: np.argmin()
vrabosh: a = [2,6,8] a[np.argmin(azCount[a])] вот так получается тогда
Uljahn: так ты индекс просил или нет?
vrabosh: да, но из всего массива
Uljahn: не понятно, что за массив
vrabosh: а спомощью А в даном случае, я показываю из каких искать минимум
vrabosh: aa = np.array((10))
vrabosh: min(aa[2,4,6,3]) - из этого
tutubalin: amurushkin я вижу два варианта: 1. как-то параллельно считать несколько роллаутов 2. не доигрывать до конца, если итог и так ясен
vrabosh: поставил себе линукс. так не привычно по мелочам..
Uljahn: ты неправильно аа задаёшь, это скаляр получается
Uljahn: tutubalin: голосую за вариант 2
vrabosh: aa = np.zeros(zone_count, dtype=np.int16)
tutubalin: Uljahn параллельно можно и на одном ядре считать
Uljahn: я в курсе
YurkovAS: а еще говорят, что на питоне просто писать :thinking:
Uljahn: так это не питон
Uljahn: отдельный практически DSL
vrabosh: может можно через масивы как проще сделать такое.. без нампи
vrabosh: я вот в платинум рифт пытаюсь сообразить щаз
Uljahn: vrabosh: что такое aa[2,4,6,3]? опять не понятно, что ты вообще сделать хочешь
tutubalin: вариант 3. использовать багу процессора, чтобы влезть в память процесса оппонента и стырить его дерево
vrabosh: есть массив на 100, в нем хочу среду 10 ячеек найти значения минимальные
vrabosh: и узнать где оно лижит
Uljahn: а, узнать, где оно в БОЛЬШОМ массиве лежит?
Uljahn: хехе
vrabosh: да
Uljahn: попробуй масочки
vrabosh: т.к. в нампи можно сделать маску, вот делаю маску и мин.. а потом ищу среди этого где лежит)
vrabosh: a = G[zid]
mg = a[azCount[a].min()]
vrabosh: вот как щаз получилось
Uljahn: как ты 10 ячеек задаёшь? индексами или значениями?
vrabosh: индексами.. в планитум рифт играю, там как раз сразу граф показывают..
vrabosh: пока выбрал тактику, ходить на ближайшие ячейки, на которые не ходил.. на котору сходил +1 ей делаю
vrabosh: но мне такое ащущение что я правила недопонял.
vrabosh: "1 4 3" is an invalid action: There aren't enough pods (0 instead of 1) on hex 4 (and 58 additional errors of the same type)
vrabosh: что это за ошибка?
YurkovAS: vrabosh в локальной иде подсунь такое же состоение игры и потом запусти в режиме debug - оно остановится на ошибке и можно будет поотматывать назад. в общем в локальной ide проще исправлять ошибки.
vrabosh: ошибки нет, ищу способ короче сделать.
vrabosh: а ну кроме этой.. я не понимаю что он хочет от меня
vrabosh: он как бы работает, но выдает эту ерунду..
Uljahn: ты пытаешься отправить поды с клетки, где их нет
Uljahn: игра не будет за тебя остатки подсчитывать, надо трекать самому
vrabosh: zid, owner_id, pod[0], pod[1], visible, platinum = [int(j) for j in input().split()] if pod[mid]:
vrabosh: вот с этой клетки я отпправляю..
vrabosh: мои поды этож pod[my_id]?
vrabosh: все понял, скорей всего надо не по одному отправлять а колво их указывать сколько стоит и сколько хочу отрпавить.
Uljahn: можно и по одному, но тогда надо уменьшать своё количество каждый раз, как отправляешь, чтобы не отправить лишку
vrabosh: вот как раз лишних и отправляю..
vrabosh: из за того что англ не знаю, правила видать не понял..
vrabosh: есть лимит сколько я могу за ход раз отпрвлять?
Uljahn: количество команд не ограничено, вроде, но не более, чем суммарно есть юнитов на всех клетках
vrabosh: т.е. если у меня 10 юнитов, а они на 3 клетках, то я только 3 команды могу сделать?
tutubalin: не более 10 команд: по команде на юнит
Uljahn: ^
Uljahn: это очевидное ограничение, когда каждому юниту даёшь персональную команду
735487: 2. не доигрывать до конца, если итог и так ясен, не понятно как это определить
Uljahn: когда выигрышные паттерны заблокированы
735487: тут еще надо выяснить что быстрее постоянно проверять это либо просто доиграть
vrabosh: что вы обсуждаете?
tutubalin: UTTT
gybson_samara: до чего крестики хороши для нампи
gybson_samara: я уже легко получаю срезы, диагонали, суммы по любой прихоти
gybson_samara: прям сказка
gybson_samara: if np.flipud(self.mm[MYMAP,:,:]).diagonal.sum() == 3
self.ismyfield = True
gybson_samara: я прям в эйфории
tutubalin: это всё меньше похоже на питон, и всё больше на перл )
gybson_samara: главное чтобы не ПРРОЛОГ, а то чувствуются зачатки
kotobotov: так ну че, новый челендж
kotobotov: а я все скатываюсь вниз и вниз в рейтинге)
kotobotov: как вам новый/старый челендж?
wlesavo: да как-то незнаю даже, лень возвращаться что-то в него когда еще столько других игр кругом
BorisZ: все зарегились, никто ничего не делает )
wlesavo: я не регался даже)
wlesavo: я подумал что если будет игра в которую я не играл то вольюсь, а так не хочется
kotobotov: я не регался тож
BorisZ: я зарегился, не жалко ведь, даже если не напишу ничего, людям приятно
BorisZ: одно дело 10 человек обойти, другое дело 100
BorisZ: я почитал даже стейтмент и посмотрел реплеи - короче фулл соммитмент
BorisZ: и даже придумал как правильно делать надо бы )
BorisZ: но дальше не идет дело
BorisZ: сила есть и воля есть а силы воли нет (
inoryy: gybson_samara эй, не гнать на дядю пролог, веселый язык
vrabosh: а для меня это новый бот)
BorisZ: по моим прикидкам будут работать 2 идеи - потенциальные поля + минимакс на взятие\защиту базы, неглубокий
BorisZ: поля надо подбирать что будет притягивать и с какой силой, примерно - платина, база, разведка, враги
BorisZ: сначала минимакс, если нет результата то поля заполнять, после движения каждого бота пересчитывать можно на ограниченный радиус
BorisZ: ну все, облегчил душу, темерь можно ничего не делать со спокойной совестью )
gybson_samara: @inoryy слишком веселый даже
gybson_samara: крестики конечно угарная игра, можно висеть на втором месте сколько хочешь =)
gybson_samara: как сабмит в бронзе крестиков, так под полсотни игр с 4-5 поражениями, очень позитивная игра
wlesavo: а можно теклса добавить и сразу в голду)
gybson_samara: пока сразу в серебро
gybson_samara: напомни про тексл, он может есть сразу у меня
gybson_samara: в силвере меня сразу 1 посеяли, гыг, мож чего не понимаю
gybson_samara: а, вот, 240
gybson_samara: в серебре народу и нет почти
wlesavo: ну это про возвращение на ту же доску когда находишься на пустой доске
gybson_samara: я понял про что ты, не дать противнику попасть на выгодную доску, это есть
gybson_samara: чтобы он сходил и послал меня на нужную доску нет и не думаю пока
gybson_samara: надо добавить стратегию игры на метадоске, а то пока лепит в первую выгодную клетку
gybson_samara: ну когда мне дают свободный ход,а я ставлю крест без учета глобальной политики захвата доски
gybson_samara: я один передвинул считывание координат противника в конец цикла?
gybson_samara: 19% - 8, дело пахнет керосином
Uljahn: чё ты там всё двигаешь? :smirk:
gybson_samara: Uljahn нолики
gybson_samara: ну т.е. коэффициенты оценки
gybson_samara: аааа, передвинул, инпут передвинул в конец цикла, чтобы if на -1 не ставить
gybson_samara: http://chat.codingame.com/pastebin/9eeac219-dc26-4612-bbb0-a961df2b387c
Uljahn: а, понятно, я вообще первый ход из цикла вынес
gybson_samara: я пока так играю score = sc_ismatch*2 + sc_playscore*2 + sc_pattern*1 - sc_enemy*1 - sc_finished*1 + sc_metapat*1
gybson_samara: тискаю цифры
Uljahn: на эвристике что ли? в глубину не смотришь?
wlesavo: ну у меня так мид голд
wlesavo: на нулевой глубине
Uljahn: прикольно
gybson_samara: пока не смотрю
gybson_samara: но тут довольно сложно заметить ошибку, должен сказать
gybson_samara: не так просто составить эвристику
gybson_samara: но с точки зрения программирования и математики это самый четкий эвент пока для меня
tomatoes: в смаш-зе-коде у меня что-то такое же
ilt: не могу запустить брутал тестера для крестиков
ilt: кто-нибудь знает как задается уровень лиги
ilt: по моему рефери просто не начинает отдавать вывод
YurkovAS: -r "java -jar -Dleague.level=2 referee.jar"
ilt: Спасибо!
ilt: А вывода от рефери нет в json
ilt: или я что-то не вижу
TTeaLL: если я нажал сабмит в конквесте по написанию бота, и автоматически начали происходить бои, то как прекратить этот процесс, я был 243 отошёл и теперь я 36, я думал если перейти на экран с кодом игры остановятся
TTeaLL: или я чего-то не понимаю
Uljahn: сабмить, не бойся, бои автоматом пройдут, ничего делать не нужно
Uljahn: ограничений на количество сабмитов почти нет
Uljahn: прервать нельзя, но можно засабмитить предыдущую версию - она в хистори (вкладка слева)
ilt: в бруталтестере на 100 боев новая версия выигрывает 100% боев и никаких таймаутов
Uljahn: а где появляются таймауты?
Uljahn: на сабмите или в IDE?
ilt: в иде
ilt: сабмит не делал
Uljahn: может, в иде с другими флагами компилится? попробуй сабмитнуть
ilt: в сабмите тоже вылетает
ilt: бью только тех кто вылетает на первом ходе
wlesavo: за временем следишь?
wlesavo: брутал тестер же на твоем железе вроде играет
tomatoes: может изза памяти вылетает? 768мб лимит вроде
ilt: локально новая версия ест больше памяти, но в пределе это 200 мб
ilt: старая в пределе 40 мб
ilt: запустил еще два раза по 100 игр
ilt: все-таки единичные вылеты есть
ilt: 3 случая на 200 игр
ilt: хотя нет это не вылеты, это просто поражения
ilt: все игры до конца дошли
ilt: usedBytes 104673936
ilt: ход до вылета