4 ms·
I did something like this with Dota2 where I'd have it monitor the opposing team to save their locations when they appeared on the minimap in a shaded color on
by denimnerd42 5y ago
I did something like this with Dota2 where I'd have it monitor the opposing team to save their locations when they appeared on the minimap in a shaded color on a 2nd monitor on that 2nd computer. I used an HDMI splitter and HDMI capture card to send the input to the second computer. I did the CV stuff with opencv library. Taking it a step further as shown in the article could be done to do stuff like auto creep killing vs human and stuff like that.
- ed25519FUUU 5y agoThe meta game of “cheating” sounds way more fun to me than playing any of these games.
- jiggawatts 5y agoDota 2 is probably the most complex game I've ever personally played. It takes hundreds of hours of play just to learn the basics of the rules. There are over a hundred distinct hero characters to play, each with mostly unique skills. At a few hours per hero just to learn the essentials, it can be upwards of 500 hours before you even have a good idea of what's going on. Getting a feel for the overall flow of the game, where to be and where not to be, etc... can take thousands of hours. There is no sport and few other pre-computer competitive games that even approach this level of depth and complexity. But speaking of playing the meta-game more than the game, I had a ton of fun making a "hero picker". At the beginning of each match there's a mini-game where each of the ten players gets to choose their hero out of the available pool of 119. Some heroes combo well others on their own team, and others counter the enemy choices well. This leads to an explosion of possibilities, with something like 4e20 possible distinct combinations, so choosing well is... difficult. I downloaded the outcome of 30 million games (just a few days' worth!) and tried a bunch of ML/AI algorithms to come up with an optimal hero picker: Given 'n' current picks, choose the best hero for the nest pick. That produced high win rates but boring games: it just picked the overall strongest characters with very little variance. I then tried to make it pick the hero with the highest differential win rate. That is, it would sometimes recommend a hero that would decrease your chance of winning, but increase your chance for that hero relative to other games. This would give the opportunity to play weak heroes in games that suited them best. That was okay, but still not optimal, because it used the win rates from very bad players. I then took my 30M games, and produced an automatic chess-style ranking for all players. I threw away all "weird" games and players only seen a few times, giving me a clean learning set of regular players with a known skill set. I then filtered it to my personal ID number +/- a 10% skill range (still millions of games!) and trained the ML on that, hoping to give optimal recommendations for my own skill set. That was a good try, but it turned out that people in my skill range are terrible at the meta-game of picking heroes. I then threw up my hands and simply had the ML train on the top 10% of players. That was amazing! It was like having the knowledge of the best players distilled into an AI. It recommended some amazing combos, and generally stopped recommending heroes that are strong in the mid-tier "pub" games but weak against skilled opponents. My skill went up, and I slowly climbed the ranks to about the top 20% or so. Fun times, fun times...
- stanford_labrat 5y agoThere is demand for this sort of work in the League of Legends space. Could be of interest for you!
- jiggawatts 5y agoI don't fraternise with those filthy LoL players! /s On a more serious note, I'm sure something like this exists already. I wasn't even the first one to write a Dota picker, I got the idea from someone else's tool. I even saw one that could analyse the display and recognise the hero images to enter the existing picks automatically! Even my little utility merely scratched the surface. It didn't handle the first few picks well, because the choices are not independent. Depending on the game mode chosen, each team can take turns picking. In the fully competitive variant of the game, players can even exclude ("ban") heroes from that individual match. I only optimised mine for picking the last one or two heroes out of the ten players, because I either played solo or with one other friend. We'd pick last based on my tool's recommendations. That alone was hard enough to program! Theoretically, it's a trivial probability problem. Just build a 10-d matrix of win rates, and then picking is trivial. Unfortunately, this is a huge amount of data, and impossible to train well. Reducing it to, say, the 3-d case of ally+ally+oppose and computing that over every combination in the current picks doesn't cover things like the support/lead roles well, so it over-recommends some heroes. Some heroes do well with short games, some with long. Some can reduce the game length, others can drag it out. Some are "greedy", consuming shared team resources, others are frugal. I ended up with a complex heuristic model that included all of these high-level traits in its combined recommendation plan. Fundamentally, there's nowhere near enough data available for a full model, and the labels are super noisy, because even a good combo may only shift the win rate by 10 or 20 percent at best. You might see thousands of samples for some popular combination of strong heroes, but then you'd get a long tail of individually unique games. I found a theoretical mathematical paper that covered this exact training scenario, and it basically concluded that this is an entirely new branch of probability theory that has been essentially unexplored. In other words: "Good luck with that, we couldn't solve it either!" It's certainly a fun problem space to play with. There's tons of data, and you can immediately test the output yourself, personally. There's no end to the depth of it either! You can go to the n-th degree and even start recommending ideal hero builds (i.e.: which items to buy in-game), where each hero should be positioned, etc...