A silly side project to see how to best make Fire Emblem: Three Houses characters like each other faster.
Given a large party of playable characters, and a limit on the number that can be brought along at any given time, can we pick the right subset of participants for each battle to reach the maximum potential of each character pairing in as few battles as possible?
- "Support Levels" are a sequentially ranked grade of the strength of the relationship between any two characters. The levels go C - B - A - S. (There are sometimes "+" grades at the various levels for special circumstances, but those will be ignored and/or simplified as much as possible.) Each given pairing of characters has a maximum possible support level: some can reach level S with each other, while others will only ever rise to B, no matter what.
- Support levels and level-ups are symmetrical: Byleth and Alois is the same as Alois and Byleth.
- Although there are 37 total playable characters in the base game (ignoring DLC characters), at most 32 are available in any given run. The player must choose between Male and Female versions of the protagonist, and depending on their choices certain other characters will not be available to recruit. In the base case here, we will use a campaign with a Female Byleth (protagonist) on the "Golden Deer" route.
- No matter how big the overall party grows, at most 10 characters can be selected to participate in any given battle.
- Support levels cannot increase by more than 1 level for any given battle.
- Fighting alongside each other in battle is the only way for characters to increase their support level with each other. Other approaches in the game exist, but these will be ignored for the moment.
- While you cannot get more than 1 support level up per battle, we will assume that the player positions characters perfectly in each battle, so that every battle together always results in a support level up if one is available.
- "+" versions of levels are purely terminal. E.g. A+ is one level higher than A, in lieu of S being a possible level for that pairing. They are otherwise equivalent for our analysis.
supports_network_solver.R: Iniital R script to load data, clean and transform it, and ultimately perform the optimization algorithm for a given party set.
supports_sheet.csv: A spreadsheet representation of the highest possible support level availabe to each character pairing. Sourced from this Google Sheet. Credit to Reddit user G-Dragonite for creating this!