Recreating Mudae’s Database (and how I optimised disable lists) (2024)

6 min read

·

Jun 27, 2022

--

Mudae is a bot within Discord which mainly focuses on games and anime. The biggest feature of Mudae is its waifuroulette game, where users can claim characters from a range of anime, manga, comics or games. To say that Mudae is popular is an understatement, over 2.3 million servers have the bot as of September 2021 and it routinely places strain on Discord’s API services.

When a player claims a character, they become part of the player’s harem and cannot be claimed by anyone else in the server. Naturally, this leads to some stiff competition for the more popular characters. The gacha game also comes with its own currency system, where players can earn virtual currency to use for power ups or trading. There exists dozens of other commands which cover leaderboards, lookups and customisation.

When a user looks up a specific character, they can find several fields of information about the character, including the series, gender, roulette, kakera value, claim rank, likes rank and possible aliases. This is true for every character, but there is no easy way to search up every character or every series. Mudae’s database is not public, so there is no way to get all of the information available. Or is there?

Recreating Mudae’s Database (and how I optimised disable lists) (2)

That’s where I come in. Long story short, I attempted to recreate Mudae’s database. I have information on characters, series, bundles and the relationships between them. Back in 2020, I initially started this with the top 1000 characters using $top and then storing the results. I made gradual improvements and methods over the past year, so now I have information on almost every facet of Mudae’s database.

The database consists of several tables. The character table contains the information of all 80,789 characters in the bot. Each character comes with its own character ID, along with other fields like their name, series, gender, roll type, claim and like ranks, and their kakera value.

Recreating Mudae’s Database (and how I optimised disable lists) (3)

The list of series is covered in a separate table. Each series also comes with its own ID, and covers their character counts in all roulettes. There are over 13,000 series in this table. There is also a separate table for bundles, also with their own IDs. All the counts for each roulette are also shown as well. A separate table covers the connections between bundles and series in a many-to-many relationship. Over 50,000 records exist in this table.

Recreating Mudae’s Database (and how I optimised disable lists) (4)
Recreating Mudae’s Database (and how I optimised disable lists) (5)
Recreating Mudae’s Database (and how I optimised disable lists) (6)

I’ve implemented some extra features in this database, one of which is server tracking. It’s possible to track the status of every character in a particular server, such as their claim status, whether they belong to you and how many keys (or soulkeys) they have. I can also track all of my current soulmates in the same table. This makes it possible to track unclaimed and unsouled characters, and keep track of all characters across any server I’d like.

Recreating Mudae’s Database (and how I optimised disable lists) (7)

Another feature is the search function. You can search for any character and have their information displayed instantly as well as display any close matches. You can also search for series and bundles, which will contain the information of every character in the series or bundle. I can also search for multiple series and characters at once, allowing for fast viewing and editing.

Recreating Mudae’s Database (and how I optimised disable lists) (8)
Recreating Mudae’s Database (and how I optimised disable lists) (9)

But the most powerful use of this database is for disable lists. By using all three tables and some queries, I’m able to disable any bundle and series that I want, and display the updated roulette numbers of all series and bundles without the disabled series. This makes it possible to disable lists to be optimised.

Now this table shows all bundles and how much $wa’s are in them. Let’s say I want to disable the Western and IRL bundles. After inputting them in the exclusion list, all Western and IRL series have been disabled, and the $wa’s have been updated for all the bundles. This enables me to select the best bundles while accounting for overlap, and as a result of this process I ended up making better disable lists than anyone else. For a while I wondered whether this process could be automated so I could find the optimal disable list.

Recreating Mudae’s Database (and how I optimised disable lists) (10)

Earlier this year I came across a GitHub repository by Stephen Huan, where he dives into the statistical models behind Mudae. It’s a fantastic write-up if you’re not daunted by the maths behind it, but my focus was on his section about producing optimal disable lists.

The disable list problem is analogous to the 0/1 knapsack problem encountered in optimisation. By reducing the disable list problem into a integer linear programming (ILP) one, Huan was able to utilise ILP solvers that could solve the corresponding knapsack problem and therefore produce an optimised disable list. He also provided his own Python code to demonstrate this concept with a version of Mudae’s database (albeit a very old version).

Recreating Mudae’s Database (and how I optimised disable lists) (11)

So all I had to do was to repurpose the code so that it could work for my own database. It took a while to accomplish; I had to both change my database into a form that the code could recognise and change the code itself to also compensate for the new data and constraints.

