Here's my thrust formula revision proposal.
(It's long. I tried to show all my work here, so if you don't like the assumptions, you should be able be to tweak them p. easily.)
After giving it a bit more thought, neither diminishing returns for thrust based on size nor general diminishing returns based on number of equipment units are inherently unworkable. However, the limit of the benefit as size / equipment approaches infinity shouldn't be 0 for thrust, because that that creates the aforementioned pathological dynamic whereby, for big ships, 1 engine =~ 100000 engines =~ 1 tph.
As a final consideration, if you're already scaling thrust output based on size, raw thrust, and number of engines, then you don't need to penalize size with a second function to provide the desired handicap.
So:
Assume stated parameters; i.e. a rocket sled gets 56 tph and an optimized big ship gets 12.
Assume a big ship is one of size >=1000.
Assume a mean hull size of 110 on a big ship. (Which is probably dumb; see notes.)
Assume raw thrust follows old values, prior to you multiplying them by 100.
Then:
let tph = 1 + (thrustDiminishingReturns(engines) / size) * powerBonus
For the simple version of thrustDiminishingReturns, i.e. the non-monotonic one that's calculable in a single equation:
Consider that the optimal breakdown for a size 4 rocket sled is 4 microfusion reactors, 1 impulse array = 84 rto/size = 56 tph = 55 after the 1 tph freebie
Consider that the optimal breakdown for speed of the big ship is 384 impulse arrays, 12 Novas = ~129 rto/size = 12 tph = 11 after the 1 tph freebie
So we want the efficiency at 384 impulse arrays to be (11/55 *84/129) = 28/215 =~ 0.13023 times the efficiency at 1 impulse array. We do not want substantial decay in efficiency after the 384th. So all we have to do is plug in any regression function that goes from 1 to 0.13023 between 1 and 384, multiply the result by raw thrust, and then multiply that result by a calibration constant between rto and tph as desired afterward. For the calibration constant, since you want 84 rto/size to yield (56-1) tph, use a calibration constant of (56-1)/84 =~ 0.65476.
thrustDiminishingReturns = (regressionFunction(engines.totalNumberOfEngines)) * (engines.totalRTO) * (0.65476)
For regressionFunction, a simple linear regression with a floor of our minimal efficiency of 0.13023 may suffice, although see the notes:
regressionFunction = max(0.13023, -0.86977/383 * x + 383.86977/383)
So, putting it all together:
Code:
tph = 1 + max(0.13023, -0.86977/383 * numberOfEngines + 383.86977/383) * totalRTO * 0.65476) / size * powerBonus
I worked out a few test cases, and the results were pretty reasonable. Take a look at the results, and if you like them, try it out!
Notes:
1. To get the monotonic version, the algorithm supplied earlier in the thread, applied over thrustDiminishingReturns(), should probably work.
2. The way combat works, big ships are going to be forced into more of a tanking role than other ships, so assuming a mean hull size of 110 is probably unrealistic. Something in the 60-80 range may be smarter.
3. Using a bounded linear regression for regressionFunction may lead to some undesirable properties. So, for example, the average big ship getting 7 tph was a design goal; with linear regression, that requires a dedication of (7-1)/(12-1) = 54.45% of your total space to engines and engine power, which seems high. If you don't like that, you can use a more advanced regression of some sort. Let us know if that's the case and you want contributions.
EDIT--said max when I meant min. Thanks, Ninja!