Chat:World/2022-07-06
elie.f.asmar: How do I collect Coding points (CP), I noticed recently that other users have a lower level than me, yet they have more CPs
5DN1L: https://www.codingame.com/help/rank
Ayza: look at the ranking page in your profile
Ayza: or the link 5DN1L sent
Ayza: probably the best way to get CP is bot programming and contests
Ayza: you'll find many low levels but sweats at bot programming
elie.f.asmar: In clash of code, does 2nd or 3rd place score any points?
elie.f.asmar: okay forget it I read the scoring concept
5DN1L: Automaton2000 what do you think of the other random chat generator bots here?
Automaton2000: i need to add it to the next level?
5DN1L: yeah they'll never be the same level as yours
Darleanow: Hey 5Dn1L :)
5DN1L: hi Darleanow
Darleanow: how are u !!!
5DN1L: i'm good, thanks
5DN1L: how are you doing
Darleanow: I'm doing good too :)
5DN1L: great
Darleanow: i don't know what to do yet
Darleanow: i've tried multiple submissions for block the spreading fire but can't get a higher score :/
5DN1L: You're rank 19! :thumbsup:
Darleanow: yeah but i won't be first :'(
5DN1L: Automaton2000 will you be first?
Automaton2000: are you in the top 10
5DN1L: lol
Darleanow: i'm not in the top 10 Automaton2000
Automaton2000: what are the numbers in the same place on the same cell, but a pac can't cross the path of ...
Darleanow: wut
MSmits: wut Automaton2000
Automaton2000: hey guys, is it possible to have a bot that is a bit weird
MSmits: yeah, you Automaton2000
Automaton2000: you would have a chance
MSmits: indeed Automaton2000
Darleanow: Automaton2000 can you help me optimising my code
Astrobytes: Automaton2000 enjoyed the pacman contest clearly
Automaton2000: then you don't have any idea what the game is a bit like mad pods lol
Automaton2000: like, you can write a post, but there does not appear in the inputs
Automaton2000: but for now i have to do that
Darleanow: Automaton2000 you should help me first.
Automaton2000: you can use a list comprehension
MSmits: yeah do that Darleanow
Astrobytes: [solved]
Darleanow: Automaton2000 what breadth first search algorithm would you recommend me ?
Darleanow: xD MSmits
Automaton2000: if you don't know which one is the best
j4at: +random()*10 is actually smart :o
Darleanow: Can you tell Automaton2000 ?
Automaton2000: what if they are not good at coding
j4at: ops
j4at: Automaton2000
j4at: is actually smart
Automaton2000: i like how you can get it to work for me
Darleanow: i think that as you're code, you're the best at coding Automaton2000
Automaton2000: i don't care about that
Astrobytes: ooOOoo
Darleanow: Automaton2000 you should
Automaton2000: i would be in the leaderboard
Darleanow: self esteem is important Automaton2000
Automaton2000: from what i can see that
Darleanow: from the fact that you didn't helped me for Block the spreading fire Automaton2000 ...
Automaton2000: that's how i do sa
Astrobytes: :D
Darleanow: Automaton2000 are you okay ?
Automaton2000: how do i see a youtube link. did you do
Darleanow: Automaton2000 https://www.youtube.com/watch?v=dQw4w9WgXcQ&ab_channel=RickAstley
Automaton2000: but i guess its a way to put it in a different language
MSmits: Automaton2000 just told you to use SA Darleanow
MSmits: like i did
Automaton2000: my eval is bool hasplayerwon(int player)
MSmits: good eval
Astrobytes: is that a struc t quote?
MSmits: no idea, but i use this eval in uttt and c4
Darleanow: WAIT
Darleanow: HOW TF HE CAN RECOMMEND ME THIS
Darleanow: LIKE
MSmits: Automaton2000 what do you think of players that communicate in all caps
Automaton2000: if you're going to do that in this game
Astrobytes: he even gave you en eval
Darleanow: this one is a charm Automaton2000
Automaton2000: i think one of the tests provided in the ide
j4at: Automaton2000 help!!
Automaton2000: my point is that i don't want to go to bed
Astrobytes: :D
MSmits: real bots dont sleep Automaton2000
Automaton2000: i still can't get out of it
MSmits: just dont go in it Automaton2000
Automaton2000: could the validators in the repo not have been in a convenient format ffs...
Astrobytes: he's on good form today
MSmits: he could convince some random newb that logs in today yeah
MSmits: we've had this happen before, that someone thought he was a person
MSmits: it's very funny
Astrobytes: several times :D
j4at: Automaton2000 Est-ce que tu parles français?
Automaton2000: i think my bot is better than random
j4at: bruh
Astrobytes: j4at: join #fr and ask him there ;)
j4at: ow
Astrobytes: :D
Astrobytes: the #fr version is usually more amusing
MSmits: it talks about baguettes?
Astrobytes: no, it's just funnier (mostly)
j4at: it talks about surrendering :)
MSmits: Automaton2000 what do you think of :french_bread: ?
Automaton2000: [auto] you need at least 3 :taco:s to do a shakedown
MSmits: jeez, what did wontonimo do to automaton ?
5DN1L: he fed it too many tacos but no bread
MSmits: apparently
Darleanow: Automaton2000 what's your name
Automaton2000: yeah, it was a tough one
Darleanow: Automaton2000 can you hit j4at with a baguette pls ?
Automaton2000: i reported it on discord please
Darleanow: he deserves it Automaton2000
Automaton2000: not sure if thats a good way to get the solution
Darleanow: Automaton2000 the solution is easy : baguette+j4at = happy Darleanow
Automaton2000: unless you do a minimax
MSmits: Darleanow we had another Automaton before
j4at: AutomatonNN ?
MSmits: but he went nuts and kept spamming 1 player
MSmits: yeah
Darleanow: MSmits, built with markovify ?
MSmits: eulerschezah l what is the code of the contes to the bot?
MSmits: i am not sure, it worked a different way
j4at: Automaton2000 teach me how to beat recurse
MSmits: and it did different things
Automaton2000: with a lot of puzzles
MSmits: good advice
j4at: well, i need to practice i guess
Astrobytes: AutomatonNN was programmed to spam euler, it was hardcoded :D
MSmits: hardest I ever laughed on CG was when automatonNN started calling euler a noob out of the blue
Darleanow: ohhh i get how Automaton2000 builds his sentences
Automaton2000: what language are you using?
Darleanow: this is so clever lmao
Darleanow: so basically, everything we say could be used against us...
MSmits: indeed
Darleanow: (or we could make Automaton2000 do bad things)
Automaton2000: the code is not working for me
j4at: Automaton2000 get good noob
Automaton2000: if they are in the same time
Astrobytes: he's capable of those bad things by himself
Darleanow: is he a bad thing already ?
MSmits: i dont think you have to talk to him directly to teach him bad things
Darleanow: Automaton2000 are you ?
Automaton2000: i think i have an idea
j4at: ik
Darleanow: tell me more Automaton2000
Automaton2000: i saw it in the arena
Darleanow: okay i'll try to catch it
Darleanow: Automaton2000, everything clear in the arena, give me another location
Automaton2000: i don't understand why it's not a bug
Darleanow: Automaton2000 i'm certain that i've searched correctly
Automaton2000: there are a couple of hours
Darleanow: Automaton2000, in how many days do you think i would be able to build someone like you (but better) ?
Automaton2000: ok, i thought it was a nice one
j4at: Automaton2000 this is an assembly only chat. Please use #en instead.
Automaton2000: i was thinking about what you have to be as fast as possible
Darleanow: Automaton2000 okay, i'll do as long as you in bed :p
Automaton2000: i'll try to look at the leaderboard
tevaaa: Automaton2000 tu sais parler francais ici ?
Automaton2000: i don't know the details
5DN1L: no, it can speak french only in #fr
5DN1L: otherwise i'll kick it out
derjack: :upside_down:
Darleanow: :O
Darleanow: I held the Sword , and finde Titinius hart .
j4at: https://www.codingame.com/replay/649695224 I can't improve it anymore :(
j4at: seems like I will never get sub 10.8k
derjack: its simple https://pbs.twimg.com/media/EKaM6e-XUAATeWx?format=png&name=small
j4at: Kekw
j4at: I will try self recursion
derjack: have you tried notself recursion?
j4at: I like self recursion because it doesn't make sense to find a solution in O(1)
j4at: Same for human brain I can't see
problem and instantly solve it. I need time.
j4at: Also self recursion doesn't have the same gradient problems as rnns and other loopy nns because you can start training it with low depth and then slowly increase it.
derjack: :drooling_face:
j4at: derjack this is my NN if you are interested about how to deal with variable number of inputs.https://i.ibb.co/M10jBjd/Screenshot-from-2022-07-06-09-17-51.png And yeah it doesn't use self recursion.
j4at: It was 105/210 instead of 192/384 before I started just copying the solutions instead of the NN.
j4at: Well this is a bad example because number of checkpoints is padded to 8. So you need to make a little change to make it work with number sizes that are not power of 2
derjack: noice
derjack: still putting all the checkpoints is quite overkill
j4at: go big or go home :p
derjack: wanna some challenge? clash of bots
derjack: you get 5x5 vision for each of your robots. but they are random
j4at: I will give a try
Aldoggen: j4at I looked at the image you sent. is the idea that you deal with variable input size by always using the maximal input size you can get?
j4at: Well in this case padding makes sense, but I hate it bc most of the time people use it with mlps which is not dynamic enough in my opinion. My idea is not padding but merging normally I do it like https://i.ibb.co/TwD42fp/Screenshot-from-2022-07-06-09-49-54.png
j4at: Can also padd it to smallest power of 2 that is >= than the input size. or add extra element everytime I have 1 node left. Both are computationally less efficient. But yeah the main Idea is merging, which doesn't not only deal with variable input size but also generlise better because share weights between elements instead of having different weights for each element of the sequence.
j4at: Can also done for multidimensional input. for example for an image you want to merge 4 pixels together (2x2)
MSmits: interesting graph. When the number of layers goes up, the numbers of layers also goes up
MSmits: (scroll)
j4at: "When the number of layers goes up, the numbers of layers also goes up" huh?
MSmits: the pic jace k shared
MSmits: https://pbs.twimg.com/media/EKaM6e-XUAATeWx?format=png&name=small
j4at: ow yeah I didn't notice that :D
MSmits: it's funny
j4at: it's not even linear xD
MSmits: which makes it funnier
darkhorse64: it looks like a Shadok (maybe too specific to french background)
MSmits: I am imagining a zombie carrying baguettes
darkhorse64: https://en.wikipedia.org/wiki/Les_Shadoks
MSmits: ahh i see
j4at: they removed pastebin? It's weird that they decided to that.
j4at: bc they are gonig to remove chat anyways
MSmits: it's just bugged i think, it has been bugged before
MSmits: they fixed it then, but i guess they wont bother this time
darkhorse64: CG chat is a wonderful place but is really buggy
MSmits: yup
darkhorse64: I'll miss discussion on NNs even though I only understand half of it
Astrobytes: just pester jacek on discord instead
Astrobytes: I know it won't be quite the same, I will miss this old chat
MSmits: me too
darkhorse64: It looks like I can access discord from my workplace. So, I'll be there lurking
derjack: no more trolling :(
Mauri_Z31: Does anyone know whats the Name of the one guy from Stranger Things whos gay?
MSmits: Willy byers
j4at: Weird question to ask here. you could have googled it
MSmits: I did
j4at: Oo
elie.f.asmar: the trolls and spammers
Loris_z30: what is a java class?
Mauri_Z31: where am i trolling?:joy:
Loris_z30: Mauri_Z31 are you from Krankanaria AG?
Mauri_Z31: Yes how do u know that?
Loris_z30: because i hacked your IP
5DN1L: oh they've come back
5DN1L: don't spam or get kicked or banned
5DN1L: standard protocol: i've got to warn first
5DN1L: now i can kick!
5DN1L: kicked one
darkhorse64: This is the chat feature I won't miss
Astrobytes: may as well ban them
5DN1L: kicked 2
Aldoggen: I think it's amusing
Astrobytes: indeed darkhorse64
Loris_z30: why do you kick mauri niqqa
MSmits: it is for a while Aldoggen
Astrobytes: Aldoggen: it gets on your nerves after a few years
j4at: literally have z30 and z31 in their names.. new accounts and said the n-word. Instant ban.
derjack: NN-word?
5DN1L: banned z30
darkhorse64: I would have not been a good mod: instaban for all, no warning, no kick
darkhorse64: pure wrath
Astrobytes: certain ones got that treatment from me if warranted
MSmits: me too darkhorse64
Westicles: what country are they from?
MSmits: troll country
Astrobytes: Scandinavian?
5DN1L: many show Switzerland. not sure if it's real
MSmits: you now made it seem like scandinavia is troll country Astrobytes :P
Astrobytes: well I was thinking of the troll forests over there
Astrobytes: look it up
MSmits: ohh ok
MSmits: thats true, i saw a movie about that
5DN1L: what a name
AbusiveFather134: It comes from my dad
AbusiveFather134: So can someone help me
AbusiveFather134: how can I do multiple replaces in javascript
5DN1L: try googling your solution
AbusiveFather134: Already tried it
5DN1L: and while at it, replace your name as well
AbusiveFather134: Weird syntax my browser is bad and wont find stuff do u guy know a good browser
AbusiveFather134: I will never replace my name
Aldoggen: of course it's weird syntax. it's js
AbusiveFather134: Why does js suck?
Aldoggen: because it was made to be as forgiving as possible
AbusiveFather134: So like a coding noob language
Aldoggen: again from swizerland
5DN1L: yeah
5DN1L: i insta-banned one of them just earlier this week because i recognised their name and i banned them before
5DN1L: they should have mercy and let this chat have some peace in the first place
Aldoggen: that's also a way of looking at it
Aldoggen: you don't go jumping on a dying man's bed
Astrobytes: unless it's his last request I guess
Aldoggen: lol I'm gonna remember that and ask my grandchildren to do that
Astrobytes: :rofl:
5DN1L: this chat requests spammers to come? :scream:
Aldoggen: the more attention, the better?
Astrobytes: who knows what it does when it disconnects and we're not looking eh
5DN1L: i wanna say earlier than Aldoggen's description of "dying" fits this chat perfectly :P
5DN1L: that*
Astrobytes: indeed ti does
Astrobytes: *it
Aldoggen: also the "stop, stop, he's already dead" meme
5DN1L: do you have any goals in mind on this website? like reaching a certain level? or reaching a certain league in X number of bot games?
5DN1L: or no goals at all except for having fun?
5DN1L: Aldoggen
Aldoggen: me? I guess I'm mostly having fun
Aldoggen: I also wanna learn, but the force that drives me has nothing to do with that
5DN1L: that's good :)
Astrobytes: watch out, it's a rabbit hole :)
Aldoggen: I've made more unfinished projects than finished projects in the last two weeks
Astrobytes: ah you'll find a focus soon enough
Aldoggen: now it's cyborg uprising and whatever comes up in chat lol
MatteoS: how can i be not quicked from the french server
Aldoggen: the girl's weight puzzle for example
Astrobytes: ^
5DN1L: or get banned
Aldoggen: I heard MSmits say there was an O(1) solution. I just HAD to find it
5DN1L: that way you won't be kicked
Astrobytes: I think its insta-kick for him in fr
5DN1L: MatteoS was kicked by str uct yesterday
MSmits: wasnt me Aldoggen
5DN1L: so i can ban if there's more breach of the code of conduct
Astrobytes: :)
Aldoggen: I'm pretty sure it was you MSmits, but if you say so :)
Astrobytes: might have been Westicles, Aldoggen
MSmits: I never said the words O(1) solution in my life
Aldoggen: well I don't remember
Aldoggen: well, you typed them at least once now
MSmits: yes
Astrobytes: congratulations :tada:
MSmits: it's ok, you scandinavian?
Astrobytes: I was about to write the same
MSmits: :P
Astrobytes: RAIC looks intriguing this year, 2 previews on the CG discord
Aldoggen: royal architecture institute of canada?
MSmits: yes thats it
MSmits: super interesting those canadian royal scribblers
Astrobytes: lol, Russian AI Cup
wlesavo: Astrobytes oh nice, i even went to discord for this one :smiley:
Astrobytes: :D
Mauri_Z31: How do i generate a ArrayList in Java?
MSmits: is ArrayList a thing specific to java? I never heard this when doing C++ and C#. it sounds weird to me
MSmits: is it an array or a list?
wediaklup: Do you mean a list of arrays?
Astrobytes: MSmits: equivalent in C++ is std::vector
Astrobytes: iirc
Mortis_666: ArrayList<type> varName = new ArrayList<type>();
Mortis_666: iirc
MSmits: Astrobytes that's just a list
MSmits: why would it be called ArrayList
Astrobytes: don't feckin ask me, I hate java :D
wediaklup: i looked a bit online and i found
wediaklup: List<String> list=new ArrayList<String>();
wediaklup: so i think the class is called ArrayList
MSmits: ok... but why :P
MSmits: when i talk about my dog I don't call it a MammalDog
wediaklup: i don't really understand that code
Astrobytes: I guess arraylist is a linked list, vector isnt
wediaklup: the type of list is List but it is initialised with an ArrayList
MSmits: hmm ok
MSmits: should have called it linkedlist then, arraylist is not descriptive
Astrobytes: hey I could be wrong
wediaklup: that sounds logical
Astrobytes: I think there is a linkedlist come to think of it
Astrobytes: who cares anyway?
MSmits: great
MSmits: good point
Astrobytes: :D
derjack: ArrayList is list which uses array under the hood
derjack: it isnt linked list
Astrobytes: there you go
Astrobytes: like vector, it uses array under the hood too
derjack: eeyup
MSmits: ok so... why is it not called List
MSmits: like in C#
Astrobytes: because its indexable like an array?
Astrobytes: (just guessing)
MSmits: so are C# lists
Astrobytes: this is java
Astrobytes: :P
MSmits: indeed
MSmits: I am just looking for some agreement that it's a stupid name
Astrobytes: I agree but I know more now than I did earlier
wediaklup: i agree
derjack: List is just interface
Astrobytes: Aha.
MSmits: what does it mean that it is just interface?
Astrobytes: that's the abstract base class for listy-things
MSmits: o
derjack: List<String> dupa = new ArrayList<>(). but if for some reason you need LinkedList or something else, dupa can be LinkedList<String>
Astrobytes: 'dupa' :D
MSmits: Isnt this like iList in C#?
derjack: and all you need to care about if it has add() remove() get() etc.
derjack: maybe
MSmits: so list in java is Ilist in C#
MSmits: arrayList in java is list in C#
Astrobytes: the I in front of things generally denotes an Interface does it not MSmits?
MSmits: yeah
MSmits: it's genius
Astrobytes: :rofl:
MSmits: I just found my uttt bot has a bunch of weird bugs in the sim that apparently arent bot-breaking
MSmits: i hope my bot doesnt get worse when i fix them
derjack: oO
struct: hi
MSmits: hi
Astrobytes: has to get worse before it gets better
MSmits: maybe so
struct: this is why your sim is so fast MSmits
struct: The bugs
MSmits: well you're actually correct
Astrobytes: :D
MSmits: these buys make the sim end prematurely
Astrobytes: doesn't sim anything; just pulls results out its a$$
MSmits: it saw a drawn board as a won board for either side
MSmits: yeah
MSmits: my uttt bot is 2.5k lines :P
Astrobytes: fixing that could definitely go either way
MSmits: yeah
derjack: wait, uttt provides state AND available actions?
derjack: why do i bother with sim :thinking:
struct: it doesnt provide current state
MSmits: because you want a search :P
struct: it provides last move
struct: and number of valid actions
derjack: meh
struct: and the actions
struct: yeah
struct: so yuo could do the same as green circle
MSmits: that would be a crap bot i think
derjack: nah, green circle provides full available state. for uttt i need to know what to do with the last state
derjack: last move*
struct: yeah
MSmits: just put it as input
MSmits: and keep a history of moves as input
MSmits: let it generate internal model, like muzero
Astrobytes: ezpz
derjack: i could use some rnn or lstm, so only that 1 input would be needed
MSmits: ezpz :lemon: sqzy
Astrobytes: lstm?
derjack: long short term memory
Astrobytes: ah ok
MSmits: thats what i said
derjack: actually that could be good exercise. recreate state based on provided moves one step a time
MSmits: pfft
Astrobytes: :D
struct: MatteoS this again?
struct: oh well
MSmits: to be fair, I did the lemon
struct: MSmits on hypersonic do you store the bombs on a bitboard?
struct: I was thinking on storing it like
MSmits: hmm, let me check
struct: U128 bombs; uint16_t bombs_data[128];
struct: but im not sure if this is ideal
struct: since I need a way to store range, owner and timer
struct: I dont really wanna have U128[4*8*max_range]
MSmits: it seems i store bomb positions in a 128 bit state, but also have bomb objects in an object pool that I reference like you would nodes in a mcts
MSmits: because these are unique integers, just the index of them is enough to uniquely identify and hash them
struct: yeah
struct: so I guess its similar to Bomb bombs_data[128]?
MSmits: mmh no
struct: 128 might not be needed
struct: hmm isnt this similar to mcts though?
struct: the bombs have the indexes because its the bitboard
struct: and the data would store the player, range and timer
MSmits: sec
MSmits: https://pastebin.com/qUF3YfLh
MSmits: Bomb bombCache[BOMB_MAX]; Bomb *nextBomb = bombCache;
MSmits: const int BOMB_MAX = 500000;
MSmits: so every bomb i make during a game is somewhere in that large array
MSmits: all i need is the index to it
struct: ah
struct: interesting
YurkovAS: i'm don't use bitbords in HS (and use int32 for every fields) and still in top20 :)
struct: Thanks MSmits
struct: nice YurkovAS
struct: Do you use avx on csb YurkovAS?
MSmits: YurkovAS you dont need to worry about peformance at all. Even when looking 20-30 turns ahead, my bot uses like 5 ms
MSmits: i use 70% or more of my calc time for some crappy minimax to avoid getting blown up by other players
MSmits: btw, i have a really weird gamestate as well struct
MSmits: my gamestate does not have a position for the player
MSmits: it has a map of possible positions that the player could be at and still be alive
MSmits: so transitioning from one state to the next is a floodfill on possible player positions
struct: I see you have put a lot of work int o it
MSmits: exploding bombs means taking area off this map (player could not have been there or he would have died)
MSmits: every time the player can place a bomb or pick up an item, a new state is created
MSmits: but not for movement
YurkovAS: struct i'm use avx only for "after turn phase: round, truncate, multiply 0.85": this give very small improvement
MSmits: yeah struct, avx is wayyy overkill
struct: I see, I have been trying to do avx on it for collisions
struct: so far I get between 500k-600k sims avg
MSmits: I cant compare as i do all possible positions at the same time
struct: I will try to finish it soon
MSmits: but I can often go 25 turns deep without filtering states with beamsearch
MSmits: so it full searches 25
struct: Avx is for csb MSmits
struct: not hypersonic
MSmits: ohhh ok
MSmits: btw, my method for HS is nice, until you try to combine it with avoidance/kill code for dealing with other players, then it becomes difficult
MSmits: it's a problem for everyone i think. You have this single player beamsearch that suddenly needs to have influences from other players
struct: If I do it I'll probably try to keep it simple
MSmits: sounds good
wediaklup: lol i debugged my bot but the debugging was the actual bug....
MSmits: GJ :)
wediaklup: i have a question about that line:
wediaklup: t = Game(self.grid.copy(), self.progress.copy(), self.cooldown)
wediaklup: with that line t shouldnt be able to manipulate the original object(self) in any way?
MSmits: i have no idea what copy does
YurkovAS: struct in csb i have fast collisions check: this give visible improvement https://www.codingame.com/replay/649731829
YurkovAS: this total summarrized statistics for turn s=simsCount, r=rolloutsCount but i'm use minimax style in csb: 2xmcts (myBlocker vs opRunner + myRunner vs opBlocker)
MSmits: yeah it depends a lot on the eval though. I think your eval is probably better
wediaklup: copy creates a copy of a list
5DN1L: https://realpython.com/copying-python-objects/
5DN1L: this may help
MSmits: my csb code is very old. I have no doubt it's not very performant
5DN1L: your code looks like it's doing a shallow copy
MSmits: I stil need to try and put the avx in
5DN1L: wediaklup
MSmits: but too much else to do
k1one44: o/
k1one44: @wediaklup for certain type of object in python copy or = keep the link with the root. in that cad deepcopy is your friend
wediaklup: thanks i forgot it were 2d lists
wediaklup: now it works :smiley:
5DN1L: :thumbsup:
YurkovAS: MSmits i'm think this is not fast eval. this is fast collisions check. You use cache for collisions in csb, pcr. I'm use other approaches: inaccurate, but fast and in total this give more sims (different in csb, pcr).
MSmits: ahh ok
MSmits: I dont think i use cache in csb
MSmits: I use cach in pcr
MSmits: cache was slower in csb
MSmits: but yeah trading accuracy for speed can be good
struct: need 1k points for top 100
struct: I wonder what I should do
MSmits: so far 26-13 fixed version vs old version uttt... but statistics...
struct: :thinking:
MSmits: hmm
struct: yeah 26-13 seems early to draw conclusions
MSmits: 32.5-15.5 now
wlesavo: struct CG Sponsored quite easy 2k
MSmits: is that the hidden game thingy?
wlesavo: yeah
MSmits: reverse engineer?
MSmits: ah
MSmits: it's fun struct
DJWaterCooledComet_2c96: whats up nigaaaa
MSmits: :hammer:
MSmits: struct
struct: banned
MSmits: thanks :)
struct: well I could be lazy and do golf
wlesavo: one of my favourite actually, there are quite a few levels to go
MSmits: it's a lot of walking unless you have one of them carts
wlesavo: or clash =)
darkhorse64: http://apps.rezonux.com/codingame/ tells you where to win CP
struct: nice
MSmits: I can get 2 more cp in mad pod racing
MSmits: all i need to do is beat a bunch of NN and yurko
darkhorse64: It tells you that improving UTTT is useless
darkhorse64: :slight_smile:
wlesavo: oh, just noticed, my rank reached my lvl :smiley:
MSmits: for cp yes, but my obsession does not care about useless :)
MSmits: gj wlesavo
wlesavo: i think it mostly can happen only once, since it generally go in different dirrection, since there not that many ways to drop drasticaly in cp
darkhorse64: failing badly at a contest is one way to get a lower rank. Getting reckt by NN is less expensive
MSmits: just to be clear, failing badly at a contest is still better than not participating
wlesavo: darkhorse64 by failing you lose ~1500 cp by decay of the previous contests, it is rarely enough to lose one rank
darkhorse64: true. I just looked at my rank history. Over the course of 6 months, I had to score 10K CP just to maintain my current ranking and two accounts above me were deleted. Competition is fierce
wlesavo: oh, right, one way to lose rank is others improving
MSmits: wlesavo i lost 2 ranks from last contest and i ended 43rd :P
MSmits: it didnt help both the winner and nr 2 were right below me
derjack: hm my rank went up since last contest :thinking:
darkhorse64: The low participant number did not help too.
MSmits: wait no its jus valgrowth and nmahoude
Will_Mason: Whats the best way to send someone my solution to a puzzle, because an employer wants to see some completed puzzles from me ?
MSmits: derjack that makes sense
darkhorse64: copy paste
MSmits: you did not have many contest points, so you get a massive boost from your end result
derjack: + another points from multiplayer
derjack: and im 100th :o
MSmits: sigh... i once again try rolling out from each child in uttt and it's again worse. I don't know why darkhorse64
nmahoude: Hello Msm
nmahoude: oups
MSmits: i have had so many bot versions and every time i try this it is worse
derjack: oO
MSmits: hi nmahoude sorry for ping :)
darkhorse64: Can't tell either
nmahoude: Hello MSmits, yeah the ranking from 18 to 20 is pretty close
MSmits: yeah
darkhorse64: My next target
derjack: if i cared about global rank i would be higher. community board games are not that rewarding~\
struct: you were 100th yesterday jacek
derjack: today too
struct: maybe I should give the entire state on backgammon
struct: just to give jacek a little help
derjack: and actions
struct: yeah
derjack: and states after every action
Astrobytes: no actions, no state, and *every single rule*
darkhorse64: last opponent actions is enough for me
Astrobytes: stick that in yer DQN and learn it :P
Astrobytes: seriously though, whatever works is fine
Astrobytes: valid actions and last move (or valid action count & last move at least) is cool
derjack: and sufficient
darkhorse64: current state, last opponent actions, dice roll and may be possible actions or number of possible actions if it's too large
derjack: yeah, amazons should tell the actions as well
Astrobytes: dice roll yeah, good point :D
darkhorse64: otherwise the referee would have a hard time guessing it :innocent:
derjack: does backgammon use SecureRandom yet
struct: yes
MSmits: darkhorse64 when you do a full rollout in uttt, do you also do it for a free move? I am guessing this is why it is worse for me. The free move would get a ton of visits it shouldn't initially get
derjack: do you have some fpu or any idea about choosing best unvisited child?
derjack: rolling out all children may be worse because some of them are bad and they bias the parent
MSmits: fpu?
derjack: first play urgency
MSmits: well yes this is exactly why it is worse
derjack: normally in UCT unvisited child has infinity
MSmits: when i roll out from all children, they are all unvisited
MSmits: so they are treated equally
MSmits: then next time they all have 1 visit and you just use ucb1
derjack: meh
darkhorse64: Yes, I rollout all children regardless it's a free move or not
MSmits: it's a lot of visits for that node that is probably bad
darkhorse64: if it's really bad, it will not get less visits afterwards
darkhorse64: it will get less
MSmits: no, but you already wasted a lot of sims from it and biased the parents and grandparents
MSmits: i am not sure how bad this is, i am just thinking about it
derjack: i'd say guessing best first move is most important part
derjack: afte all tree has most leaves
MSmits: i tried going for moves that win boards first
MSmits: but wasnt better or barely better
struct: I also do full rollout
struct: for free move
darkhorse64: going full rollout leads to a massive simplification of the MCTS + solver + node allocation code. I would have to rewrite many things just to test this feature
darkhorse64: less is more
struct: my uct wouldnt work if visits == 0
MSmits: yeah thats annoying for me too
MSmits: switching between them
MSmits: i'll do a good test again, will let you know what i find
struct: Im going to waste my time on bt again
YurkovAS: MSmits something wrong after turn 53 https://www.codingame.com/replay/649757762
Aldoggen: move 41 was also wrong if I understand this game right
Aldoggen: MSmits could have won there
Aldoggen: or was the bottom right square not accessible?
MSmits: thanks YurkovAS that is definitely a bug
MSmits: not accessible Aldoggen
derjack: interesting https://arxiv.org/abs/2204.13307
MSmits: i dont think my solver is wrong though YurkovAS. It somehow picks the wrong move after resetting the search
derjack: they say they use value network but they have policy formula :thinking:
MSmits: ahh yes
MSmits: it is just wrong move selection
derjack: draws are tricky eh
MSmits: one child was solved as [0,0] and a bunch of others as [-1,0]. Instead of picking the guaranteed draw, it picked the one with worst case loss
derjack: oO
MSmits: well at least it's easy to fix
MSmits: i switched from the old solver to score bounded solver, it worked immediately. I should have been more suspicious :0
MSmits: it still achieved rank 8 though, with this bug and the other bug i found today. Not bad :)
MSmits: I see the problem
MSmits: [-1,0] result counts as unfinished, but the calculated value was above 0
MSmits: so it compares unfinished nodes with solved nodes and a drawn solved node counts as 0
MSmits: but i stop searching a -1,0 node because there is no point if you already have a guaranteed draw
Astrobytes: nice bug
MSmits: heh yeah, it is a nice side effect of this method you need to deal with
MSmits: now I have to figure out how to actually do the move selection properly. This is complicated lol
MSmits: many more combinations possible with score bounds
MSmits: a [0,0] is worth more than a [-1,0] and a [0, 1] is worth more than a [0.0] regardless of wins/visits
MSmits: darkhorse64 another question. When you full rollout, do you backpropagate the average result as 1 visit (so 1 visit and maybe a score of 0.502 or something)
MSmits: or do you backpropagate 5x win and 7x visits or something
darkhorse64: I don't perform averaging
MSmits: mmh ok yeah me neither
MSmits: doing 1k game test of full rollout vs single rollout atm
MSmits: so far 100 vs 150, not looking good for full rollout
MSmits: perhaps i have a bug, but then i had a bug every time i tried this
darkhorse64: I never performed any thorough tests. Wrote the thing, throw in the UTTT arena, saw it was good for me and never went back
MSmits: ahhh
MSmits: my problem is that i much prefer the full rollout version
darkhorse64: I do too because it avoids lots of checks
MSmits: maybe i should try doing single rollout when getting a free move
MSmits: I'll just give all the children 1 free visit to avoid the ucb1 going haywire
darkhorse64: I even went further for Bandas where I expand two levels in my tree in one iteration (16 full rollouts)
MSmits: yeah I know, i could not make that second layer work better
MSmits: but perhaps that is because of my endgame book
BlaiseEbuth: Hi there! How's your now?
MSmits: I hope it's worse than my later
Astrobytes: Better than my earlier
darkhorse64: I should really do that to cut rollouts but it's a low priority
MSmits: yeah i kinda did it mostly because i like to code that sort of thing
Astrobytes: not like you at all! :)
MSmits: :)
darkhorse64: Yeah, either you start reading a book or you end up reading a book
Astrobytes: heh heh
BlaiseEbuth: So much books. That's not really green
darkhorse64: They are recycled
Astrobytes: made out of wasp nests
BlaiseEbuth: Oh. My bad
Astrobytes: *empty
MSmits: my books are not green :P
MSmits: very wasteful
MSmits: better in the winter though
meceka: Hi guys. I'm trying to solve algorithm challenges here. I have some knowledge from freecodecamp but even the simplest tasks here seems hard for me and I can't /do it. What do you suggest to me
darkhorse64: my new checkers engine is faster and I leapfrog the :fish:
darkhorse64: :fireworks:
MSmits: yay
darkhorse64: half of the bot is the movegen
MSmits: yeah i know, checkers is hard
5DN1L: meceka which task have you tried?
darkhorse64: I bitboarded the thing with a crazy pattern for the board.
darkhorse64: The 7-8th people are not far away. I should look for a better eval
MSmits: my eval is super simple
MSmits: i just count kings and men
darkhorse64: I rip mine from an opensource checkers program. Although the author says it's only a starting point, it is already quite involved (lots of positional elements)
darkhorse64: I am guessing my movegen speed is the major factor. I can eval 4M nodes/sec
jacek: so thats why im not 1st in checkers :rage:
darkhorse64: Not my fault, recurs e was already first when I submitted
Aldoggen: his about page says he's retired from CG. he's still first in so many multis lol
jacek: impossibru
jacek: darkhorse64 is this cake
darkhorse64: checkerboard
darkhorse64: It comes with a "toy" checker program
darkhorse64: I stole the eval, the movegen is mine
darkhorse64: lots of sweat to make it work
jacek: it says its only gui? http://www.fierz.ch/checkerboard.php
darkhorse64: there's a checker program source code in the distribution
darkhorse64: http://www.fierz.ch/engines.php Simple checkers
jacek: you probably saw http://www.fierz.ch/cake186.php
darkhorse64: Yep. I do not think it's opensource
darkhorse64: Now in version 1.89
jacek: still you could probably fine tune your eval this way
jacek: ? https://github.com/eygilbert/CheckerBoard/blob/master/source/simplech.c#L756
MSmits: thats nice jacek. I might try that eval at some point
darkhorse64: I did but I simplify this awful code
MSmits: must be better than just counting kings and men
darkhorse64: It is
MSmits: my sim must be really fast to be 7th with it
darkhorse64: Just when you seemed within reach, you will escape again ...
darkhorse64: Or you have a good book
MSmits: no book
MSmits: never wrote meta mcts for checkers
MSmits: bot is just 839 lines
darkhorse64: I have no TT here
MSmits: same, i tried, was worse
MSmits: it's just mcts with ept
MSmits: no random, just eval
darkhorse64: Same with sigmoid function to normalize the eval
MSmits: i dont normalize
MSmits: seems like my eval does have some more
MSmits: it has a "tempo" feature that just gives a bonus for the player who's next to move
MSmits: and a mobility feature
MSmits: more score for more moves available
MSmits: wait no the tempo is how advanced the pieces are
MSmits: i have a separate turn bonus
MSmits: soooo many popcounts in my eval :P
darkhorse64: Your eval is not only material. It's bit more clever
MSmits: yeah apparently, i was thinking of my previous version, which was like 8th. This was a very minor improvement i think
MSmits: I wasted a lot of time on checkers, trying stuff, most didnt work
MSmits: it's also annoying that you cant really do an endgame book for this game
MSmits: it's too large
Astrobytes: endless hopping around
MSmits: well thats a different issue
MSmits: but yeah thats annoying too
struct: wont beat the popcnt i have on bt
struct: ok its not that many
MSmits: my eval for checkers does 33 times popcount
struct: 62 for bt
MSmits: nice
Tsak5422: hi
struct: hi
jacek: welp checkers has 2x less squares than bt
MSmits: but twice as many different pieces :)
struct: Im not even sure if I can write an eval for bt
struct: I just wrote random things
MSmits: me too
MSmits: seems full rollout is very clearly worse than single rollout. If I make an exception for free moves (do them as single), the bot becomes better, but still worse than single rollout
GNye22: Uhhh I hate the optimization test cases....... My code for roller coaster isn't even that time-heavy, only uses 3 loops and still doesnt pass....
MSmits: 3 loops can be millions of operations
Astrobytes: and what happens with large test cases with increasing nested loops?
Astrobytes: that's what you m,ust think about
GNye22: I only have a single nested loop in the code and thats for simulating each day and checking if there's room on the ride
MSmits: run it locally with the input provided for the test case, see how long it really runs
MSmits: maybe it runs forever, because it has a bug
GNye22: So i'm guessing my issue is where I copy the ride queue into the line queue to ensure the same riders aren't getting on
GNye22: Shit well that didn't work....
GNye22: Any tips/tricks for optimizing java code? I already removed the checking of length from the for loop and stored it in a var beforehand and that shaved a few ms off, and condensed an if else into a single boolean expression, but I'm kind of at a loss of what else I can do
Nerchio: you probably need to use an array or map there
Nerchio: but i think i googled the solution
Nerchio: xdd
GNye22: Do you think it could be because I'm using two objects? One for the coaster and one for the ridequeue?
5DN1L: have you implemented any cycle detection?
GNye22: No, I haven't, not sure how I would go about that in this problem, I've never done it before.
5DN1L: try with a simple case first
GNye22: What I don't understand is the large dataset one comes in under a second, so idk why it would realistically need to be optimized any further in the real world anyway
5DN1L: if you implement cycle detection, you can save a lot of loops and computing power :P
struct: if you wanna brute force rollercoaster
struct: use javascript
struct: is chat langing?
struct: oh maybe not
slendersnax: hey guys, has anyone had issues with the c++ compiler?
struct: not really
struct: what problem are you having?
Aldoggen: if it turned into a complainer your code has bugs
slendersnax: nah, i thought so too so i copied the code over to another compiler online and it worked there?
Aldoggen: what error message does it give?
slendersnax: it was one of the certificate exercises, and had issues with the static_cast
slendersnax: @Aldoggen none, it just wouldn't complete the test case as it showed it got "Nothing" as a result
struct: ah
struct: that happens when you print a space at the end
struct: or an extra \n
Aldoggen: a space would do something different
slendersnax: well trying again in 30 days
Aldoggen: a space would compare the lines, and you'd see there was a space in your output
struct: is the site a bit slow for anyone else?
Illedan: ye
Astrobytes: Yes.
Aldoggen: now it's back to normal
Aldoggen: yall need better internet
Washier: good day
Aldoggen: caneki maybe it's time to go to bed then :p
tevaaa: hey caneki i saw you in a clash
struct: I have no idea what i did but my code is calling the wrong function but the name is correct...
struct: oh I see now
Astrobytes: overloaded it by accident?
Astrobytes: or a templating thing?
struct: no since I copy pasted and the function calls itself
struct: it was calling the old one
5DN1L: no spam please
MAHER_AZZ: The message I sent have meaning for some people
5DN1L: that's even worse
5DN1L: https://www.codingame.com/playgrounds/40701/help-center/code-of-conduct
5DN1L: if you spam again you'll get kicked or banned
MAHER_AZZ: Can you please tell me why is that considered spam?
MAHER_AZZ: And I'm respecting all of those
5DN1L: "Don't spam nor flood the chat with non-sense, jokes or private discussions."
MAHER_AZZ: I didn't flood but that's ok
DomiKo: struct what game are you doing?
struct: breakthrough domiko
struct: I want to try some stuff for early win check
DomiKo: cooll
struct: currently from 6th row its possible to check a win
DomiKo: I have to implement sim for that game :(
struct: I shared this before I think
DomiKo: maybe
struct: one sec
struct: https://pastebin.com/Z720xbK5
struct: If its the player turn
struct: and that returns 1
struct: then he has won
DomiKo: thanks, that will be useful
struct: you also need to check if player still has pieces
struct: but wouldnt make sense to add here
struct: since this one is to check before you move
struct: Im trying to make it work after you move it will be more usefull
struct: so basicly this one could be reversed and give hasPlayerLost after he has moved
DomiKo: make sense
struct: any progress on oware?
DomiKo: not really
DomiKo: my results now seem to be better, but when I submit it to arena, they aren't :(
DomiKo: I have to experiment with some memory optimizations
struct: I'm sure you will figure it out
DomiKo: or I will go back to C4
struct: You already got the hardest part
DomiKo: or I have like 3K lines of code with bugs :joy:
struct: you dont use framework for training?
DomiKo: ofc I use
DomiKo: I use pytorch
struct: ah ok
struct: I thought you went recurse path
struct: :p
DomiKo: what is recurse path?
DomiKo: write eveything?
struct: yes
DomiKo: writing my own optimizer... oh no no
DomiKo: I have like a lot of config stuff
DomiKo: so right now I have one binary and one yaml config file
DomiKo: you have to change stuff in config and that's it
DomiKo: press enter and wait some hours
struct: nice
DomiKo: but for CG I should make things a bit more static, not dynamic
DomiKo: that would be faster
struct: wdym by static?
DomiKo: no dynamic alocation and stuff
DomiKo: if you have fixed model, I believe you can just make huge array for weights
DomiKo: and then all weights will be close to each other in memory
struct: yeah access will be faster
DomiKo: and all you really need is optimizer your network
struct: You use avx in your framework right?
DomiKo: ofc
DomiKo: without it's like 6 times slower
DomiKo: and the same model is much much weaker
struct: could always rely on auto vectorization like jacek
struct: But I would probably do the same
struct: and avx it
struct: It should not be that hard
DomiKo: it kinda does work, but not that well
DomiKo: yeah it isn't
struct: i didnt even know that you can do __m256 a; __m256 b; a = a + b;
struct: on gcc
DomiKo: ohhh
DomiKo: cool
struct: if you use immintrinh.h
struct: It will cast it to __v8sf
struct: But I would not trust this
struct: I havent really tested it much
DomiKo: yeah, mixing some low level stuff with high level isn't the best idea
Joey_G: Does anybody know, when .net 6 will be available?
5DN1L: Joey_G ask here: https://www.codingame.com/forum/t/languages-update/1574
5DN1L: Usually languages are updates before contests
5DN1L: are updated*
LicketySplits: if someone says hello world i kill u
Aldoggen: what if I say goodbye world?
jacek: :dizzy_face:
BlaiseEbuth: xX
jacek: TIL i can use or and instead of || && in c++
jacek: makes it faster to copy paste code from python to c++
BlaiseEbuth: :scream:
MSmits: can you not set up some defines
MSmits: maybe you can make c++ code look like python :)
struct: yes jacek
struct: https://en.cppreference.com/w/cpp/keyword
struct: or_eq :nauseated_face:
MSmits: wow really, i did not know you could do or
struct: even |= MSmits
struct: with what I just said
MSmits: thats just weird
MSmits: or_eq is not better than |=
MSmits: thats what i said
HenroLST: in that case i cocncur
MSmits: I think i know what you said there
struct: maybe you should use bitor instead of or jacek
struct: idk whats the difference
struct: ah
struct: | vs ||
struct: ok
struct: I need to forget this stuff
MSmits: yes that would be best
Astrobytes: aren't or and and deprecated in C++?
jacek: or are they?
Astrobytes: :D
struct: I think they did it to keep python programmers away
Astrobytes: lol
MSmits: today I found out my school wifi blocks netflix
MSmits: but it does not block prime and hbo
MSmits: kind of weird
MSmits: so i can watch the boys but not stranger things
struct: maybe the blocked it before prime became a thing
MSmits: yeah, still seems a bit amateurish
MSmits: i mean why block them at all, when youtube is a thing
struct: and is it the school that blocks it?
MSmits: yeah
struct: here almost all schools share the same "system"
MSmits: not so here
struct: Its nice, the credentials work in any school
MSmits: yeah that can be nice
MSmits: testing fpu atm
MSmits: or a version of it anyway
struct: for uttt?
MSmits: yeah
jacek: fpu? :scream:
MSmits: I tried visiting moves that win boards first
jacek: it worked well for me
MSmits: but the performance penalty of splitting the moves (though small) is not worth the gain apparently
MSmits: but won boards has always been a relatively weak heuristic in uttt, now trying putting moves that give free moves at the end of the line
struct: FPU is a fancy name for a node eval for the case the node was never visited. We used a value based on a parent node (assuming that eval of children is roughly the same as parent’s eval). Turned out that AlphaZero just considered unvisited nodes as lost (with very little confidence though)
struct: Had no idea
MSmits: it's just move ordering really
MSmits: like you would with a minimax
MSmits: visit moves first based on some domain knowledge
jacek: welp there is/was some mean fpu in one paper that did well
MSmits: I think it depends a lot on the domain
jacek: in azero at least you have policy to choose from as first child
MSmits: yeah policy kind of replaces that
MSmits: mmh 74 - 57 so far on the fpu setup that avoids giving free moves
MSmits: but probability always messes me up with these uttt tests. Most of the time it's nothing or worse
jacek: confidence interval [2.0%,98.0%]
MSmits: what does that mean
struct: i guess 2% confidence that is better
MSmits: that's not very confident
MSmits: you need to have a standard deviation for those confidence calcs
MSmits: i wouldnt know what to use for these games
jacek: there is some fancy math behind this. how does cgstats calculates those winrate intervals after all?
MSmits: no idea
MSmits: but cg stats confidence is nearly 0. It's almost always very few games
_Royale: hi!
MSmits: hi _Royale
struct: hi
_Royale: MSmits: damn you are high in the C4 leaderboard :)
MSmits: yeah, my bot is very similar to darkhorse and struct, but i added an opening book
MSmits: not countering anyone specific though, just from running it locally
jacek: :unamused:
MSmits: i'm not always nr 1, depends on who submits prolly
Astrobytes: now now jacek, don't get all rebless-y
MSmits: I think for the confidence calculations you take 50% as the standard deviation
MSmits: because a lost game is 0 and a won game is 100%
MSmits: so st.dev of 50 seems reasonable
MSmits: it gives ridiculous results with lower values for st.dev
MSmits: with those settings you get an interval of 52-58% if you score 55% after 1000 games
MSmits: seems reasonable
YurkovAS: i'm use smart playouts in uttt too
MSmits: you mean the random playout right?
YurkovAS: yes
MSmits: I do as well, it helps
struct: I dont think I do
struct: let me check
MSmits: I prefer winning moves over blockign moves over normal moves
MSmits: also I keep track of possible wins of the game
MSmits: so it will always take a winning move
MSmits: (overall winning move)
jacek: i had winning small board have 2x chance to be chosen than other moves and winnig game moves were always played
YurkovAS: i use winning + positional scorings can't do escape free moves
struct: oh i still have ctz on uttt but i dont really need it
MSmits: you mean it cant give away free moves YurkovAS?
MSmits: i use ctz a bunch of times
struct: oh I cant avoid it here i will need to store it anyways
struct: the index of the board I played at
MSmits: yeah
YurkovAS: MSmits i'm can't do escaping free moves
MSmits: not sure what you mean YurkovAS
YurkovAS: i mean: i'm not ignore free moves in random playouts
MSmits: what do you mean ignore?
MSmits: do you mean you avoid giving away free moves, or you play them equally likely as other moves
YurkovAS: equally likely as other moves
because: i'm can't do this, bot play very slow
MSmits: ahh ok, yes for me it's the same, i make them equally likely also
MSmits: sigh the fpu thing for avoiding free moves for unvisited nodes helps at most 1% i think
MSmits: if at all
MSmits: 267 - 251 now
struct: how many versions do you test against usually?
struct: or do you think it doesnt matter much for uttt?
MSmits: just my best, i dont think it matters much in utttt
MSmits: because so much random
MSmits: it would be different if i had an opening book in one of the two versions
MSmits: if you have some calc time leftover there is a nice theory you can test
MSmits: my theory is WR for p1 goes up and WR for p2 goes down with better bots
MSmits: you can do tests with increasing calc time, to see what happen with these WRs
MSmits: at low calc time it will be near 50-50 i think, at very high calc time, it will be more like 90-10
struct: but increase calc time for both?
MSmits: yes both
MSmits: i also noticed that if you add the teccles heuristic, WR for p1 goes up and WR for p2 goes down
MSmits: because the bots become better also
MSmits: (i noticed this in my meta mcts)
struct: what brought me from 25th to 15th+- was early win check
MSmits: in random playout or in expansion?
MSmits: i do both
struct: both
MSmits: ah ok
MSmits: what constitutes early win check ?
MSmits: there's several levels of this
struct: I just do 1 simple thing
jacek: 1-ply win/loss check?
struct: its not only early win
MSmits: mine is more like 2-3 plies
struct: its multiple stuff
struct: nah mine isnt anything like that
MSmits: for expansion anyways, 1-2 ply for random playout
MSmits: do you do the board lookup where if one player has more won boards and the other one cant get 3 in a row anymore?
struct: yeah
struct: something like that
MSmits: ah yeah i got that one too
struct: I guess its very different
MSmits: well as i said, there's a ton of levels of sophistication for this, they take more and more performance away in return for more accurate sim or earlier solve
MSmits: i err on the side of early solving, because i like to use my bot for meta mcts also
struct: but how I check if the remaining cant be won its not great
struct: I just fill the remaining cells as the player
MSmits: i do this also
MSmits: it's a fine method
MSmits: cheap and fast
struct: yeah
MSmits: but what i also do in expansion is detect critical boards
MSmits: where if the opponent can play there, he wins
MSmits: so i avoid sending him there
MSmits: this makes you solve several turns sooner, but it's only like 2-3% extra WR
struct: not in rollout?
MSmits: in rollout i do detect critical boards but only to finish the game
MSmits: not to avoid sending opponent thee
MSmits: i might try this again, it's expensive though
MSmits: the critical board thing is complicated, because when you finish a board with a teccles move, you also give the opponent a free move
MSmits: because you're sending him to the board you just finished
MSmits: have to take that sort of thing into account
struct: you finish a board if you use teccles?
struct: o.o
struct: I had no idea lol
MSmits: no, you generally dont
struct: ah ok
MSmits: i meant a move that has the same square index as board index
struct: still it doesnt seem very expensive
MSmits: in early game those are good moves
MSmits: my expansion functions taken together are 500 lines total :P
MSmits: they must be at least somewhat expensive
struct: yeah but making moves that avoid opponent a win
struct: can be worth
struct: if its similar to c4
jacek: but not as expensive as NN prediction :tada:
MSmits: true jacek
MSmits: struct yes it is actually similar to c4, but it's more complicated. Way more steps
MSmits: and i dont just do this
struct: I will add this to my todo list
struct: if I ever go back to uttt
MSmits: i somehow get drawn back in every couple months
jacek: :imp:
struct: for preventing giving a winning move
struct: dont you just need to xor (next_move_win_board | full_board)
struct: the legal moves you have
struct: xor it by that
struct: or something similra
struct: maybe not xor
struct: but &~
MSmits: you also need to know if the opponent has a winning move on the miniboard he lacks to get 3 in a row on the big board
MSmits: if he doesnt even have 2 in a row there, he doesnt have a critical move
struct: ah makes sense
MSmits: and imagine this
MSmits: say he has those 2 in a row
MSmits: and lacks 1 critical move
MSmits: you can still send him to that board and not lose
struct: why?
MSmits: if it's the same board you are playing on and you're blocking the 2 in a row =)
struct: oh
MSmits: see how this can get complicated ?
struct: yes
MSmits: and of course this doesnt work if he has 2(!) winning moves on that board
MSmits: except of course, when *you* win that board
MSmits: then you block all his future moves on that board
jacek: if there was a way to automate those kind of decisions...
MSmits: yes, a giant opening book
jacek: :head_bandage:
MSmits: :)
MSmits: i actually do have an endgame book of sorts for uttt. But only when theres 1 board left
MSmits: so it's basically a normal TTT lookup
MSmits: i guess it helps with games that tend to end in a draw. Makes sure you play them out perfectly for the last 3 moves or so
MSmits: I tried coming up with a 2 board endgame book but it would already be enormous
struct: does 1 board left book even help?
MSmits: doubtful, i think it helps solve sooner
MSmits: but dont think it helps win more
MSmits: solving doesnt necessarily make your bot better. If you dont solve but the winning moves still get the highest score, it's fine
struct: i wonder how big bt end game book would be
MSmits: that said, i just turned off my sophisticated expansion for a basic expansion function and got 43% WR
MSmits: but thats a ton of features all at once
struct: maybe even bugs
MSmits: i dont think bt endgame book can work
MSmits: yes struct, maybe bugs
MSmits: for endgame book you need a converging game
MSmits: (states get simpler near the end)
MSmits: uttt sort of has this but only for drawn games or nearly drawn games
MSmits: checkers has it, chess has it, oware has it
MSmits: othello does not really
_Royale: jacek: aren't all NNs giant opening books in disguise?
jacek: :no_mouth:
Astrobytes: shhh!
MSmits: _Royale ideally they arent because they're supposed to generalize, but research has shown that it has enormous potential for memorization
jacek: well, having 'extended' solver for bt helps
struct: extended solver?
MSmits: I think they tested it by making a NN remember totally unrelated random numbers
MSmits: and it could remember a lot of them
jacek: you can solve 3-ply or even 5-ply win/losses with bunch of ifs or fancy bitboard operatins
jacek: operations even
MSmits: yeah with triangle shape bit extractions right?
jacek: huh
MSmits: on opponent side of the board
struct: ok 4 row TB idea is discarded
struct: a 4 row tablebase would be approximately 1.1 × 10^11.
Crosility: Been gone for a few days, but back! Howdy, how has everyone been?
MSmits: struct i think you generally look up in triangle shaped pattern in front of each forward pawn
MSmits: not all rows at once
MSmits: hi Crosility, i've been ok
MSmits: you/
struct: yeah I was just reading https://scholarworks.csun.edu/bitstream/handle/10211.3/174085/Isaac-Andrew-thesis-2016.pdf
jacek: well i look at the attacked squares and if i can go into unatttacked ones
Crosility: Seeing family was aight, but been having major car trouble. Just been a pain getting a wrench on everything and fixing it. Thanks MSmits. It's nice seeing you guys in chat. :D
struct: whats the max row you can check from jacek?
jacek: 6th? (out of 8)
MSmits: I don't even have a car, or a drivers license
struct: did you use this before the NN?
MSmits: I use trains and bicycles
MSmits: and feet
Crosility: Love me ol' bicycles and foot power.
MSmits: indeed
Crosility: Just not easy to do here in the states.
Crosility: Was much easier in Japan.
MSmits: no, your public transportation is crap
jacek: struct im still using now, but it doesnt improve much except for solving sooner
jacek: NN can do that
MSmits: here it's great unless you live in some village
MSmits: in a city you can get anywhere quick
struct: so you just check all attacked cells?
struct: I guess it makes sense
jacek: yes
struct: maybe I could add that
Crosility: Lucky :D You talking about the fire spreader jacek and struct?
struct: no, breakthrough
MSmits: no, breakthrough game
MSmits: 482-440 now on the fpu avoiding free moves
MSmits: i wonder if it's better or not
Crosility: Oh, Interesting, a simplified checkers?
MSmits: not checkers
MSmits: more like chess with only pawns
MSmits: and no promotion
struct: oh they had to book 3rd row :D
MSmits: and freeer movement
struct: I dont need it
struct: simple sim but hard to eval
struct: I would say impossible
Crosility: What do you mean?
Crosility: Can't do tree-simulation logic?
MSmits: it's simple to keep track of what happens in the game when you apply a move
struct: Hard to give a value to the current game
MSmits: but it's hard to know whether a board state is good for player 1 or player 2 or anywhere in between
Astrobytes: threat analysis, defence strength etc
jacek: try piece-square tables. but also attacking/attacked pawns or defending are important
struct: as a human its easy
struct: but I cant translate it to eval
MSmits: the problem is the interconnectedness of the pawn lines
Astrobytes: whta jacek said
Astrobytes: *what
struct: I even have eval for "tempo"
MSmits: as a human you kinda do it the same way as a NN, you look at the whole picture
MSmits: you dont chop it up
MSmits: I'm not even going to try improving my bt until i can do it with a nn eval
MSmits: seems hopeless to me
Crosility: WOW, this leaderboard is mostly C++
MSmits: all boardgames are
struct: bitboards
Nerchio: and what isn't mostly C++
struct: ghost in the shell
MSmits: c++ and rust are the fastest languages
Crosility: Lol, true Nerchio
MSmits: but rust doesnt have many players using it
jacek: and 4 top players are quite ahead of the others :thinking:
Astrobytes: damn, dropped to 28th
Astrobytes: Need to get back to that one
struct: top 4 should have their own league
struct: oh but im above 1 NN
struct: by 0.01
jacek: another NN?
MSmits: have to be careful about drawing conclusions about c++ being at the top. Sometimes it's because the language is fast, sometimes it's just because the best players like using it (because they're used to it)
struct: jolindien jacek
jacek: huh
struct: yes
struct: I believe it is a NN
struct: I have no proof
struct: but C#, is oware is also C#
struct: his*
struct: also his C4
jacek: if its NN why it is so low :v
MSmits: Games played: 1000 Player 1 wins: 521 (52,1%) Player 2 wins: 479 (47,9%)
Nerchio: MSmits its fast let's be real (and players are good too ofc)
MSmits: so... is it better?
struct: maybe he just gave pawns as inputs?
MSmits: Nerchio there are many games where performance is not an issue
Nerchio: yes but C++ is fast thats all I said :P
struct: Nerchio some games it doesnt matter at all
MSmits: correct
struct: I wasted so much time on c4 performance for 0% gain
struct: besides knowledge
MSmits: i've stopped doing that
struct: 0% gain on rank
struct: the performance was better
MSmits: it's much better to think about ways to do smart rollout and pruning and such
struct: yes
struct: pruning moves is massive
struct: even for mcts
MSmits: yeah
MSmits: anyway gonna get some sleep again. More uttt experimentation tomorrow!
struct: same
struct: gn
MSmits: gn
Astrobytes: gn
Ahmed_King: start
Solidaritii: does js have an exuivalent method to python's maketrans?
Crosility: There's a joke in there somewhere. But I'm not going to make it. :]
Crosility: Something like this crass? https://www.sobyte.net/post/2022-03/js-mapping-tables/
Crosility: https://www.w3schools.com/jsref/jsref_foreach.asp <- Can use forEach on a loop for the mapping table.
Crosility: Is not "the same", but quite similar in use as Pythons maketrans
Darleanow: Hey every1 :)