Chat:Ru/2020-06-21

From CG community
Revision as of 11:24, 15 June 2021 by Chat Log (talk | contribs) (Created page with "<img src=/a/2111605585777> amurushkin: чет я не пойму. в last batles куча проигрышей томатосу а место поднялось до 6 ))) <i...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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к

Default avatar.png 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: в начале игры, вернее. когда времени дофига дают