Ha! I actually did go and do it. And it was surprising!
(Devs, if you glance over this and see that I've got my mechanics wrong, kindly point it out.)
I manually put in the stats for Fighter/Bomber/Missile. If desired, one could always import a big ol' dataset.
Test case:
>>> matchup('Standard Fighter', 'Missile Frigate')
Standard Fighter died after 30 seconds.
At the end, Standard Fighter had -9500 HP left, and Missile Frigate had 120400.
The three 1v1 combos track with what you see on the Reference tab in game, disregarding a small value I assume is targeting/tracking time or something, so I'm hoping I plugged the math in right.
How about five bombers vs five frigates?
>>> multi_match(['Bomber']*5, ['Missile Frigate']*5)
---Second 1---
---Second 2---
---Second 3---
---Second 4---
---Second 5---
---Second 6---
---Second 7---
---Second 8---
---Second 9---
---Second 10---
Missile Frigate shot Bomber for 8400, leaving it with 145600/154000.
Missile Frigate shot Bomber for 8400, leaving it with 137200/154000.
Missile Frigate shot Bomber for 8400, leaving it with 128800/154000.
Missile Frigate shot Bomber for 8400, leaving it with 120400/154000.
Missile Frigate shot Bomber for 8400, leaving it with 112000/154000.
---Second 11---
---Second 12---
Bomber shot Missile Frigate for 57300, leaving it with 96700/154000.
Bomber shot Missile Frigate for 57300, leaving it with 39400/154000.
Bomber shot Missile Frigate for 57300, destroying it!
Bomber shot Missile Frigate for 57300, leaving it with 96700/154000.
Bomber shot Missile Frigate for 57300, leaving it with 39400/154000.
---Second 13---
---Second 14---
---Second 15---
---Second 16---
---Second 17---
---Second 18---
---Second 19---
---Second 20---
Missile Frigate shot Bomber for 8400, leaving it with 103600/154000.
Missile Frigate shot Bomber for 8400, leaving it with 95200/154000.
Missile Frigate shot Bomber for 8400, leaving it with 86800/154000.
Missile Frigate shot Bomber for 8400, leaving it with 78400/154000.
---Second 21---
---Second 22---
---Second 23---
---Second 24---
Bomber shot Missile Frigate for 57300, destroying it!
Bomber shot Missile Frigate for 57300, leaving it with 96700/154000.
Bomber shot Missile Frigate for 57300, leaving it with 39400/154000.
Bomber shot Missile Frigate for 57300, destroying it!
Bomber shot Missile Frigate for 57300, leaving it with 96700/154000.
---Second 25---
---Second 26---
---Second 27---
---Second 28---
---Second 29---
---Second 30---
Missile Frigate shot Bomber for 8400, leaving it with 70000/154000.
Missile Frigate shot Bomber for 8400, leaving it with 61600/154000.
---Second 31---
---Second 32---
---Second 33---
---Second 34---
---Second 35---
---Second 36---
Bomber shot Missile Frigate for 57300, leaving it with 39400/154000.
Bomber shot Missile Frigate for 57300, destroying it!
Bomber shot Missile Frigate for 57300, leaving it with 96700/154000.
Bomber shot Missile Frigate for 57300, leaving it with 39400/154000.
Bomber shot Missile Frigate for 57300, destroying it!
Match is complete!
Team A has 5 ships remaining to Team B's 0.
Looks good. Now we get to the interesting bit: 5 bombers+5 fighters vs. 5 frigs. (Do note that these are very basic calculations, not taking into account weapons range or any other kind of impeding factor. Also, ships choose their next target simply by what they can kill or do the most damage to. I have no idea how this optimization works in the game, but I gather it's a bit more complex.)
Anyway:
>>> LOG_LEVEL=1
>>> A=['Bomber','Standard Fighter']*5
>>> B=['Missile Frigate']*5
>>> multi_match(A,B)
Match is complete!
Team A has 7 ships remaining to Team B's 0.
>>> for x in A: print("%s," % x.name),
Bomber, Bomber, Bomber, Bomber, Standard Fighter, Bomber, Standard Fighter,
So we've thrown away three fighters for no perceptible gain. Either way takes about 36 seconds.
But surely this changes as you increase the size of the blob?
>>> multi_match(['Bomber']*50, ['Missile Frigate']*50)
Match is complete!
Team A has 45 ships remaining to Team B's 0.
>>> multi_match(['Bomber']*50+['Standard Fighter']*50, ['Missile Frigate']*50)
Match is complete!
Team A has 72 ships remaining to Team B's 0.
In the first case, A lost 5 of his 50 bombers. In the second case, he only lost 1 bomber, but lost 27 fighters.
>>> ships['Bomber'].cost*5
8000
>>> ships['Standard Fighter'].cost*27
10800
Not a good trade. But there is one mitigating factor:
>>> ships['Bomber'].buildTime*5
58.33333333333333
>>> ships['Standard Fighter'].buildTime*27
45.0
Okay, just one more, for all the marbles:
>>> multi_match(['Bomber']*500, ['Missile Frigate']*500)
Match is complete!
Team A has 444 ships remaining to Team B's 0.
>>> A=['Bomber']*500+['Standard Fighter']*500
>>> multi_match(A,['Missile Frigate']*500)
Match is complete!
Team A has 719 ships remaining to Team B's 0.
>>> A[499].name
'Bomber'
>>> ships['Bomber'].cost*(500-444), ships['Standard Fighter'].cost*(1000-719)
(89600, 112400)
So for the case of 500 of each ship, you lose a tenth of your bombers if you go head to head... and you don't lose a single one (yeah, right) if you add in 500 fighters. However, looks like the cost of the fighter fodder still isn't worth it.
That's all for me. Now I'll sit back and wait for Keith or whomever to point out what's completely unrealistic or simply incorrect with my model.
And for anyone who is interested in slapdash code, it's up at
http://pastebin.com/bJ93W9bi.