From CG community
Jump to navigation Jump to search

Default avatar.png CredibleOpossum: Why is the "Power of Thor" killbox bad?

MSmits: morning

YurkovAS: MSmits congratulations with top1 in oware!

MSmits: thanks

uop: shut network

Default avatar.png TranBac: LOL

MadKnight: hey MSmits u got #1 ?

MadKnight: using smitsimax ?

MSmits: no, using mcts with early playout termination

MSmits: also the nr 1 is unstable. royale can slowly pull me down with submit spam because i get occasional losses and Robo does nor

MSmits: my bot is somewhat stronger against the nn's, but the nn's lose less vs weaker players

ThunderbirdOne: so, technically you got lucky with the #1 spot? :p

MSmits: no


MSmits: I win almost every game against the non-NNs

MSmits: but even if i lose 1 out of 20, if the NN's lose 1 out of 50, lower ranked players will eventually pull me down

MSmits: so it's mostly a feature of the ladder-system. All I have to do is resubmit

ThunderbirdOne: aha

MSmits: it might be that the NN's take into account more different board layouts due to their training

MSmits: which makes them more flexible vs weaker players. Less chance of a critical mistake

MSmits: after all, I have no more than 10 parameters. And they have thousands

ThunderbirdOne: fair enough

wlesavo: hey guys, im probably stupid or smth, but what means {int} in python, for ex in this solution

Default avatar.png asd521: ummm can someone help me?

Default avatar.png asd521: with c language i mean its a simple question

ThunderbirdOne: wlesavo i can't see the python solutions =/

ThunderbirdOne: asd521 shoot, someone might be able to help

StickyVicky: wlesavo, I can't see the solution as I haven't completed but it's probably the name of an int variable that is going to be combined with text on an f-string. Such as: int=4;print(f"{int}2")

Default avatar.png asd521: my array has 7 elements in it but when i do sizeof(array)/sizeof(array[0]) its prints the size as 2

ThunderbirdOne: StickyVicky seems like it, but jezus... int as a variable name :p that should be banned

Default avatar.png asd521: sizeof(array) prints out 8 when it should print atleast 28

StickyVicky: still better and more descriptive than: asdf, but I agree :p

ThunderbirdOne: :D hah

Default avatar.png asd521: how can i make it more descriptive?

ThunderbirdOne: call it whatever it represents

ThunderbirdOne: if it's a count, call it count

ThunderbirdOne: if it's the amount of money, call it TotalMoney or AmountOfMoney

ThunderbirdOne: with lowercase btw, sorry :p

MSmits: dont call it coun

MSmits: count

MSmits: thats a reserved word

ThunderbirdOne: not in C#

MSmits: true

ThunderbirdOne: just make your variables as descriptive as possilbe, while avoiding reserved words (oh, and don't make them SUPER fucking long either)

MSmits: sigh, I am having a checkerbot problem. My bot works, except when I turn optimization (O) on

MSmits: how do you debug problems that only happen with optimizations?

ThunderbirdOne: doesn't sound very optimised :p

MSmits: you get no error message =/

MSmits: I had this sort of thing before. It's a really tough problem

MSmits: somewhere the optimization assumes something is always zero when it's not.

MSmits: or something like that

MSmits: then it removes some code that breaks the bot

MSmits: I also already know it's related to hashing

darkhorse64: print is your friend. Check uninitialized data

MSmits: i tried print, but it happens to rarely, i dont know the conditions for the print

MSmits: uininitialized might be it iyes

MSmits: basically it happens when i try to use transpositions and stop selection when reaching a repeated state

MSmits: (repeated state = backprop value 0)

MSmits: you could also do this for oware btw, but I am not currently doing that

darkhorse64: You can also debug Release code but it assumes that you can reproduce the bug under Windows

MSmits: also a bit risky due to end game turn

MSmits: my VS doesnt even know the pragmas

MSmits: so no luck there

Astrobytes: #ifndef _WIN32

Astrobytes: then pragmas, so VS ignores them


MSmits: i should put the pragmas in there too i guess

MSmits: but it runs anyway

MSmits: the problem is more that the bug only happens with the pragmas on

MSmits: and they cant be on in VS

Astrobytes: gotcha

MSmits: but maybe VS has its own optims that cause the same bug, so i could still do it with release debugging

MSmits: my c++ programs compiled with VS are also fast. About 30% faster than on CG due to faster processor i guess

dbdr: MSmits: it seems quite a waste of time to search for such bugs, doesn't it?

MSmits: yes

dbdr: the compiler should tell you where you use uninitialized memory

dbdr: or other undefined behaviour

MSmits: oh, i can find that easily myself

MSmits: the unitialized memory that is

MSmits: undefined behavior... not so much

MSmits: I am guessing I am copying a 32 bit to a 64 bit variable or something

Locinsh: ]\

MSmits: you're pushing Robo darkhorse64 :P

dbdr: I like rust's approach, which is that such possibly undefined behaviour is reported by the compiler by default

MSmits: thats what I knew would happen. I'm not going to resubmit soon though. I want to do some more fitting first

dbdr: you can use the unsafe keyword if you really need sth like that and are sure it's OK

dbdr: so you immediately know where to look if something is going wrong

MSmits: i have to use unitialized memory often

MSmits: try to use a 40 million sized node pool without it

dbdr: there might be tools that help with C++, not familiar with it

dbdr: yes, there are always ways to do that in rust as well

MSmits: not in C# :(

MSmits: well maybe with unsafe, i dont know

MSmits: never used it in C#

dbdr: it's just safe by default, unsafe when you really need it and are sure

TheAceOfToasters: That one CodinGame Sponsored Contest where they gave you like 10 inputs, but never told you what any of them did and told you to get the highest score is the weirdest contest

darkhorse64: I wonder how you manage to do Rust on CG with debug on in the IDE

mr.x: hi

darkhorse64: 0.07 away from Agade, should I resubmit ? :stuck_out_tongue_closed_eyes:

MSmits: no need, someone else will perturb it

dbdr: darkhorse64: debug in the IDE is annoying but it's not a dealbreaker

dbdr: it's good enough for testing the code is correct, usually

darkhorse64: Your BT bot times out for instance.

dbdr: then I look at arena matches

dbdr: and reproduce a situation locally if I need to

darkhorse64: Agreed but it's not very friendly

