# Sequentially Spent Score

Sequentially Spent Score (SSS), also known as Sequentially Subtracted Score or Unitary Cardinal Voting, is a sequential Multi-Winner Cardinal voting system built on Score voting ballots. Each round's winner is the candidate who has the highest sum of score. Between each round the ballots are adjusted such that a candidate cannot influence subsequent rounds more than the score they have remaining. This property of spending score is a particular implementation of Vote Unitarity. Sequentially Spent Score was invented by Keith Edmonds and Vote Unitarity was defined to describe this underlying theory.

## Procedure

It works by a four-step process: Each voter starts with a ballot weight equal to the MAX possible score.

1. Elect the candidate who is the Utilitarian winner (ie the candidate with the highest sum of score)
2. Lower the weight of the ballots that had supported that candidate in proportion to how strongly they supported that candidate. ie (new weight) = (weight) - (score given to winner) (with surplus handling; see below)
3. For ballots that lost weight in the previous step, adjust the amount of score they give to the remaining candidates by capping it at the reduced ballot weight. ie (new score) = min(score,weight)
4. Repeat these steps until all the necessary seats are filled.

### Surplus Handling

For the second step, if that candidate had received more than a predefined threshold of points (usually defined as a Hare or Droop Quota of the ballots multiplied by the maximum score), then the amount of weight to take away from the ballots supporting that round's winner is to be reduced proportionally to ensure that only the equivalent in ballot weight of that predefined threshold of points is removed. This is known as Factional Surplus Handling.

Specifically, in the second step, the score given to the winner is divided by (the total score given to that winner) * (Total number of Winners)/ (Total number of voters). This is a number greater than 1 and hence reduces the amount spent on that winner.

## Python Implementation

Given a Pandas dataframe S with columns representing candidates and rows representing voters the entries would encode the score of all the ballots. For a max score of K and a desired number of winners W.

```import pandas as pd
import numpy as np

#Normalize score matrix
S_wrk = pd.DataFrame(S.values/K, columns=S.columns)

#Find number of voters
V = S_wrk.shape

#Populate winners in a loop
winner_list = []
while len(winner_list) < W:

#Select winner
w = S_wrk.sum().idxmax()

winner_list.append(w)

#Check for Surplus
surplus_factor = max( S_wrk[w].sum() *W/V , 1.0)

#Score spent on winner by each voter
score_spent = S_wrk[w]/ surplus_factor

#Total score left to be spent by each voter
ballot_weight = np.clip(ballot_weight-score_spent,0.0,1.0)

#Update Ballots as the minimum of original score and score remaining
mins = np.minimum(S_wrk.values,ballot_weight.values[:, np.newaxis])
S_wrk = pd.DataFrame(mins, columns = S_wrk.columns)
```

## Variants

### Scaling

A variant of this method can be made by scaling instead of capping to adjust ballot support for candidates after the ballot's weight has been adjusted. Capping is when, if a ballot's weight has been reduced by a certain amount, a ballot that gives a candidate more support than its weight allows is edited to give that candidate only as much support as its ballot weight. In other words, if a ballot is at 70% weight (70% power), yet it gives a candidate 80% support (a score of 8 out of 10, for example), it is adjusted to give that candidate 70% support instead.

Scaling is when the amount of support a ballot gives a candidate is proportionally adjusted by how much weight it has remaining. In other words, a ballot with 50% weight that originally gave a candidate 70% support when it had full weight will now give that candidate 35% support.

### Quota of Ballot Selection

In the first step one need not choose the Utilitarian winner. A reasonable alternative is to take the winner as the candidate who has the highest sum of score in the Hare (or Droop ) Quota of Ballots that most support them. This is the selection method from Sequential Monroe

### Dynamic Quota

Sequentially Shrinking Quota is a modification to limit Free riding

## Related Systems

It is the natural extension of the Hamilton method which is used in Partisan Systems to Multi-Member System. In this sense it fits into the Monroe class of Proportional Representation. Since score is a conserved quantity which is spent like money there is a natural analogy to Market based voting.

## Criteria

Monotone Pareto IIA Clone proof Participation Hare Quota Criterion
Sequentially Spent Score Yes Yes Yes Yes No Yes

### Participation

Because this system is a Monroe type which is derived from the Hamilton method it fails participation. An illustrtive example is as follows.

To simplify lets condsider a 2 seat election in a max=10 score. The candidates are all clones of type A and B.

Case 1:

30 voters: A=10, B=0
9 voters: A=0, B=10
1 voter: A=1, B=10

Without the 1 voter giving a score of 1 to A, it would be a tie for the second seat so this score means that A gets both seats. But then if you add one voter.

Case 2:

30 voters: A=10, B=0
9 voters: A=0, B=10
1 voter: A=1, B=10
1 voter: A=1, C=10

The extra voter changes the quota size and causes B to get the second seat, even though they prefer A to B.

#### Math Details

For Case 1

Score quota = 40*10/2=200

A is the first winner with 301

Ballots spend 200/301 times their support for A

30 voters: A=3.4, B=0
9 voters: A=0, B=10
1 voter: A=1, B=9.33

A has 100.66 and B has 99.33. Close but the winner set is {A,A}

For Case 2

Score quota = 41*10/2=205

A is the first winner with 302

Ballots spend 205/302 times their support for A

30 voters: A=3.2, B=0
9 voters: A=0, B=10
1 voter: A=1, B=9.32
1 voter: A=1, C=10

A has 98.36 and B has 99.32. Close but the winner set is {A,B}. So the C supporter ruined it for the second A candidate. This is a failure of participation.