1 |
The overdrive multiplier is actually a squareroot function; a logarithm would degenerate even faster.
|
1 |
The overdrive multiplier is actually a squareroot function; a logarithm would degenerate even faster.
|
2 |
\n
|
2 |
\n
|
3 |
Specifically, a mex produces metal at its face value multiplied by 1 + sqrt(E) / 4, where E is the amount of overdrive energy allocated to that specific mex.
|
3 |
Specifically, a mex produces metal at its face value multiplied by 1 + sqrt(E) / 4, where E is the amount of overdrive energy allocated to that specific mex.
|
4 |
\n
|
4 |
\n
|
5 |
So your mexes produce a total of +100M/s and there is 100E/s excess energy for overdrive, the amount of metal you get depends on how that is divided.
|
5 |
So your mexes produce a total of +100M/s and there is 100E/s excess energy for overdrive, the amount of metal you get depends on how that is divided.
|
6 |
- If you have four mexes at +25M/s, each mex receives +25E/s for overdrive, gaining a multiplier of 225% taking them to 56.25M/s each, for a combined total of 225M/s.
|
6 |
- If you have four mexes at +25M/s, each mex receives +25E/s for overdrive, gaining a multiplier of 225% taking them to 56.25M/s each, for a combined total of 225M/s.
|
7 |
- If you have fifty mexes at +2M/s, each mex receives +2E/s for overdrive, gaining a multiplier of 135% taking them to 2.7M/s each, for a combined total of 135M/s.
|
7 |
- If you have fifty mexes at +2M/s, each mex receives +2E/s for overdrive, gaining a multiplier of 135% taking them to 2.7M/s each, for a combined total of 135M/s.
|
8 |
\n
|
8 |
\n
|
9 |
In-game, Zero-K does a pretty fair job of estimating how long energy structures will take to pay for themselves. If a smaller energy structure would pay for itself in the time it would take for a larger energy structure to complete, you'd be better of building the smaller energy structure first, since you'd finish the larger structure in the same time, plus you also have the smaller structure.
|
9 |
In-game, Zero-K does a pretty fair job of estimating how long energy structures will take to pay for themselves. If a smaller energy structure would pay for itself in the time it would take for a larger energy structure to complete, you'd be better of building the smaller energy structure first, since you'd finish the larger structure in the same time, plus you also have the smaller structure.
|
10 |
\n
|
10 |
\n
|
11 |
In terms of metal-seconds per energy output, the structures have the following order of efficiency, with some examples for wind generators at various lower bounds (lb) of wind output:
|
11 |
In terms of metal-seconds per energy output, the structures have the following order of efficiency, with some examples for wind generators at various lower bounds (lb) of wind output:
|
12 |
\n
|
12 |
\n
|
13 |
{{{
|
13 |
{{{
|
14 |
(Least efficient)
|
14 |
(Least efficient)
|
15 |
Solar 70m per 2e/s efficiency 35mse^-1
|
15 |
Solar 70m per 2e/s efficiency 35mse^-1
|
16 |
Fusion 1000m per 35e/s efficiency 28.5714...mse^-1
|
16 |
Fusion 1000m per 35e/s efficiency 28.5714...mse^-1
|
|
|
17 |
Tidal 35m per 1.2e/s efficiency 29.166...mse^-1
|
17 |
0.0lb wind 35m per 1.25e/s efficiency 28mse^-1
|
18 |
0.0lb wind 35m per 1.25e/s efficiency 28mse^-1
|
18 |
Tidal 35m per 1.25e/s efficiency 28mse^-1
|
|
|
19 |
0.5lb wind 35m per 1.5e/s efficiency 23.3...mse^-1
|
19 |
0.5lb wind 35m per 1.5e/s efficiency 23.3...mse^-1
|
20 |
Geo 500m per 25e/s efficiency 20mse^-1
|
20 |
Geo 500m per 25e/s efficiency 20mse^-1
|
21 |
1.0lb wind 35m per 1.75e/s efficiency 20mse^-1
|
21 |
1.0lb wind 35m per 1.75e/s efficiency 20mse^-1
|
22 |
Singu 4000m per 225e/s efficiency 17.78...mse^-1
|
22 |
Singu 4000m per 225e/s efficiency 17.78...mse^-1
|
23 |
Supergeo 1500m per 100e/s efficiency 15mse^-1
|
23 |
Supergeo 1500m per 100e/s efficiency 15mse^-1
|
24 |
(Most efficient)
|
24 |
(Most efficient)
|
25 |
}}}
|
25 |
}}}
|
26 |
\n
|
26 |
\n
|
27 |
In short, solars are robust but ineffective, fusions are compact and so more easily defended (especially if you can give them the safety of putting them underwater), singus are extremely effective, and super geothermals are so obscenely effective that even though they're a nice shiny target, they'll almost always pay for themselves even if they've only survived a short amount of time.
|
27 |
In short, solars are robust but ineffective, fusions are compact and so more easily defended (especially if you can give them the safety of putting them underwater), singus are extremely effective, and super geothermals are so obscenely effective that even though they're a nice shiny target, they'll almost always pay for themselves even if they've only survived a short amount of time.
|
28 |
\n
|
28 |
\n
|
29 |
Wind can take you down a pretty deep rabbit hole if you let it. In short, even at ground level wind always beats solars and barely require anything (either in terms of height, or other concerns like finishing faster) to beat basic fusions, assuming that all your stable energy needs are met and you're only concerned with overdrive output. so I'll finish with a meme and some deeper explanations below the cut for those that are really interested.
|
29 |
Wind can take you down a pretty deep rabbit hole if you let it. In short, even at ground level wind always beats solars and barely require anything (either in terms of height, or other concerns like finishing faster) to beat basic fusions, assuming that all your stable energy needs are met and you're only concerned with overdrive output. so I'll finish with a meme and some deeper explanations below the cut for those that are really interested.
|
30 |
\n
|
30 |
\n
|
31 |
[img]https://curio.antihype.space/zk-wind-expanding-brain.png[/img]
|
31 |
[img]https://curio.antihype.space/zk-wind-expanding-brain.png[/img]
|
32 |
\n
|
32 |
\n
|
33 |
Lots of Math below the cut.
|
33 |
Lots of Math below the cut.
|
34 |
[spoiler]The above table is correct for metal seconds per energy, but when thinking about overdrive you ultimately want to be thinking about the overdrive multiplier. Because overdrive has diminishing returns over the squareroot overdrive function, wind is less effective because losing .5e compared to average even if you gain .5e over the average for the same amount of time later is worse than just running at average.
|
34 |
[spoiler]The above table is correct for metal seconds per energy, but when thinking about overdrive you ultimately want to be thinking about the overdrive multiplier. Because overdrive has diminishing returns over the squareroot overdrive function, wind is less effective because losing .5e compared to average even if you gain .5e over the average for the same amount of time later is worse than just running at average.
|
35 |
\n
|
35 |
\n
|
36 |
I've created an interactive desmos chart where you play around with the values of mex distribution and wind lower bound values to see their efficiency relative to solars, fusions, and singus: https://www.desmos.com/calculator/vssd9skupt
|
36 |
I've created an interactive desmos chart where you play around with the values of mex distribution and wind lower bound values to see their efficiency relative to solars, fusions, and singus: https://www.desmos.com/calculator/vssd9skupt
|
37 |
\n
|
37 |
\n
|
38 |
So you can see that while ground level wind still produces more energy than fusions on average, they only start producing more overdrive than fusions on average once they reach a lower bound of 0.2E/s, since the diminishing returns of overdrive makes fusion stability better, [u][b]even if all of your stable energy needs are already met[/b][/u]! You still probably don't want to be going mostly wind until you reach a lower bound of about 0.4E/s, though.
|
38 |
So you can see that while ground level wind still produces more energy than fusions on average, they only start producing more overdrive than fusions on average once they reach a lower bound of 0.2E/s, since the diminishing returns of overdrive makes fusion stability better, [u][b]even if all of your stable energy needs are already met[/b][/u]! You still probably don't want to be going mostly wind until you reach a lower bound of about 0.4E/s, though.
|
39 |
\n
|
39 |
\n
|
40 |
The model that assumes linear wind distribution is very close to the true values of wind efficiency, but slightly underestimates the effect as the wind cycle isn't a flat linear distribution - every ten seconds out of 32, wind is moving smoothly between two random points, which means wind spends more time closer to the average than a purely linear distribution would model.
|
40 |
The model that assumes linear wind distribution is very close to the true values of wind efficiency, but slightly underestimates the effect as the wind cycle isn't a flat linear distribution - every ten seconds out of 32, wind is moving smoothly between two random points, which means wind spends more time closer to the average than a purely linear distribution would model.
|
41 |
\n
|
41 |
\n
|
42 |
The following formula will fully model wind overdrive efficiency over the wind periodic cycle, however this is about the point that desmos starts sobbing uncontrollably and asking what it ever did to deserve this, as it fails to render and only comes back to render the other functions after about a minute of busy processing that appears to involve webworkers in ways that I can't be bothered tracing:
|
42 |
The following formula will fully model wind overdrive efficiency over the wind periodic cycle, however this is about the point that desmos starts sobbing uncontrollably and asking what it ever did to deserve this, as it fails to render and only comes back to render the other functions after about a minute of busy processing that appears to involve webworkers in ways that I can't be bothered tracing:
|
43 |
\n
|
43 |
\n
|
44 |
{{{
|
44 |
{{{
|
45 |
y=1+\frac{\left(\int_{l}^{2.5}\sqrt{\frac{\left(p\cdot x\right)}{35\cdot16n}}dp\right)\cdot\frac{22}{32}+\left(\int_{l}^{2.5}\left(\frac{\int_{l}^{2.5}\left(\frac{\int_{s}^{f}\left(\sqrt{\frac{\left(p\cdot x\right)}{35\cdot16n}}\right)dp}{f-s}\right)df}{2.5-l}\right)ds\right)\cdot\frac{10}{32}}{2.5-l}
|
45 |
y=1+\frac{\left(\int_{l}^{2.5}\sqrt{\frac{\left(p\cdot x\right)}{35\cdot16n}}dp\right)\cdot\frac{22}{32}+\left(\int_{l}^{2.5}\left(\frac{\int_{l}^{2.5}\left(\frac{\int_{s}^{f}\left(\sqrt{\frac{\left(p\cdot x\right)}{35\cdot16n}}\right)dp}{f-s}\right)df}{2.5-l}\right)ds\right)\cdot\frac{10}{32}}{2.5-l}
|
46 |
}}}
|
46 |
}}}
|
47 |
\n
|
47 |
\n
|
48 |
Not to be defeated, you can always throw numpy+scipy at the problem to get an idea of how much the divergence is:
|
48 |
Not to be defeated, you can always throw numpy+scipy at the problem to get an idea of how much the divergence is:
|
49 |
\n
|
49 |
\n
|
50 |
{{{
|
50 |
{{{
|
51 |
import numpy as np
|
51 |
import numpy as np
|
52 |
from scipy.integrate import quad
|
52 |
from scipy.integrate import quad
|
53 |
\n
|
53 |
\n
|
54 |
\n
|
54 |
\n
|
55 |
def linear_model(n,l,x):
|
55 |
def linear_model(n,l,x):
|
56 |
return 1 + quad(lambda p:np.sqrt(p*x/(35*16*n)), l, 2.5)[0] / (2.5 - l)
|
56 |
return 1 + quad(lambda p:np.sqrt(p*x/(35*16*n)), l, 2.5)[0] / (2.5 - l)
|
57 |
\n
|
57 |
\n
|
58 |
def full_model(n,l,x):
|
58 |
def full_model(n,l,x):
|
59 |
return 1 + (
|
59 |
return 1 + (
|
60 |
quad(
|
60 |
quad(
|
61 |
lambda p: np.sqrt(p*x/(35*16*n)),
|
61 |
lambda p: np.sqrt(p*x/(35*16*n)),
|
62 |
l,
|
62 |
l,
|
63 |
2.5
|
63 |
2.5
|
64 |
)[0] * 22/32
|
64 |
)[0] * 22/32
|
65 |
+
|
65 |
+
|
66 |
quad(
|
66 |
quad(
|
67 |
lambda s:
|
67 |
lambda s:
|
68 |
quad(
|
68 |
quad(
|
69 |
lambda f:
|
69 |
lambda f:
|
70 |
quad(
|
70 |
quad(
|
71 |
lambda p: np.sqrt(p*x/(35*16*n)),
|
71 |
lambda p: np.sqrt(p*x/(35*16*n)),
|
72 |
s,
|
72 |
s,
|
73 |
f
|
73 |
f
|
74 |
)[0] / (f - s) if f != s else 0,
|
74 |
)[0] / (f - s) if f != s else 0,
|
75 |
l,
|
75 |
l,
|
76 |
2.5
|
76 |
2.5
|
77 |
)[0] / (2.5 - l),
|
77 |
)[0] / (2.5 - l),
|
78 |
l,
|
78 |
l,
|
79 |
2.5
|
79 |
2.5
|
80 |
)[0] * 10/32
|
80 |
)[0] * 10/32
|
81 |
) / (2.5 - l)
|
81 |
) / (2.5 - l)
|
82 |
}}}
|
82 |
}}}
|
83 |
\n
|
83 |
\n
|
84 |
...and get an idea of how much this diverges by:
|
84 |
...and get an idea of how much this diverges by:
|
85 |
\n
|
85 |
\n
|
86 |
{{{
|
86 |
{{{
|
87 |
>>> [full_model(2,0.02,x) - linear_model(2,0.02,x) for x in range(0,10)]
|
87 |
>>> [full_model(2,0.02,x) - linear_model(2,0.02,x) for x in range(0,10)]
|
88 |
[0.0, 0.0002224839773998788, 0.0003146398586824084, 0.00038535355328073173, 0.00044496795545656553, 0.0004974892981144396, 0.0005449722214081465, 0.0005886372758061587, 0.0006292797174807241, 0.0006674519332559026]
|
88 |
[0.0, 0.0002224839773998788, 0.0003146398586824084, 0.00038535355328073173, 0.00044496795545656553, 0.0004974892981144396, 0.0005449722214081465, 0.0005886372758061587, 0.0006292797174807241, 0.0006674519332559026]
|
89 |
>>> [full_model(2,0.02,x) - linear_model(2,0.02,x) for x in range(10,20)]
|
89 |
>>> [full_model(2,0.02,x) - linear_model(2,0.02,x) for x in range(10,20)]
|
90 |
[0.0007035561125969814, 0.0007378958760879684, 0.000770707106698687, 0.0008021773897883833, 0.0008324588188410864, 0.0008616767406925963, 0.0008899359110712268, 0.0009173249403600092, 0.0009439195763258912, 0.0009697851756813591]
|
90 |
[0.0007035561125969814, 0.0007378958760879684, 0.000770707106698687, 0.0008021773897883833, 0.0008324588188410864, 0.0008616767406925963, 0.0008899359110712268, 0.0009173249403600092, 0.0009439195763258912, 0.0009697851756813591]
|
91 |
}}}
|
91 |
}}}
|
92 |
\n
|
92 |
\n
|
93 |
ie. Not that much. You really are fine to just use the linear model for your calculations for all practical cases.
|
93 |
ie. Not that much. You really are fine to just use the linear model for your calculations for all practical cases.
|
94 |
\n
|
94 |
\n
|
95 |
[/spoiler]
|
95 |
[/spoiler]
|