dbdr: agreed, would be nice if CG improved it. even -O1

dbdr: anyways, the language makes it worth it for me :)

CSharp_Sama: Okay

CSharp_Sama: Cool

reCurse: #pragma...

reCurse: Oh C#, nevermind

Xx_R6PGMMater2BE_xX: hi guy

Xx_R6PGMMater2BE_xX: s

Xx_R6PGMMasterBE_xX: hello

MSmits: did you use external things like opening books from other sources? Or fancy eval from somewhere?

Marchete: you need a good eval then

Marchete: I need to

Marchete: maybe that's the main diff from the first 2

MSmits: opening books are easy to get

Marchete: they are?

MSmits: i couldnt find much actual source code of the best checkers bot. Those arent free

MSmits: yeah, just google a bit

MSmits: there's whole libraries

Marchete: I saw some openings

Marchete: but then I need to encode, make space, etc etcv

Marchete: the 100kb is a sh*t

Marchete: too cumbersome

MSmits: not true really

MSmits: my yavalath both uses 5k

MSmits: uttt also around that

MSmits: it takes a huge amount of time to compute a book large enough to fill 100kb

MSmits: oh also, that 5k is poorly compressed

Marchete: either that or picking already done books

Marchete: but then you realize they can't fit

MSmits: yeah you have to get creative with that

MSmits: probably write a program to analyze the book and make a selection

darkhorse64: MSmits: If you are using eval after expansion, do you keep counting eval > 0 as Win or do you use the true value to compute a reward or node priors ?

MSmits: I do this differently now darkhorse64, I will explain when i get home. My train is arriving now

MSmits: will be 20 mins or so

MSmits: maybe less

darkhorse64: Time to go back home, too. Don't rush !

MSmits: i'll jump over cars and sht

Marchete: avoid coughing people too

Marchete: people in public transport are expert on are experts in sneezing into your face

Marchete: lol what I wrote

Marchete: I need vacations

MSmits: back

MSmits: 11 mins, not bad

MSmits: you still here darkhorse64?

MSmits: we'll talk later. I'm guessing you're not as good as I am at jumping cars

MSmits: it's a skill

dbdr: MSmits, what do you mean too lazy to code the sim? You need it to update the state in any case.

MSmits: the sim in the random rollout

MSmits: it's different

dbdr: So it's only picking random moves that you miss?

MSmits: when you're using all sorts of fancy things to generate a move list for a tree, you use different code than when you're just picking 1 move

dbdr: I mean it's a few lines of code, no?

dbdr: pick a move, apply it

dbdr: I see

MSmits: ok for example, with checkers, do you pick a random piece and then a random move?

MSmits: or do you make a full list of all moves and random that

MSmits: it requires more thinking and since my bot isnt even working properly yet, I didnt bother

dbdr: right, fair enough

MSmits: i did think of one thing though

eulerscheZahl: in checkers you have to capture whenever possible

dbdr: my intuition would be random among all moves is better

eulerscheZahl: so you have to consider all pieces, not just a random one

dbdr: but might be slower

Marchete: move ordering

MSmits: you can do the quiescence by calculating jumps first. You only stop the sim once no more jumps are available

Marchete: capture, anticapture, then others

Marchete: no?

MSmits: eulerscheZahl I meant, when you split the sim into two phases, jump phase first, then move phase

dbdr: eulerscheZahl is alive :)

MSmits: if jumps dont happen, then there is a move phase

MSmits: but either way you can go full random, or random piece -> random move

eulerscheZahl: why should i be dead?

MSmits: you have been online less

eulerscheZahl: congrats on 500 btw

dbdr: disappeared for a while no?

Marchete: AutomatonNN , eulerscheZahl is alive!

AutomatonNN: why do you think it will be a random search?

MSmits: dont scare euler away again Marchete

eulerscheZahl: started bulls and cows today

MSmits: oh cool, i was a great fan of that game when i was young

eulerscheZahl: seems easy to hardcode, but playing for real is more fun

Marchete: easy to hardcode?

dbdr: playing for real?

eulerscheZahl: with multiple submits to etract some info about validators

Marchete: I mean, I tried hardcoding 1 digit

dbdr: validators are random

Marchete: and all values failed at first attempt

eulerscheZahl: oh, didn't know

Marchete: I assume validators are random

eulerscheZahl: that explains the huge variance on submits i thought it's just my random solver

Marchete: at least my solution wasn't hardcoded

Marchete: nor preseeded or anything

Marchete: yeah

Marchete: lot of variance due to this

MSmits: but how did beard get nr 1?

MSmits: does anyone know yet?

eulerscheZahl: bug

dbdr: what bug?

eulerscheZahl: 10 validators at first, no proper leaderboard reset

dbdr: ah yes

Marchete: really?

Marchete: :D

MSmits: how are they fixing thaT?

eulerscheZahl: BeardedWhaleYesterday at 8:30 PM The leaderboard for Bulls and Cows 2 is still not correct. I'm in the lead with the score of 122, which I got when there were only 10 validators. AstroshytesYesterday at 8:49 PM That answers that question at least :stuck_out_tongue:

MSmits: ah lol

Marchete: people got mad about he knew the random seed or smth

MSmits: haha yes, that went off the rails Iguess

Marchete: I'm against mid game changes, even for NS

MSmits: it;s not even a very good score for 10 validators is it?

Marchete: like 12 moves per validator

Marchete: not really I think

dbdr: how many vals are there now?

eulerscheZahl: 46

eulerscheZahl: 1 digit only once, rest 5 times

eulerscheZahl: before it was each once (1 digit to 10 ditigs)

dbdr: damn, missed the obvious 42 choice

MSmits: 1 digit... you need on average 5 guesses then?

Marchete: yes

dbdr: 1 digit => pure luck, right?

MSmits: the information is useless

MSmits: the input

MSmits: yeah pure luck i suppose

MSmits: but the validator still has a use. It tests whether your bot can deal with this length

eulerscheZahl: similar with 9 digits

eulerscheZahl: you don't know the missing digit

eulerscheZahl: and more CPU time would definitely help my solver

Marchete: I had problems on 9 and 10 too

eulerscheZahl: so i combined 2 approaches now

eulerscheZahl: for me it starts at 8 digits already

Marchete: but it seems my score is not completely random, a lot of submits are around 320-340

