Chat:Ru/2020-06-06

From CG community
Jump to navigation Jump to search

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

Default avatar.png rmuskovets: tutubalin file = open("/proc/cpuinfo", "r") print(file.read())

tutubalin: rmuskovets тоже можно. но по ссылке вариант, который парсит данные

tutubalin: так-то можно вообще print(open("/proc/cpuinfo", "r").read())

Default avatar.png rmuskovets: угу, можно

tutubalin: интересно, на меньшей частоте делает больше сим

Default avatar.png rmuskovets: больше кого?

Default avatar.png rmuskovets: хм

tutubalin: один и тот же код запускаю. на 3GHz делает 2.4m сим. на 2.2GHz делает 2.8m сим.

Default avatar.png rmuskovets: bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds

Default avatar.png rmuskovets: tutubalin что такое сим?)

tutubalin: симуляция одного хода

Default avatar.png rmuskovets: аа

Default avatar.png rmuskovets: что за игра?

tutubalin: UTTT

Default avatar.png 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: или я что-то не вижу

Default avatar.png TTeaLL: так, важный момент

Default avatar.png TTeaLL: если я нажал сабмит в конквесте по написанию бота, и автоматически начали происходить бои, то как прекратить этот процесс, я был 243 отошёл и теперь я 36, я думал если перейти на экран с кодом игры остановятся

Default avatar.png TTeaLL: или я чего-то не понимаю

Uljahn: сабмить, не бойся, бои автоматом пройдут, ничего делать не нужно

Uljahn: ограничений на количество сабмитов почти нет

Uljahn: прервать нельзя, но можно засабмитить предыдущую версию - она в хистори (вкладка слева)

Default avatar.png TTeaLL: о, спасибо, удобно

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: ход до вылета

Default avatar.png Kadim: Привет!