Stellaris - Planet approval rating not weighting pops' approval using political power

  • We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.

asaz989

Sergeant
51 Badges
Oct 18, 2008
90
13
  • Crusader Kings II: Charlemagne
  • Stellaris - Path to Destruction bundle
  • Crusader Kings II
  • Hearts of Iron III
  • Crusader Kings II: Sword of Islam
  • Crusader Kings II: Sunset Invasion
  • Crusader Kings II: Sons of Abraham
  • Crusader Kings II: The Republic
  • Crusader Kings II: Rajas of India
  • Crusader Kings II: The Old Gods
  • Crusader Kings II: Legacy of Rome
  • Hearts of Iron IV: No Step Back
  • Crusader Kings II: Jade Dragon
  • Hearts of Iron IV: Expansion Pass
  • Stellaris: Synthetic Dawn
  • Cities: Skylines - Parklife
  • Hearts of Iron IV: Expansion Pass
  • Stellaris: Distant Stars
  • Shadowrun Returns
  • Shadowrun: Dragonfall
  • Shadowrun: Hong Kong
  • Surviving Mars: First Colony Edition
  • Hearts of Iron IV: Expansion Pass
  • Stellaris: Ancient Relics
  • BATTLETECH: Season pass
  • BATTLETECH: Heavy Metal
  • Hearts of Iron IV: La Resistance
  • Stellaris: Federations
  • Crusader Kings III
  • Battle for Bosporus
  • Stellaris
  • Majesty 2
  • Teleglitch: Die More Edition
  • 500k Club
  • Crusader Kings II: Way of Life
  • Pillars of Eternity
  • Crusader Kings II: Horse Lords
  • Cities: Skylines - After Dark
  • Crusader Kings II: Conclave
  • Hearts of Iron IV: Death or Dishonor
  • Hearts of Iron IV Sign-up
  • Hearts of Iron IV: Cadet
  • Crusader Kings II: Reapers Due
  • Tyranny: Archon Edition
  • Stellaris: Leviathans Story Pack
  • Hearts of Iron IV: Expansion Pass
  • Steel Division: Normandy 44
  • BATTLETECH
  • Surviving Mars
  • BATTLETECH: Flashpoint
Description
Planet approval rating not weighting pops' approval using political power

Game Version
[2.2.1/stellaris_test][6eaf]

What version do you use?

Steam

What expansions do you have installed?
Synthetic Dawn,
Utopia,
Leviathans Story Pack,

Do you have mods enabled?
No

Please explain your issue is in as much detail as possible.
Or at least not correctly.

Transcribed from the attached screenshot:

  • Rulers have 77% of political power and have a 72% happiness
  • Workers have 7% of the political power and have a 7% happiness
  • Slaves have 15% of the political power and have 0% happiness

According to my math, assuming a simple weighted average that should come out to ~60% total approval:

Code:
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 72 * 0.77 + 71 * .07 + 0 * 0.15
60.41

Instead, I'm getting 27%. Uf.

Steps to reproduce the issue.
Be really mean to your underclasses, and have a system that gives them very little power. That should get you a nice obvious divide between happy rulers with lots of power and unhappy slaves with very little power, and according to the tooltips should result in a planet approval rating (and hence stability) that tracks more closely with the opinion of the ruling elite than that of the oppressed masses.

Upload Attachment
 

Attachments

  • upload_2018-12-14_6-47-8.png
    upload_2018-12-14_6-47-8.png
    86,1 KB · Views: 5
  • 2287.10.03.sav
    1,4 MB · Views: 1
Upvote 0

asaz989

Sergeant
51 Badges
Oct 18, 2008
90
13
  • Crusader Kings II: Charlemagne
  • Stellaris - Path to Destruction bundle
  • Crusader Kings II
  • Hearts of Iron III
  • Crusader Kings II: Sword of Islam
  • Crusader Kings II: Sunset Invasion
  • Crusader Kings II: Sons of Abraham
  • Crusader Kings II: The Republic
  • Crusader Kings II: Rajas of India
  • Crusader Kings II: The Old Gods
  • Crusader Kings II: Legacy of Rome
  • Hearts of Iron IV: No Step Back
  • Crusader Kings II: Jade Dragon
  • Hearts of Iron IV: Expansion Pass
  • Stellaris: Synthetic Dawn
  • Cities: Skylines - Parklife
  • Hearts of Iron IV: Expansion Pass
  • Stellaris: Distant Stars
  • Shadowrun Returns
  • Shadowrun: Dragonfall
  • Shadowrun: Hong Kong
  • Surviving Mars: First Colony Edition
  • Hearts of Iron IV: Expansion Pass
  • Stellaris: Ancient Relics
  • BATTLETECH: Season pass
  • BATTLETECH: Heavy Metal
  • Hearts of Iron IV: La Resistance
  • Stellaris: Federations
  • Crusader Kings III
  • Battle for Bosporus
  • Stellaris
  • Majesty 2
  • Teleglitch: Die More Edition
  • 500k Club
  • Crusader Kings II: Way of Life
  • Pillars of Eternity
  • Crusader Kings II: Horse Lords
  • Cities: Skylines - After Dark
  • Crusader Kings II: Conclave
  • Hearts of Iron IV: Death or Dishonor
  • Hearts of Iron IV Sign-up
  • Hearts of Iron IV: Cadet
  • Crusader Kings II: Reapers Due
  • Tyranny: Archon Edition
  • Stellaris: Leviathans Story Pack
  • Hearts of Iron IV: Expansion Pass
  • Steel Division: Normandy 44
  • BATTLETECH
  • Surviving Mars
  • BATTLETECH: Flashpoint
