Suggestion: Dimnishing returns for strong inputs - introducing nonlinearlity/normalization

Currently all inputs to simulations, situations, voter approval and membership, voter group happiness, events and dilemmas are completely linear.
That it’s simply sum of all influences.

This is nice and simple, but simple addition means its exceedingly to reach bounds - 0 to 1 or -1 to 1 with lots of policies and stuff.
Stuff is unbalanced, if it routinely crashes on floor or ceiling.

Now I suggest to sum all positive influences (X) and negative influences (Y) to two separate variables.
X + Y, if X and Y are between -1 and 1, as 1 is natural bound before normalizing inputs happens - everything is capped in 0 - 1 or -1 - 1.
(X+Y)/Max(X,Y) if X or Y are bigger than 1, pick biggest value as divisor.

This way if sum of all positive or negative factors is greater than 1, then game will start acting nonlinearly in that node - this will prevent it from reaching 0 and 1.
If X or Y is 0, then its always linear (will be 1 or -1). If X = Y, then its linear too (will be 0).
If X and Y is <1, then it acts as normal.
In case of division by 0: Set value to middle (or other default), but most likely there is always at least one influencing thing.
If you really want to set something at min or max value, for example state/private stuff, or banning something, then you could introduce special constant.

X=0, Y=0.5: X-Y=-0.5, acts naturally.
X=2, Y=0; (X-Y)/X=1, normalized itself to upper bound - upward pressure very strong, and no downward pressure (would be capped at 1 anyway).
X=1, Y=1.1: (X-Y)/Y=-0.1/1.1 = -0.0909…, currently its -0.1, weak normalizing effect.
X=4, Y=3: (X-Y)/X=1/4 = 0.25, currently its 1, very strong normalizing effect - despite almost being comparable stuff crashes to ceiling. 0.25 would be much more realistic.
Strongest normalizing effect would happen if one variable is half of other variable - assuming bigger one is >1.
X=1, Y=2: (X-Y)/Y=-1/2=-0.5, currently its -1.

With this diminishing returns effects would naturally appear - caused by input side.
There would be visible point when normalization kicks in, when larger variable reaches 1, if smaller one is pretty small.

Piecewise normalizing function:
X - Y, if X <= 1 and Y <= 1 (can’t be other than 1 or discontinuity would appear)
(X - Y)/Max(X, Y), if X > 1 or Y > 1.
X is sum of all positive influences.
Y is absolute sum of all negative influences.

I think the concept of simply normalizing membership might be better and simpler.

Currently, voter approval can actually exceed 1, making it almost impossible for them to hate you once enough groups are sufficiently satisfied.
By normalizing membership, 100% approval would, instead, be practically impossible to achieve, so people would tend to be much closer to the middle, and elections would end up being much closer.

Alternatively an option would be to allow essentially unlimited self-identification with any given group (this wouldn’t have to be limited to 1), and then normalize that using a soft-max operation. In some ways I think that’s actually more realistic. It’d give much more weight to the strongest thing they self-identify with.

Well if you normalize simulations and situations, then it will be very hard to reach minimum or maximum.
Also this effect is active once sum of positive or negative influences exceeds 1.
Events and dilemmas also won’t have their triggers stuck so easily near upper or lower limit.

Voter happiness also won’t get stuck at 0 or 1 so easily.

That’s fine. That’s, in fact, precisely the goal. You only need 50% to win an election. Making stuff closer to that is a good idea. Right now the challenge, after maybe the first term, is basically non-existent. And even the first term can be won rather easily with like 60-80 percent most of the time.
IRL margins often aren’t nearly that decisive.

All of this would end up forcing moderate gameplay, and concentrated effort would be needed to push something to one of walls :wink:
For example to max out GDP you would have to make sure, that almost no stuff negatively impacting GDP exists.

Nah it’d just mean you need to work harder to shift your society’s makeup such that the Overton window is favourable to your policies.
And there’s plenty of wiggle room. As said, you can win elections with 51%

This is on my list as something to experiment with. it might be something that is scaled in (so for example we take 25% of the effect of this calculation and 75% of current), or something that is applied to some variables (voters, voter groups) but not others (simulation data, situations…)
It willr equire a lot of fiddling to see which works best.

I need to try stuff like this when I’m bright and chirpy one morning, not at 5PM :smiley:
In theory its easy, because its actually all contained in one function in one class. Granted, its a hellish function…but it exists in one place at least :smiley:


Well for simulations that would represent diminishing returns of policies and other stuff.
For situations it would be lingering effects or stabilizing effects.

It isn’t realistic when +200% from positive influences and -100% from negative influences effects give 100%, when 100% represents absolute maximum.
Also scaled normalization would smooth out function change from linear to nonlinear.

BTW I am coding this now (it was easy), and testing. looks very interesting actually. I have high hopes :smiley:

1 Like

Negative and positive influences should be considered separately, so you can divide by bigger sum, that is bigger than 1 (other value than 1 will cause discontinuity - sudden change in value).

I wonder if there is way to subtly notify players, that negative or positive influences are high enough for normalization to activate.
So this will make room feel bigger, especially if smaller sum of influences is above 0.2 pushing stuff to middle.

Also what about those logistic overrides you added for crime and GDP?
Those aren’t working, as still its possible to min/max out those.

Now its seems to be added according to changelog.
What did get this treatment in the end?
If simulation variables are affected by this, then socialist playtrough will be nerfed, since it needs high taxes, and they now reduce GDP harder.
200% - 50% is 150% - maxed GDP
If my original (full force normalization) is used: 150%/2 = 75% - GDP is now lower lowering income from taxes.
Positive push from other simulations and situations also will be reduced causing domino effect of reduced outward pressure (less pushing to walls).
Pushing something above 95% or below 5% should require concentrated effort :smiley:

Pandering to lets say conservatives, capitalists, patriots, religious and wealthy as core voters should mean completely different policies in late game than pandering to liberal, socialists, ethnic minorities, environmentalists and poor as core voters.
Also trying to pander to all voter groups should end up with radical centrism policy makeup - a bit of everything, and probably full yellow list of voter groups.

The logistic thing got changed and was tried, but eventually I scrapped that in favour of the normalization thing which has seemingly improved everything, although I scale its results to 75% (currently) and take 25% of the original result, so 100% and 0% can still be achieved, but is definitely harder.

Also the laffer curve stuff that adds negative GDP to some high tax rates will combine with the partial normalisation to make your extreme socialist approach tougher (by a lot) than it is now.


So simply liberal (balanced between socialist/capitalist) gameplay will be easier than hardline socialist.

Also this complacency/cynicism stuff will be effectively stronger too.

Now I wonder what would incentivize into playing authoritarian/conservative except for challenge.
I think playing with assassination on would work, as this requires authoritarian policies.
Would be there something else?
I think turning Norway into fundamentalist corporate police state would be fun lol.