Chat:Ru/2020-05-25

From CG community
Jump to navigation Jump to search

BorisZ: допилили бы чтоб как в спунке было - указал диапазон лидерборда и все

tutubalin: а вот щас, когда флеш мёртв, на чём теперь визуализаторы быстро делать?

tutubalin: на Unity?

qbit86: Флэш мёртв, но Blazor/WebAssembly продвигают.

wlesavo: tutubalin на гиф анимации кадров :slight_smile:

qbit86: Можно на SVG. Нет, правда!

Uljahn: Qt?

tutubalin: ага, сперва кути, потом генту, потом 9000 сообщений в чатике

tutubalin: wlesavo в гифки код не вставишь. флеш был хорош именно тем, что на нём можно было очень быстро нарисовать симпатичный UI и сделать его интерактивным

735487: рисуешь гифки а интерактив через JS )))

tutubalin: во флеше хорошая композиция была. можно было в один клип (например форма) засунуть другие клипы (кнопки, инпуты), в которых ещё клипы (украшалки, бахрома, свистелки, перделки)

BorisZ: надо то сетку нарисовать просто, в каждую ячейку картинку да 2-3 лейбла и на мышь он ховер - доп текст рядом

tutubalin: и все размеры, позиции можно было настроить в графическом редакторе без кода

BorisZ: можно хоть на tkinter намутить

tutubalin: ещё там кадры были. очень удобно для смены состояний. рисуешь в первом кадре крестик, во втором нолик, в третьем пусто. потом код выбирает, какой кадр показать. и не надо никаких фрейммэпов

tutubalin: короче, такую технологию прокакали...

tutubalin: Uljahn если загуглить PyAsm, можно найти несколько одноименных проектов, позволяющих запускать буфер с бинарником или прямо в питоне писать на ассемблере

Uljahn: один очень старый, второй под винду

Uljahn: да и не актуально это всё, есть же нумба, цитон

tutubalin: а на CG их можно использовать?

wlesavo: у вас не подлагивает сайт? как будто страницы очень медленно загружаются

wlesavo: ух, зарерайтил gitc мож наконец запромоучусь, была одна из первых мульти которые пробовал, наверное вторая после батл рояля

wlesavo: но смотреть страшно конечно было че там нагорожено

Uljahn: жиза

Uljahn: именно поэтому страшно во многие мульти возвращаться)

Uljahn: если только всё удалять сразу

Egrace: у меня норм, не лагает ничего

wlesavo: ну я примерно так и сделал, поудалял все

Egrace: кста, а вы тесты пишете? например, на симулятор вполне актуально по-моему

wlesavo: я ассерты вставляю, полноценные тесты пока как то не, на контесты может имело бы смысл, а так у меня не тот уровень коммитмента

Uljahn: мда, сайт ощутимо подлагивает

Uljahn: я в дебаг вывожу результаты тестов, которые просто проверить руками

wlesavo: сабмиты тож

Uljahn: опять чат сломался

wlesavo: изменения на промоушен: dist = dist-1

Uljahn: изи топ

wlesavo: баг был что изза этого дискаунт не правильно считался и мог отправить всех с базы прямо перед прилетом врагов

wlesavo: мид сильвер, норм, можно чето пробовать

Uljahn: тестирую Numba на Horse Racing Duals, взял из последнего теста несколько тысяч значений, замутил разные варианты полного перебора без сортировки на питоне, numpy и numba: в итоге numpy с векторизацией в 10-15 раз быстрее питона, а numba ещё в 10-15 раз быстрее numpy, т.е. в 150 раз быстрее наивного питона при том же коде. Единственное - заменил список на нумпай-массив и прописал сигнатуру в декоратор, чудеса

[CG]Thibaud: test (privet)

Beard: Privet, [CG]Thibaud

[CG]Maxime: ok [CG]Thibaud

Uljahn: testing Automaton2000

Automaton2000: я хз как это можно сделать

inoryy: нет

inoryy: а блин херасе проскроллило

qbit86: [CG]Thibaud Hi, Thanks a lot for deploying .NET Core! Guys here were just discussing Numba — could you please add it too? (I don't know what that actually means since I'm not a Python guy, but anyway?)

Uljahn: maybe it would be easier to add it to tech.io first and make a playground to test it

Uljahn: basically it's a package similar to numpy

Uljahn: brining JIT (and AoT) to python could be a game changer

tutubalin: Uljahn ещё надо бы сравнить с PyPy

BorisZ: пайпай - это отдельный компилятор, надо добавлять отдельный язык, а нумба просто либа, все равно что нумпай, хочеш юзай хочешь нет, поверх сипайтона ванильного

Uljahn: лучше с плюсами сравнить, нужен желающий запустить последний тест из horse racing duals без сортировки, у меня 7 секунды получилось на стареньком ноутбучном i7

Uljahn: 7-7.4

BorisZ: причем часть кода будет интерпретатор, а то что выделишь - скомпилируется, там есть ограничения, не со всем сможет работать, ей типы надо суметь выделить

