Simulatore seggi Hare-Niemeyer

Avviso importante: quanto segue non vuole essere la riflessione di un matematico, ma quella di una persona che ha passione per la politica e che ha interesse a comprendere a 360 gradi il modo in cui viene trattato il suo voto.

Problema che si vuole affrontare

Si vuole eleggere un organo collegiale, cioè un organo costituito da almeno due componenti. Sappiamo che:

  • questo organo avrà S componenti;
  • è prevista la presentazione di liste concorrenti, ciascuna contenente un numero di candidatura pari ad almeno S

Supponiamo che si siano presentate tre liste, e che i voti ottenuti da queste siano i seguenti:

Nome listeVoti ottenuti
Lista concorrente n.15088 (53.72%)
Lista concorrente n.22943 (31.07%)
Lista concorrente n.31440 (15.20%)
TOTALE9471 (100%)

Supponiamo che S=24: come facciamo a convertire i 9471 voti totali in 24 seggi? Le spiegazioni seguenti si rifanno al PDF Meccanismi elettorali: la matematica è un opinione del prof. Paolo Acquistapace (pdf che mi rimane nel cuore, suggeritomi da un docente delle superiori nell’ormai lontano 2018 per approcciarmi all’argomento). Si fa riferimento anche alle pagine Wikipedia Sistemi proporzionali e Metodo Hare-Niemeyer.

Metodo Hare-Niemeyer: quozienti interi e più alti resti

Il metodo è stato ideato dal politico britannico Thomas Hare. Si considera la seguente proporzione

    \[V_i : S_i = V : S\]

dove V è il numero di voti totali ed S è il numero di seggi da assegnare. Ricordandoci come si calcola il termine ignoto di una proporzione (per chi avesse un vuoto rimando al seguente post di skuola.net: clicca qui) otteniamo

    \[S_i = \frac{S}{V} \cdot V_i\]

Chiaramente sorge subito un primo dilemma: difficilmente otterrò per una lista i un valore S_{i} intero!

Poniamo il metodo nel modo che segue

  1. Variabili utilizzate
    Le variabili utilizzate sono le seguenti:
    • Variabili da inizializzare all’avvio
      • S consiste nel numero di seggi da distribuire (inizializzare col valore desiderato);
      • S_i consiste nel numero di seggi assegnati alla lista i-esima (inizialmente S_i=0, \forall i);
      • V_i consiste nel numero di voti ottenuti dalla lista i-esima (inizializzare con i voti ottenuti);
      • V consiste nei voti totali (si ponga V=\sum_j V_i).
    • Variabili che utilizzeremo più avanti
      • Q_i consiste nel quoziente relativo alla lista i-esima
      • R_i consiste nel resto relativo alla lista i-esima, ottenuto da Q_i
  2. Calcolo dei quozienti
    Per ogni lista i-esima che ha ottenuto V_{i} si calcola il quoziente Q_i

        \[Q_i=\frac{S}{V} \cdot V_i\]

  3. Prime assegnazioni di seggi
    Per ogni quoziente Q_i calcolo la parte intera [ Q_i ] e assegno alla lista i-esima [ Q_i ] seggi

        \[S_i =S_i+ [Q_i]\]

  4. Abbiamo finito?
    A questo punto abbiamo due possibilità:
    • \sum_j S_j = S, tutti i seggi sono stati assegnati e l’algoritmo si ferma;
    • \sum_j S_j < S, non sono stati assegnati tutti i seggi, proseguo col passo successivo.
  5. Calcolo dei resti
    Per ogni lista i-esima calcolo il resto R_i, a partire dal quoziente Q_i (già calcolato al passo (2))

        \[R_i=Q_i-[Q_i]\]

  6. Costruzione di una graduatoria
    Costruisco una graduatoria con i resti calcolati al punto (5), ordinando dal più grande al più piccolo. Di questa graduatoria considero i primi S-\sum_j S_i quozienti.
  7. Assegnazione dei seggi rimanenti
    Per ogni resto del punto (6) si verifica la lista che lo ha generato, e si assegna un seggio ad essa.

        \[S_i=S_i+1\]

    Caso limite (abbastanza remoto): nel caso in cui un resto sia generato da più liste si da la precedenza alle liste che hanno ottenuto più voti.