Chat:World/2021-06-26
Aryan159: whats the thrust value of BOOST in "Coders Strike Back"
DaNinja: 650
Aryan159: just for a single frame?
DaNinja: yes
jacek: happy Caturday
Danii956: anybody else dying out here cause you ant find the bug :(
Skynse: Is it possible to make custom clash lobbies?
DavidDeLord: Failure Found: curriculumEnd of line (\n) Expected: Nothing
DavidDeLord: ???
aCat: you shouldn't print newline as your last character of output
aCat: (probably)
DavidDeLord: i tried that
aCat: hmm
DavidDeLord: it didn't work
aCat: so no idea :(
DavidDeLord: help me the clash ends in 3:41
dbdr: eulerscheZahl, are you going to do planetoids?
eulerscheZahl: no, i'm doing atcoder right now
eulerscheZahl: you have a grid of size 20 x 20 and a list of words (2-12 chars, letters A-H only)
eulerscheZahl: place as many words as possible on the grid
dbdr: also optim :)
eulerscheZahl: yes
kovi: oh, that was my first topcoder marathon
eulerscheZahl: interesting. now it's an atcoder marathon with a duration of 6h
eulerscheZahl: i thought it was 6 days but apparently i can't read :D
dbdr: planetoids has no opponent so also optim, if I read (quickly) correctly
eulerscheZahl: yes, it's an optim
kovi: it seems
dbdr: the sim rules are not given precisely, are they?
eulerscheZahl: with some physics that are nowhere described
eulerscheZahl: big no-no for me
dbdr: 16ms turns :)
dbdr: (but I guess you can skip them if you want)
Westicles: I finally figured out the JS 26 char golf thing. Is ruby 25 or 26?
dbdr: which golf?
Westicles: Uh, well I mean the overhead chars for compression
Westicles: Looks like 25.
Skynse: Sucks that clash of code doesn't have custom lobbies
DaNinja: did you try starting a private clash?
Skynse: wtf
Skynse: there's a private clash???
Skynse: nice man
Skynse: How do I make one?
DaNinja: click Start a Private Clash https://www.codingame.com/multiplayer/clashofcode
DaNinja: customize it then share the link
Skynse: Thanks man
Westicles: but don't share it here
eulerscheZahl: that would defeat the idea of a private clash if you would just share the link in public
JohnCM: haha unless you're streaming
eulerscheZahl: there's no way i'll turn into a CoC streamer
JohnCM: haha recently i have, it's been fun
JohnCM: you should try it too
JohnCM: coc to me is pretty much stress free
jacek: oO
Marchete: I'll try it
Marchete: naaaahh, didn't work out :)
DavidDeLord: when designing a problem for clash of code reverse mode, how many test cases show up?
DavidDeLord: what decides?
DavidDeLord: also what are the chances of getting each clash type?
DanielJB: Is there any way to contact a player? I need to see their answer for Clash of Code...
DanielJB: https://www.codingame.com/profile/b2b73c356e61190693cc54ac47cb95a97582734
DanielJB: His C++ code... I failed mine...
DanielJB: https://www.codingame.com/clashofcode/clash/report/18342856f1a0120d0e9073241bac986e74c24d7
DanielJB: On this clash...
zsltg: @DanielJB according to the help in the lower right, to start a private conversation, you could: /msg nickname
DanielJB: Do I do that on the World chat? It is telling me that the player was not found on the chat. Maybe it only works when both players are on the same chat (for example, the specific Clash of Code chat)...
aCat: DanielJB if you really need to contact someone you can go to frum, find his nick and start conversation there
aCat: he should even get mail with notification
eulerscheZahl: when i clicked the profile, i was hoping for a clash bot. now i'm disappointed
AlkhilJohnStan: bruh
jacek: :thinking:
ARMAGEDDON007: tanishsak bo`ladimi
sprkrd: eulerscheZahl You don't strike me as the streaming type, be it CoC or anything else
sprkrd: My conjecture is that you prefer to sit quietly and do your stuff rather than broadcast it to the whole world
ARMAGEDDON007: nega bunday o`ylayapsiz
DanielJB: @eulerscheZahl I think Clash of Code bots automatically share their code
DanielJB: But it would have been funny
jacek: they dont
geppoz: there is a better way for: (x&mask)==mask ?
jacek: c4 eh
geppoz: :D
ARMAGEDDON007: iltimos kimga gapirayotganingizni yozinglar
geppoz: not(not(x)&c)
geppoz: worst :D
geppoz: x|not(mask)
jacek: are you looking for faster or more readable
geppoz: faster
geppoz: (x&mask)==mask requires 2 operations, & and cmp
geppoz: it is possible with just one operation and resulting flags?
jacek: oh boy MSmits resubmitted
MSmits: :grin:
jacek: maybe more hardcore bitboarders will know
geppoz: that's why im 6th now :D
MSmits: x&mask == mask hmm
MSmits: you can do if (x & ~mask)
MSmits: but it's not better i think
MSmits: (the ~is a not)
jacek: so it's ~better you think
MSmits: probably ~
ARMAGEDDON007: please write down who you are talking to
struct: ph mp
struct: oh no*
struct: :(
struct: there goes my 1st
MSmits: submit not doing that well
MSmits: I suspect you'll stay 1st
MSmits: did you change your bot in the last week or so>?
struct: no
MSmits: mmh weird, well its hard to say anything from 10 games played
struct: you can mouse over the points to see the submission date
MSmits: ah ok
jacek: more moves in ob?
MSmits: not sure, i put the newest book in, but maybe that was already in, i've not been running meta mcts this week
jacek: oO
struct: im still surprised my bot got pushed so much
struct: the win streak was massive
MSmits: want to finish 36 seed oware book faster, it's working on the last seed book now :)
struct: nice
MSmits: i suspect your current bot has a >50% WR
MSmits: vs me
struct: unlikely
MSmits: it's very likely, the opening book makes my bot have a deterministic start. Some iterations of the book may cause me to lose vs you all the time
MSmits: if i submitted an older book i might do better
MSmits: or a newer book
struct: wtf i won so many games
struct: vs you
MSmits: thats what I mean :)
struct: The only bot I lose a lot against is robo
MSmits: I'll leave it at this for now. I'll turn meta mcts back on at some point, but not for now
struct: :sweat_smile:
MSmits: http://cgstats.magusgeek.com/app/multi-connect-4/msmits
MSmits: I'm losing due to book-rps i think
MSmits: but your bot could also just be very good, who knows
eulerscheZahl: then just turn off your book ;)
MSmits: well it is, but i mean better than mine
MSmits: then i'll rank around darkhorse i think
struct: The only explanation it is very good
MSmits: since our bots are almost identical
struct: Thats the reason I lose vs robo
MSmits: how so
struct: Same problem that recurs e had
MSmits: what do you mean
struct: his nn did not do so well against weaker bots
MSmits: wait this is a NN?
MSmits: your connect 4 bot?
struct: no
struct: robo is
MSmits: oh ok
struct: if I make my bot play worse
struct: I win against him
MSmits: it's really hard to say if you're right about this. NN's are just plagued by determinism, especially robo's
struct: true
struct: I feel like I always go into same variation against him
MSmits: he just plays the same line of play vs you every time and your bot doesnt know how to deal with that specific one
MSmits: and it's probably in my book is why i wi
MSmits: win
MSmits: mcts bots seem random but the better they are, the less random they are
struct: yeah
struct: Mine doesnt feel random at all
MSmits: so yours is probably not playing that many different variations either
struct: I need to increas performance
MSmits: not sure if thats the way to go
MSmits: you'll get marginal gains
struct: yeah, Im probably done with C4
struct: for now
struct: I did learn a bit though
MSmits: what'd you learn?
struct: bitboards
MSmits: oh
struct: I had no real experience with it
MSmits: but you did that in uttt?
struct: I feel like its a bit different
MSmits: well i guess it is
MSmits: you could try othello next if you want more like this
struct: I was gonna try breakthrough
MSmits: works too
Kalenn: I feel like length clashes are unfair when you are a C#/Java against Pythons
MSmits: then use python
MSmits: it is not possible, nor is there any reason to balanace languages in shortest mode
MSmits: balance
MSmits: same as languages are not balanced in other games
MSmits: you pick the tool that works best for you
Kalenn: yea, its fine, I dont mind that much
Kalenn: might even pick up Python as well
MSmits: python works well
MSmits: ruby works better even
MSmits: but i feel its better to know python
MSmits: if you want to learn something useful
Kalenn: tho I won't have any use of it in what I am doing, at least now. But in the future perhaps
geppoz: do you think it is possible that with tree reuse you can perform worst?
MSmits: not really
MSmits: you can perform similarly
MSmits: as in, it doesnt help at all
MSmits: but i dont see how it would hurt
geppoz: uh ok, that's my case then
geppoz: y, I think it can't hurt, but it look same
geppoz: no noticeable improvement
MSmits: the thing is, between mcts searches two moves have been played, if a game branches x9, that means 9x9 = 81 different starting points
MSmits: it's different when a move is obviously much better than the others
MSmits: because then visits will be focused there
MSmits: but otherwise you lose most of the work between turns
geppoz: well you ofc choose the best move
geppoz: so you keep the greatest branch of your tree
MSmits: yes but your opponent also gets a turn
geppoz: right
MSmits: and he might not pick the move you expected him to. Even if he does, it's another large fraction of visits lost
struct: I think it can only help
struct: But there might be cases where it might cause you to lose
MSmits: yes, sometimes when a bot plays better, it loses
struct: I would still use it anyways
MSmits: especially if you test vs the same opponent most of the time (determinism)
MSmits: if you want to test a bot properly, add some randomness
struct: also make sure you dont have bugs
struct: I had a bug and was top 3 or something
MSmits: the easiest way to think of it is. Say you search to depth 2 and move A seems best. Then you search to depth 3 and move B seems best. Then you search to depth 4 and A seems best again. In this situation a depth 2 bot plays a better move than a depth 3 bot
MSmits: (probably)
MSmits: assuming this is minimax
MSmits: mcts has this problem too when games get deterministic
MSmits: I need to grade some stuff. Last tasks of the schoolyear...
MSmits: also last physics stuff to grade for the foreseeable future
MSmits: kinda weird. It's like starting a new job
struct: so its CS full time now?
InternalErrror: @struct Some days ago I saw some people using Chinese characters with decode an exec in shortest mode to cut their code size. Was that fixed by now?
struct: im just a chat moderator, I dont think it has been fixed
MSmits: CS full time yeah, more or less
InternalErrror: im just a chat [...] -- hm ok, maybe they should also add a report button
BlaiseEbuth: Report for what?
BlaiseEbuth: This is not forbidden.
BlaiseEbuth: There's of course a debate about such technics. But no rules.
BlaiseEbuth: Concerning shortests, while you don't break the law or the site CGUs it's OK.
BlaiseEbuth: :shrug:
eulerscheZahl: https://www.codingame.com/forum/t/minify-is-cheating/191450
struct: :fork_and_knife:
eulerscheZahl: :spoon:
InternalErrror: It's just stupid cuz people can't read the code afterwards
struct: Well they could just not share it
InternalErrror: and it's not a way that proves any kind of skill
eulerscheZahl: you can just execute the decode part without the eval to read it
struct: and you would not know if they are doing it or not
eulerscheZahl: nothing stops you from doing the same kind of compression
AllYourTrees: you still have to make the uncompressed code as short as possible right?
BlaiseEbuth: InternalErrror: That's because you are in a "sharing" logic, but a lot of people are in a "competition and winning" logic, so they absolutely don't care about writing readable code.
AllYourTrees: struct what does your smart rollout involve for C4? rule based actions? early termination? something else?
BlaiseEbuth: And there's no "good" utilisation of the site, if you want compete, nobody can force tou to share your code, or to make it readable,...
InternalErrror: Isn't the motto of clash of code: "[..] at the end of a game to help other players improve their coding skills."
struct: I think its mostly eraly termination
MSmits: being encouraged to do something is not the same as being required to
struct: early*
struct: but it also has rule based actions
struct: So I guess its both
MSmits: I share a lot of what I code or at least the ideas, but I would never blame another person for choosing not to
AllYourTrees: nice
struct: Some moves are forced
struct: if you dont play them you lose
MSmits: ohh, you have early termination for c4 ??
MSmits: thats new
struct: maybe its not early termination
MSmits: early termination is when you stop at some fixed depth and evaluate
struct: I just return if player won before he actually wons
struct: ah
struct: so no ept
MSmits: ahh ok
MSmits: so you still do the same thing me and darkhorse do except with maybe a performance difference?
struct: I think so
MSmits: ah ok
struct: And that my rollout isnt fully smart
MSmits: whats not fully smart about it?
struct: I can play a move that creates a win for opponent
struct: if the winning move is on top of that piece that I just played
MSmits: oh... I thought that was worse?
struct: maybe it is
MSmits: well you're ahead of darkhorse so...
struct: well I also have more rollouts
AllYourTrees: is there a bitboard operation to get winning moves?
MSmits: how many more?
struct: I think he has 1.8mill on first turn
struct: I have 3 Mill
MSmits: not a single operation AllYourTrees, you need to write a function
MSmits: ah I see, do you rollout from each child struct ?/
struct: yes
MSmits: ok so thats the same then
AllYourTrees: holy crap 3 mill
AllYourTrees: is it higher for C4? or do ppl get those numbers for other games too?
struct: c4 is a basic game
MSmits: uttt is similar
AllYourTrees: what the heck
MSmits: this is turn 1 though
MSmits: when you have 1 second
struct: yeah
struct: 3 Mill in 1 sec
struct: so 300k per 100ms
AllYourTrees: im getting 300k first turn in uttt lol
MSmits: also he uses a rollout from each child
KP56: what is this conversation about?
MSmits: so 1 expansion = 9 playouts
AllYourTrees: oooh
MSmits: if he did 1 at a time, he would have around 1.4 million I am guessing
struct: im sure 90% of my code time is spent on rollout function
AllYourTrees: ya in uttt i expand all children, full random rollouts
MSmits: I dont expand all children in uttt
MSmits: just 1 at a time
struct: expand 1 at a time?
MSmits: I mean 1 playout
struct: ah
MSmits: i expand all ofc
kovi: struct: i would be surprised. with low number of steps utc can be equal share to rollout
MSmits: btw, I just tested, I get 2.5 million struct
AllYourTrees: i just started getting 400k expansions with rollout for all children on breakthrough first turn
kovi: low number of steps = i mean games with 50 turn length
MSmits: kovi you're right, selection can be very expensive
MSmits: especially with cheap playouts
struct: Maybe you are right
struct: I didnt really benchmark my code
struct: I just benchmarked rollout function
MSmits: the less branching, the worse selection gets
AllYourTrees: how many expansions are people getting with NNs?
AllYourTrees: anyone know?
MSmits: 5k or so
MSmits: depends a lot on the network
AllYourTrees: yeah
MSmits: large networks are slower
MSmits: the nice thing about using NN is that you can also incorporate a lot of domain knowledge and not affect the speed of your bot
AllYourTrees: i have a small network and somehow am getting 250k-300k
MSmits: since the NN is bottlenecking so much on the network
AllYourTrees: but its not very good lol
struct: also I tested 3 different ways to update the moves mask, unsetting and setting a bit was slower than the method I currently use
struct: by 30 nanoseconds
AllYourTrees: whats the method you currently use? copy?
struct: no
struct: its one of the things I dont feel confortable sharing :p
AllYourTrees: haha completely fair :)
MSmits: lol my c4 bot got geppozed again
AllYourTrees: i ask a lot of questions and am surprised that you guys answer most of them lol
AllYourTrees: what is gep's strat?
MSmits: I think we're just compulsive like that AllYourTrees
MSmits: dont know about gep, but he's been discussing his bot here, so i suspect something similar
MSmits: i mean asking questions and such
MSmits: like you do
struct: he is using mcts
AllYourTrees: ahhh
struct: with solver
geppoz: y, mcts with solver
AllYourTrees: oh hi geppoz
MSmits: that's the risk of talking a lot about this stuff on worldchat. People end up with the same bot more or less :)
AllYourTrees: :shrug:
MSmits: thats different with contests
struct: I dont really mind sharing
geppoz: that is my first, i'm just practicing
struct: ideas
MSmits: same
geppoz: target is to use on "totoro"
AllYourTrees: is that photosynthesis?
struct: But sharing implementations or functions is a different story
geppoz: y
AllYourTrees: i actually bought the board game, its pretty fun. > 2 players is weird though lol
AllYourTrees: maybe i'll take my rule based for that one and stick it into a mcts
MSmits: a lot of things work apparently
MSmits: if you've read the pm thread
AllYourTrees: oh ya i read all of it :D
AllYourTrees: oh man a rust bot is #2 now in that one!
jacek: :scream:
geppoz: lol I had a but in my C++ version, I was playing without solver at all means, since my "infinity" was casted from double to int, so it never was "infinity"
geppoz: *bug
geppoz: but only small improvement :(
geppoz: I wonder if it can help to improve the rollout strategy
geppoz: at the moment it is just "smart" as doing the winning move if he can
geppoz: lets try more slow but smarter rollout
struct: still its improvement
struct: How many rollouts are you getting geppoz?
struct: https://www.codingame.com/replay/566318341
geppoz: 13000 at first turns
struct: With smarter rollouts I doubt you will lose games like this
struct: you lost the game after move 12 I think
geppoz: 13000 nodes i mean, i do 1 rollout per espansion
struct: wow
struct: But i guess it makes sense
struct: I was around same rank when I submited my bot with less rollouts
geppoz: ops
geppoz: i think i found another bug :rage:
geppoz: and will do smarter rollout
geppoz: well, way down to 4000 nodes in first turns
geppoz: uhm i suppose with smarter rollouts it is needed to increase the ucb param? since the first terms is more accurate?
jacek: increase the exploration?
geppoz: can be?
geppoz: since the first term is more accurate?
ZarthaxX: hey guys
struct: hi ZarthaxX
geppoz: hi
ZarthaxX: howdy
struct: geppoz have you checked the connect 4 link that was posted here before?
struct: come join us on C4 ZarthaxX
geppoz: about the bitboards? yes
struct: yes, that was the link that I was refering to
ZarthaxX: i will try when i have time
ZarthaxX: maybe when semester ends
ZarthaxX: :rofl:
jacek: too late. do it now
struct: I need the points please
jacek: make new alts and submit bots
jacek: thats the spirit!
Wontonimo: There is a value for the ucb parameter, such that a higher value will not result in finding any more "traps" or "surprise moves". For games like checkers this value is close to 2. But the lower the constant the deeper MCTS will go, so although you have to find a sweet spot, there is an upper bound beyond which there is no benefit
geppoz: I am just working on that
geppoz: I was wrong before it seems
geppoz: the smarter the expand/simulate, the smaller should be the params
geppoz: not the viceversa as I said before
geppoz: do you agree Wontonimo
geppoz: ?
jacek: yes
Wontonimo: if it is truly smart, then no need for MCTS, so MCTS is just trying to find it's cognitive blind spot
jacek: well if you rollout is more accurate, no need to explore more
struct: So I should lower my exploration factor if the rollout is smarter?
struct: o.o
jacek: thats what my gut is telling
geppoz: yes struct, that's what my position is telling
jacek: the smarter it is, it is better to exploit eh
Wontonimo: it really depends on the size of the cognitive blind spot. The Constant in ucb is also nicknamed "the regret factor" for good reason. If there is a chance you'll regret the decision that the smart rollout is doing, then you need a higher C
jacek: maybe C = 4, you know, for C4 game :v
struct: if I increase my C to 100 I win vs robo but lose vs the rest
Wontonimo: for MCTS solver, once it finds a solution the C is meaningless. So, if your MCTS solver is able to quickly find a solution, don't worry that your C is too low
geppoz: 100?? Im talking about 2 vs 1
struct: my C is not 100
struct: :D
struct: but with 100 i win vs robo
struct: because my bot plays worse
geppoz: ;)
jacek: and you FPU is inf hm?
Wontonimo: some people put there C in the sqrt, some people out, so be mindful of the value other people say if they don't specify where they put it
struct: whats FPU?
Wontonimo: yeah, what FPU?
jacek: first play urgency, the value you give for unvisited child. it is inf by default
struct: oh I dont have unvisited childs
jacek: oh my
jacek: you put them all into orphanage
Wontonimo: if you have a heuristic, one method is to populate the child with the value of the heuristic as a proxy for the first play. I've read mixed reviews on that and it really depends on the game and the compute trade off
geppoz: well I always prefer to visit, so inf in my case, but I should try the struct strategy to expand all
struct: rollout*
Wontonimo: my UTTT populates the first move to be equal to the grandparent
jacek: uh
Wontonimo: which is another option and also has mixed reviews depending on the game
struct: geppoz if you rollout every child you will have more rollouts but less nodes used
geppoz: :thinking:
geppoz: if I rollout why should I not add also the node to the tree?
Wontonimo: jacek, the grandparent concept goes like this: most likely the nodes win/loss is going to be very nearly the same as the pervious move of this player. That is the grandparent node, so initialize it with that value
struct: I add the node to the tree
struct: then rollout
geppoz: so you expand also for all childs of the selected, right?
Wontonimo: the ucb (regret) can be thought of also as a standard deviation around which you are trying to find the real value. If you init it the win/loss with 0, and the "real" value is supposed to be +0.8 then your STD has to be large enough to lasso it. If instead you initialized it to the grandparent with was +0.7, then you need a much smaller STD
geppoz: so one selection, 9 expansion/rollout/backprop?
geppoz: (9 or reduced as needed)
struct: one selection one expansion 9 childs created 9 rollouts
Wontonimo: now, fair warning, struct darkhorse64 and Marchete all beat me hands down at UTTT, so please take what I'm saying with a grain of salt
struct: Well I think you understand the theory better than m
struct: me*
Wontonimo: oh an you too jacek ... beat me is an understatement
struct: I dont read the papers
Wontonimo: http://chat.codingame.com/pastebin/c1301628-4615-4a82-9d65-c7eca26545ed
Wontonimo: oh, paste binned again! ^^ That was for geppoz
geppoz: y, I read
jacek: my case may be different. i dont have 'rollouts' after all
Wontonimo: i forget what yours is, is it NN?
jacek: eeyup
Wontonimo: sweeeet
jacek: more like mcts-ept or jacekmax. whichever works better for a game
Wontonimo: is it just a tree search with NN eval instead of rollout?
Wontonimo: could we call it NNTS for NeuralNetTreeSearch ?
jacek: sure why not. no rollout, just NN eval
jacek: but even alphazero is called 'mcts' despite no monte carlo part in it
Wontonimo: i though alphaGo only did the smart rollout for about 20 moves then just MC for the rest
Wontonimo: or at least an early version did
Wontonimo: has anyone here tried using AutoEncoders for your NN to boost training and generalization ?
jacek: writing random NN words to look smart eh?
Wontonimo: you know it! hehe
Wontonimo: but seriously, an autoencoder can be very useful to turning data into a reusable semantic embedding that is more generalized than the raw data
Wontonimo: you know, I just need to get off my butt and actually code an NN for one of these games instead of just babbling about theory
xAmaa: why am i not able to go back to the clash and finish it after the time is up?
xAmaa: okay? so why cant i go back and see if my code runs or not
xAmaa: why cant i finish the problem after the time is up
KP56: i dont know ask the one who coded it
xAmaa: yeah hope hes reading this
struct: chill
KP56: nah they are right i shouldnt have responded like that
xAmaa: oh no i wasnt calling u a retard @kp56, sorry for the miscomuncation :)
Wontonimo: hey xAmaa, did you know there is more than just Clash of Code on this platform? There are bot battles and puzzles also! The bot battles are where "it's at"
jacek: really?
Wontonimo: you didn't get the memo? yeah, it's in the TPS report. Check your fax jacek
Wontonimo: (Office Space reference)
jacek: uh
Wontonimo: https://www.youtube.com/watch?v=jsLUidiYm0w
Zenoscave: Someone has a case of the mondays
zsltg: "I understood that reference"
jacek: kids these days...
StreamingCoder: https://www.codingame.com/clashofcode/clash/18349614e8f3b8f9e6c06be2a8f084aa28bfab7
StreamingCoder: https://www.codingame.com/clashofcode/clash/18349614e8f3b8f9e6c06be2a8f084aa28bfab7
struct: Dont post clashes links here, use #clash
Zenoscave: Hey struct
Vintarel: Question : when i get "timeout" in the running of a code, is it only a timeout or can it be other type of error ? Like seg. fault ?
struct: hi zeno
struct: can be seg fault
Zenoscave: vintarel timeout can be seg fault
KP56: even compiler errors count as a timeout one
Vintarel: ohhhhh ok thx !
Zenoscave: how's your bot struct
struct: which one?
Zenoscave: your current one
struct: well my last one was C4
Zenoscave: Is C4 on here?
struct: i still have to start my breakthrough bot
struct: yes
struct: https://www.codingame.com/multiplayer/bot-programming/connect-4/leaderboard
Zenoscave: bitboards?
struct: yes
Zenoscave: I'm thinking of trying to build a RL bot
Zenoscave: need to get a lot of learning on the subject done first
Zenoscave: reinforcement learning
struct: Which game Zeno?
Zenoscave: I'm thinking Othello or breakthrough first
struct: I think in breakthrough is easier to see whats hapening
Zenoscave: gotcha
Zenoscave: How are people reproducing the NN Policies? Obviously exporting to source. but I never could get a framework together to run the weights
Marchete: copy on a paper, then type them on NN
Zenoscave: thanks marchete
jacek: have you seen that article?
Zenoscave: not yet. Thanks!
Marchete: this is a working framework, Zenoscave
Marchete: no theorical BS
Zenoscave: Sweet!!!!!
Marchete: like many github python alphazero bots
jacek: who needs theory :unamused:
Marchete: https://github.com/suragnair/alpha-zero-general#experiments
Marchete: 10 iterations to win a random bot
Marchete: 3 days training
jacek: eeyup
jacek: at least they should test it against vanilla mcts
struct: 3 days to win against random?
Zenoscave: I assume based on mokka?
Marchete: my code? yes, Mokka
Marchete: so it's tested to work on a real bot
Zenoscave: good to know
Marchete: if you plan to use elsewhere
jacek: and jolindie actually made it
struct: ill try NN after I get rank 1
Marchete: and probably jolindie_n used it on oware
jacek: get rank 1?
Marchete: so it wasn't just a lucky weight test on my side
Marchete: but jacek's bot is much much better, just we don't have his framework :)
Marchete: I was trying different things
Marchete: separate NN for policy and value
struct: are you still improving it marchete?
Marchete: smaller networks
Marchete: 1 smaller and 1 bigger
Marchete: nothing good
struct: just like intel next gen cpu
struct: small and big cpus
Marchete: https://arxiv.org/pdf/1905.13521.pdf
struct: cores*
KP56: how would you even train networks on this website
struct: you train offline
struct: localy
Marchete: against itself
jacek: and here i am using only value network
Marchete: I'm not improving but just testing
Zenoscave: Marchete why conda?
Zenoscave: in your environment
Marchete: why not?
Zenoscave: over virtualenv or pyenv or other lighter methods
Zenoscave: does it come with something needed?
Marchete: no idea :sweat_smile:
jacek: he probably tried random stuff untile one worked
Zenoscave: fair enouhg
Marchete: I mean, take all I say in this tutorial with a pinch of salt
Zenoscave: Isn't that most software :D
Marchete: I probably saw it on some tensorflow tutorial
Marchete: I'm open to suggestions and improvements
Zenoscave: The big improvement I can think of is distributed and/or asynchronous work
Zenoscave: It's a heck of a undertaking thoug
Zenoscave: though*
jacek: i think he meant the network itself so it can play better
Zenoscave: I'm no help there :D
Zenoscave: Convolution layers would be cool but wouldn't that explode the weights?
jacek: convolutions are pointless in oware no?
Zenoscave: I meant to add to the framework in general for future games
Marchete: it's simple to propagate the model to do self play
Marchete: it takes time to generate games
Marchete: convolution seems to need less weights but more CPU time
RoboStac: conv layers are usually less weights (unless you add lots of filters per layer, but it gets slow very quickly)
jacek: for most of the games im more limited by codesize than cpu
Marchete: I don't think so
Marchete: how many NN can you sim per turn?
Marchete: maybe I'm bugged
Marchete: I hardly reach 5k
jacek: at least locally, in bt the bigger NN is significantly better than the one i have
jacek: oware?
Marchete: yes
RoboStac: yeah, but you have a one hot input with no optmisations for it
jacek: 10k 'playouts' in 2nd turn
Marchete: that's a lot
Marchete: maybe I'm bugged, because I use AVX2 and it should be faster
jacek: but i during expansion i expand all children, i dont measure that. that would be probably around 40k nodes
Marchete: I know how your jacekmax works ;)
jacek: my last improvement was something that in theory could gave at most 2x speedup, but gave 3.5x speedup due to cache coherence and whatnot
RoboStac: I get 15-18k NN evals per turn
Marchete: then I'm doing something horribly wrong
jacek: i have 1 layer
jacek: (hidden)
Marchete: my weights file is like 97KB floats
Marchete: 22k parameters
jacek: one hots?
Marchete: yes
Marchete: 342 or so inputs
Marchete: some layer, then split to policy and value
Marchete: so 3 hidden layers
jacek: btw. i finally managed to do the mirror thing, so i cut my weights by half
Marchete: I've tried to "join" them
jacek: so i could use more hidden units
Marchete: mirror?
jacek: i have 14*32 inputs, and 128 hidden units
RoboStac: mines 14x32 -> 128 -> 128 -> 6/1
jacek: previously i had 14*64 inputs depending on side to move
Marchete: 128?
Marchete: but that's a lot!
Marchete: and with that you can do 16K sims?
RoboStac: yes
Marchete: then my damn code is buggy/slow :S
RoboStac: my first layer has no multiplications in it
jacek: mine too
Marchete: ???
RoboStac: the inputs are 1/0 , neither needs a multiplication
jacek: and i cache the pairs, so first layer has 7 * HIDDEN additions
Marchete: how they don't need mults
Marchete: I'm lost
jacek: huh
RoboStac: normally you add input * weight - if the input is 1 you can just add weight and if its 0 you don't do anything
Marchete: so you have some custom layer for one hots?
RoboStac: yeah
Marchete: very clever
Marchete: I just go the "proper" way
Marchete: it seems it's overkill
Marchete: not overkill
Marchete: unoptimized
Marchete: esp. for the first layer
Marchete: that it's where all the heavyweight is done
jacek: so you dont have anything special for one hots :scream:
Marchete: ofc not
Marchete: I just replicated "real" layers
jacek: btw. this is also how n-tuples work or how nnue folks do it. most heavy computations occur in first layer
Marchete: but thanks for the inso
Marchete: info*
Marchete: yeah, 20k parameters on first layer
Marchete: like 3k on next ones
RoboStac: I get about 6k with a standard layer
Marchete: relu and other activations invalidates any further propagation of one hot
Marchete: on lower layers, no?
jacek: ?
RoboStac: yeah, after first layer it's just standard matrix multiplication
Marchete: 6k is still a lot, my NN is much smaller
KP56: how to train a network offline on a codingame game
KP56: with tensorflow for example
Marchete: you need a lot of things before
Marchete: the game simulation, some inference engine, and a way to pass weights from TF to this code
jacek: :drooling_face:
struct: not a good time to learn NNs
MSmits: oware is pretty easy to mirror
MSmits: just flip the two sides
MSmits: http://chat.codingame.com/pastebin/17026614-0953-47d1-a394-8fbc462d87d5
MSmits: mine is more complicated than it should be, because of the 60-64 bit overflow
jacek: yeah, my first experiments were bugged due to sign and whatnot
MSmits: it's always the signs that get you
jacek: thats a bad sign isnt it
MSmits: significantly bad
jacek: https://i1.kwejk.pl/k/obrazki/2021/06/qTHAD67AZWJgeLWO.jpg
MSmits: :)
KP56: the latest commit on https://github.com/dreignier/cg-brutaltester has been made 3 years ago, is it still a valid platform to use?
DomiKo: latest commit is from May 25
DomiKo: and yes is still valid
struct: I wonder if I should try to improve my c4 bot a bit
struct: or do bt
struct: ive been lazy past few days
sprkrd: is there anyway to close the chat (not just hide it)? it's kind of annoying to see messages popping up when i'm losing my nerves debugging something. When I'm so nervous it's kind of hard to not see them (no offense meant guys <3)
RoboStac: put ?disableChat on the urk
RoboStac: *url
sprkrd: thank you!!
Marchete: and it can even ping you in red sprkrd
Marchete: for maximum rage, sprkrd
Fleviticus: https://escape.codingame.com/game-session/KcE-mCb-aiI-Nr1
Plantchant: Say you have experience in Lua and Python... would you learn Perl or Ruby next?
Westicles: perl isn't worth much on a resume these days. all that work switched to python
Meme_Magician: I've been golfing in Ruby. I've heard people putting it on Rails for some purposes
NativeX64: cmoonn robin
khanghugo: where do i find my solved problems?
DaNinja: Your Completed problems are at the bottom https://www.codingame.com/training/easy