Uljahn: дык главное - всякие циклы ускорить, которые не векторизуются через numpy

Uljahn: с хитрыми условиями

Uljahn: я просто в шоке, как один декоратор позволяет обычному питон коду обгонять numpy

Uljahn: хотя, возможно, что это лапки не из того места

tutubalin: BorisZ PyPy вроде меньше изменений код требует

BorisZ: очень может быть, я одинаково плохо разбираюсь и втом и в другом, на уровне прочитал заглавную страницу мануала

BorisZ: ключевое отличие именно в том что pypy надо будет как отдельный язык добавлять

BorisZ: а на КГ с этим жуткая проблема

BorisZ: а numba просто пакет дополнительный, сам язык остается cpyton как и было

Uljahn: +

Uljahn: больше всего модификаций кода требует cython, pypy - это просто другая реализация интерпретатора: более шустрая, но и менее совместимая

Uljahn: для numba модификация кода только в использовании декоратора заключается, как с cProfile

tutubalin: но зато будет видно, кто честно на питоне фигачит, а кто JIT использует )

tutubalin: а почему с добавлением языка проблема?

tutubalin: вот на https://tio.run/ особо не парятся )

BorisZ: у них бэкенд - монолит, который работает с нулевых готов, когда еще не было ни докеров ни прочих кубернесисов

BorisZ: *с нулевых годов

BorisZ: а переписывать видимо не выгодно

Uljahn: ага, самописное решение, оттуда и проблемы при обновлении языков, когда отваливается не в том месте, которое обновляли)

Uljahn: переписывают же, вон tech.io запилили, там всё по уму, как говорят

BorisZ: https://www.codingame.com/forum/t/python-and-jit-compiler/184919

BorisZ: написал с помощью гугла и такой-то матери, ставьте лайки и подписывайтесь

ilt: выжал 4-5к полных роллаутов на 2 ходе джава

ilt: есть подозрение что это максимум

Uljahn: BorisZ: спасибо, у меня бы получилось хуже (и медленнее)

Uljahn: ilt: битборды используешь?

ilt: да

qbit86: BorisZ Надо заменшнить кого-нибудь из разрабов. Тот же [CG]Thibaud обычно отзывчивый.

qbit86: Чтобы навязать персональную ответственность :)

ilt: около двадцати операций идет обработка одного хода

Uljahn: [CG]Thibaud же коммьюнити менеджер

qbit86: Uljahn Вот он пусть и пропихивает дальше по цепочке.

Uljahn: ilt: а дерево строишь или пока только роллауты?

ilt: ноды друг за друга цепляются

ilt: по сути да дерево

Uljahn: эм?

Uljahn: ты по ходу дела создаёшь ноды?

ilt: нет вначале

Uljahn: а, тогда ладно)

Uljahn: а что за ноды, если по сути дерево? у тебя не MCTS что ли?

ilt: MCTS

Uljahn: значит и UCT формулу используешь

ilt: да

Uljahn: там корни и логарифмы, ты их кешируешь?

Uljahn: или каждый раз считаешь?

Uljahn: всё что можно надо пытаться посчитать в первый длинный ход

ilt: не кеширую

Uljahn: потом ещё на джаве очень медленный рандом, говорят

ilt: это добавлю

ilt: рандом у меня переписанный

ilt: роллауты 80% времени занимают

ilt: логарифмы и корни немного добавят

qbit86: Что такое роллаут?

ilt: плейаут

Uljahn: симуляция игры до терминального состояния

Uljahn: рандомный роллаут - когда игроки делают рандомные ходы

qbit86: А, ок, спасибо.

Uljahn: пока игра не закончится

dbf: ilt, надо разгонять, чтобы 20к было на 2-м ходе :)

ilt: dbf у тебя сколько?

dbf: скачет 15-30, на втором порядка 20

dbf: скорее даже 25

ilt: а сколько у тебя операций уходит на один случайный ход

ilt: ты битборды используешь?

dbf: да, но достаточно коряво

tutubalin: BorisZ "regular Python cycles" - тут лучше loops

dbf: у меня 4 инта для доски маленькой

dbf: но рандом, действительно лучше заменить сразу на SplittableRandom, у него тот же апи

dbf: https://en.wikipedia.org/wiki/Xorshift еще быстрее, но разница уже не так велика

ilt: у меня если исходить из 30к роллаутов генератор за 20 мс их выдает

tutubalin: https://www.pcg-random.org/

ilt: в смысле 2.4m случайных чисел

YurkovAS: dbf 4 инта для 1 минидоски? :smiley:

Uljahn: :thinking:

Uljahn: там же 2х9=18 бит, округляем до 32, не?

YurkovAS: я так понял, что 4 x int

735487: и еще для одного игрока забыли ))

tutubalin: у меня 9 + 16 + 16 бит для обоих игроков

tutubalin: в смысле 9 общих бит + по 16 на каждого игрока

735487: а почему 16? мало же

tutubalin: это на минидоску.

735487: там же 9 клеток

tutubalin: 9 бит - это занятые клетки

