Hi, following this:
And since I had some spare time, I attempted to create a new formula for the decay. 3 considerations:
- I wanted something that would decay faster with higher numbers, and slower for lower amounts. Something exponential with the excess amount.
- Of course, "high" number is relative. So the formula shouldn't take as argument the absolute resources stored, but rather the excess ratio = amount you have/amount you can store (eg if you have 9M over 1M storage, you have an excess of 9).
- Finally, our formula can't decay according to time. We can't just have something looking like Ae^(-Bt), because we don't have time memory of the previous amount.
Here is what I came up with:
v(n+1)=v(n)*exp(-v(n)/90000), v(n+1)=amount after one iteration of decay
Of course, since this tends towards zero, you need to cap it so it doesn't go below 1.
![](https://cdn.discordapp.com/attachments/592302956532203565/1032285845966819328/unknown.png)
This is what your resource curve will look like if it doesn't do anything other than decay, and if you have an excess ratio of 9 (9M over 1M storage).
The decay will stop after 44 minutes.
![](https://cdn.discordapp.com/attachments/592302956532203565/1032285911548952687/unknown.png)
Excess ratio of 1.5, decay in 15 minutes.
44 minutes may still be too much, you just have to play with the C=90000 constant.
Code:
import matplotlib.pyplot as plt
import math
import numpy as np
def v(u):
return u*math.exp(-u/90000)
points = 1800*30
x = np.linspace(0, points+1, points)
y = []
y.append(1.5) # we have 10 units over 1 unit storage (unit=million/billion/trillion)
found_y = False
for k in range(1, len(x)):
y.append(v(y[k-1]))
if y[k]<1:
y[k] = 1
if not found_y:
found_y = k
print('Last value', y[-1], 'reached after', round(found_y/30/60,1), 'minutes')
plt.plot(x, y)
plt.ylabel('excess')
plt.xlabel('ticks (30 per second) (0h30 here)')
plt.show()
Which you can execute here
(yes, I had fun making this)