Chat:Ru/2022-01-09
Vlad100: Сделал mcts на Python. Результат хуже чем был у Minimax. Первый ход нормально 2 timeout. Как я понимаю пора изучать C++?
Uljahn: если цель запустить mcts, то можно numpy с битбордами напрячь, а если хочешь за топ бороться, то без С++ на CG не обойтись
Uljahn: или rust/D как альтернативы
Vlad100: Окей. Значит шанс на оптимизацию всё же есть.
Uljahn: какая глубина у минимакса и сколько роллаутов в mcts?
Vlad100: 2 глубина кое как работала. В mcts если я правильно понял 1.
Vlad100: И то и другое на через какое-то количество ходов timeout
Uljahn: а время засекаешь?
Vlad100: На один ход?
Uljahn: если речь про UTTT, то на первый ход даётся 1 секунда вычислений, на следующие - по 100 мс, отсчёт идёт с получения первого инпута
Vlad100: Видел. Сейчас проверил mcts на один ход с 1 роллом 600мс.
Vlad100: Проверю ещё Minimax
Vlad100: Минимакс на 2 глубину в среднем 50-80мс
Uljahn: у меня на питоне с numpy 300-500 роллаутов за 100 мс, правда этого для MCTS мало, для легендарной лиги нужно 20к минимум
Vlad100: Тогда сейчас попробую на numpy переделать
Uljahn: 600мс это как-то дофига, ты там не deepcopy используешь? :smiley:
Vlad100: Так вот в чём дело
Vlad100: Тогда друго вопрос чем его можно заменить?
Vlad100: А хотя вроде уже сам нашёл
Vlad100: Окей заменив deepcopy на json получилось сделать 355мс
Uljahn: классика
Uljahn: с numpy будет ещё быстрее
Vlad100: Знаю но пока пытаюсь сделать то что будет быстро
Vlad100: Под numpy ты имел ввиду bitboard? Так как просто с numpy стало только хуже.
ktotam: почему в некоторых только 2 Wood лиги?
aangairbender: ktotam это коммьюнити задачи
aangairbender: то есть как я понимаю дл них не было отдельного соревнования, просто выложили задачу и кто хочет решает
Uljahn: говорят, когда участников будет достаточно много, могут добавить лиги, как было с UTTT
Uljahn: обещали в этом году какие-то ивенты, типа мультиплеера недели, может тогда и запилят что-то подобное
Uljahn: Vlad100: numpy без битборд смысла не имеет
Uljahn: там вся суть в оперировании большими массивами непосредственно в памяти, а не через объекты питона
Uljahn: можешь, например, на первом ходе сразу заполнить массив рандомными числами, чтобы потом rand не вызывать, а брать из массива
Uljahn: или проверку на выигрыш свести в таблицу из 512 значений, и по значению минидоски в качестве индекса сразу определять выигрышность
Uljahn: нужно хардкодить по максимуму всё, что уместится в 100к кода, и что можно рассчитать на первом ходу, чтобы задействовать 768Мб памяти
aangairbender: 768мб оперативки дается каждому боту?
YurkovAS: да https://www.codingame.com/playgrounds/40701/help-center/languages-versions
aangairbender: о спасибо
aangairbender: видел раньше, но забыл)
Uljahn: на плюсах может и быстрее будет рассчитывать на лету всякие fastrand и invsqrt, но на питоне/numpy скорее всего будет быстрее слазить в память, хотя я не сумел разобраться, как numpy профилировать в VTune Profiler, так что тупо среднее время измеряю
Uljahn: вот бы numba ещё завезли для питона
YurkovAS: VTune не показывает вызовы numpy? там скорее всего надо его пересобирать с debug инфой. Обычные exe-ники тоже не показывает функции без debug сборки
aangairbender: а я блин себе комп собрал с amd и не могу теперь vtune пользоваться
aangairbender: там конечно есть аналог от amd, но мне как-то проще в visual studio. она умеет любые процессы профилировать (и можно дебаг символы подключать)
YurkovAS: профайлерами еще надо уметь пользоваться: он покаже медленное место, но обычно, сразу не поймешь как исправить.
YurkovAS: исправления обычно на архитектурном уровне. без профайлера все это можно найти
YurkovAS: в самом начале профайлер еще помогал, на очень банальных местах. а сейчас от него профита нет уже
YurkovAS: aangairbender зато много ядер? можно брутал тестер запускать
aangairbender: а я ним еще ни разу не пользовался
aangairbender: надо как-то попробовать
aangairbender: ну мне профайлер помогал на самом деле, особенно в расте (там ведь всякие bound checks нужно руками убирать в узких местах)
aangairbender: да и в плюсах показывал что оптимайзить в первую очередь
YurkovAS: он показывает: главное понять как улучшить это дело :)
aangairbender: YurkovAS диспетчер показывает 11 cpu
aangairbender: ой точней 12
aangairbender: ну и rtx 3070 есть, можно нейронки тренить)
YurkovAS: круто!
Vlad100: Я сейчас понял почему у меня MCTS нормально не работает. Я пытаюсь проверять все клетки а как оказалось есть ещё доп. правило про то в каком квадрате ходить.
Vlad100: Правда тогда не понимаю как вообще мой минимакс работал.
YurkovAS: aangairbender в maxN есть pruning, стр 20 https://project.dke.maastrichtuniversity.nl/games/files/phd/Nijssen_thesis.pdf
PavRus: А можно где-нибудь историю этого чата прочесть? А то я иногда спрашиваю, а ответы уже не вижу(((
aangairbender: Спасибо, почитаю
anti_tenzor: Приветствую! Как посмотреть историю своего участия в Clash-of-Code ? Хотел ещё раз глянуть на тот мрак, который нарисовал...
Uljahn: notifications - show read
Uljahn: если ты свой код расшаривал, то можно будет в отчётах поискать
anti_tenzor: Спасибо! Нашел. Даже странно, что так закопано. Думал, должно где-то в профиле оставаться доступ к истории.
Uljahn: ничего странного, клэши - это развлечение, не более
Uljahn: мультиплееры посерьёзнее уже, но тоже зоопарк, а контестов нормальных давно не было