Chat:Ru/2020-06-21
 amurushkin: чет я не пойму. в last batles куча проигрышей томатосу а место поднялось до 6 )))
 tomatoes: может это 1:1 которые
 amurushkin: ты походу смита уже серьезно порекал
 tomatoes: 16 / 14 / 2 на cg stats
 tomatoes: тяжко, но немного обхожу
 amurushkin: без книги?
 tomatoes: без неё
 amurushkin: это получается у тебя такая крутая эвристика?
 tomatoes: скорее удачная 
 amurushkin: а как по твоим ощущениям вообще стоит заморачиваться с солвером?
 tomatoes: прирост даёт, но небольшой
 tomatoes: между собой сталкивал с солвером и без, получилось 55/50/5
 Uljahn: шухер в топе наводите?)
 tomatoes: вроде и с карлисо начинает что-то получаться, раньше в сухую проигрывал
 amurushkin: ну конечно без книги побить чуваков с книгами это сильно
 Uljahn: ничьи решают
 Uljahn: https://www.codingame.com/replay/473764591
интересная игра, на 39-м ходу (7-1) карлисо ошибся что ли? оценка сразу подскочила
 Uljahn: надо было 6-1?
 Uljahn: потом начал фримувы раздавать
 tomatoes: на 37 ошибся вроде, вместо 8 5 надо было 6 5
 Uljahn: угу, тоже подумал, что раньше ошибка была
 tomatoes: 8 5 -19.66