To test this, I demolished a Slave Processing Facility. The approval tooltip correctly indicated that my slaves' political power rose, but the total approval rating did not move down as would be expected if political power were in any way used to weight the happiness numbers.

upload_2018-12-14_22-33-29.png
 

Alex in Tokyo

Corporal
67 Badges
Nov 29, 2016
44
44
  • Stellaris: Synthetic Dawn
  • Imperator: Rome
  • Surviving Mars: Digital Deluxe Edition
  • Hearts of Iron IV: Together for Victory
  • Crusader Kings II: Monks and Mystics
  • Cities: Skylines - Mass Transit
  • BATTLETECH
  • Surviving Mars
  • Hearts of Iron IV: Death or Dishonor
  • Cities: Skylines - Green Cities
  • Crusader Kings II: Jade Dragon
  • Hearts of Iron IV: Expansion Pass
  • Stellaris: Humanoids Species Pack
  • Stellaris: Apocalypse
  • Cities: Skylines - Natural Disasters
  • BATTLETECH - Digital Deluxe Edition
  • Cities: Skylines - Parklife
  • Stellaris: Distant Stars
  • Surviving Mars: First Colony Edition
  • Cities: Skylines Industries
  • Age of Wonders: Planetfall - Revelations
  • Crusader Kings III: Royal Edition
  • Crusader Kings II: Holy Fury
  • Imperator: Rome Deluxe Edition
  • Surviving Mars: First Colony Edition
  • Stellaris: Necroids
  • Crusader Kings II: Horse Lords
  • BATTLETECH: Heavy Metal
  • Stellaris: Nemesis
  • Age of Wonders: Planetfall
  • Age of Wonders: Planetfall Deluxe edition
  • Age of Wonders: Planetfall Premium edition
  • Age of Wonders: Planetfall Season pass
  • Stellaris: Federations
  • Stellaris: Lithoids
  • Europa Universalis IV
  • Cities: Skylines
  • Crusader Kings II: Way of Life
  • Crusader Kings III
  • Cities: Skylines - After Dark
  • Crusader Kings II: Conclave
  • Cities: Skylines - Snowfall
  • Stellaris: Galaxy Edition
  • Stellaris: Galaxy Edition
  • Hearts of Iron IV: Cadet
  • Hearts of Iron IV: Colonel
  • Crusader Kings II: Reapers Due
  • Stellaris: Digital Anniversary Edition
  • Stellaris: Leviathans Story Pack
  • Cities: Skylines Deluxe Edition
Confirm this is still the case in 2.2.3(beta) - checksum [1960]

Can reproduce by conquering a xeno planet and setting the conquered species rights to chattel slavery.

Results can be seen as follows:
Code:
Rulers: 2 pops with 8 power each and both at 55% happiness
Specialists: 2 pops with 2 power each and both at 50% happiness
Slaves: 21 pops with 0.187 power each and all at 0% happiness

Total expected political power: 23.927
Total effective political power: 18.5
2 pops at 55% happiness
    Expected power per pop: 8; Effective power per pop: 2
    Expected power: 16 (66.870%); Effective power: 4 (21.622%)
    Expected contribution: 36.779%; Effective contribution: 11.892%
2 pops at 50% happiness
    Expected power per pop: 2; Effective power per pop: 2
    Expected power: 4 (16.718%); Effective power: 4 (21.622%)
    Expected contribution: 8.359%; Effective contribution: 10.811%
21 pops at 0% happiness
    Expected power per pop: 0.187; Effective power per pop: 0.5
    Expected power: 3.927 (16.412%); Effective power: 10.5 (56.757%)
    Expected contribution: 0.000%; Effective contribution: 0.000%
