Chat:World/2020-07-08
DuongCongSon: who is play game now?
DuongCongSon: who is playinh game now?
videxx: hi
WINWINWIN: Hi ArKeDominatem, videxx
NotForrest: people who use python are legit hitler
DinuBrat: Why?
NotForrest: too fast :(
DinuBrat: oh, man don't care
bad-Trevor: Hey Michael
nitekat: Python not always fatest in all cases, so don't worry
ArKeDominate: Fast is relative.
LelouchV: Ruby and Python are usually hard to beat in shortest
LelouchV: And they're fast to code in because you have to write less code
ArKeDominate: Run fast not the most important
tutubalin: JS beats Python sometimes
Cybgy: That's true
tutubalin: Usually you don't need to convert string to number in JS, and when you need it can be done with just plus sign
ArKeDominate: JS beats Python sometimes !
Cybgy: The point is you understand what to code and can make it efficient then any language will work for you
ArKeDominate: java The best in the world
Steane: the sponsored puzzle by codeingame, 'reverse engineering'... have i missed something?
Cybgy: ?
Steane: it seemed way to easy?
tutubalin: In shortest mode CoC usually I start with Python, if I have time I port it to JS then choose what is shorter
ArKeDominate: on JS , ‘var’ is interesting
tutubalin: One time I had to port to Ruby (which I don't know at all) because shortest Python solution had beed already submitted by another player.
nitekat: I'm facing security check to show I'm not a bot when I enter CoC everytime today, why??
TheSpiffiest: anyone here work @ Google? I have questions...
tutubalin: nitekat your account is new. when you get more exp, you will not get captcha
tutubalin: TheSpiffiest what's the question?
NotForrest: just use bytecode 4head
nitekat: @tutubalin really? but I start play about 2-3 weeks ago, no security check pops out until today
tutubalin: nitekat probably too many CoCs played.
NotForrest: does clash of code even have assembly
nitekat: T_T
tutubalin: nitekat when i started on CG i got captcha pretty often just find out that all my opponents are bots
tutubalin: such an irony...
Cybgy: That's might due to heavy traffic from your IP
nitekat: tutubalin security check is annoying but still ok.. just dont want to be considered as a bot
Cybgy: Consider clearing the cookies
Cybgy: That works fine for me
nitekat: Cybgy playing too much in short time? maybe, time to take rest lol
Cybgy: :expressionless:
nitekat: Cybgy I will try to clear cookies thanks a ton
Cybgy: :pray:
jacek: ohai
Uljahn: meowrning
Cybgy: :smiley_cat:
tutubalin: nitekat actually there are bots in CoC: MathieuGanesan, BitWolf, Tychkorg, KaneyklovAleck, AlkhilJohn, BSoD, NoopatJntsu, LannertvSeveir, SuperMuppet, JayEm94, Natchhood
tutubalin: and when you pass capctha to prove you're not a bot and see one of this guys there, it's emm...weird
TheSpiffiest: how would a bot work in CoC?
Cybgy: WOW :scream:
Cybgy: :fearful:
TheSpiffiest: If someone made a bot that solves code problems I'm unemployed. ;)
Cybgy: Get ready then
tutubalin: it just gets some random score at some random time.
tutubalin: just to make sure that you can't be #1 with 0 score
Cybgy: Be ready with a next job in 2022
Cybgy: :grin:
Cybgy: Don't blame me that I haven't warned you before
TheSpiffiest: I should have enough saved to not worry about that if my interviews go well. Amazon & Google at the moment.
Cybgy: That's great then
Cybgy: :upside_down:
Cybgy: Who want those giants if you can have your own
Cybgy: But BSod may not be a bot
tutubalin: with 66,254 CoCs played?
Cybgy: He just scored a 100%
tutubalin: and lvl 7?
Cybgy: in CoC
tutubalin: sometimes they do.
tutubalin: once on that bots made 100% in Fastest on 0:24 or something
TheSpiffiest: interesting. Translating the requirements into code is a better challenge. Is there a list of challenge questions, or does it figure things out on the fly?
tutubalin: they don't solve the problem actually
Cybgy: They simply copy and paste
TheSpiffiest: Oh - like the reverse program?
Cybgy: No not like that
tutubalin: they are CG bots. so they have ways
TheSpiffiest: answer['testcase']='testanswer'; print(answer[input()]) ?
Cybgy: lol
TheSpiffiest: I did that before. It does work :)
Cybgy: they may be translating the pseudocode into any language of choice
Cybgy: :grin:
Cybgy: The pseudocode => the soln we post for our CoC puzzle
tutubalin: they work even in new puzzles which were never played before
TheSpiffiest: and what's the goal? Programming challenge or do they spam something?
Cybgy: Every puzzle that exists in CG esp in CoC have a sol
Cybgy: See if you have someone better
Cybgy: you compete and level-up
tutubalin: so i suppose there's something like bot.submit().at(randomtime(15*60)).with(randomscore(100))
Cybgy: thus to invite coders CG use it
Cybgy: And that's a pretty good way to improve and learn
TheSpiffiest: what's a sol?
TheSpiffiest: solution?
Cybgy: :smile: sol=>solution
Cybgy: yeah was reading chemistry
Cybgy: so typed that
TheSpiffiest: just checking. Being explicit is in our nature of course. :)
RoboStac: theres a blog post on how the bots work - https://www.codingame.com/blog/clash-of-code-time-has-come-for-clash
Cybgy: Thanks, for your research work!
Cybgy: That
Cybgy: is great
TheSpiffiest: ah interesting and disappointing.
TheSpiffiest: I was thinking natural language processing to logic / code generation
RoboStac: I think if they'd solved that problem it'd be a bigger deal than clash of code bots :)
Cybgy: Why not create one like that
TheSpiffiest: yeah, I could make a browser extension capture any posted code and index it by problem description hash for any given language.
TheSpiffiest: Because then I *actually* would be out of a job. :)
Cybgy: :grin:
TheSpiffiest: but conceptually it's very difficult
Cybgy: that NP-hard
Cybgy: and a true AI if plausible
TheSpiffiest: yep
Cybgy: (Somewhere) Aliens: Let it be there! :smile:
TheSpiffiest: but saving code from anyone who clicked "Share Code" I could absolutely do
WINWINWIN: At the moment, no system can accurately translate between languages.
TheSpiffiest: I actually do that often to learn languages better.
Cybgy: That's the fun
WINWINWIN: All clash puzzles go through a contribution phase wherein the creator publishes a solution.
Cybgy: i used to write the same code in multiple langs to practice
Cybgy: right WIN
TheSpiffiest: For code golf, I solve things in python, then translate to ruby.
TheSpiffiest: gotta save them bytes
Cybgy: I dream of a language
Cybgy: for which we just have speak and put the constraints
Cybgy: then the code is automatically generated
Cybgy: To speak or to draw
WINWINWIN: Speak in pseudo code? Or english?
Cybgy: In any language you prefer
TheSpiffiest: consider the simple case - "I'm going to give you twenty numbers. I want you to tell me the sum of the numbers after I give them to you. [list of 20 numbers]"
Cybgy: yeah like that
TheSpiffiest: I got it - I'm saying try doing JUST a sum program
WINWINWIN: Seems like a crazy hard NLP program :)
TheSpiffiest: there are so many ways to word that
TheSpiffiest: even your simplest case is almost impossible to even consider how to design
Cybgy: kinda imagine drawing the game logic on a screen put the constraints and voila
Cybgy: you get the code
tomatoes: im not always sure what i want 😌
lyrics: hi
Cybgy: :grin:
TheSpiffiest: so scratch?
Cybgy: yea
Cybgy: but still that's a codeblock
Cybgy: not even close
LelouchV: :o
TheSpiffiest: right... you might like to investigate the old "cyc" project
TheSpiffiest: it's an attempt to capture a classification of all things... kind of
Cybgy: but here's a catch
Cybgy: if someday you wrote a code like that
Cybgy: true AI is finally there
Cybgy: and who want to share it with companies
TheSpiffiest: So - there's a possible solution if CodinGame will give me access to all their data
Cybgy: As if they will :grin:
TheSpiffiest: You could train a machine learning model from the problems and all solutions
TheSpiffiest: but I doubt this site is big enough to give any answers that make sense.
TheSpiffiest: But in theory your validator is a Gan, except it's not enough detail to learn from
Cybgy: that model will still be limited
Cybgy: Ah! those validators
TheSpiffiest: Right. AI only works when you can tell the computer exactly how wrong it is
Cybgy: Exactly you got that
TheSpiffiest: So it goes from 0.001% to 0.02% of a solution
Cybgy: cheers
Cybgy: that's like teaching a baby
Cybgy: And many great minds are working on that only
TheSpiffiest: Yeah, I would love to use tensorflow on some of these but I would have to recode a the game itself :)
Cybgy: use UNITY for that :grin:
TheSpiffiest: well I like coders strike back, but I can't get out of gold league without some better algorithms
Cybgy: And I recreated the same game for my high-school CS project
Cybgy: yeah! it was both fascinating and disappointing
MSmits: TheSpiffiest some board games here are extremely simple to recode
MSmits: maybe do a tensorflow for one of those, others have, or at least they've done a NN, not necessarily using tensorflow
SabertheLost: anyone know whay I cannot use IntStream in java? what java version is running?
struct: Oracle JDK 1.8.0 / OpenJDK 11.0.2 (depends on played game)
SabertheLost: seems Chuck Norris is running java 7? There is no streeams at all.
SabertheLost: Ok, streams. but why not IntStream.
struct: Chuck norris seems to use 11
struct: import java.util.stream.IntStream;
jrke: hey
Cybgy: Sounds interesting https://bit.ly/3gCivpV
VinhDaDen: :((((
VinhDaDen: 40%
Astrobytes: nice RoboStac
jacek: :F
ElViejo: Good Morning. I am new to coding. How do you approach a problem like this.
jacek: to being a new to coding?
ElViejo: A few months
struct: What problem?
ElViejo: Code Clash
struct: I would not recommend Clash to learn
ElViejo: What do you recommend?
struct: puzzles or multiplayers
ElViejo: I find most of the stuff on this site too hard.
Astrobytes: The site is more for practicing what you've learned rather than learning to program
ElViejo: I have tried edubit.com and have earned 190 points.
Hjax: good morning
Astrobytes: morning to you Hjax
struct: hi
Hjax: robo pushed me above eric lol
struct: oh he beat dbdr
RoboStac: you've got a habit of doing one move at the end that completely wrecks my predictions :(
Hjax: no, he drew with dbdr many times
struct: ah right is a draw
struct: I forget to check the numbers
Hjax: my win against robo is super funny
Hjax: robo was above 99%
Hjax: https://www.codingame.com/replay/476208167
RoboStac: yeah, it does appear my end game valuation is slightly off
Hjax: here comes the new robo submit
Hjax: choo choo
RoboStac: same but with mcts solver to try and help with the above
jacek: mcts solver isnt the 'default' by now?
Washier: RoboStac, assuming you are the same RoboStac as on kaggle
Hjax: my mcts isnt solver
jacek: :gasp:
Hjax: the only paper on solver i saw was terrible, and i didnt feel like trying to work out how to do it correctly
RoboStac: I don't think so Washier - I've looked at kaggle but afaik never registered or done anything
jacek: well it might be tricky for othello with passing moves and draws
Hjax: like i understand propagating the absolute results up the tree, but i dont understand how to decide when to do UCT selection of absolute nodes and when to ignore known losses
Hjax: ive seen paper suggest that always ignoring known losses means youll overestimate the position
jacek: they lying
Hjax: are they?
jacek: i just ignore known losses
tomatoes: if its your win return, not yours - skip
Hjax: well that makes it easier then
Sylte: How is my rank decided?
Hjax: ranked by number of codinpoints you have, which are computed based on the formulas here https://www.codingame.com/blog/ranking-rework-competition/
Hjax: i like how robos submit is weaker, not because its actually weaker
Hjax: but because it doesnt get its draw vs dbd r anymore
RoboStac: yeah, I appear to not handle draws properly in the solver part
RoboStac: and never noticed as I've only used it on oware where they are very rare
Hjax: well with solver you went from 92% to forced loss in one move
Hjax: not sure if thats any better :P
RoboStac: testing it offline it needed 3800 visits to solve as a loss and only got 3200 :(
Washier: what do you guys mean by solver?
Hjax: its mcts that propagates absolute game results up the tree
Hjax: so it can prove the value of positions just like minimax
Washier: aah ok, got you. i do that with 13 empty squares left. suppose i need a get a lot more to compete
tomatoes: i had compare uttt with and without solver and solver had ~5% higher winrate
Washier: thanks
Hjax: ? no you just always do it while you search
Hjax: if you see a definite win or definite loss, you dont need to explore that part of the tree anymore
Hjax: mcts's probabilistic nature means it doesnt deal with tactical situations well, where one bad move means it suddenly loses
Hjax: but with solver you can avoid that pitfall
Washier: yes, i understand. I meant when there's 13 squares left, i can set my minimax depth to 13 at not time out. rest of the game i only manage 5 depth
Hjax: you should do iterative deepening
Hjax: you search depth 1, then 2, then 3, etc, until you run out of time
Washier: yes, i know thanks. still struggling to figure out how to code it
Washier: also fiddling around a lot with eval function, and looking at prob-cut(which looks tricky)
Washier: maybe i should just port to C, and search more of the tree :)
WINWINWIN: Hjax, wouldnt you waste time on searching lower and unwanted depths?
Hjax: not if you have a transposition table
Hjax: which stores the results of the low depth search, and uses it to inform the high depth searches
jacek: in practice minimax(n-1) is tiny comparing to minimax(n)
jacek: and with TT you can sort and save more time considerably
WINWINWIN: Understood, but why not start with depth = 3?
Hjax: you can, it doesnt really matter
Hjax: depths 1 and 2 are basically instant
WINWINWIN: Understood, and you can use the transposition table to make up for any lost time.
Hjax: usually with iterative deepening and a tt, searching depths 1-n is as fast as searching just depth n
Hjax: but with the added benefit of you being able to stop at any time and return the best move youve found so far
WINWINWIN: So the benifit is that you can reach higher depth in more constricted scenarios?
Hjax: yeah, you search for like, 95% of your time, and then stop and return a move
Hjax: you get to use all of your time
Hjax: rather than fixed depth which wastes time
WINWINWIN: 5% is enough of a buffer? I have been using 15% for HS :)
WINWINWIN: Probably enough only for C++?
RoboStac: depends on your language / how often you check
RoboStac: anything with garbage collection tends to need a bigger buffer
Hjax: im using a 5 ms buffer with rust right now, which is like 3%
Hjax: i could probably go smaller even
Washier: good info peeps. thanks
WINWINWIN: Would that help much? With Iterative Deepening, you might not be able to search a depth in 2-3 ms.
jacek: iterative deepening is cool even without TT. it is more dynamic, i.e. in chess where there is check there are only few legal moves. you can search deeper this important part of the game
WINWINWIN: So you can examine higher valued nodes to a larger depth?
Washier: makes sense. so more interesting part of the gametree is searched.
WINWINWIN: Back to transposition tables, what information is stored in it? It has to make up for the amount of time spent in searching the table for each node right?
jacek: chess legal moves are about 35 by average, about 150 maximum. with fixed depth, to not timeout you would need to prepare 150 legal moves always happen, so search shallower every time. what a waste
Hjax: im doing MCTS WINWINWIN
WINWINWIN: Why is that better in Othello?
jacek: https://en.wikipedia.org/wiki/Negamax#Negamax_with_alpha_beta_pruning_and_transposition_tables
Hjax: if you are doing iterative deepening dont you also want to store the depth and best move
Hjax: because you dont want to use a low depth search in place of a high depth one
Hjax: you just want to use it for your move ordering
WINWINWIN: Thanks Jacek, Hjax, so I assume that if you are storing alpha beta values you empty the transposition table each game turn?
Hjax: no, absolutely not
Hjax: thats valuable data for your next search
WINWINWIN: But wouldnt it get too memory intensive?
WINWINWIN: Storing an object followed by a couple of integers each turn?
Washier: that's what i also wonder.
Hjax: it can, theres various schemes for deciding what entries to remove
Hjax: tt entries are pretty tiny though
Washier: the wiki article does confirm you need to store the depth and lower\upper bound flags in the TT
WINWINWIN: Hmm. Maybe in Othello you can remove entries that have a lower number of pieces than the current gamestate?
Washier: good idea. simple
struct: what do you mean WINWINWIN?
struct: Having lower number of pieces can be benefitial
Hjax: chat is back from the dead
Hjax: you probably dont need to remove pieces at all, you have enough memory for millions of entries, the game will end before you run out of memory
WINWINWIN: Yeah, seems pretty useless to check the whole table just to remove a few entries.
WINWINWIN: @struct I meant that states with 5 or 6 pieces can be eliminated once the actual game is at a state wherein there are 7 pieces.
Hjax: my node pool is 10 million nodes, and i dont run out
Astrobytes: You hash into the table you don't iterate over it WINWINWIN
struct: ah
tobk: Huh, CoC progress shows 340, but CoC Badge meter shows 329/500... any idea why?
struct: I guess its only updated daily
tobk: (In fact, I think that last number is lower than it was a few days ago, when it was just 2 or 3 off)
WINWINWIN: Thanks Astrobytes, was AFK :)
NaughtyCoder: Would somebody like to teach me how to make "Coders Strike Back" better?
struct: http://files.magusgeek.com/csb/csb_en.html
NaughtyCoder: Wow, thank you.
Hjax: i love how i always win a game against robos submits
Hjax: its very amusing
struct: He will push you to the top
RoboStac: nah, he only wins 1 out of how ever many we play
Hjax: but winning even one is a personal victory
struct: dbd needs to resubmit to fix his score
dbdr: why do you think it's broken?
struct: you got a bit lower due to ties
struct: ah you still tie
struct: I thought it didnt happen anymore
dbdr: many draws, but no loses, interesting
RoboStac: we only ever play 2 different games - if I'm p2 we draw otherwise you destroy me
dbdr: ah ok
jacek: so random
jacek: and nondeterministic
dbdr: not the same game
dbdr: looked at 2 draws at turn 30
dbdr: one was 22-12, the other 23-10
dbdr: sorry, maybe i'm wrong
dbdr: cg player being funny with scrollbar
dbdr: total must be the same when no pass
jacek: woo new puzzle of the week
Astrobytes: Has Paper Soccer been puzzle of the week yet?
jacek: yes. when there was contest :(
Astrobytes: Ah. Not very helpful;
Astrobytes: *helpful.
struct: if (owner === 'struct') continue;
dbdr: yeah, that was bad timing :(
Astrobytes: ewww javascripty quality
Astrobytes: *equality
struct: Yeah I have been writing javascript
struct: It hurtrs
struct: hurts*
Astrobytes: I don't envy you
nickarshadi: 很高兴见到你
nickarshadi: took me some time to learn chinese
jacek: odd looking opening book
struct: Nice, I have been learning it for 6 years
Astrobytes: lol
nickarshadi: awesome
MSmits: hey astrobytes I think I found a bug in my oware bot
Astrobytes: What is it? Bitboard-related?
MSmits: it was in this line:
MSmits: int evalScore = SCORE_VALUE * (child.scores[0] - child.scores[1]);
MSmits: first part of my eval
MSmits: it looks fine, but
MSmits: scores is a uint8_t :P
MSmits: or was
Astrobytes: lol good shout
MSmits: it didnt do a whole lot when i fixed it, but i got a slightly better cg bench result, might be nothing
MSmits: tried to refit params a bit, that didnt do anythign either
Astrobytes: I did something similar with my Othello bot at some point, w as getting these really strange values lol
MSmits: yeah it's a common mistake
MSmits: I think I might be working on othello in a day or two. Just finished coding my oware meta mcts
MSmits: so othello is next
Astrobytes: Cool. You'll be up against robo now as well as dbd r
MSmits: robo has a NN again?
Astrobytes: Yes he does
MSmits: cool
MSmits: does dbdr use an opening book or just really good eval? Minimax I assume?
dbdr: no book yet. I'll do one if I'm forced to ;)
MSmits: leaderboard sure has evolved. I remember when the fox was ahead of everyone by far
Astrobytes: are you using the n-tuples thing now dbdr?
MSmits: if I can make a good othello bot, you'll be forced to. I only do a book when I have a good bot
Astrobytes: Or still just the probcut-based?
dbdr: probcut
Astrobytes: k
MSmits: whats probcut and n-tuples
Astrobytes: I'll resist the urge to lmgtfy
dbdr: MSmits has not been paying attention ;)
MSmits: nah, been coding hard, this oware meta was really hard to write
MSmits: too many moving parts
Astrobytes: hehehe
Astrobytes: n-tuples: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.108.5111&rep=rep1&type=pdf
Astrobytes: probcut you'll find on chessprogramming and similar
MSmits: ah ok thanks
MSmits: but dbdr bot is minimax right?
dbdr: yes
MSmits: and jacek also
MSmits: and robo is nn, tric trac is minimax
MSmits: renard minimax, toma toes i dunno
dbdr: hm, I think jacek is MCTS with eval
MSmits: hmm ok
dbdr: so TS :)
Hjax: tomato is mcts with ept / eval
MSmits: ah ok, so both ways seem to work here
Hjax: yes
MSmits: it's nice when multiple approaches work
Hjax: im also mcts with ept, but my eval is literally only mobility
MSmits: mobility seems important, I read
dbdr: you ditched the rest Hijax?
Hjax: everything else was worse
MSmits: I'll start with that too
Hjax: i want to do some n tuples eval, but thats a weekend problem
Hjax: are you starting othello now smits?
MSmits: yeah, maybe i'll start coding today, maybe tomorrow
MSmits: dont expect a good bot any time soon. Will be on vacation at some point
eulerscheZahl: i see an opening book coming
MSmits: for oware yes, but will need to get the bugs out first
MSmits: well i hope they are out, but experience teaches otherwise
MSmits: I noticed my own oware bot is already extremely deterministic
MSmits: I guess because of EPT with no random rollouts
MSmits: it's like a weird minimax
Hjax: thats what tomato is doing in othello
MSmits: yeah I'll be doing that too
Hjax: my ept is depth 6 random rollouts
Astrobytes: but 10 x more obsessively :P
MSmits: probably :)
Hjax: havent experimented too much with other depths
Hjax: i dont think 0 depth is very strong
Astrobytes: People thought that in Oware too
MSmits: Hjax my experience with this is that as your eval gets better, your ideal depth gets lower
Astrobytes: ^
Hjax: yeah my eval is hot garbage lol
Astrobytes: :)
MSmits: it's possible that no eval exists that is good enough for depth 0 in othello
dbdr: yes, with perfect eval, depth 1 is enough :)
MSmits: well yes, but thats a different depth definition
dbdr: I know
Hjax: ill try a depth 0 submit and see how it goes
MSmits: did you fit it properly? Try 100 games against a few opponents for each depth value?
dbdr: inb4 Hijax top 3
MSmits: it's easy to fit because it's an integer. There are only a few possible values
Hjax: i havent fit anything lol
MSmits: aha
Astrobytes: MSmits - totally OT, but did you watch El Camino? (not sure if I asked you before)
MSmits: well submits are poor tests
MSmits: yes i did
Astrobytes: Damn good eh
MSmits: I enjoyed watching it I think, but somehow I dont remember much of it
Astrobytes: Just wrapping up Jesse's story
MSmits: yeah i remember that part
Astrobytes: I'm rewatching Breaking Bad after BCS and that, with a fresh perspective. You really notice how bad Jesse gets it
Astrobytes: Anyway, back on topic, sorry :)
MSmits: yeah I noticed that the second time i watched the whole series as well
Hjax: i predict my depth 0 rollout will be dead last
MSmits: get a good eval first I'd say
MSmits: this n-tuples thing seems super easy at first glance?
Astrobytes: Yep, eval is 100% needed for depth 0
eulerscheZahl: i watched El Camino 2 or 3 weeks ago. call saul season ended and i realized there is a movie
MSmits: wait no i am looking at the wrong thing
Astrobytes: jacek is using the n-tuples
Hjax: converting the two binary numbers into base 3 seems kind of hard, do i just use a 2d lookup table
MSmits: it's a weird title, not that obvious
Astrobytes: with some TD learning, and some supervised stuff I think
MSmits: ahh ternary, i did that for uttt
Astrobytes: *some other supervised stuff
Astrobytes: Told ya to ask MSmits about ternary Hjax ;)
MSmits: const uint16_t triMoves[9] = { 1,3,9,27,81,243,729,2187,6561 };
MSmits: 9 places on the miniboard
Hjax: a lookup table is probably fine for what i need, its only small ternary numbers
Hjax: ok depth 0 is a lot less bad than i expected
MSmits: http://chat.codingame.com/pastebin/cfdfd623-dc06-475d-a97a-46b094d1b1b6
MSmits: dunno why the iteration is backward and I am using j instead of i, but it works :P
Hjax: probably faster to just precompute though
MSmits: sure, i dont think I do this a million times in a turn, this is more like something i only use in precalc
Astrobytes: "ok depth 0 is a lot less bad than i expected" - other than the fact I'm beating you Hjax :P
Hjax: yeah but im beating ninja!
Hjax: also symmetry seems annoying
Hjax: maybe i just dont bother with it
Hjax: but the space saving is enticing
Astrobytes: ninja times out and makes invalid actions all the time
Astrobytes: Really really annoying to test against
MSmits: not as bad as the rusty guys I'm sure
Astrobytes: I don't even bother testing against them lol, no point whatsoever
Hjax: besides symmetry i understand how to score using n-tuples
Hjax: i dont think i understand the math to train it though
Astrobytes: Ask jacek about it, he was just learning it the other day
dbdr: MSmits: I rather wonder why you are not using recursion ;)
MSmits: lol
MSmits: missed opportunity I suppose
Hjax: ill try to get something n tuple-y together this weekend
Hjax: i want to experiment with pure self play vs training with a database of downloaded games
Hjax: i found a file with ~150k logistello games
MSmits: oo nice
Astrobytes: jacek combined the two didn't he?
Hjax: no he said he only did selfplay
Astrobytes: No, after he did selfplay with TD I think he said he did something else
MSmits: TD?
Astrobytes: I can't quite remember
Hjax: yeah, he did a depth 2 search on positions
Hjax: and used that to update
Astrobytes: Temporal difference
Hjax: rather than just before/after
MSmits: oh ok
Astrobytes: Aha that's it, thanks Hjax
struct: cant scroll the chat
struct: hmm
eulerscheZahl: "TD?" MSmits asking the question i'm asking myself for at least a week
MSmits: you're welcome, hope I didn't spoil anything
Hjax: if i do n tuples i get to use a new BMI2 instruction
Hjax: PEXT
MSmits: it's not that new though, some of us put that into yavalath over a year ago
MSmits: but very cool
MSmits: my checkers bot also uses it
MSmits: and oware as well somewhere I think
Hjax: ok im convinced that depth 0 is worse for my bot
MSmits: oh right, with the harvesting
Hjax: at least until i write a real eval
MSmits: yeah you need a good eval
Astrobytes: pext is the parallel extraction one right
MSmits: yes
Hjax: yeah
MSmits: basically you pick a pattern out of a bitboard and compress it
Astrobytes: yep, I remember
tomatoes: temporal difference
MSmits: pdep is the opposite, you put it back where you found it
Hjax: pext is exactly what i need to index into the weights table for n tuples
Astrobytes: I still think bextr has a use somewhere
MSmits: yeah you can use it for a lot of things
MSmits: in yavalath, the board fits into 64 bit, you can take for example a diagonal line out of the board and use that for a lookup or something
Hjax: it gets annoying with rotations though
Hjax: depending on how you orient the board, the low order bits will be on the wrong side
Hjax: for your lookup
MSmits: probably less so on squares than on a hex board :P
Astrobytes: lol
MSmits: yavalath has 12 symmetries, 6 rotations, then mirrorflip it, then another 6 rotations
Hjax: ouch
Hjax: yeah othello has 8
MSmits: 4 rotations and mirrorflip, same deal, just fewer corners
Hjax: whats the magic trick to rotate a bitboard
MSmits: but indexing is far easier
MSmits: hmm
MSmits: for yavalath I use a transformation array, it's super slow
MSmits: but I only do it to read opening book and in my meta mcts
MSmits: so it's allowed to be slow
MSmits: i basically transform every bit with a lookup
MSmits: means 61 lookups
Hjax: ew
MSmits: yeah
MSmits: but its no bottleneck
Hjax: yeah i cant do that in my eval function though
MSmits: problem is that the board rowss get wider and thinner
MSmits: so it's hard to come up with a tricksy approach
MSmits: Hjax no you cant
Hjax: if i dont do symmetries, i have less efficient storage of weights
MSmits: instead of flipping the bitboard itself, can you flip what the function does?
Scarfield: (╯°□°)╯︵ ┻━┻
Hjax: i guess i can have an array of masks for PEXT that are pre rotated
MSmits: something like that
Astrobytes: ┬─┬ノ( ◕◡◕ ノ)
MSmits: hi Scarfield
Astrobytes: Scarflip
Scarfield: hi fellas :)
Hjax: i do need to keep track if pext is going to put the bits in backwards or not
Hjax: and flip them if it does
Scarfield: for yavalath couldnt you arange your bitboard with the circumference together, and make the symmetry part easier?
MSmits: yeah I thought about that, but that would mean redoing the whole bot
Scarfield: http://chat.codingame.com/pastebin/238f32b2-7c4b-4f23-b961-a2374de80b39
MSmits: for something thats not a bottleneck
MSmits: but it's a good idea
Astrobytes: Interesting approach
MSmits: might have other unexpected benefits
Hjax: i like that my bot occasionally beats tric
MSmits: tric trac has an opening book now doesnt he?
MSmits: but I wonder if it is a serious one, in yavalath he just did the first 2 moves
Astrobytes: it's not a big one
struct: its disabled
Scarfield: hardly a book, more like an opening note
Hjax: yeah hes not printing book anymore
Astrobytes: Oh ok
MSmits: ah ok
dbdr: eh ok
MSmits: depending on the game, the first moves may be far harder to find than later ones
MSmits: with later ones, you're nearer to end games and your search could be more accurate
MSmits: in yavalath, the first moves are super hard, I still dont know for sure what the best 3rd/4th moves are in many instances
dbdr: you sound like you *almost* solved Y
MSmits: I solved 2 out of 9 opening moves
dbdr: wow
MSmits: if someone picks them I know how the game ends
dbdr: are they easier than the others to solve?
MSmits: the others are way hard because they go beyond the initial minefield of traps and that means they probably go to turn 50-60
MSmits: yeah they are easier
dbdr: ah ok
MSmits: yavalath has a trappy-start and then its just about filling the board efficiently
MSmits: minimax is better at the trappy start and mcts is better at "feeling-out" what efficient board fills are
Astrobytes: Are you still running your Y solver when you have Oware/whatever g ame downtime?
MSmits: I am running it this last week or so yes, because I improved the database I am using
Astrobytes: The C# thing
MSmits: yeah
Astrobytes: nice
MSmits: I can go up to 2 billion nodes now, before I kept it all in RAM, which meant maybe 10-20 million max
MSmits: but 2 billion will probably take up like 60-70 gb, I dont really want it to be bigger than that anyway :P
MSmits: and it will take years
struct: just download ram
MSmits: :)
Astrobytes: Y'need a botnet :P
MSmits: i had a serious issue with oware btw, remember how i made my 15 seed book go 180 turns deep?
struct: he needs a pc just for this
MSmits: somehow it seems a really bad opponent can make you go below 15 seeds in less than 20 turns P
MSmits: :P
MSmits: so i had to stretch it to 185 turns, which meant i was about 1% below the max memory size of an array
MSmits: my c++ bot would accept this and my C# program wouldnt
MSmits: so i did a persistent dictionary just to convert this monster which takes many hours :P
MSmits: but it's a one time job... thankfully
MSmits: but yeah a pc just for this struct :)
Hjax: whats that computer? oh thats my yavalath computer. how about that one? oh thats my oware computer
MSmits: if only I could do that :)
MSmits: I usually run 1 meta mcts in the background. Sometimes 2 if I am not doing anything heavy on my pc
struct: do you use multiple threads?
MSmits: no, I have a 4 core PC, so it's just 1 core running the C++ bot and some minor calculations on the main C# program
MSmits: the C++ bots use a fair bit of memory too, because of the node pools
Astrobytes: I think you should distribute a trojan to all your students, create your botnet to run your meta-MCTS's
MSmits: hehe yeah that would be fun
Astrobytes: :grin:
MSmits: I think it's most fun for Yavalath because you can look at the board and learn what good moves are. I doubt it will be that way for oware. Looking at 12 numbers doesn really ring a bell strategy-wise
struct: MSmits without realising became the best Yavalath player
MSmits: I think i'd be reasonably good with all the time i stare at this program :P
Astrobytes: You should contact the author
MSmits: i wonder if theres a free online game version of Y
MSmits: like you can find for uttt
MSmits: what would i talk to him about Astrobytes ?
Astrobytes: Solving Yavalath positions!
MSmits: oh ok
struct: There seems to be an android app
struct: of it
MSmits: the 3 3 and 4 4 moves seem pretty easy to solve though, i',m sure he has done that
inoryy: with a parallelized setup you can probably rent a bunch of GCUs for peanuts and get the same results in minutes rather than months while freeing up your computer?
MSmits: hey inoryy
inoryy: hey
MSmits: I dont fully automate it though
Astrobytes: I suggested this did I not MSmits?
MSmits: I do a lot by hand, choosing moves for the the program to focus down
inoryy: oh, ok
MSmits: because I counter specific players
MSmits: I also use good opponent bots and explore their moves, to solve some branches
darkhorse64: Catching up on the chat, is there a way to generate efficiently moves for checkers? I mean avoiding lists of moves. I know how to find efficiently if there are jumps or moves but I wonder if there is a way to store multiple captures efficiently
MSmits: yeah
MSmits: I did that. My bot sucks, but performance is great
Astrobytes: lol
MSmits: lots of pext and pdep to generate moves and jumps in parallel
Astrobytes: AllphailSpeedo
Astrobytes: Didn't do checkers yet, was thinking of Breakthrough next
MSmits: argh, my checkers bot makes my head hurt
MSmits: it's worse than any other bot
MSmits: here's one line:
MSmits: uint32_t opponentBitRemoved = _pdep_u32(_pext_u32(bit, MOVE_DIRECTIONS[direction]), MOVE_DIRECTIONS_REVERSED[direction]);
Astrobytes: a capture?
MSmits: yeah
MSmits: you have 3 positions
MSmits: where you came from, where you went to and in between
MSmits: i somehow do something with that in parallel
MSmits: on moves it's easy, you do all diagonal up moves left, also right and for kings another two of those
MSmits: basically 4 steps to do all moves
MSmits: in parallel
MSmits: for jumps its a lot messier
struct: wow, some machines are actually very cheap to rent
Astrobytes: I got a massive headache when I got to that part in checkers before so I binned it
MSmits: I should get back to checkers at some point. I wrote a simple eval, then spent a lot of time getting TT to work and it never did. Then ragequit :P
darkhorse64: OK. I'll think about it but maybe I'll first write something simple. While looking for othello stuff, I stumbled on a python checkers bot written for hackerrank. With a few hacks, it runs on CG with a fairly decent ranking. Moving to C++ and bitboards should improve it a lot
MSmits: yeah
MSmits: mostly I dont really know how to write a good eval
MSmits: i just counted pieces
darkhorse64: The eval is kings + pawns
Astrobytes: Don't mention TT's to me right now :(
darkhorse64: #37
Astrobytes: nice
inoryy: struct CPU and RAM is incredibly cheap now, yeah
MSmits: I think I'm at #8 with counting pieces
struct: any site that you recommend inoryy?
MSmits: but it's mcts
FredRides: All code size clashes: (1) python (2) Javascript (3) C++ (4) Java
MSmits: oh I'm 6 now
darkhorse64: But generating moves will be the bottleneck. Moves are OK but storing multiple captures will be costly. ab with iterative deepening
darkhorse64: Royale is trying to consolidate his lead by harvesting points
MSmits: ah well, gotta have a hobby
darkhorse64: #1 CP war is on !
MSmits: I try to get some CP sometimes, but it's a lost cause, I always get stuck on some game or other
Astrobytes: lol euler just got back to #1 the otehr day
Astrobytes: *other
struct: FredRides list seems wrong
struct: I think euler just need to get legend on CSB
Astrobytes: He is legend on csb
MSmits: a high legend
MSmits: it does help
Astrobytes: Legend, then Legendary.
inoryy: struct probably not the best person to answer that since I work for one of the providers :)
Astrobytes: :)
struct: ah sorry :p
struct: I did not mean to throw you under the bus
MSmits: google cloud all the way
dbdr: you didn't notice inoryy's sales pitch earlier? ;)
inoryy: :grimacing:
Astrobytes: Subtle yet obvious, you switching to marketing? :P
inoryy: shhh
Astrobytes: :zipper_mouth:
darkhorse64: euler should improve his UTTT bot otherwise he has barely nothing to improve
MSmits: is that where he misses the most points?
darkhorse64: Overall, I feel I am in a better position: so many things to play left
MSmits: well if euler wants some pointers he should pm me. I want him to stay at nr 1 :)
darkhorse64: Yes and BOTG
Astrobytes: I just cannot get into botg
struct: He needs yavalath bot
struct: 1000 points+
MSmits: so basically, the things he lacks are the only things I spend time on?
struct: yeah
MSmits: botg seems fun somehow, but everyone says its bad
Astrobytes: Sounds like fighting talk :D
darkhorse64: I think he has to switch to C++ or Rust for these
MSmits: yeah he does
Astrobytes: MSmits once I finished the Wood leagues, all 500 (well, 6 or whatever) of them I was done
MSmits: and he can. I think he's better with c++ than I am
MSmits: but I am just more obsessed at squeezing out performance
MSmits: Astrobytes ah i never got that far
Astrobytes: Yup euler can C++, but I don't think he likes it much
MSmits: it's impossible to like it much when you work with C#
MSmits: well one thing i like
MSmits: if(i & 1) "do this"
MSmits: instead of if ((i & 1) > 0)
MSmits: a lot less explicit type conversions in c++
MSmits: less code to write
Astrobytes: That's a double edged sword if you're nto careful ;)
MSmits: i know
MSmits: thats why C# causes me a lot less bugs
Astrobytes: :)
MSmits: i can write hundreds of lines of code in C# and it just works
struct: Wish I could say the same about javascript
darkhorse64: i can write hundreds of lines of code in C++ and it just works after some hours debugging
Astrobytes: I can do that in C++. It usually works, sometimes just not the way I thought it might
MSmits: if you're using a windows machine, get VS and learn C#. Makes life easy
MSmits: darkhorse64 right :)
Astrobytes: lol exactly darkhorse64
darkhorse64: But it finally works
MSmits: I have never given up on a bug in c++, always found it so far. But sometimes it took days :(
darkhorse64: I fixed a bug in my PCR bot last week; it has been there for months; #11 -> #9
Astrobytes: Most bugs in C++ just turn out to be silly things, that you can do in C++ but absolutely ruin whatever you're trying to do
MSmits: if (x = 3) do...
LoGos: vector<int> v; if(v.size() - 1 > 0) cout << ":)"; else cout << ":(";
inoryy: fyi if you use things like asan you can avoid majority of the foot-guns in C++
Astrobytes: advertising again eh
inoryy: :no_mouth:
MSmits: mmh isnt that to avoid pointer stuff?
MSmits: most of my problems are not pointer related
inoryy: any memory related issues basically
MSmits: yeah
MSmits: it's more that my obscure bit stuff is so hard to read that I just dont see the bugs
Astrobytes: For memory stuff I can usually catch it in the memory viewer of VS
MSmits: and with mcts it is always sign errors
MSmits: this one is fun too: for(int i = 0; i > 5; i++)
darkhorse64: And now you have pass nodes for othello mcts. It ruined my bot
inoryy: lol MSmits
MSmits: why are pass nodes problematic?
Astrobytes: lol
MSmits: just add 1 extra child with the same board
Astrobytes: Yeah I don't get why it's so problematic either
MSmits: oh right you need to keep track of whether both guys passed?
MSmits: that might be annoying
Astrobytes: Annoying but not too hard I don't think
MSmits: nah it's doable probably
darkhorse64: Combined with a solver which does not explore all nodes, your tree sometimes hangs in the void
MSmits: othello seems just like oware, bandas, checkers. They all have some annoying thing or two in their move generation
Astrobytes: It's the solver that's messing things up then right?
darkhorse64: Sort of, yes
MSmits: what part causes problems/
tomatoes: i made pass move as usual move
MSmits: i guess you can no longer count the number of pieces to guess which turn it is
MSmits: and games can have more than 64 turns
Astrobytes: afk for a bit
darkhorse64: It's a problem mostly in the endgame. When you solve, some moves are left unexplored and multiple pass moves chain may lead you to one of these unexplored nodes. I reset the tree in this case and let the solver find its way to victory or defeat
darkhorse64: again
MSmits: hmm multiple pass moves?
MSmits: how many can you do?
struct: in a row?
darkhorse64: 2,3
darkhorse64: yes
struct: I saw more than 3
struct: I saw 5 I think
darkhorse64: This is why mobility is sensible
RoboStac: the main issue I had was my tree reuse was working by trying every valid enemy move to find which one matches the new state, which doesn't work when the new state is multiple moves away from the old state
darkhorse64: EXPERT mode ?
struct: 4 passes https://www.codingame.com/replay/476041109
struct: Cant remember where I saw 5
RoboStac: I may not have read the description carefully enough to know about that
IdiotIdiotIdiotIdiotIdiotIdiotId: Does anybody have the answer to cgx formatter in C#
darkhorse64: with EXPERT mode, you get opponent moves
RoboStac: (though I do now, and if there are multiple ;'s in the enemy move I just restart the tree)
darkhorse64: ^
RoboStac: probably should actually use it properly
struct: Why reuse?
struct: restart*
RoboStac: because I'm lazy and if I'm passing it's probably not a game I was going to win
darkhorse64: After several passes, there are not many nodes left to reuse anyway
MSmits: hmm why would the state be multiple moves away?
RoboStac: because you don't get your pass turns
RoboStac: so the enemy has done 3 moves since your last turn
MSmits: oh, I see
MSmits: well thats painful
darkhorse64: Sparing several days of debugging for you MSmits
MSmits: yeah thanks for this
MSmits: It's seems to always be like this with RoboStac, he doesn't talk much, but when he says something here it's always saving you hours of time
MSmits: that's my experience anyway
RoboStac: :)
MSmits: and as we speak I am passing on uttt knowledge i got from you 2 years ago to other people by PM
Astrobytes: This place is a fountain of knowledge if you ask the right questions I've found
MSmits: yeah
MSmits: and sometimes when you dont ask any question
Astrobytes: Yep. I really should consolidate all my 'useful stuff' txt files
MSmits: might be a good idea
MSmits: i do favorite everything you guys link about games. I occasianlly have to sift through hundreds of these
DomiKo: that knowledge is really powerful ;)
Astrobytes: Yeah I'm due a clearout and save of those too
Astrobytes: Right, early CG termination for me tonight, talk to you all later, take care
inoryy: "by PM" do you mean post portem?
Astrobytes: DM I think
DomiKo: yea
Astrobytes: anyway, bye :)
DomiKo: bye :)
inoryy: meh, why not post mortem :(
MSmits: personal message
darkhorse64: :sleepy:
MSmits: bye Astrobytes
_Royale: darkhorse64: guilty ! I did some Checkers :)
darkhorse64: and made some progress also ... We, mere mortals, are watching the clash of Titans
MSmits: yay i can print the board
MSmits: baby steps :)
darkhorse64: Same here. For C++ debugging :wink:
MSmits: right
MSmits: hardest part is next, that might take me a day
MSmits: move generation
MSmits: i always start by generating all the moves and make a random-move bot that doesnt crash
darkhorse64: With Google, I realized that there are decades of programming experience for Othello. Othello move generation is nearly inside Wikipedia
MSmits: ah, but i dont just want something that works, I want the fastest way
MSmits: isnt AVX possible here?
MSmits: read this somewhere
darkhorse64: I should have written "efficient move generation is in Wikipedia". I found several instances of the same bitboarding on various Web sites
MSmits: this?
MSmits: https://www.gamedev.net/forums/topic/646988-generating-moves-in-reversi/
RoboStac: I used https://www.hanshq.net/othello.html#moves
MSmits: looks more useful yeah, thanks
RoboStac: and then rewrote it to be avx based because it looked easy
darkhorse64: Yes, this is my boss code
MSmits: ah see, avx after all
MSmits: finally I get to use it somewhere
darkhorse64: 8 directions ...
MSmits: yeah
RoboStac: shame we don't have avx512 :(
RoboStac: the better part is its 4 left shifts and 4 right shifts so fits perfectly
MSmits: in 512 or in 256?
RoboStac: 256
MSmits: well thats good
NotForrest: when the clash was so hard you win by just outputting "ERROR" kappa
bmalbusca: hello! I'm struggle at Scatter and Gathering exercise - I need help
Uljahn: Automaton2000: what's that?
Automaton2000: it feels like you could do
Uljahn: can't find the link, Automaton2000
Automaton2000: that's what i do too
Uljahn: that's not CG related innit? better ask at https://stackoverflow.com
NotForrest: can some1 help me out with a c++ problem real quick
NotForrest: nvm got it
NotForrest: thought substr was the same in java and c++
struct: grats Zenoscave
1XC: how tf you hide this chat box
etkgjt: click the |> button
Zenoscave: thanks struct
struct: What search are you using?
Zenoscave: negamax no a/b
struct: Nice, top is quite hard
Zenoscave: Yeah might need avx
struct: dbd r uses prob count
Zenoscave: prob count?
waze: hi
waze: wie ghets
Zenoscave: Like just plain statistic?
struct: probcut*
struct: https://www.chessprogramming.org/ProbCut
struct: jace k has Tuples
struct: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.108.5111&rep=rep1&type=pdf
waze: nien its wiki
struct: Dont think so
Zenoscave: waze warum Deutsch? This is an english channel
Zenoscave: thanks struct
struct: There seems to be a lot of stuff on othello
waze: okey
waze: have a nice day