Inspiration
The Behaviour Interactive queue time challenge stood out to us from the beginning, but we became really intrigued by it when it was revealed that we had to generate our own data. We began thinking of a few approaches...
We could randomize the data, use generative AI, but those didn't feel right. We had an idea that we would be training a machine learning model to predict the queue times, which meant that the data it was being trained on had to be meaningful. Thus, we came up with the approach of simulating the process of players queuing up and finding a match to generate the data!
What it does
We first run our simulation based on the latest weeks player data from https://steamcharts.com/app/381210. Given the amount of players for the current hour, we create player objects incrementally with randomized parameters that have different assumed probabilities (ex: 30% players queue in NA-east servers but only 7% on OCE servers). We also generate a party size for each player, if a player queues up in a party of 2, the next player that is created will be grouped with this one. After a player is created, we sort it based on it's region, platform, skill level/mmr and then we try to find a lobby for them.
Once a lobby is full, 1 killer and 4 survivors, we remove that lobby and "start the game". Starting the game calculates the queue time (current time - starting queue time) and then writes that and all the other player data to our csv.
We then run it through an ML model to create predictions for future data based on our simulation.
How we built it
We built the simulation using python and the machine learning model using scikit-learn.
Challenges we ran into
When we started, we thought that creating all the data would be a simple task. However, once we reached the matchmaking portion of the simulation, we realized matchmaking is hard. Even with our simplified version, finding a group of players that are compatible over various parameters is a major challenge.
Accomplishments that we're proud of
Our creative approach. It would have been all too easy to randomly generate some data or run it based on assumptions and mess around with a few ML models, but we decided to take an approach that would yield the most realistic data.
We also stepped outside our comfort zone in choosing to tackle one of the harder challenges. This was certainly no easy task, but it was an incredible learning experience for all of us, and we are glad we stuck with it.
What we learned
No matter how easy something seems, it's important to work incrementally and make sure that everything works as expected Additionally, given this is a simulation based solution, incremental implementation would've allowed us to monitor runtimes at the different stages and not run the final project and realize that it would take a full day to run the simulation. Another lesson we've learned is how much planning effort is required when working on abstract solutions such as this one. it feels like we did more talking/conceptualizing then actual coding. We've developed a new found respect for the person/team that works on matchmaking at Behaviour.
What's next for Queue Time Simulation
-we will continue work on this project on our own time, we've caught the queue time algorithm bug -Restart the simulation code from scratch based on our current knowledge, our implementation has old code that we would want to replace now that we've learned some lessons about along the way -Make the player into lobby sorting more efficient, in our current implementation it's very hacky and stitched up due to time constraint which increases runtime unnecessarily
Log in or sign up for Devpost to join the conversation.