Weighted average approval: 45.137%
Final approval rating: 22.703%


Later, with the same planet after some improvements and more pop growth:
Code:
Rulers: 2 pops with 8 power each and both at 72% happiness
Specialists: 2 pops with 2 power each and both at 67% happiness
Slaves: 24 pops with 0.187 power each and all at 12% happiness

Total expected political power: 24.488
Total effective political power: 20.0
2 pops at 72% happiness
    Expected power per pop: 8; Effective power per pop: 2
    Expected power: 16 (65.338%); Effective power: 4 (20.000%)
    Expected contribution: 47.043%; Effective contribution: 14.400%
2 pops at 67% happiness
    Expected power per pop: 2; Effective power per pop: 2
    Expected power: 4 (16.335%); Effective power: 4 (20.000%)
    Expected contribution: 10.944%; Effective contribution: 13.400%
24 pops at 12% happiness
    Expected power per pop: 0.187; Effective power per pop: 0.5
    Expected power: 4.4879999999999995 (18.327%); Effective power: 12.0 (60.000%)
    Expected contribution: 2.199%; Effective contribution: 7.200%
Weighted average approval: 60.187%
Final approval rating: 35.000%

For testing purposes, the same planet again with the slave processing facility destroyed:
Code:
Rulers: 2 pops with 8 power each and both at 72% happiness
Specialists: 2 pops with 2 power each and both at 67% happiness
Slaves: 24 pops with 0.25 power each and all at 12% happiness

Total expected political power: 26.0
Total effective political power: 20.0
2 pops at 72% happiness
    Expected power per pop: 8; Effective power per pop: 2
    Expected power: 16 (61.538%); Effective power: 4 (20.000%)
    Expected contribution: 44.308%; Effective contribution: 14.400%
2 pops at 67% happiness
    Expected power per pop: 2; Effective power per pop: 2
    Expected power: 4 (15.385%); Effective power: 4 (20.000%)
    Expected contribution: 10.308%; Effective contribution: 13.400%
24 pops at 12% happiness
    Expected power per pop: 0.25; Effective power per pop: 0.5
    Expected power: 6.0 (23.077%); Effective power: 12.0 (60.000%)
    Expected contribution: 2.769%; Effective contribution: 7.200%
Weighted average approval: 57.385%
Final approval rating: 35.000%

It should be noted that the observed percentages of total political power in the tool tip match with the 'Expected' values above, including changing when the Slave Processing Facility is destroyed (or built); yet no effect on the actual approval rating is seen.

Particularly this final check demonstrates that this cannot be working as designed, as the slave processing facility has no effect whatever if slaves are unhappy (which will be the case in the vast majority of cases).
 

Alex in Tokyo

Corporal
67 Badges
Nov 29, 2016
44
44
  • Stellaris: Synthetic Dawn
  • Imperator: Rome
  • Surviving Mars: Digital Deluxe Edition
  • Hearts of Iron IV: Together for Victory
  • Crusader Kings II: Monks and Mystics
  • Cities: Skylines - Mass Transit
  • BATTLETECH
  • Surviving Mars
  • Hearts of Iron IV: Death or Dishonor
  • Cities: Skylines - Green Cities
  • Crusader Kings II: Jade Dragon
  • Hearts of Iron IV: Expansion Pass
  • Stellaris: Humanoids Species Pack
  • Stellaris: Apocalypse
  • Cities: Skylines - Natural Disasters
  • BATTLETECH - Digital Deluxe Edition
  • Cities: Skylines - Parklife
  • Stellaris: Distant Stars
  • Surviving Mars: First Colony Edition
  • Cities: Skylines Industries
  • Age of Wonders: Planetfall - Revelations
  • Crusader Kings III: Royal Edition
  • Crusader Kings II: Holy Fury
  • Imperator: Rome Deluxe Edition
  • Surviving Mars: First Colony Edition
  • Stellaris: Necroids
  • Crusader Kings II: Horse Lords
  • BATTLETECH: Heavy Metal
  • Stellaris: Nemesis
  • Age of Wonders: Planetfall
  • Age of Wonders: Planetfall Deluxe edition
  • Age of Wonders: Planetfall Premium edition
  • Age of Wonders: Planetfall Season pass
  • Stellaris: Federations
  • Stellaris: Lithoids
  • Europa Universalis IV
  • Cities: Skylines
  • Crusader Kings II: Way of Life
  • Crusader Kings III
  • Cities: Skylines - After Dark
  • Crusader Kings II: Conclave
  • Cities: Skylines - Snowfall
  • Stellaris: Galaxy Edition
  • Stellaris: Galaxy Edition
  • Hearts of Iron IV: Cadet
  • Hearts of Iron IV: Colonel
  • Crusader Kings II: Reapers Due
  • Stellaris: Digital Anniversary Edition
  • Stellaris: Leviathans Story Pack
  • Cities: Skylines Deluxe Edition
