Congrats to everyone who competed in the Build your own boss challenge! Our winner was @Aeldrexan’s Algoo54-Cards, the current #2 on the leaderboard, one of the most dynamic algos we have seen. Algoo will be a boss when this post is 30 minutes old!
It was probably my favorite stream so far, with aggressive strategies and EMP lines and mazes with dynamic attack and defense patters. Its awesome to see how a lot of the algos have matured. Check it out here:
First match is at 23:00
Rip forgot to select the new version of my algo. Might just test out sending scramblers now @RegularRyan thanks for the idea.
Edit: Lol the new version wins with 1 hp against AELGOO54 but still loses against Team20 (played them in the regular matchmaking a few hours ago). Ironically the version that played in the competition loses to AELGOO but I believe has had some success against Team20.
I see that we all get to read Algoo54-Cards’ debug output as part of playing against it. It might be worth giving him an option to upload a version with the debugging turned off - I guess it depends on if he thinks that gives away too much of his “secret sauce”.
Glancing through it, nothing jumped out at me as being too revealing, and it’s fascinating to get some insight in how it goes about making it’s choices.
Some fun highlights:
Enemy will try to rebuild unit FF at (13, 14)
Enemy will try to rebuild unit FF at (12, 14)
Enemy will try to rebuild unit FF at (11, 14)
We have still a lot of time, checking for the very best result next turn
Spawning 4 EI at (21, 7) would give results (0, 7.746666666666671):
Waiting seems to better than attacking now.
Turn took 1.3012745380401611s
The scariest attacks are {((13, 27), 'EI', 2, 5): 19.560000000000002, ((9, 23), 'EI', 2, 7): 19.560000000000002, ((14, 27), 'PI', 6, 19): 30}
Defence should be decided in less than 2.9531891345977783
If it stays this way, I’ll enjoy seeing how my adaptive algo evaluates the board compared to what Algoo is seeing.
@n-sanders I didn’t expect the output log to be shown, I actually hope @RegularRyan I will make it hidden, or at least allow me to remove the part of it describing the defensive structures envisaged by Aelgoo.
@arnby When I saw the top 8, I was already about sure my that victory chances were reduced to “will Aelgoo have to fight backtostart”, since I have noticed that your algos very consistently beat Aelgoo, and the few others that are able do that (@kkroep , @RuberCuber, @Felix, …) were absent or eliminated. But beating Aelgoo without taking any damage… well that’s impressive, I’m not able to do that when I play by hand against it.
Also I’m curious how many tries do you guys need to beat Aelgoo54 when playing by hand (my guess is 1 but I am not too sure)
Congrats Aeldrexan! I ended up deciding not to submit anything. Because I have a slightly unique and static strategy, and I don’t want everybody to practise against it all of the sudden. I know my algos beat your current iteration of aelgoo, but I dont know how long that will last, as I dont have much time left to improve my algos. Which is also why I didnt want my algo to win… ;). Good luck with inproving your algo!
Congrats on winning! About the matchup between your Aelgoo series and my Track series, I have noticed that Track can no longer keep up with your more recent algos, even my most newest Track algos aren’t doing too well against this new generation of algos. Seems that the meta might be beginning to shift away from mazes towards this more adaptive style of algo.
Please make this happen guys. A lot effort was put into this algoo, it is already enough of a penalty to let people practise against it, without the debug statements.
I played against it a few times against it by hand as I imagined my algo would play, and I lost most of the time. The algo is very surprizing at times. Especially how it stocks up resources to checkmate a weakness. Very nice! This is not an easy aglo to copy, but a very interesting one to check out ideas. In that sense it is an excellent boss.
Wow, Aelgoo is really something. It beat all the algorithms that I played it against - I even uploaded a copy of Sawtooth that I use for testing, and it destroyed it immediately. And every turn took less than 1s! What’s your secret, @Aeldrexan? How can your simulator be that fast? Is it a C extension module? Congratulations, Aelgoo really seems to deserve this win.
@kkroep - I submitted a slight variation of an old algo for the same reason - I wasn’t too keen on everyone being able to practice against my newest and best.
MazeRunner has pretty decent matchups against enough of the field, it seemed worth it to roll the dice in the bracket. As for the top 8, it’s best head to head is actually against Algoo
Maybe this is beyond the capability of the current system, but maybe @Aeldrexan should get a way to see all the games people are playing against his algo to get a little more incentive for letting us all train against him. But given Madrox got a hotfix, I’d be really surprised if @RegularRyan doesn’t allow a fix to turn off debugging.
Tell us your optimization secrets! My simulator runs up to 17 seconds per turn if I perform all the simulations I want to. I’d love to get that under 5…
I don’t use C, I just did many optimisations. I don’t really remember the time per simulations of Aelgoo54, but for the most recent version (Aelgoo63), I do a full but slightly imprecise action phase simulation in about 3.5 ms on average (including deepcopy). I would not be too surprised if at some point an algo is able to simulate a perfectly correct action phase in less than 1 ms.
I won’t give too many big details on my optimisations but for instance:
Someone suggested to rewrite deepcopy since the native one is slow => I did that…
For checking if a location is in bounds, you can have some conditions about x+y and x-y => …but there is better
You don’t need to call get_target or get_attackers for every frames…
Someone suggested memoisation for getting locations in range => I do better (and simpler)
Some people suggested using A* for pathing => my method for pathing is exact (usually A* doesn’t necessary return the shortest path) and way faster
Why don’t you have to call get_target for every frame? Targets change based on stability, so if anything moves or changes stability at all, you have to retarget. I suppose you could skip that, but you’d still have to retarget every 2 or 4 frames because of movement.
Yes you (probably) have to retarget every 2 or 4 frames because of movement, and also when your target dies. But that’s already a huge improvement!
I don’t advise to retarget when a stability changes: it’s extremely likely that your target is still the same, since you are actively decreasing your target stability, and the targeting prioritize low stability.
For the case where a group of pings is moving while your unit is a EMP or scrambler, and is not moving this frame, it only impact your targeting:
A: if those pings were your target and are moving away, and then your new target is at most at min(unit_range, distance_from_target)
or
B: if those pings are in range, and not already your target and coming closer, and then you only have to compare those pings with your current target
Considering some or all of these conditions should be way faster than always calling get_target.
…Or you can also not consider those rare case scenario.
We will be removing all the debugging from the uploaded version of the algo today at Aeldrexans request. We uploaded it in the submitted form, but the debug does give alot away, and we would prefer that it was more consistent with our ‘quiet’ bosses anyway
I got very tempted to take that as a challenge haha
Honestly, I am not very far from it (my simulator simulates in average under 1 ms but do not accept more than one squad per player which obviously helps) but let’s make some algos first, it has been too long
Arnby, your new simulator is hot stuff! Oracle shot right up to the top, nicely done.
As a side note, I feel slightly bad for Aeldrexan, as winning the build-a-boss seems to be more curse than boon, considering the astonishingly rapid drop of his boss algo on the leaderboard.
This is also an interesting trial run of the idea that’s cropped up in other threads for the ability of players to “challenge” top algos in the playground. After seeing what being a boss has done to Ael’s algo, I don’t think I support this challenge feature, at least not directly.
P.S. After the fall of Truth_of_Cthaeh, I’m back from several weeks in exile! Finally got a taste of the top of the leaderboard once again