The results were startling. Now I’m able to create optimal disable lists for any roulette, with any overlap size and any amount of slots. What used to take hours to learn and craft disable lists now only takes a few minutes. It only works as long as my database remains updated, however. So new updates and bundles could shake things up.

In the below example I made the program output an optimal 25k disable list for $wa, with 50 slots and with Western and IRL completely disabled via toggles.

Recreating Mudae’s Database (and how I optimised disable lists) (12)
Recreating Mudae’s Database (and how I optimised disable lists) (13)

Firstly, this database (along with the Python program) will NOT be made public. The bot developer Saya has allowed this project to stay up as long as it’s for a personal purpose. This article is just a demo to show that this database exists. A big thanks to Saya for advising me and for the continued development of the bot.

The data used in the database does not automatically update, it must be manually updated by me every time. I usually do this once a month because it’s a tedious process that can last over a day.

There may be some instances where I cannot show all of my findings due to the potential of sharing information that Saya doesn’t want to be public. Exceptions can be made on a case-by-case basis, however sharing general statistics and calculations are allowed.

Are there any features I could add to this database? Are there any stats or information that you’d like to see? You can reach me in Discord in the MudaScience server. Any interesting updates may be covered in a follow-up post, or in the MudaScience server. You can also support Mudae by subscribing to their premium service via Patreon.

Recreating Mudae’s Database (and how I optimised disable lists) (2024)
Top Articles
Anthology - Austin City Limits
How Jackson Browne proved he's a living legend at 'Austin City Limits' taping
LOST JEEPS • View forum
Ups Notary Store Near Me
Happel Real Estate
Mw2 Other Apps Vram
Wym Urban Dictionary
Void Client Vrchat
Rs3 Bring Leela To The Tomb
Jak zgłosić awarię i brak energii elektrycznej w Twoim mieszkaniu lub domu? - ENERGA-OPERATOR SA
Best Fantasy Basketball Team
Weather Radar For East Coast
Things to do in Wichita Falls this weekend Sept. 12-15
Stepmom Full Video Hd
Does the MLB allow gambling? Here's what to know about League Rule 21
Pritzker Sdn 2023
How Much Is 7 Million Pesos
SpaceX Polaris Dawn spacewalk - latest: 'It's gorgeous' - billionaire Jared Isaacman's awed reaction as he steps out of capsule on historic spacewalk
Exploring the Northern Michigan Craigslist: Your Gateway to Community and Bargains - Derby Telegraph
Cocaine Bear Showtimes Near Amc Braintree 10
Ups Store Pineville La
Phumikhmer 2022
Craigslist Battle Ground Washington
Downloadhub Downloadhub
Devon Lannigan Obituary
Devotion Showtimes Near Regency Towngate 8
Think Up Elar Level 5 Answer Key Pdf
Ryan Conner Telegram
Baby | Voeding | Voeding het eerste jaar; borstvoeding
Abby's Caribbean Cafe
Gabrielle Enright Weight Loss
Wall Street Journal Currency Exchange Rates Historical
The Bold And The Beautiful Soap Hub
Southeast Ia Craigslist
Preventice Learnworlds
Hanging Hyena 4X4
Woude's Bay Bar Photos
10-5 Study Guide And Intervention Tangents Answer Key
Dpsmypepsico
Deborah Clearbranch Psychologist Georgia
Planet Zoo Obstructed
O'reilly's Eastman Georgia
Urgent Care Pelham Nh
Palmetto Pediatrics Westside
Easy Pickled Coleslaw (with Canning Video)
Minecraft Skin Tynker
Six Broadway Wiki
Braveheart Parents Guide
J&J News Bluefield Wv
Craigslist Cars By Owner
Chase Bank Time Hours
Academic calendar: year cycle and holidays | University of Twente | Service Portal
Latest Posts
Article information

Author: Kieth Sipes

Last Updated:

Views: 6410

Rating: 4.7 / 5 (47 voted)

Reviews: 86% of readers found this page helpful

Author information

Name: Kieth Sipes

Birthday: 2001-04-14

Address: Suite 492 62479 Champlin Loop, South Catrice, MS 57271

Phone: +9663362133320

Job: District Sales Analyst

Hobby: Digital arts, Dance, Ghost hunting, Worldbuilding, Kayaking, Table tennis, 3D printing

Introduction: My name is Kieth Sipes, I am a zany, rich, courageous, powerful, faithful, jolly, excited person who loves writing and wants to share my knowledge and understanding with you.