dbdr: but validators have only 1 and 5?

eulerscheZahl: 1 digit once 2..10 digits 5 times each

dbdr: got it now :)

eulerscheZahl: and that's my solver bruteforcing the right one

eulerscheZahl: for more digits it's significantly less effective

dbdr: oh, the replay shows the secret

dbdr: step 1, write an OCR

eulerscheZahl: that's not how it works :P

dbdr: step 2: guess the correct number in 2

dbdr: really? /s

dbdr: that would also make things especially easy if validators were fixed

eulerscheZahl: btw i can no longer download validators, CG blocked that API

eulerscheZahl: it just returns "success" without any content

MSmits: is it ever beneficial to take a guess that you know can't be the right code, but will give you more information?

Marchete: that's a good thing euler

eulerscheZahl: yes MSmits


eulerscheZahl: that's actually a bad solution

MSmits: do you just monte carlo the possible secrets and calculate how many turns it takes to guess them ?

dbdr: depends how you define beneficial

MSmits: guess the code sooner

MSmits: = beneficial

eulerscheZahl: if i take 2 digits that i haven't tested before, it might be faster

MSmits: sooner as in, expected number of turns required

dbdr: still not defined. in average? in the best case? worst case?

eulerscheZahl: average i would say

MSmits: expectation value

MSmits: that's average I guess

Marchete: people have studied bulls and cows, and got even formulas to get the max amount of moves and such

dbdr: with that definition the answer is yes

eulerscheZahl: i have a list of all possible solutions, print one at random and eliminate based on the result

eulerscheZahl: but for 8+ digits it's too slow :(

MSmits: however, with multiple submits possible, you may be more interested in what gives you the highest value, when you incorporate luck

dbdr: exactly

Marchete: euler for 10 you can ignore cows

eulerscheZahl: best case: 1 try and i solve the 10 digit number :P

dbdr: yes, so it's balancing

eulerscheZahl: Marchete why? performance improvement?

eulerscheZahl: otherwise i don't see a point

Marchete: in my case I timeouted