Confirmed this is not yet fixed in the v2.2.4 [f25b] beta patch; bumping this report so this issue might get some love.

More complex planet this time, so I won't call out the types, but you should be able to infer them from the following:
Note that the second set of slave populations are not actually at 50% happiness, they are nerve stapled.
Code:
Total expected political power: 41.5
Total effective political power: 33.0
1 pop at 68% happiness
    Expected power per pop: 8; Effective power per pop: 2
    Expected power: 8 (19.277%); Effective power: 2 (6.061%)
    Expected contribution: 13.108%; Effective contribution: 4.121%
1 pop at 58% happiness
    Expected power per pop: 8; Effective power per pop: 2
    Expected power: 8 (19.277%); Effective power: 2 (6.061%)
    Expected contribution: 11.181%; Effective contribution: 3.515%
1 pop at 0% happiness
    Expected power per pop: 4; Effective power per pop: 4
    Expected power: 4 (9.639%); Effective power: 4 (12.121%)
    Expected contribution: 0.000%; Effective contribution: 0.000%
6 pops at 53% happiness
    Expected power per pop: 2; Effective power per pop: 2
    Expected power: 12 (28.916%); Effective power: 12 (36.364%)
    Expected contribution: 15.325%; Effective contribution: 19.273%
1 pop at 73% happiness
    Expected power per pop: 2; Effective power per pop: 2
    Expected power: 2 (4.819%); Effective power: 2 (6.061%)
    Expected contribution: 3.518%; Effective contribution: 4.424%
1 pop at 58% happiness
    Expected power per pop: 1; Effective power per pop: 1
    Expected power: 1 (2.410%); Effective power: 1 (3.030%)
    Expected contribution: 1.398%; Effective contribution: 1.758%
1 pop at 68% happiness
    Expected power per pop: 1; Effective power per pop: 1
    Expected power: 1 (2.410%); Effective power: 1 (3.030%)
    Expected contribution: 1.639%; Effective contribution: 2.061%
1 pop at 48% happiness
    Expected power per pop: 1; Effective power per pop: 1
    Expected power: 1 (2.410%); Effective power: 1 (3.030%)
    Expected contribution: 1.157%; Effective contribution: 1.455%
1 pop at 30% happiness
    Expected power per pop: 0.5; Effective power per pop: 0.5
    Expected power: 0.5 (1.205%); Effective power: 0.5 (1.515%)
    Expected contribution: 0.361%; Effective contribution: 0.455%
14 pops at 30% happiness
    Expected power per pop: 0.25; Effective power per pop: 0.5
    Expected power: 3.5 (8.434%); Effective power: 7.0 (21.212%)
    Expected contribution: 2.530%; Effective contribution: 6.364%
2 pops at 50% happiness
    Expected power per pop: 0.25; Effective power per pop: 0.25
    Expected power: 0.5 (1.205%); Effective power: 0.5 (1.515%)
    Expected contribution: 0.602%; Effective contribution: 0.758%
Weighted average approval: 50.819%
Final approval rating: 44.182%
 

Alex in Tokyo

Corporal
67 Badges
Nov 29, 2016
44
44
  • Stellaris: Synthetic Dawn
  • Imperator: Rome
  • Surviving Mars: Digital Deluxe Edition
  • Hearts of Iron IV: Together for Victory
  • Crusader Kings II: Monks and Mystics
  • Cities: Skylines - Mass Transit
  • BATTLETECH
  • Surviving Mars
  • Hearts of Iron IV: Death or Dishonor
  • Cities: Skylines - Green Cities
  • Crusader Kings II: Jade Dragon
  • Hearts of Iron IV: Expansion Pass
  • Stellaris: Humanoids Species Pack
  • Stellaris: Apocalypse
  • Cities: Skylines - Natural Disasters
  • BATTLETECH - Digital Deluxe Edition
  • Cities: Skylines - Parklife
  • Stellaris: Distant Stars
  • Surviving Mars: First Colony Edition
  • Cities: Skylines Industries
  • Age of Wonders: Planetfall - Revelations
  • Crusader Kings III: Royal Edition
  • Crusader Kings II: Holy Fury
  • Imperator: Rome Deluxe Edition
  • Surviving Mars: First Colony Edition
  • Stellaris: Necroids
  • Crusader Kings II: Horse Lords
  • BATTLETECH: Heavy Metal
  • Stellaris: Nemesis
  • Age of Wonders: Planetfall
  • Age of Wonders: Planetfall Deluxe edition
  • Age of Wonders: Planetfall Premium edition
  • Age of Wonders: Planetfall Season pass
  • Stellaris: Federations
  • Stellaris: Lithoids
  • Europa Universalis IV
  • Cities: Skylines
  • Crusader Kings II: Way of Life
  • Crusader Kings III
  • Cities: Skylines - After Dark
  • Crusader Kings II: Conclave
  • Cities: Skylines - Snowfall
  • Stellaris: Galaxy Edition
  • Stellaris: Galaxy Edition
  • Hearts of Iron IV: Cadet
  • Hearts of Iron IV: Colonel
  • Crusader Kings II: Reapers Due
  • Stellaris: Digital Anniversary Edition
  • Stellaris: Leviathans Story Pack
  • Cities: Skylines Deluxe Edition
