Chat:World/2020-07-10
JuliaPhan: who vietnamese ?
WINWINWIN: Nicely done DomiKo
JuliaPhan: Zz_KuTeo_zZ ib for me please
JuliaPhan: i have some question, pleaase
LeBaoHoang8A4: Chi choi khong, de em invite
LeBaoHoang8A4: hoi nay em ban
JuliaPhan: let later
JuliaPhan: i'm having lunch
LeBaoHoang8A4: okok
LeBaoHoang8A4: I can play at 5PM
C4r1_7he_n00bH4X0R: oh hi im in grade 8 too
LeBaoHoang8A4: REALLY?
LeBaoHoang8A4: where are you from?
LeBaoHoang8A4: which programming language do you use?
C4r1_7he_n00bH4X0R: im from quang ngai
LeBaoHoang8A4: PASCAL?
C4r1_7he_n00bH4X0R: i frequently use c# and python
LeBaoHoang8A4: I'm using JAVA
LeBaoHoang8A4: where are you learn coding?
C4r1_7he_n00bH4X0R: on internet
LeBaoHoang8A4: OKOK
khailq: wow toàn master engrisk nói chuyện vs nhau
JuliaPhan: bữa có người bảo không chat bằng tiếng địa phương nên thôi mình cũng ngại
JuliaPhan: It's time
JuliaPhan: come on
OhayouWIbu: konnichiwa minna
CDRToast: I've been out of coding so long, after redoing the tutorial, what's a good next step to practice on?
[CG]Thibaud: easy puzzles CDRToast
[CG]Thibaud: https://www.codingame.com/training/easy
Astrobytes: Good morning
Uljahn: :cat:
jrke: good morning to you astrobytes
DomiKo: hiiii
Astrobytes: DomiKo - UTTT Legend yet?
DomiKo: ohh yes :D
jacek: :tada:
DomiKo: reached it 3:26...
Astrobytes: :tada: ::rocket:
DomiKo: reached it at 3:26...
Astrobytes: Nice one!
DomiKo: thank you
jacek: top 100?
DomiKo: but there is a lot to improve
DomiKo: not yet
DomiKo: 136 :(
DomiKo: but now
DomiKo: i have to make teccles heurictic stronger
DomiKo: because players in gold didnt use that
DomiKo: but in legened they use
WINWINWIN: Nicely done DomiKo
WINWINWIN: teccles heuristic?
DomiKo: MSmits told me
DomiKo: about it
DomiKo: "play the move that forces your opponent to play in the same miniboard you are playing in "
WINWINWIN: Ohh teccles is a CG user :) thought that it was a technical term
DomiKo: yea :D
Astrobytes: Not just CG, Halite
Astrobytes: Before it was on Kaggle
WINWINWIN: Halite was on another website?
Astrobytes: Yeah. teccles won it
DomiKo: hmmm i didn't know about Kaggle
WINWINWIN: Wow...
DomiKo: that site stounds fun
DomiKo: sounds*
WINWINWIN: :) so forcing the opponent to play on your miniboard. Why exactly does that work?
DomiKo: its like when you have empty board
DomiKo: lets say you have to make a move in top left corner
DomiKo: and that board is empty
DomiKo: so do not calculate all move
DomiKo: and just make move in top left corver
WINWINWIN: Ok, it moves you directly to legend?
WINWINWIN: Any forum/techio post on it?
Astrobytes: No, it's not quite a -3vel ;)
WINWINWIN: :D
DomiKo: pushing to legend
DomiKo: was a battle with top 3 guys
DomiKo: boss had 34 point
DomiKo: and second guy had 32...
DomiKo: so gap was really huge
WINWINWIN: :) Im in bottom gold. :(
DomiKo: from bottom to top
DomiKo: you need to make SPEEDD
WINWINWIN: :D
DomiKo: that's what matter the most
WINWINWIN: Have been working on a MCTS for about a week now. But I get pretty annoyed while writing an evalutation function...
DomiKo: i dont know if you could reach that lvl of speed with python
struct: eval? what game?
DomiKo: UTTT
jacek: mcts doesnt need eval
WINWINWIN: UTTT
WINWINWIN: Right now Minimax
DomiKo: ohhh
WINWINWIN: MCTS is nothing but frustrating dead ends. Im trying to get top 100 gold with a minimax
DomiKo: my previous solution
DomiKo: like from 1 year ago
DomiKo: reach like 150 in gold
WINWINWIN: minimax?
DomiKo: and that was minmax
DomiKo: but i know
DomiKo: that i optimized it a lot
jacek: what would be good eval for minimax?
DomiKo: idk
jacek: uttt is so unevaluable
DomiKo: yap
DomiKo: i eval it like a normal TTT game
dbdr: how do you eval TTT?
DomiKo: like shi....
dbdr: it's so shallow you can just go to terminal nodes, so eval is just WLD :)
WINWINWIN: :)
DomiKo: i make some patterns
DomiKo: that could make me win
DomiKo: and if i see pattern i give points
DomiKo: that was pretty good in bottom/mid gold
struct: well 1 ms mcts is enough to get bottom gold
WINWINWIN: Really?
DomiKo: that could be true...
DomiKo: the gap
DomiKo: bettween top10 gold and resst
DomiKo: is soooo big
struct: depends on the perforamnce
struct: im sure that <500 rollouts are more than enough for bottom gold
DomiKo: yesterday i had like 90% winrate with all player < top 10
DomiKo: and like 50% in top10
Astrobytes: acat got gold with just MC iirc
DomiKo: he did it in java
Astrobytes: yeah :)
WINWINWIN: Who is the gold boss?
DomiKo: i know that he really don't like c++ :(
Astrobytes: He should have used Lua :P
DomiKo: yea ;)
MSmits: DomiKo, the reason that top gold is so much better than the rest of gold is that they're people that fought hard to get into legend and failed.
MSmits: the rest probably stopped soon after reaching gold
DomiKo: yea i guess
DomiKo: and thank you man
DomiKo: without you i woudn't reach legend <3
jacek: i though relu was shit, it didnt work with my xor example
MSmits: DomiKo np
struct: relu?
MSmits: activation function
MSmits: used for nn
jacek: then i changed the drelu from if x < 0 to x<= 0 and it worked!
jacek: but most sources talk about <
MSmits: maybe it depends on your implementation
jacek: or was it > 0? :thinking:
MSmits: if it was > 0 then that would make sense
MSmits: thats one negation away from your version
MSmits: btw, on Oware, do you currently have an opening book ?
MSmits: I saw you submitted a new versin
MSmits: version
MSmits: it does a weird 2nd move
jacek: i ditched opening book
MSmits: ah
jacek: which 2nd move
MSmits: the first p2 move
MSmits: you choose 4th pit
MSmits: noone else does
MSmits: doesnt mean it's bad
jacek: hmm
MSmits: my meta mcts started out thinking that was the best move
MSmits: but it's now at 5
MSmits: which is what my live bot uses and Agade as well
jacek: well my deeper search also says its 5->11->
struct: best move is d3
MSmits: hmm ok
MSmits: are you hinting that i should get back to Othello struct?
jacek: back?
MSmits: well i have coded a bit
MSmits: no working version yet
struct: It's your choice
struct: I don't want to force you
MSmits: mmh sure you do :P
MSmits: but its cool, i like the game
MSmits: not sure how the search will go, this one might not go as well as others I fear
MSmits: eval is difficult
struct: You might need to learn new stuff
MSmits: yeah
struct: Which is a good thing
MSmits: I guess so, yes
jacek: my book was based on old eval and was unneseccarily big
jacek: and i dont have size for both book and weights
MSmits: what do you mean unnecessarily big? Too many moves?
MSmits: but isn't the book negligibly small? Mine always are
MSmits: I never made a book over 10 kb so far
MSmits: and thats without unicode compression
MSmits: I can probably make it 5x smaller, to 2kb max
jacek: well i had i.e. positions with only 1 legal moves
MSmits: maybe because my books are partially handcrafted. I only allow automated additions after 10k games played or so
MSmits: from that position
MSmits: thats about 5 hrs of meta mcts time
MSmits: for 1 move
struct: we need to fund MSmits reasearch
MSmits: lol, nah, i like it slow, means i can adjust whats going on if weird stuff happens
Astrobytes: In exchange for what? Smitsishares? :)
MSmits: jacek, btw, do you put whole board positions in your book?
Astrobytes: Or is it like kickstarter, we get a free opening book at every 10K goal
MSmits: like, the entire board state + a move?
MSmits: because that is horribly inefficient
jacek: i know
MSmits: { 5 { 5 } }
struct: isnt it best to keep track of current legal pages?
MSmits: this is my current oware book
MSmits: first player plays 5, second responds with 5
MSmits: there is no game state
jacek: and thats 10kb?
MSmits: no, thats my oware book
struct: so you have like {5{5{next{...}}}}
struct: ?
MSmits: yavalath is 8kb with somewhere around 1k moves or so?
MSmits: struct yeah
MSmits: say the opponent sometimes uses 4, it would be
jacek: how does meta mcts works for mcts w/ 0depth ept?
MSmits: { 5 { 5 } 4 { 2} }
MSmits: the first one is always the one *I* would pick
MSmits: the others are opponent replies with counters
jacek: do you use win/loss for the backpropagation as usual for meta then?
MSmits: for oware its more complicated, but yeah i would normally just back prop win/loss/draw
MSmits: for oware i backprop seeds
MSmits: I play a game to 15 seeds on board
MSmits: finish with end game databse
MSmits: and back prop the net score
MSmits: p1 - p2
MSmits: i do this because then i can do transpositions and disregard the current score
MSmits: so only the board state and the game turn matter, not the score
MSmits: the objective is to get maximum seeds
MSmits: from the current board state
MSmits: for this you dont need to know about past captures
MSmits: this is really bug-prone though, because when you backpropagate, you *do* need to take into account captures
MSmits: at ply 10, captures before 10 dont matter, but captures after 10 do
RaduAntonache89: is there a place to practice answering interview questions on this site? I just finished a test received from an employer and I was wondering if there are practice tests
RaduAntonache89: or does the employer provide his own questions and the site simply provides the delivery method?
Uljahn: try https://www.codingame.com/work/
Uljahn: also not sure about interview questions but you can practice by solving puzzles
[CG]Thibaud: RaduAntonache89 to practice interview questions, best is to do easy and medium puzzles here. Also, on CG for Work, we provide a library of test questions but the employer can add custom ones.
Tahini245: (╯°□°)╯︵ ┻━┻
RaduAntonache89: ok, thanks
jacek: i will treasure this moment https://www.codingame.com/share-replay/476480167
DomiKo: good job
MSmits: nice :)
MSmits: however, you beat me several times in recent submits and my bot beats re curse 60% :P
MSmits: maybe if I submit spam I could rank you above him
jacek: oh, and i even how 1 win against agad
MSmits: cool
MSmits: I draw almost half of games vs him no idea why
MSmits: with 48 seeds, getting half the seeds would seem to be more of a rare occurence
dbdr: maybe oware is a draw?
MSmits: probably. Awari is a draw for sure
MSmits: it is solved as draw when player 1 chooses the rightmost pit
struct: Othello might be a draw too
MSmits: any other pit and p2 wins
MSmits: people seem to think it is
MSmits: ah right, i need to get back to that :P
Hjax: yeah come beat us up at othello
MSmits: will try, but might be a week or two before i have a good bot. Going on short vacation soon
MSmits: I suppose I could code a bit while there :P
Washier: nobody should wait to code
MSmits: agreed
Hjax: so im looking at TD learning, and im wondering why you update after each turn to try to approximate the next turns eval rather than waiting until the end of the game and using the game result to update all moves made in that game
jacek: i was wondering too. but surprisingly it works
jacek: of course at first episode only final position and prefinal position werights will be updated
jacek: but doing more and more episodes, earlier and earlier weights will be updated
jacek: the other spectrum is Monte Carlo, waiting to finish
Hjax: im also trying to work out how many weights i can fit into the upload limit
Hjax: i suppose it depends on how granular i want my weights to be
Hjax: jacek did you search while training? or just pick the child that maximizes eval
Hjax: you said you ran a lot of training games right? how long did it take
dbdr: TD works because many things affect the final result
dbdr: if you affect it too much to early moves, there is a lot of noise
dbdr: if your moves in between are not optimal
dbdr: (which they are not, otherwise no need to learn ;) )
jacek: Hjax in TD i use child with max eval or 10% random
jacek: TD phase of few hundred thousands games takes about 30 minutes
jacek: every 100k i tested the eval during real fast matches against older candidate eval. if 55% win of 300 games, the new eval becomes new candidate
Hjax: i see
Hjax: how do you fit so many weights in your upload?
Hjax: are you just using really small (byte) weights?
jacek: 1 byte per weight
jacek: well actually 2 because im using hex and didnt bother with unicode yet
Washier: wow, trying to improve my othello bot is hard and confusing. try something new that seems to work locally and in the IDE, get murdered in the submit, but somehow beat tomatoes once :confused:
MSmits: maybe pm tomatoes to tell him he has a bug :P
struct: maybe he doesnt have binary version on ide
struct: and you are playing vs rust debug
Washier: wasnt a timeout, i took all 4 corners and smashed it. weird
MSmits: you know whats funny. If tomatoes' bot is completely deterministic, you can record the game and check for this series of moves and use it to always win :P
Washier: jeepers.
MSmits: :smiling_imp:
MSmits: it probably isnt though
Washier: its not deterministic though. i've lost like a 1000 games agains tomatoes
MSmits: that doesnt mean it isnt deterministic
jacek: youre destined to lose against him
Washier: haha
struct: Im gonna make anti tomatoes boss
MSmits: that can also mean you are not deterministic
Washier: i am
jacek: cucumber boss?
Washier: haha, or chef knife boss
MSmits: you always make the same moves in every game given the same gamestate?
struct: bug boss
Washier: yes, just plain minimax alpha-beta with a deterministic eval function
jacek: to be frank there are 3 unique stats after 2 moves
jacek: states
Washier: with symetry?
MSmits: washier, your search stops when calculation time is up and the CPU is not always equally fast
MSmits: so its not deterministic in every game
tomatoes: only 1st black move randomized
MSmits: yes but the calculation time difference between game gives you randomness anyway
MSmits: actually time is the same, number of cpu cycles varies
Washier: i dont time anything. i build the tree 5 deep or bust
MSmits: oh then you are completely deterministic yeah
Washier: always living on the edge
MSmits: why not just keep searching till time ends?
jacek: what if 2 moves have the same score?
MSmits: you might get deeper
Washier: i choose the first if two with same score
jacek: apparently iterative deepening is voodoo magic
Washier: yes, just lazy
MSmits: its easy to code
MSmits: just add a loop
MSmits: and a breaker with time check
jacek: people always say its a waste of time
Washier: iterative deepening is what i should do yes. but dont the scores need to propogate back up after each breadth search, that still stumps me
MSmits: jacek what time is wasted?
MSmits: Washier nothing has to backpropagate between iterations
MSmits: you're just doing the same search multiple times, only deeper
jacek: well instead of ab(5) you do ab(1) ab(2) ab(3) etc.
jacek: people cant grasp the concept ab(n-1) is tiny in comparison to ab(n)
MSmits: yeah, but they're wrong because ab(5) is like 5x longer than 1 - 4 together
MSmits: right
eulerscheZahl: jacek i think you have to leave a :thumbsup: on discord
jacek: ?
struct: :thumbsup:
eulerscheZahl: just do it
Washier: jacek, i def grasp that. ok, i'll put a loop around that puppy and go for it.
MSmits: btw, might be you will still get 5 deep, but maybe on end games get 9 deep or something because less moves
Washier: from 11 moves left i search the whole tree, basically sovle it.
MSmits: right, but maybe you can do it from 12
MSmits: in some cases
jacek: eulerscheZahl but i dun wanna
CDRToast: Good morning/ Day to all
Washier: ok yes, with i deepening i can improve move order and eliminate some moves completely?
struct: hi CDRToast
MSmits: you can do this yes
MSmits: you can store information from your previous search in some kind of array/table thing
MSmits: then prefer searching the best move first
MSmits: or at least the move your search thought was best
Washier: thats another thing that bothers me in othello, do TT's make sense at all? its not like chess\checkers with recurring states.
MSmits: you dont have to have recurring states
MSmits: you can also arrive to the same state by different routes
Washier: ah ok
MSmits: this is most easy to see in those games where you slowly fill up the board like in TTT
MSmits: TTT has no recurring states either
MSmits: but it does have many different ways to get to the same state
MSmits: btw if you've never done a transposition table, think about this
MSmits: its easy to do AB
MSmits: its easy to do TT
MSmits: not easy to do both
MSmits: you need to record the AB status into the TT
jacek: well in AB you have to be careful about lower and upper bound
MSmits: yeah and its really hard to wrap your head around
MSmits: unless you just take someone elses code and dont look at it again
Washier: have read about those bounds as part of the TT yes,
MSmits: i didnt know about this before and I coded a so-called perfectly playing TTT bot, that somehow sometimes made mistakes
MSmits: turned out this was the issue
jacek: does anyone use cg spunk in chrome? i run batch run and never ends and when i stopped it says stopping and nothing happens
dbdr: isn't cgspunk dead for years?
struct: ^
struct: try cgbenchmark I guess
jacek: whats the alternative
dbdr: cgbenchmark
dbdr: or write your own :)
jacek: ah that requires username/password but im using gmail auth for that
struct: delete
tomatoes: try password recover
Hjax: is there a rule against making a second account
Hjax: cgbenchmark doesnt submit anything
Washier: must be
Hjax: but i guess you wouldnt be able to test in higher leagues
RoboStac: you can only test against the boss until you've submitted once
RoboStac: so you'd not be able to do that for contests
Hjax: oh robo, random question, how big is your neural network?
Hjax: cant be super big if you want it to eval fast on cpu
RoboStac: 128 inputs -> 3 3x3Convolution layers of 8 filters each -> 3x3Convolution with 4 filters -> Dense with 64+1 outputs
Hjax: how many nodes can you search per move?
RoboStac: I average around 8000
Hjax: do you think thats why you arent able to beat dbd r? not enough time to search deeply?
Hjax: or do you think you can improve your current network more?
RoboStac: I've given up on that one as I doubled the amount of training games with no real improvements
RoboStac: trying a bigger network now
Hjax: oh youre going in the opposite direction
Hjax: even more knowledge with even fewer nodes?
RoboStac: my original one only had 3 conv layers instead of 4 and didn't get as far, so I feel like bigger might be better here
Hjax: when will the new net be ready? :)
RoboStac: last one was pretty much done after about 100k games and I'm only up to 25k so far
RoboStac: though it's already looking better
jacek: bigger net, slower?
RoboStac: yeah
RoboStac: both in time to play games and in theory in how long it takes to train
Washier: if this was kaggle, also bigger chance to overfit :)
jacek: meh, i still need to grasp the concept of training policy, not only value
Hjax: is training just value and using UCT1 a lot worse than policy + value + PUCT?
Hjax: i dont think ive ever seen a paper directly compare the two approaches
RoboStac: yeah, due to the low number of playouts the policy is fairly important
RoboStac: even with so few playouts I tend to solve games around the same time as others most of the time (with some exceptions as you've spotted before :))
Washier: how far from the end can the top bots solve games?
Hjax: 15 moves from the end roughly?
Hjax: thats when tric tends to say win or loss at least
Washier: jeepers
Hjax: my bot doesnt have solver yet
jacek: i mostly solve 11-12 before
Hjax: but usually im within 1% of win/loss by 10 moves before
Washier: wow. me too, yet i suck way more
Washier: so i lose way before 11 moves are left.
Hjax: yeah but you said you only search depth 5 before the end game right?
Washier: yes
Washier: figures
Hjax: im not sure how deep my search tree is with my mcts
Hjax: but its definitely much deeper than 5
jacek: i read about special endgame solvers
Washier: yes, so far i've been really lazy with that. way too much attention on eval. lot of work to look forward to :) really love Othello
Hjax: opposite of me Washier
Hjax: my bot is all search, no eval
jacek: you hate othello?
Hjax: har har :P
jacek: ahh
Washier: haha
Hjax: my only eval term is mobility
Washier: so tight around 10th spot on the leadbaord now. a lot of luck, unless i missed new submits
Washier: do you sort moves by the mobility?
Hjax: no
Hjax: i just assume whoever has more moves is winning in my search
Washier: so you dont play all games to the end?
jacek: no corners at least/
Hjax: i only play 6 random moves, and take mobility after
Washier: at each level
Hjax: no at the end of the 6 random moves
Hjax: every thing ive tried, including corners, has made it worse
Washier: ok, ty. yes, can confirm, mobility is the driver in my eval.
Washier: pirce count, meh.
Washier: *piece
Hjax: having fewer pieces than your opponent is better in the early game
Washier: i've read that yes. cant make it work though.
Washier: (trying different eval functions in diffrent stages of the game now)
Kagome: 没有中国人
jacek: meow?
Kagome: woof
Uljahn: Automaton2000: sugoi desu ne?
Automaton2000: i haven't even started yet
Washier: haha
Washier: <sound a sloth makes>
AbundantPuddle: What does the sloth say?
Washier: wazaaap. but softly
AbundantPuddle: Lmao
Washier: jacek, MRSmith, Hjax thanks. Just got my first promising result with iterative deepening. amazing how much more relevant you can make the search in the same amount of time.
Washier: also move ordering rocks
Hjax: :D
Washier: just love that feeling you get when AI surprises you. It is like magic
Hjax: submitting a new version soon?
Washier: tired, and honestly had a bottle of wine in the process. maybe later.
Hjax: oooh robo won a game against dbd r
Washier: wow
jacek: :scream:
RoboStac: so it turns out bigger is better :)
jacek: thats what she...
Washier: haha
eulerscheZahl: now i see why you refused the moderator thing :D
Astrobytes: Was WIN WIN WIN that nominated jacek, I said at the time I wasn't sure...
eulerscheZahl: the advantage of WIN*3: different timezone
Astrobytes: Yup. And he's very diplomatic. I nominated you, robo and dbd r btw ;)
jacek: why would anyone nominate me ~
eulerscheZahl: you could nominate people?
Astrobytes: Nah, Thibaud was asking the other morning
Hjax: and its not even done being trained yet right?
Hjax: @robo
Astrobytes: I have no idea jacek :P
jacek: phew
eulerscheZahl: ah, i see Astrobytes... https://cg.spdns.eu/wiki/Chat:World/2020-07-09
eulerscheZahl: i feel honored for getting mentioned ;)
eulerscheZahl: "struct might do it, not sure if jacek would" and you turned out to be right
Astrobytes: ;)
jacek: Automaton2000 what do you think
Automaton2000: but i see you have a way to use the same collision
eulerscheZahl: was that the doctor phonecall that made you go afk? got the results now?
AbundantPuddle: Is there a way to report or open a case about a clash? Because unless I am missing something, this is obviously wrong.
eulerscheZahl: which clash?
jacek: what wrong
Astrobytes: No, work related eulerscheZahl. Yeah, I have a vitamin D deficiency but it doesn't explain everything. And I can't get a bone density scan for a while because hospital isn't taking anyone for now. Speaking to my own doctor next week (spoke to different one today)
eulerscheZahl: you can give feedback after the clash. but tbh i'm not sure if anyone will read it
AbundantPuddle: average of string
eulerscheZahl: yes, you told about the density scan taking longer
eulerscheZahl: this? https://www.codingame.com/contribute/view/6225a0bc78303a00236df74219ba707f98f
Astrobytes: They have my referral but they're not even doing any right now :/
eulerscheZahl: or https://www.codingame.com/contribute/view/566f1b2a3e5f3123e4ac6674b64e491ff61
eulerscheZahl: it's a horrible timing to get ill :(
Astrobytes: Yes, it truly is. Just my luck!
eulerscheZahl: https://www.codingame.com/contribute/view/1598b8f1b42c79724c32040691e2f5c062c3 so many average ascii puzzles
Astrobytes: Hey, no clash is too easy, or too similar it would seem
eulerscheZahl: right
AbundantPuddle: http://chat.codingame.com/pastebin/77c4fb53-4c0a-4e7f-bbec-938fc407c2af
eulerscheZahl: http://chat.codingame.com/pastebin/a255fe13-73d6-43a2-bbd4-7c14b2e1f5d3
eulerscheZahl: i can confirm the m
AbundantPuddle: So it's basically asking the average of the ascii codes then? Not the average of the length?
eulerscheZahl: i don't even know what your understanding of it means
eulerscheZahl: >>> s[len(s)//2] 'j'
AbundantPuddle: Yes, that is what I got
Hjax: i got a reverse puzzle once that was the sum of the ascii values of a string
Hjax: and i just didnt get it
eulerscheZahl: >>> s = .join(sorted(s)) >>> s[len(s)//2] 'l'
eulerscheZahl: https://www.codingame.com/contribute/view/485d6ab4acfe2984f3ccafdacfceea5daf6 such original, much creative
AbundantPuddle: It didn't say anything about sorting or ordered. It just asked for the average, which I took to mean the middle letter.
eulerscheZahl: and only with odd chars https://www.codingame.com/contribute/view/2188188421514700e6c7657a7fe293539ad
Hjax: yeah, and without knowing how common those puzzles are, its just crappy to try to reverse
eulerscheZahl: agreed
AbundantPuddle: I appreciate you taking a look and explaining it to me. It was just my misunderstanding of the requirements. I do feel it could still be explained better though.
Uljahn: if there are bots playing CoCs, there should be bots for making CoC contributions and approving them :smiley:
eulerscheZahl: that sounds like a simple task
eulerscheZahl: step 1: automate joining in 50 clashes to get moderation rights there
eulerscheZahl: that's the nasty part, as it has captchas
eulerscheZahl: the rest is simple
AbundantPuddle: Bots writing bots. What can go wrong?
Uljahn: singularity is close, Automaton2000
Automaton2000: yeah i had to learn it though
Astrobytes: AbundantPuddle also props to you for not instantly going to the forum/discord and claiming there's a bug in the puzzle :+1:
AbundantPuddle: I'm gonna miss the good old days. What good old days? When people were killed by other people.
Astrobytes: Always good to check in chat first
eulerscheZahl: yeah. the chat is faster in replies and triggers less users to look into it
AbundantPuddle: I generally believe in the approval process and trust that items that make it through have been tested thoroughly by people much more intelligent than me. I just didn't understand how something (that seemed) so obviously wrong would have made it through.
Uljahn: :smirk:
eulerscheZahl: and it's one of the older contributions, sitting there for years
eulerscheZahl: reasonable thinking that it might be you and not the puzzle then
eulerscheZahl: we have that at least once a week: this puzzle was solved by 100k users. but there must be a bug in it, my code is correct
Astrobytes: lol, we need a PEBCAC bot for those. Yeah, most of the problematic ones are fairly recent, not much to worry about with the older ones.
eulerscheZahl: i keep forgetting what that acronym stands for
Astrobytes: Problem Exists Between Computer And Chair
eulerscheZahl: i just remembered it now :D
eulerscheZahl: partially, didn't get the E
Astrobytes: Lots of variations on it too
Schwase: euler your comment about needing a dictionary for hooch clash made me chuckle
eulerscheZahl: problems of non-native speakers had no idea what an "orb" is
Astrobytes: that's a classic JBM statement that one right? :)
eulerscheZahl: the one he's remembered best for
AbundantPuddle: http://chat.codingame.com/pastebin/4789be4d-e53d-4b82-a137-5ca01ff001c0
AbundantPuddle: Lmao. Love that acronym.
eulerscheZahl: timestamp of your clash: http://chat.codingame.com/pastebin/75804c05-fa5f-464c-96fc-3f2e6779d7c3
Astrobytes: Yeah sure
Schwase: i have 5 easy practice challenges left to 100% easy and 3 of them are made by him lol
eulerscheZahl: at some point i had 100% for everything but very hard
eulerscheZahl: then community contributions got merged
Schwase: its just that the content of his puzzles is very creative and unfamiliar to me
Schwase: like smooth! what kind of game is that
eulerscheZahl: for me some puzzles are interesting and fun to solve
eulerscheZahl: for others i get the hell out of there
Schwase: kinda surprised by a pathfinding puzzle in easy ngl
Schwase: most of them i can solve just within the main
Schwase: using pattern recognition etc
eulerscheZahl: oh, the lost child got approved
Schwase: bout a week ago i think
Astrobytes: Yes unfortunately.
Astrobytes: I mean, it's fine but there's nothing to distinguish it from the other pathfinding puzzles.
eulerscheZahl: that's one of those puzzles i don't care about. maybe because i can code pathfinding without much thinking now
Schwase: someone complained about the wording of it but like come on its simple pathfinding you dont need some great story for that kind of thing
eulerscheZahl: i miss the extra twist to get into it
Hjax: im not high enough level to approve contributions, i should do more puzzles
Astrobytes: Yep. AFAIK he'd planned to do something else but it got approved first
eulerscheZahl: The 12 year old child has lost is[sic!] mother
eulerscheZahl: obviously we can complain about the working here
Astrobytes: the working eh
eulerscheZahl: fail
Astrobytes: :D
Astrobytes: A somewhat epic one at that
eulerscheZahl: but seriously: don't put your contribution as pending when you aren't done
Astrobytes: Yep, agreed.
Astrobytes: WIP is there for a reason
eulerscheZahl: reminds me that i wanted to fix 2 or 3 grammar mistakes in the onitama statement :innocent:
Astrobytes: "player select(s)", "will th(e)n (be)", "exchanging it"
Astrobytes: Anything else I missed?
eulerscheZahl: maybe constantly addressing the player with "he" but meh
AbundantPuddle: layerpay elect(s)say illway enthay ebay
jacek: " The opponent on that cell will than get eliminated from the game" !!!!!!!
Astrobytes: Yeah I got that one
Astrobytes: You should all talk proper England like I does
jacek: karliso fix ur bot https://www.codingame.com/share-replay/476535370
eulerscheZahl: jacek fix ur message
jacek: how can you tell im not using book?
eulerscheZahl: i'm just assuming
jacek: and youre right :o
struct: error fixed by doing nothing :/
eulerscheZahl: BenjaminUrquhart where is my shrine sprite? :rage:
eulerscheZahl: and what error did you fix struct?
struct: javascript
eulerscheZahl: pixi?
struct: yes
jacek: one cant fix javascript
struct: I was accessing container before entities were drawn
struct: or added
struct: dont know how its possible
Washier: i feel like i should close this window. not my business :)
struct: ok happened again
struct: so its not fixe
eulerscheZahl: loud neighbors Washier?
Washier: interesting neighbours. and me being a looky look
Washier: just walking down the street really
PkZ: Does anyone know if A* is generally expected to succeed?
Astrobytes: Just closed mine, the Lord of Barkness/Doggie Barko got let out again
eulerscheZahl: if there is a way, A* will find it
eulerscheZahl: not necessarily the shortest path
PkZ: yeah but what if there is no way?
Washier: noob here. A* is sweet
PkZ: mine just goes in circles forever
eulerscheZahl: also depending on how good your heuristic function is
eulerscheZahl: you have a closed list to only visit each node once
Washier: even fast in C#
Hjax: if theres a path, A* will find it
Hjax: oh scroll
Astrobytes: So if you're going in circles then you have a bug
eulerscheZahl: at least we agree Hjax. almost word by word :D
Hjax: :D
Astrobytes: He's already started typing my thoughts before me euler
Hjax: have i?
Astrobytes: It's all downhill for me now
Astrobytes: Yeah
Washier: haha
eulerscheZahl: damn. i knew that you are slow Astrobytes. but that slow? :rofl:
Astrobytes: You beat me to it yesterday, and the other day as well
PkZ: My good old source wikipedia doesnt have a closed list :thinking:
Astrobytes: :grimacing:
PkZ: guess i should implement that
Washier: github
Astrobytes: PkZ https://www.redblobgames.com/pathfinding/a-star/introduction.html
eulerscheZahl: https://de.wikipedia.org/wiki/A*-Algorithmus german wiki has a closed list
eulerscheZahl: and the link isn't working, great
Astrobytes: The German for algorith is 'algorithmus'. How very grand sounding :)
Astrobytes: *algorithm
Washier: algoritme
eulerscheZahl: https://de.wikipedia.org/wiki/A%42-Algorithmus next try
struct: or my code is too fast
struct: or pixi is too slow
eulerscheZahl: fail
jacek: https://img-9gag-fun.9cache.com/photo/2863710_460s.jpg
Washier: so is euler monitoring struct fixing code here?
Astrobytes: lol jacek
eulerscheZahl: struct and me are just building a little game
Washier: aah
eulerscheZahl: me: engine struct: engine again in JS for smaller replays
Astrobytes: nice. Well, not nice for poor struct
Washier: picked it up because it hade the same patterns as my work chats
jacek: so struc took dirty job making javascript
Washier: fail. no. haha
struct: yes with poor documentationn
Washier: you can doo eeet
eulerscheZahl: don't worry, i'll return him without permanent mental damage when i'm done
Astrobytes: :D
eulerscheZahl: and when struct becomes a mod, he can't even delete his account anymore
eulerscheZahl: not without losing mod status
Washier: he made othello, so im partial
Washier: but what do i know
Astrobytes: Washier, struct made an oath to get legend in one night for a contest or he would delete his account.
Astrobytes: He deleted it.
Washier: holy sheet
eulerscheZahl: that's how the Yavalath game ended up being by Undefined
Astrobytes: Yep. It's now canon.
Hjax: he picked a horrible game to try to get legend in quickly
Astrobytes: Oh yeah
eulerscheZahl: he tried for longer, just without submitting
Washier: <popcorn>
Hjax: utg was so meta game focused
Astrobytes: true
Hjax: you really had to submit
eulerscheZahl: on saturday i said "no sleep till legend"
eulerscheZahl: turned into "no wakeup without legend", got pushed over night
Astrobytes: lol
Washier: what i like is that it is hard. takes a lot of work.
Washier: have not made legend of course
struct: Seems like the constructor is not called at all
struct: But how can this happen 50% of the time
Washier: oh boy
struct: anyone knows a good way to debug javascript?
struct: My current method is console.error()
dbdr: eulerscheZahl: I think A* is optimal
dbdr: i.e. finds the optimal path
Hjax: the first path A* finds isnt necessarily optimal though
Hjax: if you let it run long enough it will find the optimal path
dbdr: not if your heuristic is admissible
Hjax: which it doesnt have to be for A* to work
JBM: Schwase: yeah, still around
dbdr: depends how you define "work" ;)
Hjax: it will find a path :D
dbdr: AFAIK the way it's designed is to be used with an admissible heuri, and then it does find the optimal path
dbdr: but you can use it in other ways if you want
eulerscheZahl: heuristic can be hard depending on your problem
eulerscheZahl: on grid based boards such as on CG you can use pythagorean distance, should do well
eulerscheZahl: but thinking bigger: navigation from Paris to Moscow
eulerscheZahl: you can't track every small road, so you navigate to the highway as fast as possible
dbdr: that's why it's a heuristic
eulerscheZahl: that's a reasonable heuristic. but not necessarily the shortest or fastest
JBM: i'll go with "probably the fastest tho"
eulerscheZahl: exactly. but A* relies on it, so it can fail when the heuristic fails
dbdr: you could take a straight line at motorway speed
dbdr: that should be admissible
dbdr: and still reasonably good
eulerscheZahl: but not necessarily perfect. that's my point
dbdr: perfect in what sense?
eulerscheZahl: whatever your target function is
eulerscheZahl: speed, distance, fuel, ...
dbdr: no
dbdr: you will get the optimal
dbdr: unless you can find shorter than the straight line ;)
dbdr: at max speed
eulerscheZahl: A* is optimal, if your heuristic doesn't give you a higher cost than the actual
dbdr: exactly
Washier: yes. admisable
struct: Seems fixed
Astrobytes: Famous last words...
struct: Might be 100% fixed
struct: before I couldnt even change from SD-HD
struct: now its possible without breaking
eulerscheZahl: nice
Cappefra: hi everyone
Astrobytes: Hi
MSmits: yay my first othello gamr
MSmits: https://www.codingame.com/share-replay/476543500
MSmits: generate move works and i am just selecting the first one
MSmits: cuz why not
Scarfield: :muscle:
jacek: the game provides possible moves, how can we trust what youre saying
MSmits: lol
MSmits: I'm me, thats how
MSmits: I can't even keep things to myself I shouldn't be sharing
dbdr: the fastest dumb bot around ;)
MSmits: how would i lie :P
dbdr: no offense intended
MSmits: haha yeah
MSmits: but no AVX yet
MSmits: could be faster
MSmits: the "no pass turns" thing is interesting
MSmits: earlier I was studying the statement to find out how to pass
struct: Not sure if it was good idea or not
MSmits: I dont know either
MSmits: I dont mind it much
MSmits: so far
MSmits: it's server friendly though, why give players a turn if they cant do anything
struct: its more like if you have multiple turns in a row you can search more
MSmits: sure
MSmits: I will have a pass turn in my tree though
MSmits: makes so you can more easily alternate when backpropagating and such
MSmits: Reusing the tree will be challenging, but I can simply activate expert mode
struct: yeah
MSmits: but thats pretty low on my todo list, for now i'll just treat every turn as a new game
struct: Boss has around 40k rollouts
MSmits: from previous experience, reusing the tree is pretty minor
MSmits: ah ok
struct: on 2nd turn
MSmits: i'm not worried about the boss
MSmits: I'll beat it when i'm done
MSmits: but good to have abenchmark
dbdr: struct, do you want new code for the boss?
Hjax: are we adding another othello boss?
dbdr: just making the current one stronger
struct: Yeah dbdr, we cant let msmits reach wood 1
dbdr: MSmits needs a challenge
Hjax: lol
MSmits: sure :)
MSmits: oh crap now comes the sign stuff
tomatoes: pass moves in tree may skew minimax :thinking:
MSmits: yeah
MSmits: I don't minimax though :)
struct: What does skew means?
struct: favours?
MSmits: unbalances
struct: unbalances in what way?
MSmits: may favor one side or the other
tomatoes: i tried minimax style propagating
MSmits: if you have only 1 child when you expand, just expand again
MSmits: not just pass turns
MSmits: also turns with 1 move
MSmits: i do this in oware
MSmits: not in other games
MSmits: if it almost never happens there's not much point to it
struct: Here might happen more
MSmits: yeah
MSmits: mmh I got over a million rollouts on turn 1 and then crashed on turn 2 :P
MSmits: didnt read all the input or something
MSmits: oh right, dont put the output statement inside your loop to select best move
MSmits: ok 1.3 million rollouts on turn 1. 150k rollouts on turn 2. Also it solves the game 9 plies before the end.
MSmits: https://www.codingame.com/share-replay/476547699
MSmits: but thats with an eval of 0
MSmits: should be able to solve much better with an actual eval
jacek: so typical mcts?
MSmits: yeah same numbers I get in most games
jacek: and the bot is 40k rollouts, how can you lose so easily
MSmits: cuz an eval of 0
MSmits: every position is worth 0
jacek: youre doing ept?
MSmits: yeah
MSmits: well early as in no random rollout
jacek: x_X
MSmits: it works well in onitama and oware
MSmits: dunno about here
jacek: with eval...
MSmits: yes of course lol
MSmits: I just finished my sim and mcts framework. Eval is next :)
MSmits: then i need to fix reusing the tree, AVX the move generation and such
MSmits: I am just happy i didnt get stuck on mcts bugs for hours this time
MSmits: it's a first
jacek: yet
jacek: wait for multiple passes
RoboStac: if your eval is 0 how can you know your sign swapping is right? :)
MSmits: why would it be a problem
MSmits: the solver sign swapping has to be correct Robo, backpropagation of eval could have a sign error, but thats easy to fix
MSmits: jacek why would multiple passes be a problem for mcts?
MSmits: I just add a single child as a pass turn, same board
RoboStac: it's only a problem for tree reuse
MSmits: yeah i know
MSmits: you guys warned me thankfully
jacek: i bet there is some hidden bug anyway
MSmits: could be
MSmits: I took most of my code from my Oware bot, the only annoying part was the fact that I start with a playerID, instead of always being the first player
MSmits: i was worried about this causing me problems
MSmits: btw, this way seems more natural to me
MSmits: Oware is weird for flipping the board on you without telling you
MSmits: i literally count the number of pits with 4 seeds in them to see which player I am :P
jacek: i think that was part of the challenge?
MSmits: it certainly is when you're trying to use an opening and end game book that requires you to know how many turns you have left
Astrobytes: I appear to have fixed a bug
MSmits: which game?
Astrobytes: Othello
Astrobytes: I still have major issues that were depending on the bug, but that's a job for tomorrow
MSmits: well good that you fixed it
MSmits: I am working on eval now
MSmits: trying to figure out how to incorporate mobility without having to count the number of moves for every child
Astrobytes: Over-optimising already :D
MSmits: mmh yeah i guess. It just seems so expensive to run this function for every child
Astrobytes: mobility just as in available moves or incorporating frontiers?
MSmits: I got the frontiers thing
MSmits: so just available moves
MSmits: I guess the frontier thing is just as expensive
MSmits: so for now I'll just generate them
MSmits: optimize later
Astrobytes: Yeah tbh I really don't think that's particularly expensive
MSmits: maybe not
RogerRoger: Is the chat broken on CoC?
Astrobytes: It's just some popcounts right
RogerRoger: Once the clash begins the chat closes and never comes back even at the end of the clash
jacek: yeah, it happens for some time now
Astrobytes: Hm, has anyone reported that on discord/forum?
RogerRoger: bummer, that takes some of the fun away
Astrobytes: It shouldn't happen, it should be available. Not a lot of people use it but it should still work
Astrobytes: Welp. 11th again in Othello but this time I gained a bunch of points. Bug neutralised. Work shall resume tomorrow
Astrobytes: Goodnight all, take care
MSmits: gn Astrobytes
darkhorse64: You are making mince meat of the boss, MSmits
MSmits: yeah
awesometj: i need some help
darkhorse64: I'd hope my creature would resist a bit more
MSmits: I was expecting it to, knowing the quality of your bots
MSmits: I'm solving 15 plies before the end of the game
darkhorse64: There is no solver in the boss and it's only full random rollouts
MSmits: ahh thats different
awesometj: hey
MSmits: my othello bot is very similar to oware,
awesometj: hello
MSmits: sup awesometj
awesometj: sup
awesometj: MSmtis
MSmits: you can use tab to finish my name
MSmits: just type ms + tab
awesometj: ms+tab
MSmits: :face_palm:
struct: lol
struct: MSmits not 100% win rate, cancel the submit
Scarfield: wow nice submit smitty, 1st so far?
MSmits: it's still a very early version
struct: you had 1 timeout
struct: btrw
MSmits: no tree reuse, no avx
MSmits: ohh
awesometj: what are you guys or girls talking about
Scarfield: othello
struct: https://www.codingame.com/replay/476556502
MSmits: it didnt time out during search
tomatoes: memory?
MSmits: nah, it just never accepted my output
MSmits: not sure
MSmits: I think I was just too late
struct: how much time of the 150ms are you using?
MSmits: 145
dbdr: that was quick MSmits, gg!
MSmits: this happens to me in other games as well
MSmits: thanks dbdr
awesometj: u lose
MSmits: only 15 people in wood 1
MSmits: the difference in rating is insane
MSmits: mostly Renard and up
struct: dbd r is almost undefeated
MSmits: yeah
MSmits: need to figure out this expert mode
struct: after reading the board
struct: you get an extra input
struct: after your first output
MSmits: yeah
MSmits: do you still get all actions as well?
Scarfield: "pass" or moves like "a2;c4"
struct: all actions made since your last playable turn
MSmits: i mean
MSmits: do you still get all legal actions
struct: yeah
MSmits: the stuff i dont use
MSmits: ok
Scarfield: how many rollouts do you get?
MSmits: lemme see
MSmits: rollouts are a bit tricky to compare but Turn 1: 1,2 million. Turn 2 84k
MSmits: but a single rollout is not what you would expect
Scarfield: depends on what i am expecting :p
MSmits: those 84k rollouts are actually 644k root visits
MSmits: because i eval every child
MSmits: and backpropagate that
struct: you rollout every child?
MSmits: I dont rollout
MSmits: I eval
Scarfield: damn, i have "some" optimization left
struct: ah ept right?
MSmits: yeah
darkhorse64: 0 depth ?
MSmits: currently yeah
MSmits: i always start with that these days, its easier to code
MSmits: random rollout functions can be tough
MSmits: sometimes it's a lot of code and it can be slow
MSmits: btw, i also tried it on uttt, was not even half bad. I think rank 20-30
MSmits: my eval was ok I guess
darkhorse64: It's not even EPT anymore, or Very Early PT
MSmits: its not even mcts because no random
struct: What do we call it?
MSmits: well you can call it EPT depth 0, but it's still fundamentally different
Scarfield: Immediate Propagation Termination Tree Search
MSmits: sure why not
dbdr: UCTS
MSmits: yeah
MSmits: though you can backpropagate many different ways
dbdr: yes, that's the other aspect
darkhorse64: You coined it ? It's very accurate
MSmits: you can back prop the average child value, the highest child value , do some kind of deeper minimax search from the leaf
dbdr: yes, never heard it before
MSmits: yay top 10 :)
dbdr: I mean it's UCT + TS
dbdr: UCT is the exploration formula
MSmits: is it UCT or UCB
MSmits: i hear both
darkhorse64: UCB applied to Trees
MSmits: is that really what UCT means?
darkhorse64: Yes
MSmits: oh
Scarfield: Upper Confidence Tree
Scarfield: Upper Confidence Bound
MSmits: it's weird to have part of your acronym be an acronym
dbdr: http://chat.codingame.com/pastebin/73fb166c-aa5c-4999-97c5-bc36ed275729
dbdr: GNU's Not Unix, MSmits
Scarfield: UCBT would have been to much to write
MSmits: I wonder how well I picked the weights
struct: Are they different?
struct: wtf
dbdr: part of the acronym is the acronym
Scarfield: yea i see, thought it was just either Tree or Bound, today i learned :p
MSmits: yeah, I forgot what a gnu was
MSmits: I mean the animal
dbdr: it's an animal that is not unix ;)
MSmits: apparently
darkhorse64: gn all
Scarfield: :wave:
dbdr: gnu darkhorse64
Scarfield: lel
Scarfield: :water_buffalo:
MSmits: gn darkhorse64
Hjax: MSmits you have no chill
MSmits: chili? The food?
MSmits: not a fan
Hjax: no, chill
MSmits: ahhhh
Hjax: "it will probably rake me a few weeks to get something that wins games"
Hjax: *4 hours later* top 10
MSmits: hey, it's Robo's fault
Hjax: how is it robos fault?
MSmits: he shared a link where there was move generation code
Hjax: lol
Hjax: what search / eval are you doing right now?
MSmits: the sim usually takes me a lot of time
MSmits: EPT depth 0
MSmits: or UCTS
Hjax: with what eval?
MSmits: mcts with no random, just eval
MSmits: frontier, corners, move count
MSmits: with weights for each
Hjax: interesting
tomatoes: same :grinning:
Hjax: i still dont know what i was doing wrong with frontier / corners / move count
Hjax: but its about 5 points worse than just move count
MSmits: well you do the > 0 = win thing
Hjax: i do, i think tomatoes does that too
MSmits: ah, well thats not it then
MSmits: float normalized = evalScore / MAX_ADVANTAGE; return evalScore > 0 ? min(1.0f, normalized) : max(-1.0f, normalized);
MSmits: capped between -1 and 1
MSmits: because it cant be higher than win or loss
Hjax: im going to try to write a fancy n tuples eval this weekend
MSmits: doesnt that require training off line or something?
Hjax: it does
MSmits: hmm ok
MSmits: is it just a weight field>?
MSmits: that results from training?
MSmits: i should read that paper
Hjax: yeah, huge array of numbers
MSmits: why huge?>
tomatoes: 3^tuple_size
MSmits: whats tuple_size
Hjax: basically you take some part of the board, and index into a weights array based on the position in just that part of the board
tomatoes: pattern/part of the field
Hjax: so if your tuple size is 5, you have some pattern of 5 locations on the game board
MSmits: how many cells are you looking at around that cell?
MSmits: hmm
MSmits: ok
Hjax: the shape and number is up to you
Hjax: and then you have a bunch of these tuples, and weights arrays
Hjax: and you sum them
MSmits: ok so it is just a bunch of patterns you're looking up?
tomatoes: it seems
Hjax: its a score for every possible set of pieces in that subset of the board
MSmits: interesting
Hjax: for each subset of the board, you do the lookup
MSmits: right
Hjax: and add to some total score
MSmits: jace k does this?
tomatoes: i've only read, didnt try to implement yet
Hjax: yes
MSmits: dbd r doesnt?
Hjax: unknown
MSmits: oh
Hjax: he said he has 300k weights
Hjax: so hes doing something
struct: doenst he have a crazy amount of weights?
MSmits: dbd r has 300k weights?
Hjax: but he hasnt said if its n tuples
struct: doesnt probcut require weights?
Hjax: it does, but not that many weights
Hjax: "they compress well" -dbd r when i asked how on earth he has 300k weights
MSmits: well i'll focus on implementing AVX and such before I do the eval
Hjax: jace k said he has 60k weights i think?
tomatoes: 30 :thinking:
Hjax: was it 30?
Hjax: my bad
Hjax: i dont have avx or anything fancy like that
tomatoes: im not sure now
MSmits: avx is actually not that hard to use. It's just hard to find a use for
Hjax: but my code only spends 20% of its total time in move gen / make
Hjax: so its not really the bottleneck anyway
MSmits: i dont expect it to help a lot, but i am sure it will and that means I can finally use AVX in a bot
MSmits: I never have before. Well i tried but it never helped
MSmits: i could do csb, but i dont want to.. i know it helps there
MSmits: if I ever get back i will
Hjax: i was trying to work out how many weights i can fit in my submission here
Hjax: and what n tuples scheme i want to use
Hjax: shape / size
MSmits: how many different weight sizes do you want?>
MSmits: as in how many bits per weight?
Hjax: i wasnt sure of that either
Hjax: i was thinking a byte is probably enough
MSmits: say you use 1 byte
MSmits: then at max you can have 200k weights
MSmits: unless you have many equal weights and can compress it somehow
struct: 🚀 === 4 bytes
MSmits: you have to figure out how to deal with symmetry also
Hjax: ive mostly worked that out already
Hjax: well, ive worked out how to rotate bitboards
MSmits: I'd say you read in your weights in the first 2 seconds and then multipley the array by 4
MSmits: then you dont need to rotate anything during the search
MSmits: or by 8 actually
Hjax: yeah i was about to say, its by 8
MSmits: right yeah
MSmits: i do this for opening book in yavalath
Hjax: i was thinking i would pre rotate the masks
Hjax: that get the part of the board for the tuples
MSmits: I read the book, then have a map to all 11 other symmetries of each move
Hjax: then i just PEXT the board position
Hjax: and index into my table
MSmits: yeah thats good
Hjax: i just need to make sure the bits are in the right order
Hjax: if the low bit is the corner in one rotation, the low bit needs to be the corner in all rotations
MSmits: have fun with that :P
Hjax: its a bit easier if my tuples are all straight lines
Hjax: because then they are either backwards or not
MSmits: they wont be
MSmits: well
MSmits: they will be rectangles
MSmits: 3 by 2 and such
Hjax: i was thinking 4x1 chunks might be pretty reasonable
MSmits: i thought that paper had bigger chunks?
Hjax: depends on the paper
Hjax: i found one that swore 1x2 was best for othello
MSmits: 1x2 ??
Hjax: yep
Hjax: i dont buy that
MSmits: that wont give you many weights at all
Hjax: but i can experiment with different weight sizes and shapes
MSmits: yeah
Hjax: 4x1 just seemed like a straight forward place to start
Hjax: nice and friendly with rotations
MSmits: this is basically like having lookup arrays for miniboards in uttt
Hjax: i think of it as a really dumb neural network
MSmits: well dumb on the side of the program. It's actually more intelligent on the side of the programmer
MSmits: with a real NN the programmer doesnt have a clue what is going on
Hjax: the wikipedia page for it compared it to the kernel trick SVMs use
MSmits: no idea about that
Hjax: where you are mapping the state to a higher dimensional space
MSmits: that sounds cool
Hjax: SVMs just try to find a plane that separates your data
Hjax: used for supervised learning classifiers
MSmits: ahh ok
MSmits: I saw a lecture about that
starmaq: hello
MSmits: hi
Hjax: but even if you have ugly data that doesnt look like you can separate it
Hjax: if you map it into a higher dimensional space
MSmits: yeah i get that, more degrees of freedom
Hjax: yeah
MSmits: makes sense
MSmits: it's like fitting a function with more parameters
Hjax: in the case of n tuples, it lets you encode positional knowledge by looking at a lot of chunks of the board
Hjax: a single square on the board is probably in several tuples
Hjax: and then can be good and bad at the same time
Hjax: for different reasons
MSmits: right
MSmits: do you train this the same way as a nn?
Hjax: the papers recommend doing TD learning
MSmits: never done that
Hjax: i found a big database of high quality othello games though
MSmits: it seemed weird to me
Hjax: so i was thinking i would also try a pure supervised approach
MSmits: ah right you said that
MSmits: I would prefer to combine this with a meta mcts
MSmits: and use data from that
struct: this database is from games played by AIs or players?
Hjax: selfplay games by logistello
Hjax: its pretty easy to find
MSmits: sounds nice
Hjax: theres about 150k games in it i believe
Hjax: which should be enough to train some decent weights
struct: 1997 last version
Hjax: sure, but it was the best othello program for a long time
MSmits: you'll get good weights from that for sure
Hjax: the games are probably not blunders all over the place
Hjax: so its high enough quality to train on
MSmits: the fact that it's old is probably mostly going to affect performance
MSmits: not the accuracy of the weights
Hjax: yeah im sure its eval is excellent
Hjax: it actually uses ntuples too
Hjax: the shapes were hand crafted
Hjax: and then trained through self play
MSmits: nice
Hjax: https://skatgame.net/mburo/log.html
Hjax: the self played games are there, as well as a bunch of details about how the program works
MSmits: thanks
MSmits: https://www.codingame.com/share-replay/476565777
MSmits: i know 1 ply before tric trac that I lost :P
MSmits: not even done optimizing, with crap eval and already solve sooner than his ab/TT bot :P
struct: http://www.orbanova.com/nbook/
struct: book from ntest
Hjax: i havent added solver yet
MSmits: it always surprises me how well mcts can solve
MSmits: intuitively you'd think minimax is better at this
Hjax: https://www.codingame.com/replay/476363605
Hjax: tric knows i win before i know i win
MSmits: what was your search type again?
Hjax: mcts ept depth 6
MSmits: ohh ok
MSmits: well it makes sense my way solves faster, I skip the random rollout
Hjax: ill switch to depth 0 when i have my n tuples done probably
Hjax: ill do some testing to see whats better
MSmits: that would be great, let me know if you want to share those results
Hjax: im not planning on keeping any secrets in othello
MSmits: ah ok
Hjax: so ill absolutely let you know :)
MSmits: I share most, but not all
struct: It seems that there are no winning moves
struct: just losing moves
MSmits: weird
Hjax: how many nodes per move do you search smits?
Hjax: are you a lot faster than me?
struct: at least if you follow the book moves
MSmits: oh, let me see
struct: the books stop
MSmits: ROOT: visits: 656754
struct: after a certain depth
MSmits: every node has 1 value backpropagated
MSmits: so 657k nodes checked
Hjax: is that on a fast machine or a slow one
MSmits: let me try a few times
Hjax: i either get 530k or 660k
Hjax: depending on which game runner i get
MSmits: this is turn 2?
Hjax: turn 1
MSmits: I was talking about turn 2
Hjax: oh wow lol
struct: :D
Hjax: im getting about 60k
Hjax: past turn 1
MSmits: turn 1 is 6.6 Million
Hjax: that would destroy my node pool
MSmits: const int NODE_MAX = 20000000;
MSmits: i currently dont reuse the tree
Hjax: i do
MSmits: not sure what it would do to my node pool
MSmits: i was going to work on that
MSmits: but then there was interesting conversation here
MSmits: and i'm tired
Hjax: lets see how many playouts i get with depth 0
MSmits: btw
MSmits: i get so many nodes because i eval each child
MSmits: so one expansion phase = x moves = x nodes
Hjax: oh so you uct less
MSmits: yes
Hjax: i see
MSmits: also i skip over 1 child expansions
MSmits: i just expand again
MSmits: so passes and 1 move situations
MSmits: oh and another thing
MSmits: I save the board on the node
MSmits: so I dont have to generate moves and apply them every time i go down the tree
Hjax: why would you have to generate moves?
MSmits: hmm, sorry you dont
MSmits: i mean apply the moves
MSmits: thats also costly
MSmits: i only UCT when going down the tree, at the end I expand and apply the move
Hjax: yeah i might switch to that, i was concerned about memory usage
MSmits: it's two uint64_t
MSmits: not too bad
MSmits: assuming you keep the other stuff small
Hjax: a boolean too?
MSmits: which boolean?
Hjax: whose turn it is?
MSmits: nah
MSmits: selectedCount & 1
MSmits: if it's 1 it's your turn
Hjax: selectedCount?
struct: your node is two uint64=
struct: ?
MSmits: no the boardstate is
struct: ah
MSmits: selected count is the number of nodes i selected
MSmits: when going down the tree
MSmits: a selection is a turn
Hjax: oh true
MSmits: i store them in an array
Hjax: so when i first wrote this
MSmits: so i can easily backprop
Hjax: i was dumb and didnt have pass nodes
Hjax: but now i do, so i guess i dont need the boolean
MSmits: yeah, i usually dont have it
MSmits: also, I dont have any pointers
MSmits: just an integer index
MSmits: to the first node
Hjax: same
Hjax: although my selection is recursive
MSmits: http://chat.codingame.com/pastebin/70417781-dfde-480f-a717-2d0ac5fd1936
Hjax: not a stack
MSmits: ah, i always use a while loop
Hjax: i tried both when i was using java, it didnt seem to make much of a difference
MSmits: probably doesnt
Hjax: i just like recursion better conceptually
MSmits: sometimes I do
MSmits: when i get into a recursion frame of mind I accidentally turn simple loops into recursions also :P
MSmits: I showed dbd r a function I wrote that I thought was really cool and he said, so... you're just looping from 1 to n?
Hjax: lol
Hjax: http://chat.codingame.com/pastebin/051d5722-15b7-4e4a-b732-6130c4157f74
Hjax: my node right now
MSmits: hmm when you calculate the value of a node you divide a float by an integer
MSmits: better have two floats I think
Hjax: it gets typecast first
Hjax: but probably slightly slower
MSmits: yeah, ihavent done any tests recently, but from what i remember, mcts works better if you keep them as two floats
MSmits: slightly faster
MSmits: incrementing rollouts is slower when they are floats
MSmits: but its a small price
Hjax: well im getting lots of things i can tweak, not sure how much more speed ill get
MSmits: do AVX
MSmits: I think its the biggest speedup you can do, even if it is only 10-15%
tomatoes: i had increment problem with float
MSmits: hey, how are endgame books in this game? They seem useless to me because there are too many board configs, but I am not sure
tomatoes: its broken at 2^24
MSmits: huh
MSmits: oh
MSmits: of course
MSmits: some bits are taken up by the scale part of the float
Hjax: i dont think endgame tablebases work in othello
struct: by the end is already too late
Hjax: the game gets more complex, not less complex
Hjax: and yeah youve solved by then
MSmits: thats not a problem though
MSmits: well the more complex part is
MSmits: but you solve even sooner if you havea working endgame book
MSmits: because you shave off nodes at the end of your tree
MSmits: i do this in oware
Hjax: yeah, chess engines do this
MSmits: all boards with <= 6 seeds will end the tree immediately
Hjax: every position with 7 or fewer pieces are solved
Hjax: no need to search more
struct: and they are very small
MSmits: yeah
struct: 10k bytes
MSmits: checkers too
struct: /s
MSmits: what is small struct?
Hjax: he was kidding
struct: I was being sarcasting
MSmits: ohh
Hjax: chess TBs are massive
MSmits: in oware they are tiny
MSmits: well unless you want more than 6 seeds :P
MSmits: my 15 seed db is 4gb
MSmits: but endgame db for oware are actually harder to generate than endgame db for chess because you need to keep all future states in memory
Hjax: so depth 0 is a 50% speedup for me
Hjax: and its awful lol
MSmits: nice
Hjax: because my eval is awful
MSmits: oh :(
tomatoes: do you have random child selection?
MSmits: I dont
MSmits: I eval all children so they're all visited the first time their parent gets expanded
MSmits: after that it's UCT
tomatoes: same
MSmits: you should try onitama and oware next
MSmits: your search will do well in both those games
MSmits: I need to go get some sleep. gn all!
Hjax: goodnight
tomatoes: gn
Hjax: struct are you able to make changes to othello?
struct: depends
struct: what Hjax?
Hjax: struct the viewer doesnt show legal moves if you step through it with the arrows
Hjax: since the legal moves briefly vanish between animations
struct: I see, I will check if its possible to fix it
struct: so from what I read in my code
struct: i commit at 0.00 :/
struct: I will try another thing
struct: I think its possible to do
struct: but not easy
Hjax: its not a huge deal, its just a mild annoyance
struct: yeah Its like the frame at 0 is not equal to 0
struct: :p
Hjax: :P