MSmits: how much code did you have to write for bulls and cows eulerscheZahl`?

MSmits: seems like a tiny bot?

eulerscheZahl: 226 lines atm

eulerscheZahl: i could do some cleanup

MSmits: ah ok, so 400 for me

MSmits: this is the euler-smits linecount conversion law

eulerscheZahl: but better score for you another law

MSmits: mmh didnt you pass me at NS?

eulerscheZahl: no

eulerscheZahl: but it's the puzzle of the week \o/

MSmits: oh, I thought you did

dbdr: yeah, plenty of new players

dbdr: was 90 before I think

MSmits: ahh thats why i got some rank

eulerscheZahl: and a 3 star rating :(

MSmits: 38th now

MSmits: what!

MSmits: barbarians!

dbdr: let's see if I voted

MSmits: 5 stars from me

eulerscheZahl: i didn't i never vote

eulerscheZahl: except for the plagiarism puzzle (low ratin = autoremove)

dbdr: ah, one 3 stars

dbdr: but 4.9 avg

MSmits: mmh it says here you got 36 times 5 stars....

MSmits: this one guy who gave 3 just saw numbers and freaked out :P

Marchete: can I vote 1 fon Bender 4=

Marchete: ?

dbdr: quite a pessimitic way to look at it

Marchete: on*

Marchete: I hate it

eulerscheZahl: of course you can but you will make toad sad

Marchete: what's the least to not make you sad?

eulerscheZahl: bender isn't harder than "don't panic 2"

dbdr: why Java Marchete?

dbdr: maybe I already asked

Marchete: to clone the referee :D

MSmits: mmh it says westicles is rank 2

dbdr: lazy lazy :D

MSmits: but he is rank 1 with you dbdr

Marchete: extreme lazyness, reporting for duty

MSmits: i guess first in keeps the rank

dbdr: the ranking never shows equals

dbdr: but I think he gets all the CPs

MSmits: ah ok

MSmits: well the score is integer, so in this case we know for sure

dbdr: also, it seems now they use submit date to sort for equals

dbdr: for display, not for points

eulerscheZahl: yes, same CP for both

eulerscheZahl: did you improve your code to reach 500?

dbdr: he was hiding 150 levels I think

Marchete: wow

dbdr: from 353 to 49x

Marchete: you are amazing

Westicles: Then he caught me in a day. How embarrasing

Marchete: I got stuck on 335 and never looked back

dbdr: when I was at 444

dbdr: Westicles :D are you running now?

dbdr: reminds me of the cold war ;)

Westicles: Nah... it would take me 2 weeks to get to 600, then boom tied again

eulerscheZahl: uhm, i think the game will crash around level 700

Marchete: make some kind of truce

dbdr: tempting...

MSmits: you have to do it now Westicles, before it is summer and the heat is wasted

eulerscheZahl: 50ms per turn => 600 turns max that's 600 move actions

Marchete: think on those little bits

dbdr: the crash I mean :smiling_imp:

Marchete: they are scared

Westicles: If I get quarantined I'll do it

eulerscheZahl: so depending on the particular solution you find, it even crashes for a different level

dbdr: so 600, not 700?

MSmits: lol, get as high as possible with as few as possible moves

MSmits: new challenge

eulerscheZahl: not every new level adds a new move

dbdr: sounds more and more like TGD :D

Marchete: Imagine you get a solution but it's too large to be accepted...

dbdr: need to find a better one

dbdr: ah, 600 turns

MSmits: eulerscheZahl, if you were inclined to do so, could you not compress the moves into less steps?

dbdr: let me check my longest solution

eulerscheZahl: i know how to modify the referee to accept the solution just haven't done yet

MSmits: ah ok

Westicles: My longest is around 490 I think

dbdr: ╰─➤ wc -l log.txt 144722 log.txt

dbdr: :D

eulerscheZahl: read multiple lines at once can even be a function of numbers remaining on the board

MSmits: ah ok

eulerscheZahl: time to truncate your log

MSmits: yeah my log is huge too and i only made 208

eulerscheZahl: number shifting or movie collection, tough decision :D

dbdr: my latest solution is 550 moves

MSmits: maybe quickly watch matrix trilogy and then vow to never watch it again, saves a lot of space

eulerscheZahl: getting closer to the limit

reCurse: Or just watch the first one and ignore rumors a trilogy was in the works

Westicles: 550 moves... I smell a rat. You must be well into the 500s

dbdr: matrix is a trilogy in one episode

MSmits: yeah... tbh I rewatched them and I only really liked the first one

dbdr: unlike THHGTTG, which is a trilogy in 7 episodes

MSmits: whats that

dbdr: really?

MSmits: are you just stringing characters together dbdr

reCurse: I'm lost with your analogy


MSmits: oh ok that one, yes I read the books

dbdr: both trilogies in some other number than 3

reCurse: That makes no sense

MSmits: thats true, a trilogy should be 3

dbdr: /s?

reCurse: I don't get your point


MSmits: maybe we should discuss that plague game instead ? :P

reCurse: Ah, didn't know that

reCurse: I already resolved that discussion MSmits

eulerscheZahl: corona joke?

reCurse: But you were missing

MSmits: ow :(

MSmits: no eulerscheZahl, you missed a long discussion

MSmits: about a game idea

MSmits: and balance

Westicles: They are bringing 1000 people off that cruise ship within 2 miles of me.

MSmits: we did it quietly so as not to disturb you in your sleepp

dbdr: Westicles, hold your breath for a few weeks

eulerscheZahl: or get infected and realize that it mostly kills old people and you are safe

MSmits: mostly safe :P

dbdr: mostly harmless

MSmits: 3,4% death rate now. Italy almost completely in quarantine. Pretty extreme

MSmits: funerals arent even allowed as I understand it

Westicles: I'm a germ freak from way back, so hopefully that will protect me

MSmits: if you avoided them all your life, I doubt it

MSmits: well maybe if you can avoid this one also :)

reCurse: IIRC experts said something between 40 to 60% of world population would be in contact at the end

reCurse: So just make peace with it

Westicles: Well, I won't go sticking my finger in my eye, but a stray burrito might get me

reCurse: And be thankful it's not a worse virus

MSmits: well some effort may cause you to be on the right side of that 50-50

MSmits: like, locking yourself in the house and do a bunch of multis

MSmits: I see multiple advantages of that approach

eulerscheZahl: name another advantage

MSmits: you get to do multis

reCurse: If that means uttt I might risk going outside instead

MSmits: lol

dbdr: - uttt or death? - death please

darkhorse64: uttt to death

MSmits: heyy darkhorse64

MSmits: want me to explain the eval thing?

darkhorse64: sure

MSmits: i dont do the node priors thingy you mentioned, but I also dont use the discrete -1,0,1 score anymore

MSmits: I thought about it like this

MSmits: the eval is basically to estimate your advantage over the opponent

MSmits: at some point the advantage is going to be large enough that it's almost certain you win

MSmits: so you want that to give score 1, the same as an actual win

darkhorse64: and you cannot choose any move because all look good

dbdr: why lose the precision?

MSmits: so all float values between -1 and +1 are possible. I define a max advantage

MSmits: it's not a loss

dbdr: sounds arbitrary

MSmits: you dont want a solved win to be less important than a high advantage

MSmits: sometimes an eval score gets really high due to an artefact in your evak

MSmits: eval

MSmits: that easily happens with many parameters

MSmits: you need to cap it at the win score

dbdr: solved win should be 1.0, high advantage is still <1

MSmits: if its much lower than 1, it doesnt guide your search anymore

dbdr: ah, your eval can go above 1?

MSmits: it could if i didnt cap it

dbdr: yes, then cap is useful

MSmits: it is simply another parameter

dbdr: or transform it the the -1,+1 range

MSmits: you mean like that relu thing a NN uses?

dbdr: e.g.

dbdr: you can choose the steepness

dbdr: yeah

MSmits: interesting

MSmits: isnt that an expensive function?

dbdr: yeah, that could matter

dbdr: definitely depends on the gam

dbdr: e

dbdr: if the sim is expensive like PCR, probably doesn't matter :)

MSmits: the thing is though, it's not unrealistic to assume that after a certain point, an advantage gives you 100% chance to win

dbdr: that's true

darkhorse64: You will face that problem with breakthrough. You build an overwhelming advantage and all moves have strong eval. How can you choose a move with -1, 1 criteria. You really need to look at the true eval

dbdr: since you don't play randomly

MSmits: but darkhorse64, you dont know the true eval

dbdr: for random play, it would be true a huge advantge is still not 100%

darkhorse64: I mean the eval value not the discretized one

MSmits: float normalized = evalScore / MAX_ADVANTAGE;

return evalScore > 0 ? min(1.0f, normalized) : max(-1.0f, normalized);

darkhorse64: It might be dangerous if your cap value is not well tuned

MSmits: in the lower extreme it is the same as what i was doing before

dbdr: Darkorse64: if all moves have strong eval, it could mean it does not matter which one you pick

MSmits: namely, returning -1, 0 or 1

MSmits: so it can only be an improvement

MSmits: if my max advantage is near to 0 I mean

MSmits: I also noticed, that as soon as I implemented this, my bot became better without the simulation phase entirely (sim depth 0)

darkhorse64: Trust me, it matters because of horizon effect. You keep playing weak moves that seemingly does not degrade your position until you r bot realizes it's losing

MSmits: It lost the need for a random components

dbdr: but that means your eval is imperfect

dbdr: which it has to be of course

dbdr: but that also means trusting small differences that might be noise

MSmits: darkhorse64 if your exploration param is somewhat higher, will you not be able to find better board states for your bot?

darkhorse64: It is but not to the point it cannot distinguish strong moves

MSmits: if it goes down a wrong branch the way you describe, it just seems it doesnt explore well?

darkhorse64: Breakthrough endings are tactical which is a weak spot for mcts. Remember shallow traps in Y

MSmits: true

MSmits: but I think you need a very heavy eval for breakthrough

reCurse: Yinsh?

reCurse: This comment was sponsored by struct

MSmits: this solves the problem (partially) for Y also

MSmits: :P

darkhorse64: Also the branching factor is quite high and does not decrease

MSmits: you do need TT I think

MSmits: it helps when all the pieces are the same

darkhorse64: There is a lot to explore

MSmits: Yea, you need to prune

MSmits: you'll create blind spots, but what else are you gonna do

darkhorse64: The issue is to find whether you have a breakthrough (you consider the advanced pieces). If not, you have to build your position which is a long term goal

MSmits: did you try splitting the board into partitions and assess them strategically?

MSmits: could use a lookup for that

MSmits: not saying that would be easy

MSmits: lookups up to 3x3 should be possible

MSmits: or maybe a lookup centered on each pawn

darkhorse64: The seminal paper describes something like that; consider the 2x3 rectangle in front of your pawn.

MSmits: yeah that makes sense

darkhorse64: Programming Breakthrough from Richard Lorentz

MSmits: what i like about breakthrough is that you need to think more about the game to write the bot

dbdr: darkhorse64, did you work much on Breakthrough?

dbdr: you usually get much higher than that

MSmits: ssht dbdr, thats a sore point

MSmits: we dont talk about that

darkhorse64: Yes, my bot is weak and I spend too much time on Oware

dbdr: well, it's a praise in disguise

MSmits: true

dbdr: for the other multis

MSmits: darkhorse64 is pretty good almost everywhere he tries yeah

dbdr: well, we have to make choices, can't do them all in depth

MSmits: darkhorse64, maybe I should try breakthrough and then we can suck at it together

MSmits: we're good at similar games

MSmits: so we might also suck similarly

dbdr: is it a real Python at #8?

MSmits: just need to finish this checker bot so i can leave it

dbdr: above Robo :D

MSmits: lol thats a NN isnt it?

darkhorse64: The best thing to stop sucking is to play another game and learn from it

reCurse: Python = NN, it is known

MSmits: no

MSmits: I mean Robo's

MSmits: he said something about trying and failing at breakthrough NN

reCurse: You're messing up my NN and now my memes

MSmits: not sure if thats also his submission

reCurse: This is war

MSmits: :worried:

darkhorse64: War of the machines

dbdr: the only winning move is not to play

MSmits: where did that come from

Astrobytes: wargames

MSmits: oh right


MSmits: yeah I remember now


dbdr: need to adapt it to uTTT :D

dbdr: special dedication to reCurse ;)

MSmits: yea

reCurse: If I could go back in time I'd block CG on my end

reCurse: Only way to avoid uttt for sure

MSmits: and also, fix baby hitler

Astrobytes: By blocking CG?

eulerscheZahl: accept hit at art academia, so he doesn't get stupid ideas

MSmits: yea!

MSmits: we'd have some great art and avoid WWII on the side

eulerscheZahl: now i think about OverSimplified again and wait for the next video, thanks :/

dbdr: he was in love with a jewish girl too

MSmits: oh dont even know those videos.

eulerscheZahl: history videos, but simplified and funny

dbdr: I discovered kurzgesagt recently

MSmits: so far it seems an add for skillshare?

eulerscheZahl: 2:03 my favorite scene on the channel

eulerscheZahl: kurzgesagt is not a German channel? I'm confused

dbdr: yeah, it's in english

dbdr: :)

Westicles: Ugh. Us old folks can't watch that kind of stuff

dbdr: maybe started in german?

dbdr: they mention "in a nutshell" as well

dbdr: which could be a lose translation

MSmits: too fast Westicles?

Westicles: It is like having your eyes pried open ala Clockwork Orange and shoving 10 minutes of memes into you

dbdr: here's something even faster:

dbdr: it's pretty great I think

eulerscheZahl: at least you have the native speaker advantage Westicles

MadKnight: hey hey guys what are u doing and talking about ?

MadKnight: Automaton2000 gimme all the short memory of this conversation

Automaton2000: well it was a good idea

mr.x: what means "-0x4(register)" in assembly?

mr.x: founded

struct: hi

mr.x: hello

Default avatar.png Wilster: to be or not to be

CSharp_Sama: estar o no estar

CSharp_Sama: :joy: I'm sorry for being bad at spanish

jacek: well this fits for struct

AntiSquid: CSharp_Sama it's ok, if hell is divided by country then i am sure you can join the spaniards

CSharp_Sama: :pensive:

Uljahn: in soviet russia you escape the hell when you die, Automaton2000

Automaton2000: to give you some pointers

CSharp_Sama: Just don't corrupt my RAM please

Default avatar.png brandon-1999: Where do i get the variables use within the game?

Default avatar.png brandon-1999: used*

reCurse: So...

reCurse: I decided to read my oware bot code again for fun

reCurse: Apparently player 2 hates winning

reCurse: Mixing absolute and relative scores is dangerous

reCurse: It also destroyed training obviously

reCurse: (╯°□°)╯︵ ┻━┻

Schneewittchen: (╯°□°)╯︵ ┻━┻

Eutermann: (╯°□°)╯︵ ┻━┻

**Schneewittchen slaps Eutermann around a bit with a large fishbot

AntiSquid: (╯°□°)╯︵ ┻━┻ AutomatonNN

AutomatonNN: I don't know the problem with that puzzle game

Eutermann: (╯°□°)╯︵ ┻━┻

Eutermann: Schneewitchen

AntiSquid: table flip virus

**Schneewittchen infected

reCurse: I think this one is almost as good as when I ignored one of the enemy pod angles back in CSB

Astrobytes: Knew it wouldn't be long before you had a look at it lol

reCurse: Oh nevermind. I forgot I always consider myself player 1.

reCurse: wtb /unflip

struct: ┬─┬ノ( º _ ºノ)

reCurse: Thanks

AntiSquid: (╯°□°)╯ʇɔnɹʇs

struct: (ง'̀-'́)ง

dbdr: \flip

AntiSquid: ʇɔnɹʇsノ( º _ ºノ)

MSmits: happens to me all the time =/

MSmits: think you had a Eureka, and turns out it;s a Meh....

reCurse: Well on the plus side I did remember it's my old mcts code from uttt v-1

reCurse: So there's always the possibility it helps for no cost

MSmits: and maybe I overfitted against you and a small change destroys my bot winrate :)

MSmits: (that's a serious possibility, given the extremely fine tuned params)

Astrobytes: Smits, how did you get on with the 1 & 2 seed parameters?

MSmits: just started refitting those. I never got that much better with that through self-play

MSmits: maybe when i try vs robo + recurse

Astrobytes: I still think they're weird

MSmits: me too

MSmits: when i set seed1 to 0 as a value, my winrate plummets though

MSmits: so either it compensates artificially for a lack elsewhere in my eval, or it really is needed

MSmits: hard to say...

Astrobytes: I'm in param hell. On the plus side I now get 950K - 1.2 mill root visits first turn

MSmits: good job

MSmits: at least, I guess that's better than most top players

MSmits: not sure what the average is

Astrobytes: Still work to do. More refactoring and sht tomorrow.

reCurse: orly

reCurse: Maybe I need to reduce my NN size

reCurse: Oh first turn

MSmits: you have 24k or 26k right?

MSmits: you said that earlier

reCurse: First turn 442k

reCurse: I meant on a regular turn

MSmits: oh ok

struct: damn

Astrobytes: First turn is meh as player 1, might as well just output 5

MSmits: I have 3.6 million on first turn

reCurse: Ok so I retract my retraction

reCurse: Maybe I do need to reduce it

MSmits: i do have to add

MSmits: I get 6 visits out of 1 rollout

MSmits: because I eval each child

reCurse: Dunno if it matters

MSmits: at the expanded node

MSmits: me neither, but just to be clear

Astrobytes: Still runs about the same no?

MSmits: well the selection loop can get expensive

MSmits: lots of UCB

Astrobytes: true

MSmits: reCurse not sure if you save your board on the node or if you re-apply moves

MSmits: but saving the board seems better

reCurse: Those optims don't matter with NN

MSmits: yeah i guess all the calc-time goes into the NN-use

Astrobytes: regular turn I have 70-85k

struct: cpp?

MSmits: bout 3 times that for me

MSmits: cpp for me yes

Astrobytes: I've just started rewriting.

Astrobytes: Nodes still heavy

struct: Im still in learning process of AVX

MSmits: what heavy about them?

struct: It has been fun

Astrobytes: They've got pointers, arrays

MSmits: hmm not sure if pointers are bad

Astrobytes: No, to parents and children, rather use indices

MSmits: i usually use integer indices to the node pool, because they are half the size of a pointer

MSmits: but its not that big of a deal

struct: I dont think they are slower tbh

struct: pointer should not be slower than array[index]

struct: But I can be mistaken

MSmits: memory caching

Astrobytes: yeah that. It is faster. But I also have my gamestate

MSmits: pointer should be 8 byte

MSmits: integer index 4 byte

MSmits: but its a small thing really, microoptim

struct: Soon I move to sim phase of CSB

MSmits: oh and dont keep a parent index Astrobytes

MSmits: it is useless

MSmits: do back prop with a list of nodes

MSmits: gather them up during selection, then loop over them

Astrobytes: list of visited nodes right

MSmits: yes

Astrobytes: Yep, cool

struct: yeah I do that on UTTT


MSmits: this is my node

MSmits: it's really tiny and i never really tested the effect of using int_8s, it might actually slow me

MSmits: total size 24 byte if i'm not mistaken.

struct: yes 24

Astrobytes: yeah that looks nice nad light, my state is stored on the node tho, and my board is an array of uint8_t

Astrobytes: *and

MSmits: my state is also stored on the node

MSmits: thats the uint64_t board

struct: you dont store move?

MSmits: 8 out of the 24 bytes

MSmits: i dont

Astrobytes: Yeah but you've got it bitboarded

MSmits: i dont need the move if i've got the board resulting from the move

Astrobytes: I don't store move either

MSmits: it's a pain when you output your move though, you have to reverse engineer the children boards :P

MSmits: it's much worse on checkers

MSmits: try reverse engineering a multi jump :P

reCurse: Have you noticed a side imbalance btw

Astrobytes: in Oware?

reCurse: Yes

Astrobytes: P1

MSmits: I never checked, every test I did swaps

MSmits: awari is solved as a draw, but that doesnt mean there isnt an imbalance

reCurse: Ok it takes 16 minutes to start beating you

reCurse: Not bad

MSmits: you're training it anew ?

Astrobytes: brb

reCurse: Yeah with my new mcts I did fo ruttt

MSmits: oh cool

reCurse: Also changed a couple things I know work better

reCurse: We'll see

MSmits: well as i said, do test it vs other players also. I might be overfitting, so your bot might just be breaking my overfit

struct: At least you are safe at Yavalath MSmits

reCurse: It took minutes to beat everyone back then

reCurse: Like 5 minutes at most

reCurse: Except robo

MSmits: i was just gonna say

MSmits: robo is a tough nut

MSmits: how do you know it works well vs me? Do you start a cg bench?

MSmits: or do you download some replays?

reCurse: No I just checked if I could win

reCurse: Means it's in the ballpark

MSmits: oh ok

MSmits: yes

MSmits: but you could already win

MSmits: my current submit had like 55%

reCurse: I also notice it has a much easier time as p1

reCurse: Hence my question

MSmits: it's highly unstable, winrates may hinge on a single move(type)

MSmits: at least thats what I noticed

MSmits: sometimes I did a submit with a small change and agade suddenly beats me 90%

reCurse: Sure, I was talking about sides tho

reCurse: This bit annoys me way more

MSmits: yeah my point was, if it is so unstable, it might be true for p1 vs p2 too

reCurse: Not necessarily

MSmits: thats why i said might :P

reCurse: Ok I need to run a bench but I think it broke your overfit

MSmits: what annoys you?

reCurse: In 23 minutes

struct: UTTT v2?

reCurse: Side imbalance is very annoying

reCurse: I'm assuming it doesn't exist

reCurse: So it speeds up everything by 2

MSmits: well I hope you're having fun doing this and not doing it because I am frustrating you again :P

reCurse: You know the answer to that

MSmits: :grin:

reCurse: Doesn't beat my old bot yet though

Astrobytes: From day 1 of this multi P1 seemed stronger, seems they have the advantage, yet perfect play results in a draw

reCurse: By the time it does it will start losing against you

MSmits: tons of rps here

MSmits: for a long time i had 0% Robo 40% you even though you beat Robo

MSmits: it is very likely that after you're done training and I'm still fitting, i'll run into a combination of params that wins again. That's why your first instinct, to wait till I am distracted, might have been good

MSmits: I wont go back after i'm done

reCurse: I'm not a smart guy

Astrobytes: Famous last words there

Astrobytes: @Smits

MSmits: nah really. I see so many nice games I really want to try

MSmits: breakthrough, that bulls/cows game

MSmits: even onitama, just because it looks pretty

reCurse: If I'm lucky it will give me opportunity to test training regression mitigation

reCurse: Might be useful elsewhere

MSmits: whats tha

reCurse: Prevent self-play from collapsing

reCurse: Catastrophic forgetting

MSmits: is that similar to parameter drifting?

reCurse: Don't think so

MSmits: I may be following a course on AI for my studies for CS teaching

Astrobytes: To prevent overfitting?

MSmits: I wasnt supposed to do this because it is an area I already know a lot about, but another class got cancelled

reCurse: I guess you could say it's overfitting

Astrobytes: @reCurse

reCurse: But it's more subtle than that

Astrobytes: Nice MSmits, should hopefully be interesting

MSmits: well it's a tradeoff between not learning very much because it's your favorite subject and liking the class a lot because it's your favorite subject :)

MSmits: they do machine learning also, but probably not very in depth

reCurse: I have a very low opinion of courses

MSmits: me too, generally

MSmits: but you see, it might be nice to talk about this subject with a live person as opposed to on chat

MSmits: i dont know anyone in real life that is interested in this

Astrobytes: Same. Well, one, but he's a stoner and never does anything.

MSmits: lol

struct: Who is interested in AVX?

Astrobytes: I guess as long as you can discuss topics beyond the reach of the course then it might be beneficial

MSmits: I am struct, I wish I could find a way to use it in a bot

MSmits: Astrobytes exactly. Also we may get a project to work on and that may finally give me an excuse to do some machine learning, or something else I have yet to try

struct: I would also like to learn ML

struct: But one thing at a time

MSmits: yeah, I am already doing 3 things at once now

Astrobytes: Well, there's Kaggle I guess if you're into data

reCurse: Halite is merging into Kaggle

MSmits: I'm not, really

reCurse: So they'll have AI competition too

Astrobytes: Yeah I saw that

MSmits: into data I mean

Astrobytes: i think they plan to do more AI competitions iirc? They have a connect 4 one or something

MSmits: why would you have a connect 4 competition?

struct: There should still be a connect 4 somewhere here

Astrobytes: Might be connect(n), can't remember

struct: At least I made it before

struct: Just the demo though

MSmits: connect n makes more sense

MSmits: or connect 4 without first making 3

MSmits: that would be a great game right struct ?

Astrobytes: Ohhh I wonder

Astrobytes: :P

struct: Maybe we can also make it 6 directions?

MSmits: oh... like on a hex board?

struct: Oh right, thats what it is called

dbdr: connect N in M dimensions

darkhorse64: That's 3 directions

MSmits: 3 axes

Astrobytes: lol. I need to do something for that Yavalath. I lost the will to live trying to bitboard it last year

MSmits: it's a pain to bitboard yes

MSmits: I enjoyed it up to a point

darkhorse64: It's aj joy you mean

MSmits: well at some point it got a little crazy

MSmits: add to that mcts bugs and it can get frustrating to debug

Astrobytes: I'm sure I threw my whiteboard across the room at one point

Astrobytes: (small whiteboard)

MSmits: i should have a whiteboard

MSmits: at home i mean

struct: Just bring one from school

MSmits: the one the size of a wall you mean?

struct: Yeah

struct: They will fit in the train

Astrobytes: Ye, I have a big one for the wall, smaller one for the lap (both sides), and wipeable paper notebooks (that I must clean)

MSmits: yeah, i dont think the train is the issue

Astrobytes: (not all for CG I may add!)

MSmits: sounds very professional

MSmits: I just have paper all over the place with squiggles on them I lose understanding of about an hour after writing it down

struct: In all the movies I watch, the physics guy always have a white board

struct: You need one

Astrobytes: Oh CG-wise I have pages of useless numbers

MSmits: i know struct, but I have a wife

struct: you can't have both?

Astrobytes: I whiteboard stuff, but I'm lazy and use my notepad a lot....

darkhorse64: The part of my code in Yavalath which gives me pride is the one where I look for traps just with pdep/pext

struct: Guess im ditching my white board

MSmits: yeah, me too darkhorse64

MSmits: did much walking before I came up with that

darkhorse64: Pencil/paper is enough

darkhorse64: It makes me sad that I had to disable it in rollouts (no gain)

MSmits: oh

Astrobytes: Which? Pencil or paper? :P

MSmits: its really impossible for me to do any meaningful improvement to yavalath. I have no way of testing. The opening book trumps every possible change

darkhorse64: Test without ?

MSmits: theres no point to that, the bot will never be without

MSmits: and there is no guarantee that an improvement without, is an improvement with

Illedan: Is the openingbook with 6 way rotation?

MSmits: 12

MSmits: there are 12 symmetries

darkhorse64: If it makes your bot stronger without, it's likely to be best with

Illedan: ah k

MSmits: not really darkhorse64 because when you're optimizing without book, you'll be optimizing to avoid the traps that occur in early game

MSmits: but i dont need to, because I have the book

Astrobytes: Hm, not necessarily, cause you're compensating for actions the opening book will counter or prevent

MSmits: yep

Astrobytes: @darkhorse

MSmits: but i cant be sure darkhorse64, its hard to say. Yavalath is pretty messy early game

darkhorse64: And for traps out of the book ? I mean they can occur quite late although I agree the game gets less tactical after a while

MSmits: you mean traps out of book that occur later on, if you are using the book?

darkhorse64: Yes

MSmits: you can optimize it a bit for that, but you need to find an opponent that is going to survive early game. However, any opponent I have seen that does that, has very little variation. It's hard to do a good test

darkhorse64: Notice I have no data to back up this claim. Just thinking aloud

MSmits: yeah my data is not that great either. Self play is useless mostly and any opponent I try to train against will soon have an anti-book

MSmits: it's ridiculous how few moves I need to counter someone

Astrobytes: The MCTS should be able to deal with that late game issue though? it's the early traps it fails in right? minimax will probably negotiate the early traps OK (also thinking out loud, don't even have a bot lol)

MSmits: yes, seems minimax is better to avoid early game traps

MSmits: and late game mcts is very good I think

Astrobytes: Hence the need for opening book

MSmits: yeah, but minimax would benefit from it too

MSmits: you can also search through the book and get deeper

Astrobytes: For sure yeah

MSmits: if you already know the move you play, your branching becomes 1

MSmits: not just on the root, but on any layer you have a book move for

Astrobytes: Yes indeed

MSmits: so the moment you leave the book, you still have a small advantage because you have a tree from previous turns that got a bit deeper

MSmits: I also use transpositions on yavalath. I think it hurts early game

MSmits: but because of the book, who cares about early game anyway

darkhorse64: Here comes the dilemna: explore the bad moves to get ready for opponent bad moves or explore your book to get deeper ?

MSmits: yeah I never got that far into it, i just do regular exploration for my opponent moves

MSmits: btw, it's nothing magical what I do, anyone with sufficient obsession-fuel can beat me on Y

MSmits: just run a book for a few weeks

MSmits: meta mcts

darkhorse64: months you mean

MSmits: or do like re curse and run 10 cores

MSmits: well most people will try to thread it

Astrobytes: I was gonna say didn't you have that running for months

MSmits: i only ever did 1 core

Astrobytes: sheesh

MSmits: i had it running for 2 months or so? then did uttt

MSmits: not full time btw, proll 12 hrs a day

Astrobytes: half-time...

MSmits: yeah, my wife doesnt like the computer on at night or when nobody is home

MSmits: it might start the machine uprising when it's not being watched

MSmits: or cause a fire, whatever happens first

Astrobytes: #2 most likely

MSmits: yeah

Astrobytes: Though low probability for both tbh

MSmits: sure, it never caused a fire while I was there to watch it either

MSmits: I do like the fact that i got nr 1, but the meta mcts is really about learning about the game as well. That worked well for Y, not that well for uttt, because its hard to see anything in that game

MSmits: probably will be hard for oware as well... It's not that easy to see what works and what doesnt

MSmits: gonna netflix a bit before sleep

MSmits: no alcohol and picard for me, but I need to see that series somehow

Astrobytes: Haha, you can download it easily tbh

darkhorse64: Happy binge watching !

Astrobytes: And enjoy

MSmits: no doubt Astrobytes, ttyl guys, gn

Astrobytes: gn man

miszu: I haven't done C++ in like 2 years. Refreshing my memory about l-value, r-value

miszu: copy constructor

miszu: so many things can go wrong in C++ haha

struct: c++ is freedom

Default avatar.png DJSugarCoatedKnight_f6cb: so is jumping out of a plane without a parachute

miszu: the more I understand the fine details, the more I see the freedom of it. But you have to be super duper careful about variables stored in stack

miszu: assigning an attribute to a local variable.. mmm seg fault... wonder why...

Uljahn: take care of your feet

Astrobytes: And leg

Astrobytes: s

AntiSquid: china banned Plague Inc game from their app store! Well done fighting the virus China!

tekki: hi world

tekki: any demand?

tekki: AutomatonNN what's going on here?

**AutomatonNN completely coded it in the same code

AntiSquid: tekki you'll be a panda steak once the chaos settles

tekki: :)

tekki: nice one Antisquid

tekki: congrats him AutomatonNN

AutomatonNN: he was a hacker

Astrobytes: lol

tekki: dude wtf AutomatonNN

AutomatonNN: even the same code as the boss in the contest

struct: AutomatonNN teach me AVX

AutomatonNN: what do you mean by the simple way to see the problem with the same starter again?

AntiSquid: panda hacking with a cleaver

tekki: ok AutomatonNN

AutomatonNN: good

tekki: what's news AUtomatonNN?

AutomatonNN: Automaton2000 is always the only one who wants to win the contest and it was a real time struct

Astrobytes: Epic

tekki: oh yeah i guess AUtomatonNN

AntiSquid: tekki is it spamming season?

AutomatonNN: for debugging i gave up on that site

tekki: lol

struct: AutomatonNN send help

AutomatonNN: why did you submit a bot game?

struct: Should I take it down AutomatonNN?

AutomatonNN: CG is in the wrong time

struct: AutomatonNN where is everyone :(»

AutomatonNN: always was bugged

miszu: qq guys, the C++ here, is it C++11?

tekki: hi miszu

miszu: hi tekki

tekki: where you from miszu?

miszu: Montreal

tekki: nice

miszu: which part from France are you?

tekki: never been in Montreal

tekki: South West

miszu: we swear like sailor here

tekki: seriously?

tekki: why?

miszu: lemme give you the national anthem of Quebec


tekki: go on dude

miszu: this capture the true spirit of Montreal and our culture

tekki: yeah it looks like :)

miszu: aren't you suppose to sleep? :P

tekki: you're lucky in Montreal

miszu: "lucky"

tekki: like sonw weather

miszu: honestly, I don't like it

tekki: here no much snow this year

miszu: very cold, 30cm of snowstorm

tekki: oh yeah

tekki: take holidays :)

miszu: yeah with all that covid going around haha

tekki: haha

miszu: thank god we are developers and it won't affect us

tekki: don't know what's gonna happen now?

tekki: maybe coronavirus gonna die soon AutomatonNN?

AutomatonNN: 250 RoboStac

miszu: AutomatonNN is saying nonsense haha

AutomatonNN: try here to increase my bot

tekki: AutomatonNN kill patient zero please :)

AutomatonNN: what is the problem?

tekki: virus AUtomatonNN

AutomatonNN: what is the main problem?

tekki: you gonna die AutomatonNN

AutomatonNN: first time i get the idea

Default avatar.png CharlesJoya: yoo

tekki: yop carlos :)

Default avatar.png CharlesJoya: lol true whatsup

tekki: all fine ?

Default avatar.png CharlesJoya: yeah mann just testing the waters

tekki: no virus close to you? :)

tekki: Automaton2000 can helpyou incase

Automaton2000: you have to win a t-shirt

miszu: Automaton2000 tell me a hoke

Automaton2000: need to improve my bot

AnkitAnand_12: Automaton2000 did you talk to AutomatonNN

Automaton2000: but i don't think i'll be able to come back

AutomatonNN: amount of information is the same as the boss in the contest

AnkitAnand_12: who is the boss... AutomatonNN or Automaton2000 ???

Automaton2000: i guess the answer is no

AutomatonNN: hello to the whole code

tekki: do you believe in god AutomatonNN?

AutomatonNN: for me it was a big difference

tekki: explain please AutomatonNN

AutomatonNN: good point

tekki: what 's the problem with humanity AutomatonNN?

AutomatonNN: eulerscheZahl is there a way to see a program which stays the wrong one and the last move only won't