sep 2007
El sistema d'Hondt
Pronto vendrán elecciones. No hace mucho hubieron, y seguirán habiendo (buena señal, creo yo). Y durante esas noches no paran de hablar del reparto de diputados, baile de escaños y sustos de última hora.
Detrás de tanta pasión encontramos un algoritmo matemático sencillo.
Me apetecía comentar un par de cosillas de la ley de Hondt. Aunque debo admitir que mi principal intención era incluir una demostración para la simulación del algoritmo, creando una clase PHP y la biblioteca Open Flash Chart que ya comenté en su momento.
El funcionamiento de la ley de Hondt
Explicar a fondo la ley de Hondt creo que no procede: he leído con detalle la entrada en la Wikipedia en Español sobre la ley de Hondt y lo creo suficiente como introducción.
El proceso de división que se da para cada caso es lo que se podría denominar una sucesión armónica (sería una serie armónica si los cocientes se sumaran) que es equivalente para todos los partidos, salvo porque hay que multiplicar por el número de votos.
Esa sucesión forma una curva asintótica respecto al eje y=0 para valores enteros positivos. A efectos prácticos, puedes imaginarte un avión de papel lanzado desde la ventana de un edificio, que va planeando cada vez más cerca del suelo pero sin llegarlo a tocar nunca.
...No, no hay viento.
Al realizar el cálculo de la ley de Hondt, cada partido lanza ese avión, pero con una diferencia substancial: cuantos más votos, más alta es la posición de lanzamiento. Supongamos que un voto equivale a un centímetro: diez mil votos son cien metros de altura.
El jefe de filas sube la escalera y lanza el avioncito. La trayectoria descrita por cada avión de papel es registrada y se ponen en común las alturas de cada avión en cada segundo. Las mayores alturas se llevan los escaños.
Repasemos mentalmente las trayectorias de los aviones: Cuanto más tiempo transcurre, más parecidas son las alturas de los aviones. Eso implica que cuanto más a repartir entre partidos, más equilibrado es el reparto. Es más equilibrado porque hay algo de aleatorio: haber lanzado unos centímetros más arriba o más abajo el avión, da o quita un escaño: el planeo final es clave. Los aviones sólo quedarían a la misma altura en caso de llegar al infinito, con lo que a largo plazo el partido más votado siempre parece algo más favorecido.
Eso queda algo rebatido al hacer ciertas pruebas, que espero que con la demo ahora tengas más cerca.
La demo
Podéis acceder a la demo desde la página de recursos.
Debo decir antes de todo que la demostración es sencillita y que se podría haber decorado o coloreado más, pero me he limitado a lo estrictamente necesario para que sea funcional.
La he colgado en el apartado "descargas", que he pasado a titular "recursos" (buscando un término genérico).
El funcionamiento es bastante sencillo y salvo el propio archivo de Flash, todo el código utilizado es estático: XHTML y CSS. El archivo Flash muestra en un gráfico de frecuencias los pasos del cálculo de la ley de Hondt, y el reparto resultante de escaños.
- Lo primero es introducir el número de escaños y el mínimo porcentaje de votos para entrar en el cálculo.
- En segundo lugar, indica los votos recogidos por cada partido, abstención, en blanco, etc.
- Una vez introducidos los datos, clicando en "calcular". Ya está.
Los resultados se muestran en tres partes diferentes que paso a comentar.
Tabla de asignaciones
Situada en la parte superior derecha de la página, esta tabla indica los escaños asignados, el porcentaje de votos y el porcentaje de escaños. Esta relación entre los porcentajes anteriores es importante, ya que es el tipo de reivindicación que se da ante la ley de Hondt: que favorece a los partidos grandes.
Puedes comprobar que eso no siempre es así, ya que hay ocasiones en las que los partidos pequeños absorben un escaño del grande. Los últimos escaños a repartir (especialmente cuando se trata de una gran cantidad: más de cien por poner un caso) son una verdadera lotería.
Tabla de divisiones
En la parte inferior de la página, muestra el proceso de dividir los votos en cada iteración. Estas divisiones se ordenan y se muestran en la última columna (que muestra el título Hondt). Éste es el resultado de repartir los escaños: indica la cantidad con la que se ha asignado cada escaño.
Gráfico de divisiones
Parecido a lo anterior, el gráfico de divisiones representa gráficamente la tabla anterior. En este caso es de notar que cuanta más competencia hay entre dos partidos (pongamos los dos mayoritarios), más "rugosa" es la curva que marca la asignación de partidos (la línea "Hondt"). El avión encuentra turbulencias.
Transferencia de datos a Open Flash Chart
El gráfico utilizado es de frecuencias sin puntos. He tomado esta decisión porque tenéis la lista de valores en la tabla de debajo, con lo que no hay necesidad de ponerlo de nuevo en el gráfico.
Para los que quieran ver cómo se transfieren los datos a OFC, sólo cabe comentar que se serializan los datos y se identifican con una clave. Esa clave se introduce en la URL en la carga del archivo SWF, y el resto es tarea de OFC.
Podéis ver el contenido que devuelve la llamada del parámetro "data" de la URL, y sacar conclusiones por vuestra cuenta...
Debo hacer notar que a medida que aumenta el número de datos, el tiempo de proceso del gráfico aumenta, aunque en general nada alarmante.
Fuentes RSS
Etiquetas
apis-mashups Buscadores Clustering del.icio.us Desarrollo web estadísticas estándares Expresiones regulares Flash Fractales fuentes de información Gestión documental Google grafos Gráficos estadísticos Innovación Java lenguajes documentales Lingüística Linux Lógica borrosa modelización Muestreo estadístico Navegadores off-topic open source PHP PLN Productividad Profesionales Publicidad Recuperación información relevancia reseñas SEO spam Tagging Usabilidad utilidades veracidad Web social yahoo pipes