6 5 77.28
 tomatoes: насчитало у меня
 Uljahn: а чё у тебя за эмодзи?
 Uljahn: прикольно, можно много инфы закодировать
 tomatoes: а это солвер
 tomatoes: точнее когда полностью доходит, так то он всегда работать должен когда начинают конечные ноды появляться :thinking:
 amurushkin: а почему у тебя так моло роллаутов под конец?
 amurushkin: у меня наоборот больше и больше становится
 Uljahn: там солвер
 Uljahn: зачем роллауты?
 tomatoes: если выигрываю то стопаются роллауты
 tomatoes: если проигрываю то по идеи идут, но возможно уже до конечных нод раскрыто всё
 Uljahn: кстати, никто не задумывался, как могут влиять свои интенсивные вычисления на чужого бота?
 Uljahn: т.е. если вместо останова роллаутов гонять до конца времени какой-нибудь мусор, чтобы в кэш поднасрать)
 tomatoes: а вроде кто-то собирался тут грузить чужого бота
 Uljahn: размышления построены на гипотезе, что оба бота на одном ядре выполняются
 Hamibar: томатос двигает нас к топу) интересно насколько большой прирост дает книга
 Uljahn: книга даёт прирост против других книг
 Uljahn: но это её ещё рассчитать надо
 Hamibar: просто поначалу казалось, что гнига просто маст хев фича в топе. А теперь уже есть сомнения
 Hamibar: Интересно если смити уберет книгу, то каким будет
 Uljahn: он вроде сабмитил без книги без потери мест
 Uljahn: вот у миарема -10 мест получилось без книги
 Uljahn: или около того
 vrabosh: Может подскажите.. вот моя формула (2+1) / (5+8) 
 vrabosh: слева мои показатеи по каждой клетке, 2 это ничья локальная если сюда похоажу
 vrabosh: +1 это глобальная клетка на которой идется игра.. и если ее захвачу то всеравно проиграю
 vrabosh: с права тоже самое это противника.. 5 это 100% победа этой клетки.. ну и там 8 это по сути тоже 5, глобальная победа
 Hamibar: ну видимо с книгой все же лучше)
 vrabosh: эта стратегия играет на золото половину игроков выигрывает
 amurushkin: в моем понимании как раз книга должна давать прирост не против книг а против тех у кого их нет
 vrabosh: дальше я пытаюсь рекурсией идти... но результат не какого
 vrabosh: рекурсия такая... я как будто походил, передаю ход противнику.. он тоже самое делает и потом возращает результат формулы и я этот результат прбавляю вкоцнет формулы 
 vrabosh: (2+1) / (5+8 + res)  - т.е. сюда.
 tomatoes: с минимаксом и эвалом я помоему до 50 голды дополз, но там какой-то ужас был в оценке
 vrabosh: противник тоже ходит, и также прибавляет.. т.е. получается мах мах - или тут тоже надо минимакс?
 vrabosh: что такое эвал?
 tomatoes: оценка
 vrabosh: а сейчас как играешь?
 tomatoes: минимакс потому что на своем ходе ты выбираешь ход с максимальной оценкой, а на ходе противника с минимальной
 tomatoes: сейчас монте карло
 vrabosh: на первом ходе все норм.. я свою оценку делю на его
 vrabosh: но когда он меня опять сканирует.. он делит своей на меня.. этож норм?
 Uljahn: почему делишь? разве не вычитать надо?
 vrabosh: разница какая?
 vrabosh: просто минус может быть
 vrabosh: а у меня на 0 завязан, ходить сюда нельзя
 Uljahn: хд
 vrabosh: хотя яж макс беру потмо.. разницы нет.. просто думаю иногда может быть ошибка ... когда все ходы будут не выигрышные
 amurushkin: нельзя так делать имхо
 amurushkin: оценивай отдельно свой ходи и противника
 vrabosh: ну по сути что a - b сделать что a/b - онож по сути показывет какой круче ход
 amurushkin: только на своих ходах выбираешь лучшее для себя а на его ходах худшее для тебя
 vrabosh: 1-2, 1-3 и 1/2, 1/3 - и там и там первый круче
 amurushkin: хорошо а теперь добавь еще одну вложенность
 vrabosh: tomatoes, расскажи плз как ты делаешь
 vrabosh: amurushkin , и от тебя былобы интересно послушать
 amurushkin: у меня MCTS
 Uljahn: руками писать эвристики - это тупик, имхо
 vrabosh: мой ход a/b где a-это я. потом пративинк ходит a/b где a противник.. потом опять я
 vrabosh: яж доконца не дохожу.. поэтом не могу сказать что выиграю 100% или нет.. поэтому такая оценка..
 Uljahn: "MSmits: my opening book usually doesnt go deeper than 10-12, but i can make an exception when another player is using one, i will just force down a specific branch and go 40 deep if i want to"
 Uljahn: amurushkin: книга даст преимущество над игроком без книги, если ты сумеешь найти хороший ход, когда противник пойдёт не по книге
 vrabosh: amurushkin, монтекарло это когда ты идешь по дереву, и если выиграл то возращаешь 1/1 а на все другие варианты 0\1?
 vrabosh: и потом x\y и то что больше то круче?
 vrabosh: я вот помнишь скидывал функцию, ты сказал ерунда, это типа мое монтекарло было) и он дольше в 10 раз работает у меня чем минимакс на простых крестиках 3х3
 Uljahn: т.е. книга даёт только общую статистику для варианта, либо придётся дохрена инфы хранить в ней по слабым ходам
 Uljahn: vrabosh: в монтекарло нет дерева, с деревом - это MCTS
 tomatoes: если на питоне, то там сложно роллауты быстрые сделать
 Uljahn: без нумбы - да
 amurushkin: vrabosh: в MCTS учитываются победы и количество посещений. эдакая статистика
 Uljahn: но даже 500 роллаутов хватает для середины голды
 vrabosh: что за нумба?
 vrabosh: amurushkin , ну как я перечислил?
 Uljahn: либа для питона, но её нет на CG
 amurushkin: vrabosh: как ты я не совсем понимаю почему у тебя все время дроби
 vrabosh: ну типа я походил в клетку 1
 vrabosh: он пересчитал все варианты ходов, их 100.
 vrabosh: и из них 10 выигрышных?
 vrabosh: получается 100\10
 vrabosh: ой 10\100
 Uljahn: а что значит "выигрышных"?
 vrabosh: что я выиграл
 amurushkin: почитай лучше про MCTS. 
 vrabosh: если брать обычные 3х3, то что я заполнил 3 вряд
 Uljahn: как ты в начале игры узнаешь, что выиграл?
 vrabosh: в конце игры
 vrabosh: он же все варианты прошел до конца
 Uljahn: но если ты на одной миниборде 3х3 выиграл, это не означает победы на большой борде 9х9
 vrabosh: это я пример для одной показал.. тоже самое можн ои на 9х9 считать
 Uljahn: :sweat_smile:
 vrabosh: ну естественно за это рвемя все не посчитаешь
 vrabosh: можно для начала брать за выигрышь 9 на 9 это захват клети или если противник открыл все поле.
 Uljahn: можно, но это будет эвристическая оценка
 vrabosh: это то что перечислил не mtcs&
 Uljahn: MCTS даёт статистическую оценку, которая не зависит от стратегий
 vrabosh: как?
 Hamibar: а в минике разве не эвристиками работают?
 Uljahn: в минике - да
 Uljahn: vrabosh: в MCTS используется формула для выбора наиболее перспективного хода на основе собранных статистик случайных игр
 Hamibar: мне кажется миник здесь сложно сделать. Вернее хорошую эвристику для него
 Uljahn: можно начать с многорукого бандита и формулы UCB1
 amurushkin: нужна функция с 81 слагаемыми. будет самая крутая оценка ))
 Uljahn: Hamibar: именно
 vrabosh: т.е. я прошелся на 1 глубине, потом 2 глубину прошелся, 3 итд... и потом как время подходит к концу... смотрю какая ветвь дает лучший результат?
 Uljahn: самая крутая оценка - это нейросеть
 Uljahn: vrabosh: это ты про минимакс говоришь
 Uljahn: минимакс - это брутфорс всех вариантов, оценка и выбор лучшего, но качество зависит от оценки
 vrabosh: а вы спарсили игры и потом из этого сделали какой ход лучший?
 amurushkin: нет
 Uljahn: в MCTS исследуются наиболее перспективные варианты на бОльшую глубину, а плохие варианты почти не исследуются
 Uljahn: и оценка статистическая, за счёт рандомных игр
 vrabosh: а как ты вначале узнаешь что иследовать?
 Uljahn: никак
 vrabosh: я могу пойти в 1 клетку и там меня глубина заведет на 100 ходов
 Uljahn: поэтому надо иметь быструю симуляцию, чтобы быстро собирать статистики
 Uljahn: так глубина не сразу строится, а помаленьку
 vrabosh: и чем это от минимакс отличается? раз ты всеравно брутфорсишь
 Uljahn: сходили разок - посмотрели результат, если ок, то углубляем, если не ок - идём в другой вариант
 vrabosh: результат то как потом вычисляешь? какую оценку давать этому ходу
 Hamibar: перспективные ветки исследуются глубже и лучше.
 Hamibar: к тому же нет эвристики
 Uljahn: оценка по результату рандомных игр
 Hamibar: а просто статистика побед поражений
 Uljahn: посмотри лучше видосы на ютубе, там хорошо объясняют MCTS
 Uljahn: в вики не очень понятно
 vrabosh: ну типа я идут  в 1 клетку.. и дашел до 1 победы, потом во вторую, там до 2 и 3 поражений? так?
 Hamibar: мы так убеждаем перейти на мктс) но если хочешь минимакс, то вроде на нем возможно пройти в легу
 vrabosh: типа массив формирую..?
 vrabosh: я понять хочу просто)
 Uljahn: как бы массив, но в массиве - дерево
 Uljahn: а в дереве - количество посещений и счёт
 Uljahn: ты так не поймёшь, мне кажется, а только запутаешься
 vrabosh: ну это понятно.. что дерево. и в итоге потом если я проходил это дерево в предыдущем ходу, то я знаю результат.. а тем временм считаю то что не проходил?
 Uljahn: не, там на основе теории вероятностей всё работает
 Uljahn: и мат. статистики
 Hamibar: Лучше статейки какие-нибудь почитать.
 vrabosh: 0:[1,2,-1,5,2,...]