tutubalin: 16 бит - это по два бита на линию (количество "своих" значков на линии)

735487: пипец хитро как. не переусложнил?

tutubalin: не. там как раз всё очень просто получается. сложением и битовыми операциями почти моментально определяю, получилось 3 в ряд или нет

735487: можно просто уложиться в 36 бит и хранить значения ячеек

tutubalin: а как ты делаешь проверку на 3 в ряд?

735487: получилось 3 в ряд или нет кешируется и все

tutubalin: в смысле все возможные исходы хранишь?

735487: да

Uljahn: заранее рассчиываешь все три-в-ряд и в LUTе отмечаешь

735487: их не так уж и много

tutubalin: хитро! чо-то я не додумался до такого )

Uljahn: LUT на 512 элементов, проверка по индексу

tutubalin: век живи, век учись )

tutubalin: а я думал, у меня суперпупер ноухау )

Uljahn: по-моему, это не обсуждают, потому что все уже знают

Uljahn: оказывается, не все)

Uljahn: полезно иногда пройтись по основам

735487: выдам еще одну фичу хотите?

ilt: не все тут постоянно тусят

ilt: хотим

735487: кешить корни и логарифмы можно небольшое число. 1000 у меня

tutubalin: у меня вот так: http://chat.codingame.com/pastebin/8b102294-446a-408b-b7c1-f4326c8d67f7

YurkovAS: amurushkin а остальное по формуле? супер быстрой?

735487: визиты с таким числом редки и их можно посчитать налету. а меньший размер кеша на них дает прирост

735487: YurkovAS: да у меня ифается либо посчитать либо с кеша взять

735487: на удивление это дало где то 5к роллаутов кажется. ну не меньше 2-3 точно

tutubalin: у меня есть массив масок: какая клетка на какие линии влияет. просто прибавляю это маску к уже имеющемуся 16 битному числу.

tutubalin: когда получается три в ряд, это значит два соседних бита стали единичками. побитовое И само с собой со сдвигом найдёт такие места

735487: просто смотри у тебя когда ты роллауты делаешь сколько операций уходит на то чтобы занятые клетки помечать?

Uljahn: а, это как в мануале на ютубе по битбордам?

Uljahn: хитрые масочки

tutubalin: пока не делал замеры

735487: ну причем тут замеры. просто по коду даже если смотреть

735487: у меня это просто одна битовая операция

tutubalin: у меня тоже

tutubalin: занятые клетки отдельно хранятся

735487: так у тебя еще и считать количество надо

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

tutubalin: есть битовая маска занятых клеток, есть битовая маска (точнее двухбитовая) количества значков на линии

735487: ну вот для меня это уже звучит как много операций чтобы ходы делать

tutubalin: первая определяет, куда можно ходить, вторая определяет, победили ли на доске

tutubalin: ну да, про кэш я вобще не подумал

tutubalin: реально тема

Uljahn: amurushkin: я уже кажется спрашивал, как быстро найти валидные ходы?

tutubalin: и да, вроде избавляет от сдвига

735487: сейчас гляну

735487: они предрасчитаны тоже

Uljahn: а то я большой массив использую на 2**18, в нём храню индексы сободных клеток, пипец как неэффективно :(

735487: http://chat.codingame.com/pastebin/239f76f3-332d-40d1-bcd3-d6099f852e12

Uljahn: т.е. это для одного игрока

735487: это для миниборды пофиг для какого игрока

Uljahn: а, мы обоих игроков сначала объединяем по или

735487: да

Uljahn: потом лукап, спасибо

YurkovAS: amurushkin int-ы а нет int8. везде стараюсь по минимому юзать, правда компилятор пишет часто, что +- кастуют к int-ам

Uljahn: там ещё выравнивание :smirk:

tutubalin: uint_fast8_t

YurkovAS: вот да, надо изучить тему, почему +- кастует к int-у. и про выравнивания

tutubalin: потому что иногда процы быстрее работают с 32-битными числами, чем с 8-битными

YurkovAS: tutubalin typedef unsigned char uint_fast8_t; думаешь оно быстрее будет? надо ASM добавлять, на питоны)

tutubalin: насколько я понимаю, конкретное определение uint_fast8_t зависит от целевой платформы

kotobotov: на сколько я помню с 8 битными числами процессор и не работает

kotobotov: типа выравнивают их до 32 (чаще до 64), и уже с ними типа работают

Uljahn: да и в линии кэша тоже не по 8 бит данные копируются

kotobotov: Уль, ву

kotobotov: Уль, ну че там? нагибаешь в соревнованиях

Uljahn: нихрена

Uljahn: обленился как кубер

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

kotobotov: карьеру строить надо

kotobotov: типографию то наверно закрыли сейчас?

kotobotov: пора уже вОйти войти

tutubalin: ну вот я тут недавно попал. тип функции случайно написал uint16_t вместо uint64_t, а потом делал арифметику с uint64_t


tutubalin: компилятор мне навставлял MOVZ, чтобы 16 бит перевести в 64