George Pashev

Website of George Pashev (Jidai Mirai)

Scientist, Programmer, Data Scientist, Enterpreneur

Жребий за партия за гласуване

Здравейте,

Предполагам, че много от вас сте се сблъсквали с добре познатия проблем - за кого да гласувате. Ако не можете да изберете, понеже мразите всички участници и не намирате достоен кандидат или тези, които харесвате "нямат реален шанс", според социолозите, можете да приложите стратегия "теглене на жребий чрез отчитане на коефициент на омраза за всеки от кандидатите.

Тук представям имплементация на алгоритъм на Python, която отчита коефициентите на омраза към отделни кандидати в списъка и "стреля" по мишени в "стрелбище", с изтеглени случайни числа. Вероятността за попадане в мишена на дадена партия, е обратно пропорционална на "омразата" към нея.

Можете да си "поиграете" с коефициентите и кода тук: https://onlinegdb.com/HJhDkA3X_

Ето го алгоритъма (коефициентите на омраза отразяват моето мнение). При максимален коефициент на омраза 1000, съответната партия се изключва от избора и не участва изобщо в него. При мен, това е партия ГЕРБ.

import random
import operator
from random import randint
from random import seed
# списък на партиите и коефициентите на омраза на всяка
parties = (
{"name": "BSP", "hate": 95},
{"name": "GERB", "hate": 1000},
{"name": "DPS", "hate": 900},
{"name": "Slavy Trifonov", "hate": 150},
{"name": "DB", "hate": 40},
{"name": "Vazrazhdane", "hate": 40},
{"name": "Volya - NFSB", "hate": 455},
{"name": "VMRO", "hate": 455},
{"name": "ATAKA", "hate": 55},
{"name": "MUTRI VYN", "hate": 43},
{"name": "REPUBLIKANCI", "hate": 570},
{"name": "KOD", "hate": 300},
{"name": "ABV - MANGAROV", "hate": 30},
{"name": "Pryaka demokraciq - Klissarov", "hate": 20},
{"name": "BG LYATO - Cherepa", "hate": 400},
)

# списъците, използвани от алгоритъма за реализиране на "стрелбище"
strelbishte = []
partii_v_strelbishte = []
# речник с ключове - име на партия и стойност - попадения, в който ще се пазят попаденията след приключване на алгоритъма
akumulirani_brojki = {}
seed(a=None, version=2) # правене на псевдослучайния избор "наистина случаен" с избор на seed - текущо системно време
# инициализация на стрелбището и речника
for party in parties:
count = 1000 - party["hate"]
if count == 0:
continue
akumulirani_brojki[party["name"]] = 0
partii_v_strelbishte += [party["name"]] * count
strelbishte += [0] * count
# разбъркване на секторите и фрагментация на партийните зони в стрелбището и инициализация на броя мишени в него
random.shuffle(partii_v_strelbishte)
broj_v_strelbishte = len(partii_v_strelbishte)
# извършване на случайния избор (стрелбата в стрелбището)
seed(a=None, version=2)
for i in range(0, 3000):
izteglenoChislo = randint(0, broj_v_strelbishte)
strelbishte[izteglenoChislo] += 1
akumulirani_brojki[partii_v_strelbishte[izteglenoChislo]] += 1
#сортиране на партиите в речника по брой попадения в низходящ ред
sorted_akumulirani_brojki = sorted(akumulirani_brojki.items(), key=operator.itemgetter(1), reverse=True)

# отпечатване на попаденията за всяка партия, вече сортирано
print(sorted_akumulirani_brojki)
fulltext

Keywords

namehatestrelbishtebrojkiakumuliraniпартияpartiiомразаcountкоефициентитеseedpartyможетеизборimportстрелбището1000izteglenochisloкоефициентинициализация