0->1:[1,1,2,3,0,...]
0->2:[0,1,-3,1,2,...]
 Hamibar: Так лучше разберешься, чем в чатике
 Uljahn: каждый вариант оценивается по формуле UCT, выбирается та ветка, где значение выше, и так далее, пока не упрёшься в неисследованную область
 vrabosh: чтото типа такого? где 0 это первый ход, а 1,2 это уже на втором ходу?
 vrabosh: посути дерево уже формируется до инпута?
 vrabosh: а памяти хватает?
 vrabosh: это же гигабайты инфы
 Uljahn: дерево не полное же
 Uljahn: там только верхйшка
 Uljahn: верхушка
 vrabosh: сколько даю памяти?
 Uljahn: 768
 Uljahn: у меня получается на питоне 600Мб заюзать, но там пустота практически
 vrabosh: это если потом чистить
 Uljahn: 3 секунды уходит
 vrabosh: на что 3 сек?
 Uljahn: на выделение массива нод
 Uljahn: это заготовка дерева, чтобы потом заполнять эти ноды и не париться с выделением памяти
 Hamibar: а че так долго? или питон инициализирует все объекты?
 Uljahn: я не разобрался с выделением, просто нули выделяет быстро, но в рабочем наборе программы не учитывает, а когда начинаешь потом заполнять - начинает учитывать
 Uljahn: ленивое выделение, как сказал tutubalin
 Uljahn: а если выделяешь и заполняешь сразу, то медленно получается
 vrabosh: через нампи выделяешь?
 Uljahn: угу
 vrabosh: на нем типа поидеи меньше места занимает
 Uljahn: наверное, там плюсовые функции со своими интерфейсами
 Uljahn: поэтому и профилировать нампи не получается
 vrabosh: как это профилировать?
 Uljahn: замерять время исполнения различных частей кода из-вне
 Uljahn: там не только время, но и использование процессора, кэшей, памяти и т.д.
 Uljahn: из питона все вызовы уходят в numpy и профайлер их не различает, т.е. чистый питон профилировать просто, а с numpy - хрен
 vrabosh: понял, ты не обычным таймом время считаешь?
 vrabosh: типа сколько тактов код выполняет?
 Uljahn: это я локально пробовал
 Uljahn: на CG кроме таймеров я ещё частоту проца считываю и использование памяти
 vrabosh: о круто.. типа на полную он загружен иль нет?
 Uljahn: не, тут код выполняется в виртуалках, а виртуалки запускаются на разном железе
 vrabosh: и как потом эту инфу используешь?
 Uljahn: встречаются 3 типа процессоров с разной частотой, соответственно на более быстром посчитается больше
 Uljahn: поэтому, когда спрашивают про количество роллаутов, люди дают вилку, т.к. это число зависит от процессора, на котором исполняется бот
 Uljahn: разница может быть порядка 30%
 Uljahn: иначе как измерять оптимизации?
 vrabosh: да и комп еще может быть загружен
 vrabosh: у меня иногда на vpn помню так приложения простые просидали.
 Uljahn: где?
 vrabosh: давно правда это было.. там где впн арендовал
 Uljahn: по идее, если выделяется одно ядро на CG, то его частота не должна ограничиваться, если только в DC нет проблем с охлаждением
 Uljahn: ну и левые задачи не должны вытеснять ботов
 vrabosh: как комп это адекватно просчитает? когда параллельно таких виртуалок 100шт
 vrabosh: что типа каждому надо ровно по 100мгерц выделить
 Uljahn: ну так там компы с десятками ядер
 vrabosh: ну это если только на 1 виртуалку 1 ядро
 Uljahn: так и делают
 vrabosh: а память как учитывать?
 Uljahn: я на стековерфлоу нашёл пару вариантов
 vrabosh: полюбому гдето посадка может быть
 Uljahn: или ты про какую память? оперативку в виртуалке выделять?
 vrabosh: да
 vrabosh: типа там тоже выделяется сразу кусок и он не трогается?
 Uljahn: так там жёстко задано 768Мб максимум на бота
 vrabosh: ее можно выделить жетско с 10байта по 1к байт это твое.. а может надо еще 10к, щаз найду где есть свободно
 Uljahn: как у них реализовано - только богу известно, они эту систему придумывали, когда ещё докеров не было)
 Uljahn: думаю, одним куском сразу резервируется, но это не точно
 vrabosh: а как вообще кэш проца используется? он же быстрее наверно раз в 100 чем к помяти обращаться
 vrabosh: на Си это все как я понял можно учитывать?
 Uljahn: как обычно используется, часто читаемые данные оседают в кэше
 vrabosh: кто этот алгоритм задает? программа или ос?
 vrabosh: или что?
 Uljahn: микрокод проца, наверное
 vrabosh: 250 место в золоте уже.. ресабмитится не хочется
 vrabosh: а вы предварительно считали первые ходы?
 vrabosh: ну типа в простых крестиках.. если я хожу в центор а противни не походил по углам то он проиграет
 vrabosh: так и тут допустим я кудато походил.. то есть ходы где он проиграет если не туда на 2 ход поставит
 vrabosh: и такое на 2-3 хода заранее просчитать у себя и скопировать сюда
 Uljahn: все конечные состояния просчитываем, чтобы победу определять быстро
 Uljahn: для одного игрока это 512 вариантов
 Uljahn: не все из них возможны, но это пофиг
 vrabosh: 512 на 9х9 доску?
 Uljahn: 3х3
 Hamibar: по сути большая доска это тоже 3 на 3, только в клетке ничья может быть
 vrabosh: наверно не поняли меня
 vrabosh: допустим противник походил на 0 0 в 0 доске, я точно знаю, куда мне ходить чтобы не проиграть.. потом он походил и я точно знаю на след ход куда ходить чтоб не проиграть
 vrabosh: хотя 2 хода это уже 6561 :) на третий ход уже не занести предварительно
 Hamibar: так в том то и дело, ты не знаешь куда сходить, чтобы не проиграть. Если ты про большое поле
 vrabosh: но даже эти 2 хода, дают возможность дерево просчитывать на 2 хода заранее
 vrabosh: почему незнаешь?
 vrabosh: разве нет нечейных ходов как в 3х3?
 vrabosh: точнее разве нет ходов проигрышных?
 Hamibar: наверное есть беспроигрышная стратегия, но ее никто не знает
 vrabosh: вот я точно знаю что если я походил в центр, а протиник не в угол то он проиграет
 vrabosh: у себя на компе не кто не просчитывал?
 vrabosh: или это очень при очень много вариантов?
 Hamibar: на маленькой доске конечно, но победа на меленькой не гарантирует победы в партии
 Hamibar: через пару миллионов лет мб кто-то досчитает
 vrabosh: пнятно.. думал тут быстрее
 vrabosh: точно.. сложность же 81**81
 vrabosh: а сколько вариантов тогда получается, если просто выиграть на одной клетке.
 vrabosh: конец игры можно минимаксом просчитать. когда там штук 15 остается клеток пустых..
 zuko3d: ну не с самого же начала конец игры просчитывать =)
 vrabosh: до конца играть тем что щаз, а потом подключать просчет
 vrabosh: а начало до первой победы возможно можно просчитать хотябы пару ходов..
 vrabosh: вот только не могу сообразить, реально это или тоже годами считать будет)
 Uljahn: солвер в MCTS что-то подобное делает
 vrabosh: кароче надо симуляцию сделать дляначало игры.. и пробовать это все эксперементировать.
 YurkovAS: солвер начинает просчитывать до конца с 20-го хода.
 Uljahn: vrabosh: если сможешь потом симу на Си переписать, то и в легу сможешь попасть
 vrabosh: можно также считать только те ходы где я выгодно стою
 zuko3d: ну вот у меня на плюсах код, но пока не в леге =( правда, я вижу баги :D
 zuko3d: мб надо их исправить и будет всё ок
 Uljahn: 100%
 YurkovAS: солвер начинает находить терминальные ноды с 20-го хода. ну все дерево прочитывает за 5 последних ходов. примерно
 zuko3d: у меня сим получается как-то мало, 40к на первых ходах и 100к ближе к концу
 Uljahn: MCTS работает даже с багами, вот в чём проблема
 zuko3d: ага =(
 Uljahn: wlesavo вон вообще на изи вкатился в легу, меньше недели на плюсах
 vrabosh: кто может сходу сказать, сколько вариантов до первой победы 1 клетки?
 Uljahn: ?
 vrabosh: я хочу просчитать с нуля все варианты где я выигрываю первые клетки..
 Uljahn: есть 15 уникальных начальных ходов с учётом всех симметрий
 vrabosh: хотя это наверно больще чем потом после первой клетки, всю игру выиграть..
 vrabosh: так всетаки нашли эти ходы?
 wlesavo: да, я в легу вкатился хотя у меня ничьи так баговано считались, что если выйгрыша нет на доске  то в 90% случаев ставилась полная ничья
 vrabosh: например я походил 0-0, а противник 0-1, то я допустим 100% при любом раскладе первый захвачу клетку, пускай это возможно не выиграет игру.. - это сколько вариантов?
 Uljahn: но там нет 100%
 Uljahn: всё зависит от расклада как раз
 vrabosh: хотя лучше кнечно просчитать так, чтобы у меня выигрышно стояли точки.
 Uljahn: 0-1 означает, что тебе придётся играть в другом квадранте, и если ты сыграешь 1-3, то противник будет играть опять в первом
 Uljahn: и у него уже будет перевес
 vrabosh: неважно, мне интересно знать, 100% куда не стоит ходить, куда стоит, чтобы первым захватить поинт
 Uljahn: ой, 0-3 конечно
 Uljahn: вряд ли это возможно выяснить
 Uljahn: надо тренировать нейросеть
 vrabosh: и сколкьо этот просчетов надо сделать
 vrabosh: это возможно, вопрос во сколько это обойдется
 Uljahn: и велика вероятность, что нейросеть ничего не выучит :(
 Uljahn: ценность каждой клетки определяется положением на других клетках, придётся учитывать вообще всё и даже больше
 Uljahn:  feature engineering называется
 Uljahn: когда мы создаём виртуальные параметры из комбинации наблюдаемых
 Uljahn: а потом скармливаем нейросетке и надеемся, что она разберётся)
 Uljahn: Automaton2000: ты чё, пёс, я - датасайнтист!
 Automaton2000: при том что я не умею
 vrabosh: мне кажется, что сложность задачи находа первого выигрыша примерно такая (81*9*9*8*8*7*7*6*6*5*5*4*4*3*3*2*2)
 vrabosh: это не так и много.. за 30сек поидеи у себя на компе можно просчитать
 vrabosh: а это означает, что можно теоретически найти первые ходы, где либо ты первый захватываешь, а лучше чтобы мои крестики стояли по парна больще чем у противника
 vrabosh: точнее на более выигрышных позициях
 Uljahn: ты не смотрел реплеи в топе леги?
 vrabosh: хотя я смотрю у меня даже при этой ситуации не плохо играет
 vrabosh: мне подкрутить оценку на варианты где противнику просто бесмыслено ходить, пускай он там и захватит точки.. и потом подконец когда 15 клеток остается минимакс
 vrabosh: Uljahn, нет не смотрел
 Hamibar: zuko3d  на самом деле не нужно прямо очень много сим, у меня 30-40к
 TTeaLL: ребят, я ночью писал про свою проблему, не подскажете, возможно ли такое, что за время по в игре проходит анимация, происходят 2 хода вместо одного?
 Uljahn: покажи реплей
 Uljahn: и проверь код на возможность вывода двух аутпутов в один ход
 wlesavo: TTeaLL листай кнопкой вправо по одному ходу, анимация иногда чуть чуть рассинхронизирована с выводом, но если по ходам листаешь то все хорошо будет.
 wlesavo: ух ты, тот же код на 25ое сабмитнулся
 Uljahn: :muscle:
 wlesavo: дочитал наконец-то книгу про реинфорс, пожалуй попробую в крестики чтонибудь обучить примитивное хотя бы
 Uljahn: в простые крестики или сразу в uttt?
 Uljahn: "I trained a Keras model for 3x3 TicTacToe (3 iterations, 25 episodes, 10 epochs per iteration and 25 MCTS simulations per turn). This took about 30 minutes on an i5-4570 without CUDA."
 Uljahn: lol
 Uljahn: uttt будет годы обучаться, наверное
 Uljahn: нашёл репу альфазиры с обученной моделью для простых крестиков - 32Мб ахах
 wlesavo: сразу в уттт наверное, хзхз, не верю что оптимизированное обучение столько займет, там сильно проще алгоритмы типа TD() для нард обучались за 10^6 игр на древних компах, а тут крнестики 30 минут, это бред
 Uljahn: нарды же линейные
 Uljahn: похожи на oware
 wlesavo: так крестики обычные сильно проще чем нарды
 Uljahn: а, ну да. но там же селфплей
 Uljahn: это же alpha zero
 wlesavo: ну так и тут селфплей
 Uljahn: ну и сеть видимо очень глубокая, надо дофига эпизодов
 wlesavo: короче надо попробовать, но 30 минут на обучение обычных крестиков это бред
 Uljahn: странно, почему маленькую сеть не взять было
 Uljahn: рекурс говорил, за 30 минут он топового бота в гоночках обучает
 wlesavo: да можно даже однослойную если просто оценивать вероятность победы
 wlesavo: рекурс недавно говорил что для серчрейса там чтото в районе 50мс обучение заняло
 Uljahn: We trained a PyTorch model for 6x6 Othello (~80 iterations, 100 episodes per iteration and 25 MCTS simulations per turn). This took about 3 days on an NVIDIA Tesla K80. :joy:
 Uljahn: это даже не 8х8
 wlesavo: это где?
 Uljahn: https://github.com/suragnair/alpha-zero-general
 Uljahn: жесть какая-то у них в крестиках, 4-хслойная свёрточная + 2 полносвязных, зато police и value на выходе, вроде бы
 Uljahn: Automaton2000: типичный оверкил
 Automaton2000: это я к тому что у меня не было
 wlesavo: так они просто взяли ту же сеть что и в альфа зеро, пофиг что для крестиков это тотальный оверкил
 wlesavo: я понимаю как эти ребята которые кучу Atari игр тренировали по видео фреймам,  там оправдано еще такая дженерализация
 Uljahn: и правда
 Uljahn: архитектура везде одинаковая
 YurkovAS: может лучше нейронку сначала сделать в csb, oware - где они точно хорошо играют? и детали всегда можно поспрашивать...
 Uljahn: повторять чужие успехи не так интересно
 YurkovAS: что за книгу вы такую прочитали, после которой готовы нейронки делать?
 wlesavo: Reinforcement Learning: http://chat.codingame.com/pastebin/524540bd-ee4c-4df1-983f-1379aad3546c
 YurkovAS: wlesavo спасибо
 wlesavo: офигенная книга, даже не в плане нейронок а просто алгоритмика реинфорса последовательно и круто рассмотрена
 wlesavo: я думаю тебе очень зайдет
 YurkovAS: "гляжу в книгу - вижу фигу": это про меня. если есть готовые примеры, может быть пойму. а так то интересно сделать бота для ксб...
 vrabosh: на русском есть эта книга?
 Uljahn: есть похожая https://obuchalka.org/2017091096341/obuchenie-s-podkrepleniem-satton-r-s-barto-e-g-2014.html
 zuko3d: wlesavo расскажешь потом про успехи? Я вот как доделаю солвер для эндшпилей в uttt - буду там пилить RL с нейросетками.
 vrabosh: я мотрю там даже картинки некотоыре одинаковые
 Uljahn: 2014 год - это прошлый век по нынешним временам, инфа устаревает за месяцы
 Uljahn: по RL алгоритмам, я имею в виду
 Uljahn: правда и мути много нагоняют, мухлюют с бейзлайнами, чтобы соту набить
 wlesavo: zuko3d ну если чтото получится то конечно
 vrabosh: пока этому всему научишься и попрактикуешь лет пять наверно уйдет.
 Uljahn: всему не научишься
 Uljahn: да и возраст влияет
 zuko3d: vrabosh ну по поводу пяти лет - хзхз. Зависит от изначальных знаний.  Я когда начал нейросети только изучать - уже знал математику хорошо. В итоге спустя полгода уже подал статью на ICML; т.е. если есть фундамент, то там все основные принципы очень быстро изучаются.
 vrabosh: опыт в программировании хорош, а в математике ноль
 gybson_samara: @zuko3d "знал хорошо" это где ей занимался?
 vrabosh: пока тут все задачки порешаешь, тупо поверхостно знания получишь.. год наверно пройдет
 vrabosh: потом год на всякие книги.. обучение математике итд.
 gybson_samara: @vrabosh больше
 gybson_samara: ну и смотря еще как торчать =)
 vrabosh: Кстати для пазла уровзя изи не плохая будет задачка, нарисовать из этого поле 9х9 a = [[16, 65], [72, 256], [68, 130], [0, 132], [16, 5], [34, 12], [266, 4], [32, 72], [384, 0]]
 vrabosh: и еще как можно это оптимизировать? потомучто приходится же копию массива делать.
 vrabosh: причем дипкопи.
 Uljahn: зачем?
 vrabosh: чтоб минимакс делать
 Uljahn: а, ходы применять?
 vrabosh: всмысле?
 Uljahn: ну, из исходного массива получить массивы после каждого хода
 Uljahn: делай в нумпи, там копия быстрая
 vrabosh: ну вот массив, там [16,65] на нулевой ячейки... 16 - это крестики, 65 - нолики
 Uljahn: я вижу 9 пар, это очевидно двоичные миниборды для каждого игрока
 vrabosh: я над 16 сделал 16 + (1<<i) и занес в a[0][0] и передаю дальше
 vrabosh: копируя этот массив
 Uljahn: ну и? переделай списки в np.array, у тебя же размерности фиксированные
 gybson_samara: двоичные борды не лучший выбор, если что
 vrabosh: поэтому изночально почему я про троичную систему размышлял
 vrabosh: а что лучше?
 Uljahn: нет ничего медленнее, чем дипкопи в питоне
 vrabosh: так диккопи вроде дорого
 Uljahn: в нампи просто копирование
 gybson_samara: Я скажу так
 vrabosh: ну или копия просто в нампи тоже наверно дорого?
 Uljahn: нет
 gybson_samara: если сумма в клетке равна сумме проходящих через нее линий, то ход в нее завершает линию
 Uljahn: в нампи копия по скорости как в Си
 gybson_samara: соответственно нам нужно хранить числа от 0 до 4
 vrabosh: хотя можно так передавать 000000000_000000000 и потом делать опирацию энт 111111111_000000000 - но тут надо тестить что быстрее эти операции или копия массива
 gybson_samara: а когда мы ставим знак в клетку, то по всем ее линиям делаем +1
 Uljahn: копия массива намного быстрее, чем дипкопи списка, можешь сам замерить
 vrabosh: я понял это
 vrabosh: я просто думал, что трехуровневые массивы он будет по ссылки передвать
 amurushkin: либо делай откат хода чтобы не копировать
 vrabosh: точно можно откат еще потестить..
 vrabosh: gybson_samara , я не понял что ты имел введу
 gybson_samara: vrabosh ну это вроде прикола с цифрами
 vrabosh: вообщем надо будет тестировать что быстрее
 Uljahn: правильно, всегда надо тестировать
 vrabosh: gybson_samara, у меня все ходы выигрышные в базу занесены
 gybson_samara: есть метаматрица,
323
242
323
 gybson_samara: она показывает сколько линий проходят через клетку
 gybson_samara: далее допустим ходы
111
110
101 - это ход в 0б0 клетку
 Uljahn: сумма масок
 vrabosh: и что это дает?
 Uljahn: "двоичные борды не лучший выбор, если что" - не понял)
 gybson_samara: знаешь у какой клетки какой потенциал
 Uljahn: это для оценки минимакса может пригодиться
 vrabosh: gybson_samara , я перебор хочу сделать.. чтобы знать выиграю или нет на вернека.. а не потенциал
 Uljahn: вот только потенциал тут рекурсивный, надо плясать от общей ситуации к частной и обратно, если пилить эвристический ИИ
 gybson_samara: vrabosh тогда ты сраз устанешь топ1 леги
 vrabosh: хотябы на последних 15ходов)
 Uljahn: к последним ходам твоя партия будет безнадёжно проиграна
 gybson_samara: ну или сразу сможешь вывести свое место в текущей лиге, ведь результат игры будет известен сразу
 vrabosh: ну и протестить теорию. делать дерево до первого захвата клетки ближайшей
 Uljahn: как я и говорил - хороший способ провести лето)
 gybson_samara: после пляжа и велосипеда чего же нет
 tomatoes: :grinning:
 Uljahn: в крестиках столько всего можно попробовать, и математика с физикой не нужны даже
 gybson_samara: математика нужна
 gybson_samara: точнее арифметика =)
 gybson_samara: вот возьмем маску вида
