Switching to something like a split queue is typically the 'quick and dirty' approach to dealing with a computation problem of this sort.
If you are going for single-queue, but 'better quality' matches, the design of the problem shifts. You have to come up with a 'weighting' formula for making a 'better match', and you have to add in a factor for building up a 'stock' of mechs in the queue while not making their wait times too long.
(If you match everything as soon as a 12 mechs on each side are available, you basically end up with no MM.)
As an example, every mech entering the queue has a default 'weight' of 100. When mechs form a group for a group drop, you add a weight factor. Say +25 (per mech) for a group of 2-3, +50 for a group of 4-5, +75 for a 6-8 man, +100 for 9-12.
Any tier 5 mech gets -30, tier 4 -15, tier 3 stays same, tier 2 gets +20 per mech, tier 1 +40.
The weight of a group is the sum of its' individual mech weights
You then allow a stock of say 70 mechs to build up in the queue. The appropriate number would depend on the typical population, and could vary by current population/avg wait time, thus incorporating some of the 'throttling' concept from the thread.
Now you start matching, by trying to make fairly close 'weights' on each side. However, to incorporate 'time spent waiting' in the queue, you pull a little trick. For each 5 seconds spent waiting in the queue, you add 3 to the 'weight' of the solos and small (size 2-3 groups) in queue. You subtract 3 (per mech) from the groups of size 6 and up. Size 4-5 groups gain +1.
You sort the queue list by 'average weight in this group' and try to match from the top (heaviest) down.
The net result is that small groups and solos basically only have enough 'weight' to be matched against other small groups and solos. Over time however, the longer they are in the queue the more likely they are to fill a drop against a larger group or a group with higher tiers in it.
Groups with more high tier players (tier 1 being 'highest') are more likely to be matched against other higher tier groups, or a mix of smaller groups that have higher tier players. Smaller groups with lower tier players are more likely to be matched with smaller groups.
The system adapts continuously to match wait times, as within 2 minutes even low tier/solos/small groups will have +72 added per mech, making them equivalent to a newly dropping 8-man. (Values may need some tweaking based on population.)
If needed, you can add in a weight factor for 'mechs not in a group, but from the same unit', 'mechs not in a group but from the same faction', and even a fudge factor based on previous matches won/lost. (To deal with various split-up, or sync dropping, or 'we often play together but are dropping solo' tricks)
In effect this functions somewhat like the 'Battle Value' system from TT, where better/stronger values are more likely to get matched in 'fair fights' and lower tier/smaller values are more likely to get matched against less dangerous opposition.
The primary 'player input' needed for a system like this would be, how much longer are you willing to wait for a 'well balanced' match vs the 'throw any 24 into the meat-grinder' that we currently have? 2 minutes? 3? 5?
Edited by MadBadger, 09 June 2017 - 12:39 PM.