And as I note that the presumptive cause of this hasn't actually been included in this thread yet (must have n\been in another):
Effective political power is constrained to the following values:
For unhappy pops (happiness < 50%): Min effective PP = 0.5, Max effective PP = 10
For happy pops (happiness >= 50%): Min effective PP = 0, Max effective PP = 2

The result of this is that happy rulers can contribute only 2 PP instead of the expected 8, while unhappy slaves will contribute 0.5 instead of the expected 0.25 (or less with Slave Processing Facility).

Note that the percentage weights which appear in the Pop Approval tool tip match the expected values, but the final approval rating matches the effective values.

And heck, for completeness, here's the code I use to calculate the variances:
Code:
def approval(*pops):
    """Calculate the expected vs. actual values for pop approval rating

Input: Iterable of pop tuples
Output: Printed calculation values

Pop tuple => three-element tuple containing number of pops, political power, happiness

E.G.
>>> rulers = 2, 8, 55
>>> specs = 2, 2, 50
>>> slaves = 21, 0.187, 0
>>> approval(rulers, specs, slaves)

Total expected political power: 23.927
Total effective political power: 18.5
2 pops at 55% happiness
    Expected power per pop: 8; Effective power per pop: 2
    Expected power: 16 (66.870%); Effective power: 4 (21.622%)
    Expected contribution: 36.779%; Effective contribution: 11.892%
2 pops at 50% happiness
    Expected power per pop: 2; Effective power per pop: 2
    Expected power: 4 (16.718%); Effective power: 4 (21.622%)
    Expected contribution: 8.359%; Effective contribution: 10.811%
21 pops at 0% happiness
    Expected power per pop: 0.187; Effective power per pop: 0.5
    Expected power: 3.927 (16.412%); Effective power: 10.5 (56.757%)
    Expected contribution: 0.000%; Effective contribution: 0.000%
Weighted average approval: 45.137%
Final approval rating: 22.703%"""
   
    total_power = 0
    total_effective = 0
    full_pops = []
    pop_strings = []
    for pop in pops:
        number = pop[0]
        power = pop[1]
        happiness = pop[2]
        if happiness >= 50:
            effective_power = min(power, 2)
        else:
            effective_power = min(max(power,0.5),10)
        pop_power = power * number
        pop_effective_power = effective_power * number
        total_power += pop_power
        total_effective += pop_effective_power
        expected_contrib = happiness * pop_power
        effective_contrib = happiness * pop_effective_power
        full_pops.append((number, power, happiness, effective_power, pop_power, pop_effective_power, expected_contrib, effective_contrib))
    rating = sum(pop[6] / total_power for pop in full_pops)
    effective_rating = sum(pop[7] / total_effective for pop in full_pops)
    for pop in full_pops:
        number, power, happiness, effective_power, pop_power, pop_effective_power, expected_contrib, effective_contrib = pop
        pop_string = f'''{number} pop{"s" if number > 1 else ""} at {happiness}% happiness
\tExpected power per pop: {power}; Effective power per pop: {effective_power}
\tExpected power: {pop_power} ({pop_power/total_power:.3%}); Effective power: {pop_effective_power} ({pop_effective_power/total_effective:.3%})
\tExpected contribution: {expected_contrib/total_power:.3f}%; Effective contribution: {effective_contrib/total_effective:.3f}%'''
        pop_strings.append(pop_string)

    print(f'Total expected political power: {total_power}')
    print(f'Total effective political power: {total_effective}')
    print('\n'.join(pop_strings))
    print(f'Weighted average approval: {rating:.3f}%')
    print(f'Final approval rating: {effective_rating:.3f}%')
    return