Metoda Sainte-Lague
This commit is contained in:
parent
ea3997a05a
commit
914f486d38
77
HN.py
Normal file
77
HN.py
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# Metoda Hare-Niemeyer'a
|
||||||
|
|
||||||
|
|
||||||
|
import os, sys
|
||||||
|
proj_path = "C:/inzynierski/ordynacje"
|
||||||
|
# This is so Django knows where to find stuff.
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ordynacje.settings")
|
||||||
|
sys.path.append(proj_path)
|
||||||
|
|
||||||
|
# This is so my local_settings.py gets loaded.
|
||||||
|
os.chdir(proj_path)
|
||||||
|
|
||||||
|
# This is so models get loaded.
|
||||||
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
application = get_wsgi_application()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def HareNiemeyer (nr_okregu, liczba_mandatow):
|
||||||
|
from ordynacja.models import Glos
|
||||||
|
pobrane_glosy = Glos.objects.filter(okreg=nr_okregu).order_by("komitet")
|
||||||
|
|
||||||
|
from ordynacja.models import Komitet
|
||||||
|
liczba_komitetow = Komitet.objects.count()
|
||||||
|
|
||||||
|
glosy = []
|
||||||
|
uzyskane_mandaty = []
|
||||||
|
mandaty_ulamkowe = []
|
||||||
|
licznik_mandatow = 0
|
||||||
|
wszystkie_glosy = 0
|
||||||
|
|
||||||
|
for Glos in pobrane_glosy:
|
||||||
|
glosy.append(Glos.liczba)
|
||||||
|
#print(glosy)
|
||||||
|
|
||||||
|
wszystkie_glosy = sum(glosy)
|
||||||
|
|
||||||
|
# oblicz "pelne" mandaty
|
||||||
|
for i in range (liczba_komitetow):
|
||||||
|
mandaty_ulamkowe.append( float(glosy[i]*liczba_mandatow) / wszystkie_glosy)
|
||||||
|
uzyskane_mandaty.append(int(mandaty_ulamkowe[i]))
|
||||||
|
mandaty_ulamkowe[i] = mandaty_ulamkowe[i] - uzyskane_mandaty[i]
|
||||||
|
licznik_mandatow = licznik_mandatow + uzyskane_mandaty[i]
|
||||||
|
|
||||||
|
#print(uzyskane_mandaty)
|
||||||
|
#print(licznik_mandatow)
|
||||||
|
#print(mandaty_ulamkowe)
|
||||||
|
|
||||||
|
# rozdziel pozostałe mandaty między komitety z najwyższymi ułamkami mandatu
|
||||||
|
while (licznik_mandatow < liczba_mandatow):
|
||||||
|
max = -1
|
||||||
|
for i in range(liczba_komitetow):
|
||||||
|
if max < mandaty_ulamkowe[i]:
|
||||||
|
max = mandaty_ulamkowe[i]
|
||||||
|
maxIndeks = i
|
||||||
|
uzyskane_mandaty[maxIndeks] = uzyskane_mandaty[maxIndeks] + 1
|
||||||
|
licznik_mandatow = licznik_mandatow + 1
|
||||||
|
mandaty_ulamkowe[maxIndeks] = 0
|
||||||
|
|
||||||
|
#print(uzyskane_mandaty)
|
||||||
|
#print(licznik_mandatow)
|
||||||
|
#print(mandaty_ulamkowe)
|
||||||
|
return uzyskane_mandaty;
|
||||||
|
|
||||||
|
from ordynacja.models import Komitet
|
||||||
|
liczba_komitetow = Komitet.objects.count()
|
||||||
|
suma = [0] * liczba_komitetow
|
||||||
|
|
||||||
|
liczba_okregow = 41
|
||||||
|
mandaty_w_okregach = [12,8,14,12,13,15,12,12,10,9,12,8,14,10,9,10,9,12,20,12,12,11,15,14,12,14,9,7,9,9,12,9,16,8,10,12,9,9,10,8,12] #zgodnie z wyborami parlamentarnymi 2015
|
||||||
|
|
||||||
|
for i in range(liczba_okregow):
|
||||||
|
mandaty = HareNiemeyer(i+1, mandaty_w_okregach[i])
|
||||||
|
for j in range (len(mandaty)):
|
||||||
|
suma[j] = suma[j] + mandaty[j]
|
||||||
|
|
||||||
|
print(suma)
|
55
SL.py
Normal file
55
SL.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
# Metoda Sainte-Lague
|
||||||
|
|
||||||
|
|
||||||
|
import os, sys
|
||||||
|
proj_path = "C:/inzynierski/ordynacje"
|
||||||
|
# This is so Django knows where to find stuff.
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ordynacje.settings")
|
||||||
|
sys.path.append(proj_path)
|
||||||
|
|
||||||
|
# This is so my local_settings.py gets loaded.
|
||||||
|
os.chdir(proj_path)
|
||||||
|
|
||||||
|
# This is so models get loaded.
|
||||||
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
application = get_wsgi_application()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def sainteLague (nr_okregu, liczba_mandatow):
|
||||||
|
from ordynacja.models import Glos
|
||||||
|
pobrane_glosy = Glos.objects.filter(okreg=nr_okregu).order_by("komitet")
|
||||||
|
|
||||||
|
glosy = []
|
||||||
|
uzyskane_mandaty = []
|
||||||
|
for Glos in pobrane_glosy:
|
||||||
|
glosy.append(Glos.liczba)
|
||||||
|
uzyskane_mandaty.append(0)
|
||||||
|
#print(glosy)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for j in range(liczba_mandatow):
|
||||||
|
imax = 0
|
||||||
|
for i in range(len(glosy)):
|
||||||
|
if (glosy[i]/(2 * uzyskane_mandaty[i] + 1)) > (glosy[imax]/(2 * uzyskane_mandaty[imax] + 1)):
|
||||||
|
imax = i
|
||||||
|
|
||||||
|
uzyskane_mandaty[imax] = uzyskane_mandaty[imax] + 1
|
||||||
|
|
||||||
|
#print(uzyskane_mandaty)
|
||||||
|
return uzyskane_mandaty;
|
||||||
|
|
||||||
|
from ordynacja.models import Komitet
|
||||||
|
liczba_komitetow = Komitet.objects.count()
|
||||||
|
suma = [0] * liczba_komitetow
|
||||||
|
|
||||||
|
liczba_okregow = 41
|
||||||
|
mandaty_w_okregach = [12,8,14,12,13,15,12,12,10,9,12,8,14,10,9,10,9,12,20,12,12,11,15,14,12,14,9,7,9,9,12,9,16,8,10,12,9,9,10,8,12] #zgodnie z wyborami parlamentarnymi 2015
|
||||||
|
|
||||||
|
for i in range(liczba_okregow):
|
||||||
|
mandaty = sainteLague(i+1, mandaty_w_okregach[i])
|
||||||
|
for j in range (len(mandaty)):
|
||||||
|
suma[j] = suma[j] + mandaty[j]
|
||||||
|
|
||||||
|
print(suma)
|
Loading…
Reference in New Issue
Block a user