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

LilJamJam

·

Follow

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
Elissa Victoria Leaked
Aanmelden en apps starten vanuit de Mijn apps-portal
Acts 16 Nkjv
Steve Strange - From Punk To New Romantic
No Credit Check Apartments In West Palm Beach Fl
Find The Eagle Hunter High To The East
2016 Hyundai Sonata Price, Value, Depreciation & Reviews | Kelley Blue Book
MindWare : Customer Reviews : Hocus Pocus Magic Show Kit
Chile Crunch Original
2016 Ford Fusion Belt Diagram
Tcu Jaggaer
Nissan Rogue Tire Size
Echat Fr Review Pc Retailer In Qatar Prestige Pc Providers – Alpha Marine Group
Salem Oregon Costco Gas Prices
Jalapeno Grill Ponca City Menu
Moving Sales Craigslist
Team C Lakewood
Is Windbound Multiplayer
Amazing Lash Studio Casa Linda
Pocono Recird Obits
Pirates Of The Caribbean 1 123Movies
Wisconsin Volleyball Team Boobs Uncensored
What Are The Symptoms Of A Bad Solenoid Pack E4od?
Disputes over ESPN, Disney and DirecTV go to the heart of TV's existential problems
Local Collector Buying Old Motorcycles Z1 KZ900 KZ 900 KZ1000 Kawasaki - wanted - by dealer - sale - craigslist
Lbrands Login Aces
Meijer Deli Trays Brochure
Expression Home XP-452 | Grand public | Imprimantes jet d'encre | Imprimantes | Produits | Epson France
Stockton (California) – Travel guide at Wikivoyage
A Man Called Otto Showtimes Near Carolina Mall Cinema
30+ useful Dutch apps for new expats in the Netherlands
What is Software Defined Networking (SDN)? - GeeksforGeeks
Best Laundry Mat Near Me
Desirulez.tv
Black Adam Showtimes Near Amc Deptford 8
Jennifer Reimold Ex Husband Scott Porter
Mistress Elizabeth Nyc
How To Paint Dinos In Ark
Doordash Promo Code Generator
How to Get a Better Signal on Your iPhone or Android Smartphone
The Angel Next Door Spoils Me Rotten Gogoanime
Nami Op.gg
Alpha Labs Male Enhancement – Complete Reviews And Guide
Wilson Tire And Auto Service Gambrills Photos
Enr 2100
How To Get To Ultra Space Pixelmon
Server Jobs Near
Plumfund Reviews
Haunted Mansion Showtimes Near Millstone 14
53 Atms Near Me
99 Fishing Guide
Read Love in Orbit - Chapter 2 - Page 974 | MangaBuddy
Latest Posts
Article information

Author: Greg O'Connell

Last Updated:

Views: 5563

Rating: 4.1 / 5 (42 voted)

Reviews: 89% of readers found this page helpful

Author information

Name: Greg O'Connell

Birthday: 1992-01-10

Address: Suite 517 2436 Jefferey Pass, Shanitaside, UT 27519

Phone: +2614651609714

Job: Education Developer

Hobby: Cooking, Gambling, Pottery, Shooting, Baseball, Singing, Snowboarding

Introduction: My name is Greg O'Connell, I am a delightful, colorful, talented, kind, lively, modern, tender person who loves writing and wants to share my knowledge and understanding with you.