Apologizes if someone has already posted an analysis of this, but as a fun math problem, I decided to figure out the optimum ratio of production districts to support districts myself. Feel free to call out any mistakes or incorrect assumptions on my part.
My assumption is that the output of a given resource is given by:
(JD ND + JS SD + FJ) SD SM PJ
Constraint
ND + SD = TD
Where:
PJ = Production Per Job
JD = Jobs Per District (City District for specialist resource, Resource District for worker resources)
JS = Jobs Per Support District (meaning either a City District for worker resources, or a Resource District for specialist resources, assuming you've built the appropriate district specialization)
ND = Districts
FJ = Fixed Jobs (i.e. not from districts but other sources like buildings)
SD = Support Districts
TD = Total Districts
SM = Support District Multiplier
So
(JD (TD - SD) + JS SD + FJ) SD SM PJ
Expanding
(JD TD SD - JD SD^2 + JS SD^2 + FJ SD) SM PJ
((JD TD + FJ) SD - (JD - JS) SD^2) SM PJ
Now to find the max (or min) of a function you take the derivative and see where it's zero:
(JD TD + FJ - 2 (JD - JS) ND) SM PJ = 0
Which gives us
ND = (JD TD - FJ) / (2 (JD - JS))
We also need to check the second derivative to make sure it's actual a max and not a min or inflection point.
-2 (JD - JS)
Which will be negative as long as JD is greater than JS (should always be the case, otherwise there would never be any reason to build a regular district) verifying that this is a maximum value.
In the special case of no fixed jobs and the support district not providing any jobs, it just reduces to the solution familiar to Balatro players playing on the Plasma desk, a 1:1 ratio of districts to support districts.
ND = TD / 2 = SD
Also in the case that FJ > JD TD you should only build support districts, but presumably that would be very rare, like trying to maximize resource output on a planet that's not suited for production of that resource.
Of course this assumes you have the population to support the optimal number of districts, if not obviously you build as many as you can fill then make the rest support districts. And this only assumes you trying to maximize one type of output.
My assumption is that the output of a given resource is given by:
(JD ND + JS SD + FJ) SD SM PJ
Constraint
ND + SD = TD
Where:
PJ = Production Per Job
JD = Jobs Per District (City District for specialist resource, Resource District for worker resources)
JS = Jobs Per Support District (meaning either a City District for worker resources, or a Resource District for specialist resources, assuming you've built the appropriate district specialization)
ND = Districts
FJ = Fixed Jobs (i.e. not from districts but other sources like buildings)
SD = Support Districts
TD = Total Districts
SM = Support District Multiplier
So
(JD (TD - SD) + JS SD + FJ) SD SM PJ
Expanding
(JD TD SD - JD SD^2 + JS SD^2 + FJ SD) SM PJ
((JD TD + FJ) SD - (JD - JS) SD^2) SM PJ
Now to find the max (or min) of a function you take the derivative and see where it's zero:
(JD TD + FJ - 2 (JD - JS) ND) SM PJ = 0
Which gives us
ND = (JD TD - FJ) / (2 (JD - JS))
We also need to check the second derivative to make sure it's actual a max and not a min or inflection point.
-2 (JD - JS)
Which will be negative as long as JD is greater than JS (should always be the case, otherwise there would never be any reason to build a regular district) verifying that this is a maximum value.
In the special case of no fixed jobs and the support district not providing any jobs, it just reduces to the solution familiar to Balatro players playing on the Plasma desk, a 1:1 ratio of districts to support districts.
ND = TD / 2 = SD
Also in the case that FJ > JD TD you should only build support districts, but presumably that would be very rare, like trying to maximize resource output on a planet that's not suited for production of that resource.
Of course this assumes you have the population to support the optimal number of districts, if not obviously you build as many as you can fill then make the rest support districts. And this only assumes you trying to maximize one type of output.
Last edited: