Laureando : Roberto Leonardo Espen
Matricola 009843
Relatrice
Ch.ma Prof. Maria Grazia Speranza
Correlatore
Ch.mo prof. Gianfranco Gambarelli
Obiettivo del presente lavoro é l'analisi e lo studio dell'algoritmo elettorale proposto da Gambarelli in [1994,1995].
Tale algoritmo viene utilizzato in un programma di elaborazione automatica e quindi valutato nelle sue caratteristiche .
La formula di arrotondamento elettorale usata tiene conto del fatto che molteplici principi di equità formulati per i sistemi elettorali non possono essere congiuntamente rispettati, in quanto alcuni sono in contraddizione con altri . La soluzione adottata rispetta i più importanti di tali criteri e minimizza le distorsioni attraverso un criterio di preferenza.
Il problema
Nella storia dell'umanità si possono trovare numerose esperienze relative a forme di governo con sensibili variazioni fra loro. Se si osserva la realtà contemporanea, si trovano risposte diverse allo stesso problema a seconda della tradizione, della cultura, della diversità delle situazioni. L'uomo sceglie lo strumento che ritiene migliore per rispondere all'esigenza particolare del momento storico che vive, ma procede per tentativi ed errori, in un ambiente caotico, legato ad eventi e situazioni imprevedibili ed imponderabili: tutto ciò rende impossibile e inutile pensare ad una forma di governo che risponda esattamente agli obiettivi per cui nasce ferme restando queste condizioni di variabilità. È quindi importante esaminare in maniera più approfondita gli strumenti esistenti per scegliere il più adatto alle necessità contingenti, o per valutare certi accadimenti storici.
Le diverse soluzioni del passato si devono analizzare perché diventino il punto di partenza per possibili miglioramenti. Allo scopo di arrivare a evidenziarne determinate caratteristiche, si possono utilizzare alcune fra le tecniche della teoria dei giochi, che permettono, attraverso uno strumento matematico di elaborazione degli indici di potere, di valutare una spartizione di potere fra un certo numero di candidati. Un esempio chiarificatore permetterà di spiegare questi concetti.
Si supponga un Parlamento di 100 seggi e tre partiti, dei quali A ha ricevuto 47 seggi, B 45 e C8. Se si valutano rispetto alle possibili coalizioni per governare, ci si accorge che le tre compagini sono tutte nella stessa situazione, in quanto occorre almeno una coalizione di due di queste per poter raggiungere la maggioranza e deliberare.
Il partito con otto seggi é dotato dello stesso potere contrattuale degli altri due, almeno per le possibili coalizioni: tale potere é uguale a quello degli altri e una ripartizione è (1/3, 1/3, 1/3).
Si può anzitutto notare una notevole instabilità della soluzione, condizionata da un accordo esclusivo fra due partiti, per ripartire a metà l'intera posta.. A sua volta il partito escluso può intervenire riproponendo la sua partecipazione a vantaggio di uno degli altri due. E così di seguito. Di fronte all'impossibilità di stabilire a priori quale sarà la possibile coalizione, é plausibile assegnare ai partiti una possibilità di vittoria paritetica, dato il perfetto equilibrio dovuto alla perfetta intercambiabilità fra le parti.
Spostando ad esempio ai 2/3 il livello per deliberare ( nel nostro caso a 67 seggi) il partito con 8 seggi non é indispensabile per le coalizioni a due che lo comprendono, tutte minoritarie, per cui é ragionevole questa ripartizione di potere (1/2,1/2/,0), nella quale il potere del terzo partito é uguale a zero.
Per una situazione in cui il partito A ha 50 seggi, B 30 e C 20 si può dedurre questa ripartizione di potere (3/5,1/5,1/5), perché il primo partito é cruciale , in quanto senza di lui non si arriva a nessuna coalizione.
Un calcolo di ripartizione del potere basato unicamente sul numero dei seggi, da delle indicazioni che non tengono conto di affinità, propensioni e avversioni fra i vari partiti: il modello tiene cioè conto di coalizioni che nella realtà sono ideologicamente impossibili. In questo caso gli indici dovranno essere pesati a secondo del partito. In Italia il partito più grosso sceglie fra quelli più simili come indirizzo politico. Di conseguenza nascono particolari contrattazioni allo scopo di ottenere vantaggi maggiori nella ripartizione del potere.
Casi limite sono i referendum o le elezioni presidenziali, in cui partiti antagonisti possono avere interessi comuni e tutte le coalizioni sono possibili.
Un correttivo ai modelli ad indice di potere puro é stato introdotto da Owen (1981) che ha risolto il problema delle affinità utilizzando una distribuzione di probabilità sulle possibili coalizioni. Anche il professor Gambarelli ha lavorato in quella direzione (1992), introducendo nell'analisi variabili esogene ed endogene, quali lo scontento dell'elettorato, la perdita di aiuti finanziari, la probabilità di colpi di stato e l'intervento dei franchi tiratori.
Sistemi ad una circoscrizione.
Si indichino con
i
voti ricevuti dagli n partiti, con V il numero totale dei voti e
con S il numero totale dei seggi disponibili. Ponendo la sommatoria ![]()
, i seggi ![]()
da assegnarsi ad ogni partito dovrebbero essere proporzionali ai voti ottenuti.
Si avrà ![]()
e così generalizzando ![]()
.
Nella quasi totalità dei casi tali rapporti non sono interi
per cui é necessario operare tramite gli arrotondamenti. Si indichi
ora come quoziente esatto (Hare quota) di ![]()
il valore della ![]()
e con
il numero arrotondato
per difetto ("Hare minimum") ed
il numero
arrotondato per
eccesso ("Hare maximum").
Supposto vi siano 10 seggi disponibili e 80 voti validi così
distribuiti: 35 al primo partito, 30 al secondo partito e 15 al terzo,
il quoziente esatto
=35
10/80=4,375;
=30
0,125=3,75;
=15
0,125=1,875.
I quozienti arrotondati per difetto sono
=4,
=3,
=1
e quelli in eccesso
=5,
=4
e
=2. La somma dei
dà 8 e quella degli
11; segue che nessuno dei due arrotondamenti porta ad una esatta ripartizione
dei 10 seggi. Nel primo caso dobbiamo trovare, addirittura, un criterio
di assegnazione di due seggi al fine di coprire tutti i seggi disponibili.
Vari autori hanno evidenziato inoltre che si devono considerare delle condizioni di logicità democratica, le quali, almeno teoricamente, andrebbero rispettate. Le più significative sono le seguenti:
a) il rispetto della simmetria;
b) il rispetto del principio: più voti, non meno seggi;
c) il rispetto degli arrotondamenti per difetto;
d) il rispetto degli arrotondamenti per eccesso;
e) il rispetto della fusione fra partiti;
f) il rispetto del principio: più seggi totali, non meno seggi individuali;
g) il rispetto delle minoranze.
Tali condizioni, tutte ragionevoli, sono in realtà contraddittorie e non é possibile trovare un modello che rispetti le prime due (a) e (b) e, contemporaneamente, la (d) e la (e). La (g) invece é sempre compatibile con le altre. Una delle possibili operazioni é di scegliere una priorità fra queste condizioni.
Proporzionalità
Esistono modelli legati alle leggi proporzionali (pura, corretta e con quota) e alla minimizzazione delle distanze.
La proporzionale pura assegna i seggi in avanzo dagli arrotondamenti
per difetto
ai partiti
con i resti maggiori
Nell'esempio prima riportato (caso 1) avremo la distribuzione dei due seggi sul terzo e sul secondo partito, data la consistenza del loro arrotondamento. La ripartizione finale diventerebbe quindi (4,4,2). Secondo un'analisi superficiale, tale legge sembrerebbe la più semplice e la più equa, tuttavia non rispetta alcuni dei criteri enunciati precedentemente: il rispetto della fusione fra partiti e il criterio dell'accrescimento del numero dei seggi. Ad esempio: tre partiti con rispettivamente quattordici, sette e sei voti e con tre seggi da spartire riceveranno un seggio per uno, mentre in caso che il secondo ed il terzo si fondessero avremo due seggi al primo e uno alla confederazione.
Inoltre nel caso di tre partiti con cinquantatré, trentatré e quattordici voti e dieci seggi da spartire, essi avrebbero rispettivamente cinque, tre e due seggi rispettivamente. Aumentando fino a undici il numero dei seggi avremo una distribuzione diversa quale sei, quattro e uno. L'aumento del numero dei seggi fa sì che il terzo partito passi da due seggi ad uno.
La proporzionale corretta con il metodo d'Hondt assegna i seggi nel seguente modo: si procede dividendo i risultati dei partiti per 1,2,3 ..., si ottiene una serie di quozienti che, ordinati per grandezza, diranno a chi spettano i seggi. Per una terna di voti 14, 7, 6 si ottiene la seguente distribuzione di tre seggi: 2, 1, 0.
Dati n partiti e s seggi si avranno gli s quozienti più alti
(q1...q2) e si assegneranno a ciascun partito tanti seggi quanti
gli competono.
Questo criterio non rispetta, in generale, la condizione dell'arrotondamento per eccesso.
La proporzionale corretta con quota utilizza la proporzionale per assegnare i seggi, non assegnando però quelli che violano gli arrotondamenti per eccesso. Tale criterio quindi non rispetta le minoranze.
Leggi a minimizzazione delle distanze
Questi criteri di distribuzione hanno come scopo la minimizzazione della 'distanza' (concetto variamente definito) fra esito dell'elezione e distribuzione dei seggi. Si deve scegliere, quale vettore di seggi, quella combinazione di interi che assomiglia o rappresenta di più il vettore dei voti.
La distanza più semplice da concepire fra le combinazioni
dei voti in percentuale e le percentuali dei voti é quella geometrica
o euclidea: la distanza che congiunge il punto
e il punto ![]()
é pari alla misura del segmento che li congiunge, dato dalla formula
.
La distanza euclidea fra la terna dei voti percentuali v=(51,85; 25,93; 22,22) e la terna dei seggi percentuali s=(66,67; 33,33; 0) vale
.
Ripetendo il calcolo per tutte le terne da valutare troveremo qual é quella che minimizza la distanza. Sicuramente questa é la scelta migliore nel caso dovessimo mettere un asse fra questi due punti. Fra due punti n-dimensionali, ovvero un sistema con n partiti, avremo una formula generalizzata:
con a = 2 e b = 1/2.
Altri tipi di distanza ottenibili cambiando i valori di a e b sono stati proposti da Te Riele, 1978. Una distanza angolare é stata proposta da Gambarelli 1992b.
L'utilizzo delle distanze non rispetta in generale due criteri fondamentali: la minimizzazione della massima variazione e la minimizzazione della variazione degli indici di potere. Il grado di arbitrarietà delle assegnazioni é molto elevato e si rischia di stravolgere le percentuali di valori stabilite dall'elettorato: un partito con la maggioranza assoluta, ad esempio il 51,85% dei voti totali, dovrebbe avere un potere pari al 100%, mentre con distribuzioni basate sulle distanze come quelle prima rappresentate l'indice scenderebbe al 33,33%. Un furto.
La minimizzazione della massima variazione consiste nella ricerca di soluzioni che svantaggino o avvantaggino il meno possibile ogni singolo partito. Per rispettare questo criterio si dovrà scegliere la distribuzione che minimizza la singola distanza percentuale riferita ad un partito solo. Tale distanza verrà considerata nel suo valore assoluto in quanto si compenserà con la distanza degli altri partiti, per cui ad un vantaggio di qualcuno si accompagna uno svantaggio per qualcun altro.
Il metodo di minimax
Non esistono criteri in grado di soddisfare tutte le condizioni di democraticità delle varie situazioni in quanto alcuni escludono altri.
Anche se si possono ottenere gli stessi risultati con formule diverse, i postulati di democraticità di partenza sono diversi. Si può stabilire però un ordine di importanza fra i vari criteri iniziali, con chiari gli obiettivi che si vogliono raggiungere, quali, per esempio, rappresentatività o governabilità del sistema.
I sistemi elettorali, in generale, hanno un problema fondamentale: non hanno la possibilità di garantire il rispetto degli indici di potere. Se ad esempio si considerano tre partiti e due seggi da distribuire non é possibile trovare una distribuzione ottima per una terna percentuale siffatta (50%, 30%, 20%),e indici relativi siffatti (3/5, 1/5, 1/5) in quanto ottenibili dai due seggi solo indici di valore (1, 0, 0) o (1/2, 1/2, 0).
Nasce la necessità di una legge che rispetti gli indici di potere. Gambarelli propone un criterio che si basa sulla minimizzazione della massima variazione.
Un esempio sarà chiarificatore. Si consideri un sistema composto da tre partiti, con due seggi da distribuire e con questi risultati ottenuti alle elezioni: 18 voti ad A, 9 a B e 3 a C. Secondo il metodo del maggior divisore si può ottenere la distribuzione (2,0,0) e con il metodo di Hamilton se ne può ottenere un'altra cioè (1,1,0).
Al fine di rendere confrontabili le varie distribuzioni, si considerino percentualmente.
Per i voti si avrà questa terna (0,6; 0,3; 0,1), per la distribuzione di seggi (1, 1, 0) si avrà (0,5; 0,5; 0)e per l'altra distribuzione di seggi (2, 0, 0) si avrà (1, 0, 0).
Per capire cosa si intende per svantaggio basta fare la differenza tra la percentuale del primo partito secondo i voti percepiti e quella della prima distribuzione: nel caso specifico (0,6-0,5)=0,1, ovvero il 10% in meno del potere espresso dai voti e perso per gli arrotondamenti. Il terzo partito avrà uno svantaggio pari a (0,1-0)=0,1, mentre il secondo partito avrà un vantaggio di 0,2 così ottenuto (0,3-0,5)=0,2, cioè il partito avrà guadagnato rispetto all'espressione democratica degli elettori.
Ripetendo il lavoro per l'altra distribuzione avremo una deviazione massima dello 0,4 . Se si prosegue testando tutte le possibili combinazioni possiamo ottenere una serie di risultati ordinabili secondo il minimo delle massime deviazioni di ogni singolo partito in ogni singola distribuzione. Un riordino sui valori successivi porterà inoltre alla possibilità di scegliere anche situazioni con valori di distanza massima uguali.
tabella 1.1
|
|
|
% di seggi d1 d2 d3 |
d1 d2 d3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Si noti che la legge qui introdotta rispetta i criteri fondamentali (a) e (b) di democraticità precedentemente visti e perviene ad un discorso di ottimizzazione globale che, magari non rispettando altri criteri, minimizza la variazione sia in termini di proporzionalità, che in termini di potere. Si tratta quindi di una soluzione compensata, che tende a rimediare all'impossibilità teorica di poter soddisfare contemporaneamente tutti i criteri.
Per situazione più complesse in cui abbiamo più partiti e seggi, l'uso di una fonte di calcolo potente come un elaboratore si rivela indispensabile.
Leggi privilegianti la governabilità.
Si tratta di quelle formule a "sbarramento" o a "premio", legate a criteri pragmatici più che matematici: esse influenzano la distribuzione dei seggi in modo da favorire una efficiente governabilità, questo anche a discapito dell'equità, in quanto esse garantiscono i criteri (a), (b) e (c), ma non in generale gli altri.
Le leggi a sbarramento percentuale prevedono una soglia minima per ricevere seggi, mentre quelle a sbarramento sul numero di partiti si basano sull'ordinamento in modo decrescente dei voti ottenuti, eliminando il partito posto ad una determinata posizione. I sistemi uninominali rappresentano il solo partito di maggioranza relativa e si possono considerare la forma estrema dello sbarramento sul numero di partiti.
Le leggi a premio di maggioranza sono quelle dove i seggi residui vengono assegnati al partito di maggioranza in modo da favorire la stabilità.
Le leggi a "premio di tendenza" sono una elaborazione del professor Gambarelli e prevedono che i seggi residui siano assegnati al partito che ha ricevuto il maggiore incremento percentuale rispetto alle elezioni precedenti. Queste ultime non favoriscono la governabilità, ma la rappresentatività, inoltre sono premiali e possono spingere verso variazioni.
Sistemi a più circoscrizioni.
I sistemi a più circoscrizioni hanno per caratteristica la divisione dei votanti in aree, ognuna delle quali elegge uno o più candidati. Per la scelta dei vincitori si adottano varie formule, proporzionali o maggioritarie. Il sistema italiano é misto in quanto combina a queste anche un correttivo proporzionale.
I problemi di equità aumentano, in quanto si assommano quelli di ogni singola circoscrizione, moltiplicando gli eventuali scompensi a livello globale. Spesso il risultato é penalizzante se se ne considerano gli effetti in particolari fasce di partiti. Nei collegi uninominali, ad esempio, si ha il caso dei gruppi minori, che vengono esclusi nonostante rappresentino una parte dell'elettorato . Si manifestano inoltre delle violazioni nei confronti dell'hare minimum, dell'hare maximum e della superadditività. Accade anche che partiti che hanno più voti, abbiano meno seggi o viceversa, a causa della diversa composizione delle circoscrizioni: in questo caso non viene rispettata la monotonia fra i seggi totali di lista e i voti totali di lista. Vari autori hanno esaminato tali problematiche, e hanno evidenziato che nessuna soluzione é priva di paradossi e contraddizioni.
Ricordiamo Brams (1976), Te Riele (1978), Balinski e Young(1982), e gli italiani Bernardi e Menghini (1990).
L'analisi del problema.
L'assegnazione dei seggi ai partiti politici considerando il più possibile la proporzionalità dei voti ottenuti é un problema matematico di trasformazione di interi non negativi, nel rispetto dei postulati di democraticità. Come accennato precedentemente tali postulati sono in contraddizione fra di loro e le soluzioni proposte devono rispettare quelli più significativi e limitare così le distorsioni..
Il metodo di arrotondamento democratico proposto da Gambarelli rispetta tre dei criteri fondamentali, cioè l'hare minimum, l'hare maximum e la monotonia ed é legato all'ordinamento delle preferenze rispetto alle possibili distorsioni, in termini assoluti con la formula di minimax, mentre in termini di maggioranze possibili secondo un criterio legato anche agli indici di potere, secondo la "power minimax solution".
La formalizzazione del professor Gambarelli è la seguente:
Sia N = {1,.....,n} l'inversa dei partiti del sistema considerato,
sia v = {v1,.......,vn} un elemento del sistema
degli n-vettori reali non negativi, le cui componenti si chiameranno voti
e ![]()
un numero intero positivo, che rappresenterà il numero totale dei
seggi da assegnare. Si indichino con S l'insieme degli n-vettori
interi non negativi s = (s1,......,sn), tali che
![]()
.
Il problema è determinare una trasformazione ![]()
in grado di soddisfare convenientemente ai criteri.
Dato un generico vettore g = (g1,......,gn) si indichi ![]()
la somma totale delle sue componenti e ![]()
(g1,......,gn) il vettore normalizzato di g, tale che ![]()
per tutti gli i da 1 a n (![]()
).
Si chiamino dunque ![]()
i
voti totali e per tutti gli i da 1 a n :
("hare quota")
![]()
arrotondato verso il basso ("hare minimum")
arrotondato
verso l'alto ("hare maximum")
Fissato un vettore di voti v, per ogni ![]()
e ![]()
si indichi ![]()
la deviazione assoluta normalizzata dell'i-esimo componente di s dall'i-esimo
componente di v.
Si definirà maxi-distanza tra v e s :
![]()
La soluzione proposta minimizza la maxi-distanza fra v e s e, a parità di tale distanza, minimizza le maxi-distanze successive.
Per definire tale minimizzazione si introdurrà
un opportuno ordinamento. Considerando v costante, si chiamerà per
semplicità
ogni ![]()
.
Per ogni vettore ![]()
![]()
si costruisca il vettore (s) i cui elementi sono gli stessi di d(s)
ordinati in ordine decrescente:
![]()
,
dove per ![]()
si avrà che per ogni ![]()
i vettori ![]()
possono essere ordinati in ordine lessicografico decrescente. La soluzione
consiste nell'insieme dei vettori s che corrispondono agli ultimi elementi
uguali fra loro di tale ordinamento.
Il programma operativo
Il programma si struttura in diversi blocchi operativi, che scandiscono il naturale svolgimento delle operazioni relative al calcolo della composizione del parlamento.
Si avrà un momento di acquisizione dei dati, uno di posizionamento sul simplesso, uno di redistribuzione dei seggi e uno di riordino secondo la distanza che avvantaggia o svantaggia di meno i partiti.
Questa struttura permette una gestione dinamica dello sviluppo, in quanto, operando su ogni singolo, blocco si ha l'opportunità di modificare il processo di assegnazione sia nelle caratteristiche specifiche che in quelle generali con maggiore facilità.
I vari blocchi sono fra di loro legati tramite una struttura a menu, che permette all'utente una maggiore trasparenza e indifferenza rispetto al sistema operativo: richiamando le singole voci attraverso una scelta numerica si otterrà l'attivazione di ogni singola parte della procedura, con la possibilità ulteriore di attivare il tutto in modo automatico secondo la procedura standard.
Il numero di controlli incrociati viene aumentato in quanto ogni singolo programma ripete le attribuzioni dei valori dei campi e i calcoli iniziali. É pensabile anche l'eventuale sviluppo di software di controllo, di riordino crescente o decrescente senza intaccare le strutture di programmi già testati e operanti, secondo le nostre esigenze.
Fig.1 - Menù di presentazione della procedura.
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
I dati sono tutti standardizzati nel loro immagazzinamento, secondo l'ISO ASCII, che garantisce la possibilità di scambio con altri strumenti operativi, quali programmi di elaborazione grafica o statistica.
Il menu é un classico schema da cui si scelgono nomi di file batch che attivano una serie di comandi utili per posizionarsi ad una determinata zona di immagazzinaggio dei dati, ovvero ad un indirizzo o directory del disco, e per il lancio del programma.
Richiamato il menu dall'elaboratore con sistema operativo MS-DOS, digitando il nome del programma: MINIMAX , ci appare una maschera video impaginata, con in alto un titolo relativo all'argomento, cioè il calcolo del minimax.
Segue un elenco di opzioni e un prompt modificato che permette di operare la scelta.
Al punto 1 del menù si ha l'introduzione dei dati, in quanto preliminare in ogni caso ai calcoli.
Fig.2 - Menù di introduzione dei dati
|
|
|
|
|
|
Purtroppo il linguaggio di programmazione Fortran ha dei limiti nella gestione dei caratteri grafici, per cui non si è utilizzata una maschera fissa di inserimento dei dati, ma un surrogato, che chiede per ogni giocatore il numero dei voti percepiti, per cui é impossibile dimenticare di inserirne.
Il limite di dati introducibili é di 10 giocatori, visto lo spazio matriciale occupato fisicamente nella memoria al momento dell'elaborazione; se superato a video compare un messaggio di attenzione. (é previsto un ampliamento a 15 partiti).
In ogni momento é possibile interrompere il lavoro schiacciando contemporaneamente il tasto di control e quello del carattere C, la qual cosa é ben evidenziata in un messaggio iniziale, posto sopra alla zona di inserimento dati.
Se l'introduzione avviene senza problemi, all'inserimento del valore relativo all'ultimo partito appare una scritta di introduzione positiva. Diversamente comparirà un messaggio di errore legato al linguaggio di programmazione. Confermando si potrà rientrare nel menu e scegliere il punto di menu utilità dove sono elencate le possibili soluzioni al problema e specificate le caratteristiche che i dati debbono avere per essere accettati dalla procedura.
Immagazzinati i dati, si può attivare la seconda scelta, che permette di ottenere una soluzione che rispetti i criteri di hare minimum e hare maximum e che assegna ai partiti con una distanza minima i seggi da distribuire fino a posizionarsi sul simplesso puntuale delle soluzioni, formato da tutti i punti la cui somma delle coordinate é uguale al numero dei seggi da distribuire.
Si tratta di un percorso di ricerca di una condizione ottima, reiterato per un numero di volte tale da consentire di spostarsi dal simplesso di hare minimum a quello dove abbiamo tutti i seggi assegnati.
Il programma calcola i vettori normalizzati sia dei voti che dei seggi, calcola le distanze effettive di ogni singolo punto dalla soluzione non intera e sceglie la soluzione posta al simplesso di partenza più uno. Vengono nel frattempo fatte delle verifiche, quali: la non negatività di tutte le distribuzioni di seggi, in quanto non possiamo avere seggi negativi, e la non assegnazione di seggi a partiti che non hanno ricevuto voti (qui potremmo inserire gli eventuali sbarramenti) in modo da non assegnare seggi ad un partito sorpassando l'hare maximum.
L'operazione verrà ripetuta fino all'assegnazione di tutti i seggi.
Una volta assegnati i seggi della soluzione con distanza minima sul simplesso finale, si calcoleranno eventuali altri valori che migliorerebbero la situazione, valutando se convenga o meno togliere un seggio ad un partito X e aggiungerne uno al partito Y.
Si calcolerà poi una serie di soluzioni poste nell'intorno del nostro punto di ottimo e da queste si otterrà una matrice con tutte le distanze, che verranno in seguito ordinate e che ci daranno la soluzione o le soluzioni migliori per la distanza.
Il programma ha come limite il dimensionamento della matrice, che potrà essere fatta solo per un limitato spazio memoria riservabile.
L'ultimo blocco di programma riordina le soluzioni secondo due regole.
Anzitutto calcola le distanze fra i valori normalizzati del vettore seggi e quelli del vettore delle distribuzioni. Poi le riordina in modo discendente, prima considerando ogni singolo valore all'interno di ogni singola soluzione, poi tutte le soluzioni a partire dal valore della prima distanza. A parità di distanza esse si ordineranno sul secondo e sul terzo risultato e così via. In caso di distribuzioni uguali saremo di fronte a casi particolari che qui verranno evidenziati. Il tutto condizionato dalla positività dei seggi e il rispetto dell'hare maximum e dell'hare minimum.
Esempi
Si considerino 10 seggi, 3 giocatori che ricevono rispettivamente 2, 5 e 12 voti.
La combinazione ottimale trovata con il programma é di 1, 3 e 6 seggi: tale soluzione rende minima la distanza media dei seggi dalla combinazione di voti normalizzata.
La tabella che segue mostra le possibili soluzioni e le relative distanze fra i vettori normalizzati, e il possibile riordino dei risultati.
tabella dei risultati
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Si faccia ora un altro esempio.
Si considerino 100 seggi, 3 giocatori che ricevono rispettivamente 12, 25 e 33 voti ciascuno.
Il programma trova una soluzione ottimale nella distribuzione di seggi 17, 36 e 47.
La seconda combinazione non é ottenibile in maniera univoca. Si Trova alla stessa distanza sia la combinazione (18, 35, 47), che la (17, 35, 48). Questa coppia di soluzioni non si può ordinare, in quanto le distanze sono uguali per i vari seggi, ma ribaltate. Sono ordinabili invece le soluzioni di quinto grado (vedi ultima colonna), che hanno le seconde distanze differenti, e la scelta cadrà sulla minore. Nelle soluzioni di secondo grado la scelta dovrà essere contingente, istituzionale o politica.
tabella dei risultati
|
|
|
|
|
|
| 18, 35, 47 | 0,18; 0,35; 0,47 | 0,08; 0,07; 0,01 | 0,00857 | 2 * |
| 17, 36, 47 | 0,17; 0,36; 0,47 | 0,01; 0,02; 0,01 | 0,00285 | 1 |
| 17, 35, 48 | 0,17; 0,35; 0,48 | 0,01; 0,07; 0,08 | 0,00857 | 2 * |
| 19, 34, 47 | 0,19; 0,34; 0,47 | 0,18; 0,17; 0,01 | 0,01857 | 5 # |
| 18, 34, 48 | 0,18; 0,34; 0,48 | 0,085; 0,17; 0,085 | 0,01714 | 4 |
| 19, 35, 46 | 0,19; 0,35; 0,46 | 0,18; 0,07; 0,11 | 0,01857 | 5 # |
| 18, 36, 46 | 0,18; 0,36; 0,46 | 0,085; 0,028; 0,11 | 0,01142 | 3 |
Conclusioni
Con il presente lavoro si é attivato l'algoritmo di minimax all'interno di un gruppo di programmi per calcolatori; ciò ha permesso di evidenziare aspetti più nascosti dello strumento operativo.
Si è constatato che due o più punti di soluzione possono essere posti ad uguale distanza dalla combinazione non arrotondata dei voti, nel tal caso sarà necessario utilizzare criteri non matematici per l'assegnazione di un eventuale seggio fra i contendenti.
I seggi sono ordinati nell'elaborato secondo una regola che considera solo alcuni dei postulati di democraticità limitando l'analisi al caso delle formule elttorali proporzionali. Per una visione esaustiva del lavoro é auspicabile lo sviluppo di un algoritmo che riordini le soluzioni ottenute secondo criteri di governabilità o di premialità. Tale risultato é ottenibile cambiando il criterio ordinatore, cioè il tipo di distanza fra i seggi.
L'utilizzo della formula deve essere considerato come mezzo aggiuntivo di interpretazione delle scelte legislative relative alle varie formule elettorali.
Deve essere inoltre strumento di lettura dei risultati elettorali, permettendo, dove é possibile, di apportare la correzione di un "torto" nei confronti di una delle parti.
La tutela della libertà scaturisce dalla trasparenza e dalla chiarezza delle scelte, l'attribuzione di un valore oggettivo alle diverse combinazioni di voti vuole contribuire ad una maggiore conoscenza dei meccanismi di distribuzione del potere.
Il seguente flow chart illustra la struttura della procedura, che é concepita come insieme di programmi.
Ogni programma é contenuto in un blocco rettangolare, che é, a sua volta, composto da una serie di altre funzioni minori, a loro volta composte dai vari comandi del linguaggio FORTRAN.
Il risultato finale é un prodotto modulare modificabile ed ampliabile facilmente.






Listato dei programmi
Nelle pagine che seguono sono riportati i listati dei programmi relativi alla nostra procedura.
Essi sono ottenuti con il compilatore FORTRAN che fra le sue opzioni comprende anche la costruzione delle strutture lessicali del programma e l'indicazione dei vari livelli di ciclo o di condizioni.
Nel listato viene indicato il numero di riga nelle prime colonne, seguito dall'indicatore del livello del ciclo.
A colonna sette iniziano gli eventuali comandi del programma, che uniti fra di loro formano l'istruzione.
Le righe che iniziano con la C sono delle righe di commento, e sono utilizzate per rendere meno criptico l'insieme delle istruzioni che formano il programma.
03-19-95
12:00:21
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
1 PROGRAM DATO
2 C **********************************************************
3 C PROGRAMMA DI INSERIMENTO DATI IN FORMATO SEQUENZIALE.
4 C **********************************************************
5 INTEGER*4 I,ITS,N,IV(20)
6 C * FASE 1 - APERTURA DEL FILE DI DATI *
7 OPEN (UNIT=1,STATUS='NEW',FILE='VOTI.DAT')
8 OPEN (UNIT=2,STATUS='NEW',FILE='GIOCAT.DAT')
9 OPEN (UNIT=3,STATUS='NEW',FILE='SEGGI.DAT')
10 C * FASE 2 - INSERIMENTO DATI *
11 WRITE (*,1000)
12 WRITE (*,1200)
13 READ (*,*) ITS
14 WRITE (3,*) ITS
15 WRITE (*,1300)
16 READ (*,*) N
17 WRITE (2,*) N
18 DO 20,I=1,N
1 19 WRITE (*,1400) I
1 20 READ (*,*) IV(I)
1 21 WRITE (1,*) IV(I)
1 22 20 CONTINUE
23 WRITE (*,2000)
24 C * FASE 3 - CHIUSURA *
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
25 CLOSE (UNIT=1)
26 CLOSE (UNIT=2)
27 CLOSE (UNIT=3)
28 1000 FORMAT (' +----------------------------------')
29 1200 FORMAT (' ¦ SEGGI DA DISTRIBUIRE ====>'\)
30 1300 FORMAT (' ¦ NUMERO DEI GIOCATORI ====>'\)
31 1400 FORMAT (' ¦ VOTI AL GIOCATORE ',I2,' ====>'\)
32 2000 FORMAT (' +----------------------------------')
33 END
Name Type Offset P Class
I INTEGER*4 104
ITS INTEGER*4 96
IV INTEGER*4 16
N INTEGER*4 100
DATO PROGRAM
Pass One No Errors Detected
33 Source Lines
03-19-95
12:00:37
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
1 PROGRAM MINIMAX
2 C ****************************************************
3 C PROGRAMMA DI CALCOLO DELLA DISTRIBUZIONE DI SEGGI
4 C SECONDO L'ALGORITMO DI CALCOLO DEL MINIMAX
5 C PROGRAMMA SCRITTO DA ROBERTO ESPEN.
6 C MODULO 1 - ARRIVO SUL SIMPLESSO
7 C ****************************************************
8 C
9 C * DICHIARAZIONE DATI *
10 C
11 C . INTERI
12 C IV(20) = VETTORE DEI VOTI PER OGNI SINGOLO GIOCATORE (MAX 20)
13 C HM(20) = VETTORE HARE MINIMO
14 C HMX(20)= HARE MASSIMO
15 C ITS = TOTALE SEGGI DA DISTRIBUIRE
16 C ITV = TOTALE DEI VOTI VALIDI
17 C SEGNO = SEGNO (VALORE 1,0,-1)
18 C N = NUMERO DEI GIOCATORI
19 C R = DISTANZA TRA I SEGGI DISTRIBUITI E LA SOLUZIONE
20 C THM = TOTALE HARE MINIMI
21 C THMX = TOTALE HARE MASSIMI
22 C K = INDICE
23 C
24 C
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
25 C . REALI
26 C DELTA(20) = VETTORE
27 C V(20) = VETTORE DEI VOTI AI SINGOLI GIOCATORI
28 C HML(20) = VETTORE HARE QUOTA LORDO
29 C S(20) = VETTORE DEI SEGGI PER OGNI GIOCATORE
30 C VN(20) = VETTORE DEI VOTI NORMALIZZATO
31 C SN(20) = VETTORE DEI SEGGI NORMALIZZATO
32 C D(20) = VETTORE DISTANZA
33 C DIST = DISTANZA
34 C MOLT = MOLTIPLICATORE (ITS/ITV)
35 C TS = TOTALE SEGGI
36 C TV = TOTALE VOTI
37 C COM = COMODO
38 C
39 INTEGER*4 IV(20),HM(20),HMX(20),SEGNO(20)
40 INTEGER*4 N,R,ITS,ITV,K
41 REAL*8 DELTA(20),V(20),HML(20),VN(20),SN(20),D(20),D2(20),S(20)
42 REAL*8 TV,THM,THMX,MOLT,THML,TS,COM,TT
43 REAL*8 SOL(20),SOL1(20),SOL2(20)
44 C
45 C * APERTURA FILE *
46 C
47 OPEN (UNIT=1,STATUS='NEW',FILE='SOLUTIO.DAT')
48 OPEN (UNIT=2,STATUS='OLD',FILE='VOTI.DAT')
49 OPEN (UNIT=3,STATUS='OLD',FILE='GIOCAT.DAT')
50 OPEN (UNIT=4,STATUS='OLD',FILE='SEGGI.DAT')
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
51 OPEN (UNIT=5,STATUS='NEW',FILE='HMIN.DAT')
52 OPEN (UNIT=6,STATUS='NEW',FILE='HMAX.DAT')
53 C
54 C * ACQUISIZIONE DATI *
55 C
56 READ (4,*) ITS
57 READ (3,*) N
58 DO 20,I=1,N
1 59 READ (2,*) IV(I)
1 60 C * CALCOLO DEI VOTI TOTALI ESPRESSI *
1 61 ITV=ITV+IV(I)
1 62 20 CONTINUE
63 C
64 C * CALCOLO DELL'HARE QUOTA LORDO
65 C SECONDO LA FORMULA HML(I)=IV(I)*(ITS/ITV)
66 C ITS/ITV=MOLT (MOLTIPLICATORE) *
67 C
68 TS=ITS
69 TV=ITV
70 MOLT=TS/TV
71 DO 30,I=1,N
1 72 V(I)=IV(I)
1 73 HML(I)=V(I)*MOLT
1 74 HM(I)=HML(I)
1 75 HMX(I)=HML(I)+1.0
1 76 THML=THML+HML(I)
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
1 78 WRITE (6,*) HMX(I)
1 79 S(I)=HM(I)
1 80 THM=THM+S(I)
1 81 THMX=THMX+HMX(I)
1 82 30 CONTINUE
83 WRITE (*,*) 'ITV= ',ITV
84 35 WRITE (*,*) 'THM= ',THM
85 C * DISTANZA DALLA SOLUZIONE *
86 TT=THM
87 THM=0
88 DO 60,I=1,N
1 89 VN(I)=V(I)/TV
1 90 SN(I)=S(I)/TT
1 91 C * CALCOLO DELLA DISTANZA *
1 92 D(I)=(VN(I)-SN(I))
1 93 C * SEGNO *
1 94 IF (D(I)) 50,51,52
1 95 50 SEGNO(I)=-1
1 96 GO TO 53
1 97 51 SEGNO(I)=0
1 98 GO TO 53
1 99 52 SEGNO(I)=1
1 100 53 D2(I)=ABS(D(I))
1 101 C * INCREMENTO DI VALORE PER OGNI SINGOLO SEGGIO AGGIUNTO *
1 102 DELTA(I)=ABS(VN(I)-((S(I)+SEGNO(I))/TS))
1 103 WRITE (*,1600) S(I)
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
1 104 THM=THM+S(I)
1 105 60 CONTINUE
106 R=ITS-THM
107 WRITE (*,*) 'R=',R
108 IF (R.EQ.0) THEN
109 GO TO 500
110 ENDIF
111 C * POSIZIONAMENTO SUL SIMPLESSO DI SOLUZIONE, CON PASSO
112 C UNITARIO RELATIVO ALLA VARIAZIONE DELTA. *
113 DO 70,I=1,N
1 114 IF (S(I).GT.0) THEN
1 115 K=I
1 116 GO TO 90
1 117 ENDIF
1 118 70 CONTINUE
119 90 COM=D2(K)
120 DO 100,I=1,N
1 121 IF (COM.GE.D2(I)) THEN
1 122 WRITE (*,*) 'COM',COM,'DIST',D2(I)
1 123 IF ((HMX(I).LE.S(I)).OR.(V(I).EQ.0)) THEN
1 124 C * SULLA RIGA PRECEDENTE:
1 125 C PRIMO CONTROLLO SUI SEGGI NEGATIVI
1 126 C IL SECONDO E'ALLE VARIAZIONI DI ALFA21 *
1 127 C
1 128 GO TO 100
1 129 ELSE
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
1 130 COM=D2(I)
1 131 K=I
1 132 WRITE (*,*) 'COMok',COM,'K',K
1 133 ENDIF
1 134 ELSE
1 135 C * IN QUESTO MODO A PARI DISTANZA VIENE MESSO L'ULTIMO
1 136 C PER METTERE IL PRIMO BASTA METTERE .GT. *
1 137 GO TO 100
1 138 ENDIF
1 139 100 CONTINUE
140 C * HO TROVATO LA DISTANZA MINIMA CHE SI TROVA AL SEGGIO K *
141 S(K)=S(K)+1
142 GO TO 35
143 C * A QUESTO PUNTO SONO POSIZIONATO SUL SIMPLESSO SOLUZIONE
144 C E QUINDI DEVO VALUTARE TUTTE LE POSSIBILI SOLUZIONI IVI POSTE
145 C * RICERCA DELLE SOLUZIONI SUL SIMPLESSO. *
146 500 DO 550,I=1,N
1 147 WRITE (*,1700) S(I)
1 148 WRITE (1,*) S(I)
1 149 550 CONTINUE
150 C
151 C FINE
152 C
153 1600 FORMAT (T3,' SEGGI SPETTANTI = ',E10.5E2)
154 1700 FORMAT (T6,' SEGGI SUL SIMPLESSO = ',E10.5E2)
155 C
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
156 C CHIUSURE
157 C
158 CLOSE (UNIT=1,STATUS='KEEP')
159 CLOSE (UNIT=2,STATUS='KEEP')
160 CLOSE (UNIT=3,STATUS='KEEP')
161 CLOSE (UNIT=4,STATUS='KEEP')
162 CLOSE (UNIT=5,STATUS='KEEP')
163 CLOSE (UNIT=6,STATUS='KEEP')
164 STOP ' FINE DELL''ELABORAZIONE '
165 END
Name Type Offset P Class
ABS INTRINSIC
COM REAL*8 2192
D REAL*8 1776
D2 REAL*8 1936
DELTA REAL*8 1616
HM INTEGER*4 1296
HML REAL*8 1456
HMX INTEGER*4 1376
I INTEGER*4 2104
ITS INTEGER*4 2096
ITV INTEGER*4 2112
IV INTEGER*4 16
K INTEGER*4 2188
MOLT REAL*8 2132
N INTEGER*4 2100
R INTEGER*4 2180
S REAL*8 1136
SEGNO INTEGER*4 96
SN REAL*8 496
SOL REAL*8 656
SOL1 REAL*8 816
SOL2 REAL*8 976
THM REAL*8 2152
THML REAL*8 2144
THMX REAL*8 2160
TS REAL*8 2116
TT REAL*8 2168
TV REAL*8 2124
V REAL*8 176
VN REAL*8 336
MINIMA PROGRAM
Pass One No Errors Detected
165 Source Lines
03-19-95
12:00:52
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
1 PROGRAM MINIMAX
2 C ****************************************************
3 C PROGRAMMA DI CALCOLO DELLA DISTRIBUZIONE DI SEGGI
4 C SECONDO L'ALGORITMO DI CALCOLO DEL MINIMAX
5 C PROGRAMMA SCRITTO DA ROBERTO ESPEN.
6 C MODULO 2 - VERIFICA DELLA SOLUZIONE SUL SIMPLESSO
7 C ****************************************************
8 C
9 INTEGER*4 IV(20),HMX(20),SEGNO(20),HM(20)
10 INTEGER*4 N,ITS,ITV,K,HMM
11 REAL*8 DELTA(20),V(20),HML(20),VN(20),SN(20),D(20),D2(20),S(20)
12 REAL*8 TV,MOLT,H(20),TS,SOL(20),SOL1(20),SOL2(20)
13 C
14 C * APERTURA FILE *
15 C
16 OPEN (UNIT=1,STATUS='OLD',FILE='SOLUTIO.DAT')
17 OPEN (UNIT=2,STATUS='OLD',FILE='VOTI.DAT')
18 OPEN (UNIT=3,STATUS='OLD',FILE='GIOCAT.DAT')
19 OPEN (UNIT=4,STATUS='OLD',FILE='SEGGI.DAT')
20 OPEN (UNIT=5,STATUS='OLD',FILE='HMIN.DAT')
21 OPEN (UNIT=6,STATUS='OLD',FILE='HMAX.DAT')
22 C
23 C * ACQUISIZIONE DATI *
24 C
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
25 READ (4,*) ITS
26 READ (3,*) N
27 DO 20,I=1,N
1 28 READ (2,*) IV(I)
1 29 READ (1,*) H(I)
1 30 READ (5,*) HM(I)
1 31 READ (6,*) HMX(I)
1 32 C * CALCOLO DEI VOTI TOTALI ESPRESSI *
1 33 ITV=ITV+IV(I)
1 34 HMM=HMM+H(I)
1 35 20 CONTINUE
36 IF (HMM.EQ.ITS) THEN
37 WRITE (*,*) 'TUTTO OK: I SEGGI SONO IN NUMERO GIUSTO'
38 PAUSE
39 ELSE
40 WRITE (*,*) 'ATTENZIONE: I SEGGI DISTRIBUITI SONO SBAGLIATI'
41 GO TO 1000
42 ENDIF
43 C
44 C * CALCOLO DELL'HARE QUOTA LORDO
45 C SECONDO LA FORMULA HML(I)=IV(I)*(ITS/ITV)
46 C ITS/ITV=MOLT (MOLTIPLICATORE) *
47 C
48 TS=ITS
49 TV=ITV
50 MOLT=TS/TV
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
51 WRITE (*,*) 'ITV= ',ITV
52 35 WRITE (*,*) 'HMM= ',HMM
53 C * A QUESTO PUNTO SONO POSIZIONATO SUL SIMPLESSO SOLUZIONE
54 C E QUINDI VALUTO TUTTE LE POSSIBILI SOLUZIONI IVI POSTE
55 C RICERCA DELLE SOLUZIONI SUL SIMPLESSO. *
56 C
57 DO 100,I=1,N
1 58 VN(I)=IV(I)/TV
1 59 100 CONTINUE
60 500 DO 550,I=1,N
1 61 WRITE (*,*) 'SEGGI =',H(I)
1 62 DELTA(I)=ABS(VN(I)-((H(I)+SEGNO(I))/TS))
1 63 SN(I)=H(I)/TS
1 64 D2(I)=ABS(VN(I)-SN(I))
1 65 D(I)=(VN(I)-SN(I))
1 66 C SEGNO
1 67 WRITE (*,1650) H(I),SN(I),D(I)
1 68 IF (D(I)) 502,512,522
1 69 502 SEGNO(I)=-1
1 70 GO TO 550
1 71 512 SEGNO(I)=0
1 72 GO TO 550
1 73 522 SEGNO(I)=1
1 74 550 CONTINUE
75 DO 600,I=1,N
1 76 DO 700,I2=1,N
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
2 77 IF (H(I2).GT.HMX(I2)) THEN
2 78 write (*,*) '>',I2
2 79 GO TO 700
2 80 ENDIF
2 81 IF (H(I2).LT.HM(I2)) THEN
2 82 write (*,*) '<',I2
2 83 GO TO 700
2 84 ENDIF
2 85 IF (DELTA(I2).LT.D2(I)) THEN
2 86 H(I)=H(I)+SEGNO(I2)
2 87 C ===========================
2 88 WRITE (*,*) '+',I,I2
2 89 H(I2)=H(I2)-SEGNO(I2)
2 90 WRITE (*,*) '-',I2
2 91 go to 700
2 92 ELSE
2 93 GO TO 700
2 94 ENDIF
2 95 IF (DELTA(I2).EQ.D2(I)) THEN
2 96 WRITE (*,*) '***',H(I2),I2
2 97 GO TO 700
2 98 ENDIF
2 99 DO 800,K=1,N
3 100 WRITE (1,*) H(K)
3 101 WRITE (*,*) H(K)
3 102 800 CONTINUE
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
2 103 700 CONTINUE
1 104 600 CONTINUE
105 C
106 C * FINE *
107 C
108 1600 FORMAT (T3,' SEGGI SPETTANTI = ',E10.5E2)
109 1650 FORMAT (T3,' SOLUZ = ',T30,E10.5E2,T42,E10.5E2,T54,E10.5E2)
110
111 C
112 C * CHIUSURE *
113 C
114 CLOSE (UNIT=1,STATUS='KEEP')
115 CLOSE (UNIT=2,STATUS='KEEP')
116 CLOSE (UNIT=3,STATUS='KEEP')
117 CLOSE (UNIT=4,STATUS='KEEP')
118 CLOSE (UNIT=5,STATUS='KEEP')
119 CLOSE (UNIT=6,STATUS='KEEP')
120 1000 STOP ' FINE DELL''ELABORAZIONE '
121 END
Name Type Offset P Class
ABS INTRINSIC
D REAL*8 1936
D2 REAL*8 2096
DELTA REAL*8 1616
H REAL*8 1776
HM INTEGER*4 1376
HML REAL*8 1456
HMM INTEGER*4 2276
HMX INTEGER*4 1296
I INTEGER*4 2264
I2 INTEGER*4 2316
ITS INTEGER*4 2256
ITV INTEGER*4 2272
IV INTEGER*4 16
Name Type Size Class
K INTEGER*4 2324
MOLT REAL*8 2296
N INTEGER*4 2260
S REAL*8 1136
SEGNO INTEGER*4 96
SN REAL*8 496
SOL REAL*8 656
SOL1 REAL*8 816
SOL2 REAL*8 976
TS REAL*8 2280
TV REAL*8 2288
V REAL*8 176
VN REAL*8 336
MINIMA PROGRAM
Pass One No Errors Detected
121 Source Lines
03-19-95
12:01:00
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
1 PROGRAM MINIMAX
2 C ****************************************************
3 C PROGRAMMA DI CALCOLO DELLA DISTRIBUZIONE DI SEGGI
4 C SECONDO L'ALGORITMO DI CALCOLO DEL MINIMAX
5 C PROGRAMMA SCRITTO DA ROBERTO ESPEN.
6 C MODULO 3 - VERIFICHE INCROCIATE
7 C ****************************************************
8 INTEGER*4 IV(10),HMX(10),SEGNO(10),HM(10)
9 INTEGER*4 N,ITS,ITV,K,HMM
10 REAL*8 DELTA(10),V(10),HML(10),VN(10),SN(10),D(10),D2(10),S(10)
11 REAL*8 TV,MOLT,H(10),HT(10),SOL(10),HK(10,10),HS(10,10),HR(10,90)
12 C
13 C
14 C * APERTURA FILE *
15 C
16 OPEN (UNIT=1,STATUS='OLD',FILE='SOLUTIO.DAT')
17 OPEN (UNIT=2,STATUS='OLD',FILE='VOTI.DAT')
18 OPEN (UNIT=3,STATUS='OLD',FILE='GIOCAT.DAT')
19 OPEN (UNIT=4,STATUS='OLD',FILE='SEGGI.DAT')
20 OPEN (UNIT=5,STATUS='OLD',FILE='HMIN.DAT')
21 OPEN (UNIT=6,STATUS='OLD',FILE='HMAX.DAT')
22 C
23 C * ACQUISIZIONE DATI *
24 C
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
25 READ (4,*) ITS
26 READ (3,*) N
27 DO 20,I=1,N
1 28 READ (2,*) IV(I)
1 29 READ (1,*) H(I)
1 30 READ (5,*) HM(I)
1 31 READ (6,*) HMX(I)
1 32 C * CALCOLO DEI VOTI TOTALI ESPRESSI *
1 33 ITV=ITV+IV(I)
1 34 HMM=HMM+H(I)
1 35 20 CONTINUE
36 IF (HMM.EQ.ITS) THEN
37 WRITE (*,*) 'TUTTO OK: I SEGGI SONO IN NUMERO GIUSTO'
38 PAUSE 'PREMERE UN TASTO PER CONTINUARE...'
39 ELSE
40 WRITE (*,*) 'ATTENZIONE: I SEGGI SONO SBAGLIATI'
41 PAUSE 'CONTROLLARE SEGGI.DAT'
42 GO TO 1000
43 ENDIF
44 C
45 C * CALCOLO DELL'HARE QUOTA LORDO
46 C SECONDO LA FORMULA HML(I)=IV(I)*(ITS/ITV)
47 C ITS/ITV=MOLT (MOLTIPLICATORE) *
48 C
49 TS=ITS
50 TV=ITV
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
51 MOLT=TS/TV
52 WRITE (*,*) 'ITV= ',ITV
53 35 WRITE (*,*) 'HMM= ',HMM
54 C * A QUESTO PUNTO SONO POSIZIONATO SUL SIMPLESSO SOLUZIONE
55 C E QUINDI VALUTO TUTTE LE POSSIBILI SOLUZIONI IVI POSTE
56 C RICERCA DELLE SOLUZIONI SUL SIMPLESSO. *
57 C
58 I1=1
59 I2=1
60 K=0
61 DO 100,I=1,N
1 62 VN(I)=IV(I)/TV
1 63 100 CONTINUE
64 DO 200,I=1,N
1 65 HK(I,I)=H(I)+1
1 66 200 CONTINUE
67 DO 300,I=1,N
1 68 HS(I,1)=H(I)
1 69 DO 400,I1=1,N
2 70 IF (I1.EQ.I) THEN
2 71 HR(I,I1)=0
2 72 ELSE
2 73 HR(I,I1)=H(I)-1
2 74 ENDIF
2 75 400 CONTINUE
1 76 300 CONTINUE
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
77 DO0 500,I=1,N-1
1 78 HT(I)=H(I)+1
1 79 600 CONTINUE
1 80 500 CONTINUE
81 C
82 C WRITE (*,*) 'HR',HR
83 C WRITE (*,*) 'HK',HK
84 C WRITE (*,*) 'HS',HS
85 C
86 CLOSE (UNIT=1,STATUS='KEEP')
87 CLOSE (UNIT=2,STATUS='KEEP')
88 CLOSE (UNIT=3,STATUS='KEEP')
89 CLOSE (UNIT=4,STATUS='KEEP')
90 CLOSE (UNIT=5,STATUS='KEEP')
91 CLOSE (UNIT=6,STATUS='KEEP')
92
93 1000 STOP ' FINE DELL''ELABORAZIONE '
94 END
Name Type Offset P Class
D REAL*8 9696
D2 REAL*8 9776
DELTA REAL*8 8736
H REAL*8 8816
HK REAL*8 8896
HM INTEGER*4 8616
HML REAL*8 8656
HMM INTEGER*4 9876
HMX INTEGER*4 496
HR REAL*8 1416
HS REAL*8 616
HT REAL*8 536
I INTEGER*4 9864
I1 INTEGER*4 9900
I2 INTEGER*4 9904
ITS INTEGER*4 9856
ITV INTEGER*4 9872
IV INTEGER*4 16
K INTEGER*4 9908
MOLT REAL*8 9892
N INTEGER*4 9860
S REAL*8 416
SEGNO INTEGER*4 56
SN REAL*8 256
SOL REAL*8 336
TS REAL 9880
TV REAL*8 9884
V REAL*8 96
VN REAL*8 176
MINIMA PROGRAM
Pass One No Errors Detected
94 Source Lines
03-19-95
12:01:15
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
1 PROGRAM MINIMAX
2 C ****************************************************
3 C PROGRAMMA DI CALCOLO DELLA DISTRIBUZIONE DI SEGGI
4 C SECONDO L'ALGORITMO DI CALCOLO DEL MINIMAX
5 C PROGRAMMA SCRITTO DA ROBERTO ESPEN.
6 C MODULO 4 - CONFRONTO FRA RISULTATI E SEGGI
7 C ****************************************************
8 C MATRICE DEI RISULTATI CONFRONTATA CON I SEGGI NORMALIZZATI
9 INTEGER*4 IV(10),HMX(10),SEGNO(10),HM(10)
10 INTEGER*4 N,ITS,ITV,HMM,IK
11 REAL*8 DELTA(10),V(10),HML(10),VN(10),SN(10),D(10),D2(10),S(10)
12 REAL*8 H(10),HT(10),SOL(10),HK(20,20),HS(20,20),HR(10,10,10)
13 C
14 C * APERTURA FILE *
15 C
16 OPEN (UNIT=1,STATUS='OLD',FILE='SOLUTIO.DAT')
17 OPEN (UNIT=2,STATUS='OLD',FILE='VOTI.DAT')
18 OPEN (UNIT=3,STATUS='OLD',FILE='GIOCAT.DAT')
19 OPEN (UNIT=4,STATUS='OLD',FILE='SEGGI.DAT')
20 OPEN (UNIT=5,STATUS='OLD',FILE='HMIN.DAT')
21 OPEN (UNIT=6,STATUS='OLD',FILE='HMAX.DAT')
22 OPEN (UNIT=7,STATUS='OLD',FILE='SOLALL.DAT')
23 C
24 C * ACQUISIZIONE DATI *
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
25 C
26 READ (4,*) ITS
27 READ (3,*) N
28 DO 20,I=1,N
1 29 READ (2,*) IV(I)
1 30 READ (1,*) H(I)
1 31 READ (5,*) HM(I)
1 32 READ (6,*) HMX(I)
1 33 C * CALCOLO DEI VOTI TOTALI ESPRESSI *
1 34 ITV=ITV+IV(I)
1 35 HMM=HMM+H(I)
1 36 20 CONTINUE
37 IF (HMM.EQ.ITS) THEN
38 WRITE (*,*) 'TUTTO OK: I SEGGI SONO IN NUMERO GIUSTO'
39 PAUSE 'PREMERE UN TASTO PER CONTINUARE...'
40 ELSE
41 WRITE (*,*) 'ATTENZIONE: I SEGGI SONO SBAGLIATI'
42 PAUSE 'CONTROLLARE SEGGI.DAT'
43 GO TO 1000
44 ENDIF
45 DO 50,I=1,N
1 46 DO 100,I2=1,N
2 47 DO 150,I3=1,N
3 48 IF (I.EQ.I3) THEN
3 49 HR(I,I2,I3)=H(I)+1
3 50 ELSE
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
3 51 HR(I,I2,I3)=H(I)
3 52 ENDIF
3 53 IF (I.EQ.I2) THEN
3 54 HR(I,I2,I3)=H(I)-1
3 55 ENDIF
3 56 IF ((I.EQ.I2).AND.(I.EQ.I3)) THEN
3 57 HR(I,I2,I3)=H(I)
3 58 ENDIF
3 59 WRITE (7,3500) HR(I,I2,I3)
3 60 150 CONTINUE
2 61 100 CONTINUE
1 62 50 CONTINUE
63 DO 200,I3=1,N
1 64 WRITE (*,*) '***************'
1 65 DO 300,I2=1,N
2 66 WRITE (*,*) '==============='
2 67 DO 400,I=1,N
3 68 WRITE (*,3000) I,I3,I2,HR(I,I3,I2)
3 69 400 CONTINUE
2 70 300 CONTINUE
1 71 200 CONTINUE
72 CLOSE (UNIT=1,STATUS='KEEP')
73 CLOSE (UNIT=2,STATUS='KEEP')
74 CLOSE (UNIT=3,STATUS='KEEP')
75 CLOSE (UNIT=4,STATUS='KEEP')
76 CLOSE (UNIT=5,STATUS='KEEP')
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
77 CLOSE (UNIT=6,STATUS='KEEP')
78 CLOSE (UNIT=7,STATUS='KEEP')
79 3000 FORMAT (T3,I6,T11,I6,T19,I6,T27,E10.5E2)
80 3500 FORMAT (E10.5E2)
81 1000 STOP ' FINE DELL''ELABORAZIONE '
82 END
Name Type Offset P Class
D REAL*8 15296
D2 REAL*8 15376
DELTA REAL*8 11936
H REAL*8 12016
HK REAL*8 12096
HM INTEGER*4 11816
HML REAL*8 11856
HMM INTEGER*4 15476
HMX INTEGER*4 496
HR REAL*8 3816
HS REAL*8 616
HT REAL*8 536
I INTEGER*4 15464
I2 INTEGER*4 15484
I3 INTEGER*4 15492
IK INTEGER*4 *****
ITS INTEGER*4 15456
ITV INTEGER*4 15472
IV INTEGER*4 16
N INTEGER*4 15460
S REAL*8 416
SEGNO INTEGER*4 56
SN REAL*8 256
SOL REAL*8 336
V REAL*8 96
VN REAL*8 176
MINIMA PROGRAM
Pass One No Errors Detected
82 Source Lines
03-19-95
12:01:25
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
1 PROGRAM MINIMAX
2 C ****************************************************
3 C PROGRAMMA DI CALCOLO DELLA DISTRIBUZIONE DI SEGGI
4 C SECONDO L'ALGORITMO DI CALCOLO DEL MINIMAX
5 C PROGRAMMA SCRITTO DA ROBERTO ESPEN.
6 C MODULO 5 - RIORDINO A BOLLE DELLE SOLUZIONI
7 C ****************************************************
8 C * MATRICE DEI RISULTATI CONFRONTATA CON I SEGGI NORMALIZZATI
9 C RIORDINO DELLE SOLUZIONI *
10 C
11 INTEGER*4 IV(10),HMX(10),SEGNO(10),HM(10),iii(10,10,10)
12 INTEGER*4 N,ITS,ITV,HMM
13 REAL*8 DELTA(10),V(10),HML(10),VN(10),SN(10),D(10),D2(10),S(10)
14 REAL*8 H(10),HT(10),SOL(10),HK(10,10),HS(10,10),HR(10,10,10)
15 REAL*8 hnorm(10,10,10),hdif(10,10,10),dmin,swit(10),L
16 C
17 C * APERTURA FILE *
18 C
19 OPEN (UNIT=1,STATUS='OLD',FILE='SOLUTIO.DAT')
20 OPEN (UNIT=2,STATUS='OLD',FILE='VOTI.DAT')
21 OPEN (UNIT=3,STATUS='OLD',FILE='GIOCAT.DAT')
22 OPEN (UNIT=4,STATUS='OLD',FILE='SEGGI.DAT')
23 OPEN (UNIT=5,STATUS='OLD',FILE='HMIN.DAT')
24 OPEN (UNIT=6,STATUS='OLD',FILE='HMAX.DAT')
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
25 OPEN (UNIT=7,STATUS='OLD',FILE='SOLALL.DAT')
26 OPEN (UNIT=8,STATUS='OLD',FILE='ORD.DAT')
27 C
28 C * ACQUISIZIONE DATI *
29 C
30 READ (4,*) ITS
31 READ (3,*) N
32 DO 20,I=1,N
1 33 READ (2,*) IV(I)
1 34 READ (1,*) H(I)
1 35 READ (5,*) HM(I)
1 36 READ (6,*) HMX(I)
1 37 C * CALCOLO DEI VOTI TOTALI ESPRESSI *
1 38 v(i)=iv(i)
1 39 ITV=ITV+IV(I)
1 40 HMM=HMM+H(I)
1 41 20 CONTINUE
42 C * Calcolo il valore normalizzato dei voti: val.norm=voto/votitot *
43 do 30,i=1,n
1 44 vn(i)=v(i)/itv
1 45 write (*,*) ' voto norm =',vn(i)
1 46 30 continue
47 IF (HMM.EQ.ITS) THEN
48 WRITE (*,*) 'TUTTO OK: I SEGGI SONO IN NUMERO GIUSTO'
49 PAUSE 'Procedo al tuo comando...'
50 ELSE
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
51 WRITE (*,*) 'ATTENZIONE: I SEGGI SONO SBAGLIATI'
52 PAUSE 'CONTROLLARE SEGGI.DAT'
53 GO TO 1000
54 ENDIF
55 DO 50,I=1,N
1 56 DO 100,I2=1,N
2 57 DO 150,I3=1,N
3 58 IF (I.EQ.I3) THEN
3 59 HR(I,I2,I3)=H(I)+1
3 60 ELSE
3 61 HR(I,I2,I3)=H(I)
3 62 ENDIF
3 63 IF (I.EQ.I2) THEN
3 64 HR(I,I2,I3)=H(I)-1
3 65 ENDIF
3 66 IF ((I.EQ.I2).AND.(I.EQ.I3)) THEN
3 67 HR(I,I2,I3)=H(I)
3 68 ENDIF
3 69 WRITE (7,3500) HR(I,I2,I3)
3 70 150 CONTINUE
2 71 100 CONTINUE
1 72 50 CONTINUE
73 i4=0
74 DO 200,I3=1,N
1 75 WRITE (*,*) '***************'
1 76 DO 300,I2=1,N
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
2 77 WRITE (*,*) '==============='
2 78 dmin=0
2 79 i4=i4+1
2 80 DO 400,I=1,N
3 81 hnorm(i,i3,i2)=hr(i,i3,i2)/its
3 82 hdif(i,i3,i2)=abs(hnorm(i,i3,i2)-vn(i))
3 83 if (hdif(i,i3,i2).ge.dmin) then
3 84 dmin=hdif(i,i3,i2)
3 85 endif
3 86 iii(i,i3,i2)=HR(i,i3,i2)
3 87 WRITE (*,3000) I,I3,I2,iii(I,I3,I2),HNORM(I,I3,I2),hdif(i,i3,i2)
3 88 400 CONTINUE
2 89 swit(i4)=dmin
2 90 write (*,*) swit(i4)
2 91 write (8,*) swit(i4),i3,i2
2 92 C * E' da spostare anche l'indice assieme alla distanza *
2 93 300 CONTINUE
1 94 200 CONTINUE
95 WRITE (*,*) 'Distanze in ordine :'
96 NN=N*N
97 DO 700,I=NN-1,1,-1
1 98 DO 700,J=1,I
2 99 C RIORDINO A BOLLE
2 100 IF (SWIT(J).GT.SWIT(J+1)) THEN
2 101 L=SWIT(J)
2 102 SWIT(J)=SWIT(J+1)
D Line# 1 7 Microsoft FORTRAN77 V3.31 August 1985
2 103 SWIT(J+1)=L
2 104 ENDIF
2 105 700 CONTINUE
106 DO 600,I2=1,NN
1 107 WRITE (*,*) SWIT(I2)
1 108 600 CONTINUE
109 CLOSE (UNIT=1,STATUS='KEEP')
110 CLOSE (UNIT=2,STATUS='KEEP')
111 CLOSE (UNIT=3,STATUS='KEEP')
112 CLOSE (UNIT=4,STATUS='KEEP')
113 CLOSE (UNIT=5,STATUS='KEEP')
114 CLOSE (UNIT=6,STATUS='KEEP')
115 CLOSE (UNIT=7,STATUS='KEEP')
116 CLOSE (UNIT=8,STATUS='KEEP')
117 3000 FORMAT (T3,I6,T11,I6,T19,I6,T27,i6,T35,E10.5E2,T50,E10.5E2)
118 3500 FORMAT (E10.5E2)
119 1000 STOP ' FINE DELL''ELABORAZIONE '
120 END
Name Type Offset P Class
ABS INTRINSIC
D REAL*8 30576
D2 REAL*8 30656
DELTA REAL*8 21616
DMIN REAL*8 30796
H REAL*8 21696
HDIF REAL*8 22576
HK REAL*8 21776
HM INTEGER*4 21496
HML REAL*8 21536
HMM INTEGER*4 30756
HMX INTEGER*4 576
HNORM REAL*8 13496
HR REAL*8 5496
HS REAL*8 4696
HT REAL*8 4616
I INTEGER*4 30744
I2 INTEGER*4 30768
I3 INTEGER*4 30776
I4 INTEGER*4 30784
III INTEGER*4 616
ITS INTEGER*4 30736
ITV INTEGER*4 30752
IV INTEGER*4 16
J INTEGER*4 30812
L REAL*8 30820
N INTEGER*4 30740
NN INTEGER*4 30808
S REAL*8 496
SEGNO INTEGER*4 56
SN REAL*8 256
SOL REAL*8 336
SWIT REAL*8 416
V REAL*8 96
VN REAL*8 176
MINIMA PROGRAM
Pass One No Errors Detected
120 Source Lines
Balinski M.L.e Demange G.(1987) "Algorithms for proportional matrices in reals and integers", Cahiers du Laboratorie d'Econométrie, Ecole Polytechnique, n. AD 299 0487
Balinski M.L.e Demange G.(1987) "An axiomatic approach to proportionality between matrices", Cahiers du Laboratorie d'Econométrie, Ecole Polytechnique, n. AD 303 0887
Bernardi C. e Menghini M. (1990) "Sistemi elettorali: la "soluzione" italiana". Bollettino UMI, vol.7, riv.4, pag. 271-293
Ellis T. M. R. (1985) "Programmazione strutturata in FORTRAN 77"
Zanichelli ed.
Gambarelli G. (1983) "Common behaviour of power indices" International Journal of Game Theory, Vol.12, riv.4, pag.237-244.
Gambarelli G. (1991)- "Applicazioni politiche e finanziarie degli indici di potere" - LaDecisione: razionalità collettiva e strategica nelle amministrazioni e nelle organizzazioni (L.Sacconi ed.), Angeli, Milano, pag. 268- 281.
Gambarelli G.(1994) "Electoral systems and data processing".
Congreso ibero- americano de informatica y derecio organizado par el Ministerio e Justicia de la nàcion Argentina, Bariloche.
Gambarelli G.(1995) "Minimax solution for multi-ordered apportionments". In attesa di pubblicazione.
Gambarelli G.e Biella R.(1992) "Sistemi elettorali". Il Politico (Univ. Pavia, Italia), anno LVII, n.4, pag. 557-588.
Gambarelli G. e Holubiec J. (1990) "Power indices and democratic apportionment". Proceedings of the 8-th Italian-Polish Symposium on Systems Analysis and Decision Support in Economics and Technology
(M. Fedrizzi and J.Kacprzyk eds.) Onnitech Press, Warsaw, Poland, pag. 240-255
Mitra G. (1988) "Mathematical models for decision support" Springer-Verlag, Berlin Heidelberg, NATO ASI Series, Vol F48
Syed S.A.(1987) "The apportionment of representation and the voting power". Department of Applied Mathematics, Faculty of Engineering Science, Osaka University, Toyonaka, Osaka 560, Japan
Te Riele H.J.J.(1978)"The proportional representation problem in the Second Chamber : an approach via minimal distances". Statistica Neederlandica, 32, 4,pag. 163-179.
Theil H. e Schrage L.(1977) "The apportionment problem and the European Parliament" European Economic Review, vol.9, pag. 247-263.