321
220
101 - для хода в 0,0
 gybson_samara: а потом сходим в 0,1
232
020
010
 gybson_samara: получим
553
240
010
 gybson_samara: красиво
 vrabosh: это на пустой клетке?
 gybson_samara: Но еще красивее, когда [0,0]=[0,1]&[0,2] || [1,0]&[1,2] || [1,1]&[2,2]
 gybson_samara: а в нампи вообще шедевр
mm = mapcopy[:,x]
       if mm.sum() == 2:
           return 1
 gybson_samara: vrabosh а занятые зачем считать?
 vrabosh: выигрышные
 vrabosh: чтоб знать быстро, выиграл иль нет
 gybson_samara: а вообще задача то древняя, найти вершину графа такую, чтобы получить сбаллансированное подобие дерева
 gybson_samara: если ничья возможно, то получится симметричное дерево, если нет, то выигрышь будет выпирать
 vrabosh: вот этим и занимаюсь)
 VitaliKhileuski: мужики
 VitaliKhileuski: вы в клеш оф код не играете?
 gybson_samara: я не, задание понять не успеваю
 vrabosh: я еще эти задания в гугл транслейте перевожу)
 vrabosh: копии долго делать. у меня выигрышную партию бытрее ищет, чем копия делается
 vrabosh: с массивами вообще дорого работается смотрю
 zuko3d: как ты выигрышную партию ищешь?
 vrabosh: 3x3 имею введу
 zuko3d: а. Там же можно каждую ситуацию закодировать одним интом и хранить массив с результатами.
 Uljahn: vrabosh: у тебя уже битборды для каждого игрока есть, в начале хода можно перебрать все варианты и проверить на победу, результат занести в массив, где индекс - состояние битборды игрока
 Uljahn: уже который раз подсказываем)
 Uljahn: в начале игры, вернее. когда времени дофига дают