82
UNIVERSIDADE FEDERAL DO RIO DE JANEIRO INSTITUTO DE MATEMÁTICA CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO GABRIEL S. BEVILAQUA ELEIÇÕES MAIS JUSTAS: SIMULANDO E INTERPRETANDO DIFERENTES SISTEMAS DE VOTAÇÃO RIO DE JANEIRO 2019

UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

UNIVERSIDADE FEDERAL DO RIO DE JANEIROINSTITUTO DE MATEMAacuteTICA

CURSO DE BACHARELADO EM CIEcircNCIA DA COMPUTACcedilAtildeO

GABRIEL S BEVILAQUA

ELEICcedilOtildeES MAIS JUSTAS SIMULANDO E INTERPRETANDO DIFERENTESSISTEMAS DE VOTACcedilAtildeO

RIO DE JANEIRO2019

GABRIEL S BEVILAQUA

ELEICcedilOtildeES MAIS JUSTAS SIMULANDO E INTERPRETANDO DIFERENTESSISTEMAS DE VOTACcedilAtildeO

Trabalho de conclusatildeo de curso de graduaccedilatildeoapresentado ao Departamento de Ciecircncia daComputaccedilatildeo da Universidade Federal do Riode Janeiro como parte dos requisitos para ob-tenccedilatildeo do grau de Bacharel em Ciecircncia daComputaccedilatildeo

Orientador Prof Viniacutecius Gusmatildeo Pereira de Saacute

RIO DE JANEIRO2019

AGRADECIMENTOS

Gostaria de agradecer primeiramente agrave UFRJ que me permitiu embarcar nessa jor-nada pela busca de conhecimento nesse fascinante campo que eacute a computaccedilatildeo Ao meuorientador Viniacutecius Gusmatildeo Pereira de Saacute pela atenccedilatildeo e ajuda no esclarecimento dosmelhores caminhos a se tomar na elaboraccedilatildeo deste trabalho Aos meus pais e a todaminha familia pelo incentivo e apoio incondicional A minha namorada pela paciecircnciae compreensatildeo nesta complicada fase da minha formaccedilatildeo acadecircmica E aos meus amigosque ja passaram ou que estatildeo passando pelo mesmo processo de conclusatildeo que eu e quecompartilham das mesmas dificuldades

ldquoElections are won by men and women chiefly because most people vote against somebodyrather than for somebody

Franklin P Adams

RESUMO

Existem diversos tipos de sistemas eleitorais em uso ao redor do mundo Cada paiacutes optapelo meacutetodo que melhor se adequa ao seu modo de governar muitas vezes utilizandovariaccedilotildees de um mesmo meacutetodo ou ateacute uma combinaccedilatildeo destes dependendo do cargopoliacutetico em questatildeo Atraveacutes da implementaccedilatildeo de um programa que permite simular umextenso nuacutemero de eleitores esta tese procura descobrir quais meacutetodos trazem resultadosque maximizam a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo quando testados sob diferentescenaacuterios poliacuteticos Cada eleitor simulado atribuiraacute notas para os candidatos que seratildeogeradas dependendo do cenaacuterio de maneira aleatoacuteria seguindo certa distribuiccedilatildeo de pro-babilidade ou deterministicamente atraveacutes de perfis eleitorais Tambeacutem seratildeo incluiacutedosnas simulaccedilotildees fatores reais de uma eleiccedilatildeo como o voto uacutetil e as coalizotildees entre can-didatos para que seja possiacutevel determinar de que maneira esses paracircmetros influenciamno resultado final Seraacute possiacutevel perceber que alguns dos sistemas satildeo muito eficazes naseleccedilatildeo dos melhores candidatos poreacutem afetados pelos votos taacuteticos enquanto outros satildeoresistentes a esses mas pecam em eficiecircncia

Palavras-chave Simulaccedilotildees Sistemas Eleitorais Satisfaccedilatildeo Meacutedia

ABSTRACT

There are several types of electoral systems in use around the world Each country choosesthe method that best fits their governance often using variations of the same method oreven a combination of these depending on the political position in question Through theimplementation of a program that simulates an extensive number of voters this thesisseeks to find out which methods bring results that maximize the rate of population sat-isfaction when tested under different political scenarios Each simulated voter will assignnotes to the candidates that will be generated depending on the scenario in randomfashion following a certain probability distribution or deterministically through electoralprofiles Also included in the simulations are the real factors of an election such as tacti-cal votes and coalitions between candidates so that it is possible to determine how theseparameters influence the final result It will be possible to see that some of the systemsare very effective in the selection of the best candidates however affected by tactical voteswhile others are resistant to these but lack efficiency

Keywords Simulations Electoral Systems Satisfaction Rate

LISTA DE ILUSTRACcedilOtildeES

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016 17Figura 2 ndash Captura de tela 1 30Figura 3 ndash Captura de tela 2 30Figura 4 ndash Captura de tela 3 31Figura 5 ndash Captura de tela 4 32Figura 6 ndash Captura de tela 5 32Figura 7 ndash Captura de tela 6 33Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico 34Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico 34Figura 10 ndash IRV primeiro turno - Cenaacuterio 1 35Figura 11 ndash IRV segundo turno - Cenaacuterio 1 35Figura 12 ndash IRV terceiro turno - Cenaacuterio 1 35Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico 36Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico 36Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico 36Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana 37Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 37Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto 40Figura 25 ndash IRV primeiro turno - Cenaacuterio 2 41Figura 26 ndash IRV segundo turno - Cenaacuterio 2 41Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2 42Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2 42Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 31 ndash TRS turno 1 - Cenaacuterio 4 45Figura 32 ndash TRS turno 2 - Cenaacuterio 4 46Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4 46Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4 46Figura 35 ndash FPTP - Cenaacuterio 5 48Figura 36 ndash TRS segundo turno - Cenaacuterio 5 48

Figura 37 ndash AVS - Cenaacuterio 5 49Figura 38 ndash BC - Cenaacuterio 5 49Figura 39 ndash SVS - Cenaacuterio 5 50Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria 50Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego 51Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego 51Figura 43 ndash BV - Cenaacuterio 6 52Figura 44 ndash estrutura candidates 53Figura 45 ndash estrutura voters 54Figura 46 ndash estrutura votes 54Figura 47 ndash PDF - Distribuiccedilatildeo Neutral 55Figura 48 ndash CDF - Distribuiccedilatildeo Neutral 55Figura 49 ndash PDF - Distribuiccedilatildeo Liked 56Figura 50 ndash CDF - Distribuiccedilatildeo Liked 56Figura 51 ndash PDF - Distribuiccedilatildeo Disliked 57Figura 52 ndash CDF - Distribuiccedilatildeo Disliked 57Figura 53 ndash PDF - Distribuiccedilatildeo Loved 58Figura 54 ndash CDF - Distribuiccedilatildeo Loved 58Figura 55 ndash PDF - Distribuiccedilatildeo Hated 59Figura 56 ndash CDF - Distribuiccedilatildeo Hated 59Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer 60Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer 60Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer 61Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer 61

LISTA DE COacuteDIGOS

A1 Meacutetodo create_voters 67B1 Meacutetodo create_candidates 68C1 Meacutetodo calculate_means 68D1 Meacutetodo get_mean 68E1 Meacutetodo calculate_mean 69F1 Meacutetodo set_leading_candidates 69G1 Meacutetodo irv_set_leading_candidates 69H1 Meacutetodo sort_ranks 70I1 Meacutetodo fptp_count_tactical_votes 71J1 Meacutetodo fptp_count_minority_votes 72K1 Meacutetodo trs_second_round 73L1 Meacutetodo trs_account_for_coalitions 74M1 Meacutetodo irv_count_votes 75N1 Meacutetodo avs_count_votes 76O1 Meacutetodo avs_count_votes_with_tactical 76P1 Meacutetodo irv_apply_tactical_votes 77Q1 Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo) 78R1 Meacutetodo bc_sum_candidates_scores 79S1 Meacutetodo svs_apply_tactical_votes 79T1 Meacutetodo svs_sum_candidates_scores 80U1 Meacutetodo bv_count_votes 80

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 2: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

GABRIEL S BEVILAQUA

ELEICcedilOtildeES MAIS JUSTAS SIMULANDO E INTERPRETANDO DIFERENTESSISTEMAS DE VOTACcedilAtildeO

Trabalho de conclusatildeo de curso de graduaccedilatildeoapresentado ao Departamento de Ciecircncia daComputaccedilatildeo da Universidade Federal do Riode Janeiro como parte dos requisitos para ob-tenccedilatildeo do grau de Bacharel em Ciecircncia daComputaccedilatildeo

Orientador Prof Viniacutecius Gusmatildeo Pereira de Saacute

RIO DE JANEIRO2019

AGRADECIMENTOS

Gostaria de agradecer primeiramente agrave UFRJ que me permitiu embarcar nessa jor-nada pela busca de conhecimento nesse fascinante campo que eacute a computaccedilatildeo Ao meuorientador Viniacutecius Gusmatildeo Pereira de Saacute pela atenccedilatildeo e ajuda no esclarecimento dosmelhores caminhos a se tomar na elaboraccedilatildeo deste trabalho Aos meus pais e a todaminha familia pelo incentivo e apoio incondicional A minha namorada pela paciecircnciae compreensatildeo nesta complicada fase da minha formaccedilatildeo acadecircmica E aos meus amigosque ja passaram ou que estatildeo passando pelo mesmo processo de conclusatildeo que eu e quecompartilham das mesmas dificuldades

ldquoElections are won by men and women chiefly because most people vote against somebodyrather than for somebody

Franklin P Adams

RESUMO

Existem diversos tipos de sistemas eleitorais em uso ao redor do mundo Cada paiacutes optapelo meacutetodo que melhor se adequa ao seu modo de governar muitas vezes utilizandovariaccedilotildees de um mesmo meacutetodo ou ateacute uma combinaccedilatildeo destes dependendo do cargopoliacutetico em questatildeo Atraveacutes da implementaccedilatildeo de um programa que permite simular umextenso nuacutemero de eleitores esta tese procura descobrir quais meacutetodos trazem resultadosque maximizam a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo quando testados sob diferentescenaacuterios poliacuteticos Cada eleitor simulado atribuiraacute notas para os candidatos que seratildeogeradas dependendo do cenaacuterio de maneira aleatoacuteria seguindo certa distribuiccedilatildeo de pro-babilidade ou deterministicamente atraveacutes de perfis eleitorais Tambeacutem seratildeo incluiacutedosnas simulaccedilotildees fatores reais de uma eleiccedilatildeo como o voto uacutetil e as coalizotildees entre can-didatos para que seja possiacutevel determinar de que maneira esses paracircmetros influenciamno resultado final Seraacute possiacutevel perceber que alguns dos sistemas satildeo muito eficazes naseleccedilatildeo dos melhores candidatos poreacutem afetados pelos votos taacuteticos enquanto outros satildeoresistentes a esses mas pecam em eficiecircncia

Palavras-chave Simulaccedilotildees Sistemas Eleitorais Satisfaccedilatildeo Meacutedia

ABSTRACT

There are several types of electoral systems in use around the world Each country choosesthe method that best fits their governance often using variations of the same method oreven a combination of these depending on the political position in question Through theimplementation of a program that simulates an extensive number of voters this thesisseeks to find out which methods bring results that maximize the rate of population sat-isfaction when tested under different political scenarios Each simulated voter will assignnotes to the candidates that will be generated depending on the scenario in randomfashion following a certain probability distribution or deterministically through electoralprofiles Also included in the simulations are the real factors of an election such as tacti-cal votes and coalitions between candidates so that it is possible to determine how theseparameters influence the final result It will be possible to see that some of the systemsare very effective in the selection of the best candidates however affected by tactical voteswhile others are resistant to these but lack efficiency

Keywords Simulations Electoral Systems Satisfaction Rate

LISTA DE ILUSTRACcedilOtildeES

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016 17Figura 2 ndash Captura de tela 1 30Figura 3 ndash Captura de tela 2 30Figura 4 ndash Captura de tela 3 31Figura 5 ndash Captura de tela 4 32Figura 6 ndash Captura de tela 5 32Figura 7 ndash Captura de tela 6 33Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico 34Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico 34Figura 10 ndash IRV primeiro turno - Cenaacuterio 1 35Figura 11 ndash IRV segundo turno - Cenaacuterio 1 35Figura 12 ndash IRV terceiro turno - Cenaacuterio 1 35Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico 36Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico 36Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico 36Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana 37Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 37Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto 40Figura 25 ndash IRV primeiro turno - Cenaacuterio 2 41Figura 26 ndash IRV segundo turno - Cenaacuterio 2 41Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2 42Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2 42Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 31 ndash TRS turno 1 - Cenaacuterio 4 45Figura 32 ndash TRS turno 2 - Cenaacuterio 4 46Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4 46Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4 46Figura 35 ndash FPTP - Cenaacuterio 5 48Figura 36 ndash TRS segundo turno - Cenaacuterio 5 48

Figura 37 ndash AVS - Cenaacuterio 5 49Figura 38 ndash BC - Cenaacuterio 5 49Figura 39 ndash SVS - Cenaacuterio 5 50Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria 50Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego 51Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego 51Figura 43 ndash BV - Cenaacuterio 6 52Figura 44 ndash estrutura candidates 53Figura 45 ndash estrutura voters 54Figura 46 ndash estrutura votes 54Figura 47 ndash PDF - Distribuiccedilatildeo Neutral 55Figura 48 ndash CDF - Distribuiccedilatildeo Neutral 55Figura 49 ndash PDF - Distribuiccedilatildeo Liked 56Figura 50 ndash CDF - Distribuiccedilatildeo Liked 56Figura 51 ndash PDF - Distribuiccedilatildeo Disliked 57Figura 52 ndash CDF - Distribuiccedilatildeo Disliked 57Figura 53 ndash PDF - Distribuiccedilatildeo Loved 58Figura 54 ndash CDF - Distribuiccedilatildeo Loved 58Figura 55 ndash PDF - Distribuiccedilatildeo Hated 59Figura 56 ndash CDF - Distribuiccedilatildeo Hated 59Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer 60Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer 60Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer 61Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer 61

LISTA DE COacuteDIGOS

A1 Meacutetodo create_voters 67B1 Meacutetodo create_candidates 68C1 Meacutetodo calculate_means 68D1 Meacutetodo get_mean 68E1 Meacutetodo calculate_mean 69F1 Meacutetodo set_leading_candidates 69G1 Meacutetodo irv_set_leading_candidates 69H1 Meacutetodo sort_ranks 70I1 Meacutetodo fptp_count_tactical_votes 71J1 Meacutetodo fptp_count_minority_votes 72K1 Meacutetodo trs_second_round 73L1 Meacutetodo trs_account_for_coalitions 74M1 Meacutetodo irv_count_votes 75N1 Meacutetodo avs_count_votes 76O1 Meacutetodo avs_count_votes_with_tactical 76P1 Meacutetodo irv_apply_tactical_votes 77Q1 Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo) 78R1 Meacutetodo bc_sum_candidates_scores 79S1 Meacutetodo svs_apply_tactical_votes 79T1 Meacutetodo svs_sum_candidates_scores 80U1 Meacutetodo bv_count_votes 80

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 3: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

AGRADECIMENTOS

Gostaria de agradecer primeiramente agrave UFRJ que me permitiu embarcar nessa jor-nada pela busca de conhecimento nesse fascinante campo que eacute a computaccedilatildeo Ao meuorientador Viniacutecius Gusmatildeo Pereira de Saacute pela atenccedilatildeo e ajuda no esclarecimento dosmelhores caminhos a se tomar na elaboraccedilatildeo deste trabalho Aos meus pais e a todaminha familia pelo incentivo e apoio incondicional A minha namorada pela paciecircnciae compreensatildeo nesta complicada fase da minha formaccedilatildeo acadecircmica E aos meus amigosque ja passaram ou que estatildeo passando pelo mesmo processo de conclusatildeo que eu e quecompartilham das mesmas dificuldades

ldquoElections are won by men and women chiefly because most people vote against somebodyrather than for somebody

Franklin P Adams

RESUMO

Existem diversos tipos de sistemas eleitorais em uso ao redor do mundo Cada paiacutes optapelo meacutetodo que melhor se adequa ao seu modo de governar muitas vezes utilizandovariaccedilotildees de um mesmo meacutetodo ou ateacute uma combinaccedilatildeo destes dependendo do cargopoliacutetico em questatildeo Atraveacutes da implementaccedilatildeo de um programa que permite simular umextenso nuacutemero de eleitores esta tese procura descobrir quais meacutetodos trazem resultadosque maximizam a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo quando testados sob diferentescenaacuterios poliacuteticos Cada eleitor simulado atribuiraacute notas para os candidatos que seratildeogeradas dependendo do cenaacuterio de maneira aleatoacuteria seguindo certa distribuiccedilatildeo de pro-babilidade ou deterministicamente atraveacutes de perfis eleitorais Tambeacutem seratildeo incluiacutedosnas simulaccedilotildees fatores reais de uma eleiccedilatildeo como o voto uacutetil e as coalizotildees entre can-didatos para que seja possiacutevel determinar de que maneira esses paracircmetros influenciamno resultado final Seraacute possiacutevel perceber que alguns dos sistemas satildeo muito eficazes naseleccedilatildeo dos melhores candidatos poreacutem afetados pelos votos taacuteticos enquanto outros satildeoresistentes a esses mas pecam em eficiecircncia

Palavras-chave Simulaccedilotildees Sistemas Eleitorais Satisfaccedilatildeo Meacutedia

ABSTRACT

There are several types of electoral systems in use around the world Each country choosesthe method that best fits their governance often using variations of the same method oreven a combination of these depending on the political position in question Through theimplementation of a program that simulates an extensive number of voters this thesisseeks to find out which methods bring results that maximize the rate of population sat-isfaction when tested under different political scenarios Each simulated voter will assignnotes to the candidates that will be generated depending on the scenario in randomfashion following a certain probability distribution or deterministically through electoralprofiles Also included in the simulations are the real factors of an election such as tacti-cal votes and coalitions between candidates so that it is possible to determine how theseparameters influence the final result It will be possible to see that some of the systemsare very effective in the selection of the best candidates however affected by tactical voteswhile others are resistant to these but lack efficiency

Keywords Simulations Electoral Systems Satisfaction Rate

LISTA DE ILUSTRACcedilOtildeES

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016 17Figura 2 ndash Captura de tela 1 30Figura 3 ndash Captura de tela 2 30Figura 4 ndash Captura de tela 3 31Figura 5 ndash Captura de tela 4 32Figura 6 ndash Captura de tela 5 32Figura 7 ndash Captura de tela 6 33Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico 34Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico 34Figura 10 ndash IRV primeiro turno - Cenaacuterio 1 35Figura 11 ndash IRV segundo turno - Cenaacuterio 1 35Figura 12 ndash IRV terceiro turno - Cenaacuterio 1 35Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico 36Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico 36Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico 36Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana 37Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 37Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto 40Figura 25 ndash IRV primeiro turno - Cenaacuterio 2 41Figura 26 ndash IRV segundo turno - Cenaacuterio 2 41Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2 42Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2 42Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 31 ndash TRS turno 1 - Cenaacuterio 4 45Figura 32 ndash TRS turno 2 - Cenaacuterio 4 46Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4 46Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4 46Figura 35 ndash FPTP - Cenaacuterio 5 48Figura 36 ndash TRS segundo turno - Cenaacuterio 5 48

Figura 37 ndash AVS - Cenaacuterio 5 49Figura 38 ndash BC - Cenaacuterio 5 49Figura 39 ndash SVS - Cenaacuterio 5 50Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria 50Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego 51Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego 51Figura 43 ndash BV - Cenaacuterio 6 52Figura 44 ndash estrutura candidates 53Figura 45 ndash estrutura voters 54Figura 46 ndash estrutura votes 54Figura 47 ndash PDF - Distribuiccedilatildeo Neutral 55Figura 48 ndash CDF - Distribuiccedilatildeo Neutral 55Figura 49 ndash PDF - Distribuiccedilatildeo Liked 56Figura 50 ndash CDF - Distribuiccedilatildeo Liked 56Figura 51 ndash PDF - Distribuiccedilatildeo Disliked 57Figura 52 ndash CDF - Distribuiccedilatildeo Disliked 57Figura 53 ndash PDF - Distribuiccedilatildeo Loved 58Figura 54 ndash CDF - Distribuiccedilatildeo Loved 58Figura 55 ndash PDF - Distribuiccedilatildeo Hated 59Figura 56 ndash CDF - Distribuiccedilatildeo Hated 59Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer 60Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer 60Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer 61Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer 61

LISTA DE COacuteDIGOS

A1 Meacutetodo create_voters 67B1 Meacutetodo create_candidates 68C1 Meacutetodo calculate_means 68D1 Meacutetodo get_mean 68E1 Meacutetodo calculate_mean 69F1 Meacutetodo set_leading_candidates 69G1 Meacutetodo irv_set_leading_candidates 69H1 Meacutetodo sort_ranks 70I1 Meacutetodo fptp_count_tactical_votes 71J1 Meacutetodo fptp_count_minority_votes 72K1 Meacutetodo trs_second_round 73L1 Meacutetodo trs_account_for_coalitions 74M1 Meacutetodo irv_count_votes 75N1 Meacutetodo avs_count_votes 76O1 Meacutetodo avs_count_votes_with_tactical 76P1 Meacutetodo irv_apply_tactical_votes 77Q1 Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo) 78R1 Meacutetodo bc_sum_candidates_scores 79S1 Meacutetodo svs_apply_tactical_votes 79T1 Meacutetodo svs_sum_candidates_scores 80U1 Meacutetodo bv_count_votes 80

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 4: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

ldquoElections are won by men and women chiefly because most people vote against somebodyrather than for somebody

Franklin P Adams

RESUMO

Existem diversos tipos de sistemas eleitorais em uso ao redor do mundo Cada paiacutes optapelo meacutetodo que melhor se adequa ao seu modo de governar muitas vezes utilizandovariaccedilotildees de um mesmo meacutetodo ou ateacute uma combinaccedilatildeo destes dependendo do cargopoliacutetico em questatildeo Atraveacutes da implementaccedilatildeo de um programa que permite simular umextenso nuacutemero de eleitores esta tese procura descobrir quais meacutetodos trazem resultadosque maximizam a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo quando testados sob diferentescenaacuterios poliacuteticos Cada eleitor simulado atribuiraacute notas para os candidatos que seratildeogeradas dependendo do cenaacuterio de maneira aleatoacuteria seguindo certa distribuiccedilatildeo de pro-babilidade ou deterministicamente atraveacutes de perfis eleitorais Tambeacutem seratildeo incluiacutedosnas simulaccedilotildees fatores reais de uma eleiccedilatildeo como o voto uacutetil e as coalizotildees entre can-didatos para que seja possiacutevel determinar de que maneira esses paracircmetros influenciamno resultado final Seraacute possiacutevel perceber que alguns dos sistemas satildeo muito eficazes naseleccedilatildeo dos melhores candidatos poreacutem afetados pelos votos taacuteticos enquanto outros satildeoresistentes a esses mas pecam em eficiecircncia

Palavras-chave Simulaccedilotildees Sistemas Eleitorais Satisfaccedilatildeo Meacutedia

ABSTRACT

There are several types of electoral systems in use around the world Each country choosesthe method that best fits their governance often using variations of the same method oreven a combination of these depending on the political position in question Through theimplementation of a program that simulates an extensive number of voters this thesisseeks to find out which methods bring results that maximize the rate of population sat-isfaction when tested under different political scenarios Each simulated voter will assignnotes to the candidates that will be generated depending on the scenario in randomfashion following a certain probability distribution or deterministically through electoralprofiles Also included in the simulations are the real factors of an election such as tacti-cal votes and coalitions between candidates so that it is possible to determine how theseparameters influence the final result It will be possible to see that some of the systemsare very effective in the selection of the best candidates however affected by tactical voteswhile others are resistant to these but lack efficiency

Keywords Simulations Electoral Systems Satisfaction Rate

LISTA DE ILUSTRACcedilOtildeES

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016 17Figura 2 ndash Captura de tela 1 30Figura 3 ndash Captura de tela 2 30Figura 4 ndash Captura de tela 3 31Figura 5 ndash Captura de tela 4 32Figura 6 ndash Captura de tela 5 32Figura 7 ndash Captura de tela 6 33Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico 34Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico 34Figura 10 ndash IRV primeiro turno - Cenaacuterio 1 35Figura 11 ndash IRV segundo turno - Cenaacuterio 1 35Figura 12 ndash IRV terceiro turno - Cenaacuterio 1 35Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico 36Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico 36Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico 36Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana 37Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 37Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto 40Figura 25 ndash IRV primeiro turno - Cenaacuterio 2 41Figura 26 ndash IRV segundo turno - Cenaacuterio 2 41Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2 42Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2 42Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 31 ndash TRS turno 1 - Cenaacuterio 4 45Figura 32 ndash TRS turno 2 - Cenaacuterio 4 46Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4 46Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4 46Figura 35 ndash FPTP - Cenaacuterio 5 48Figura 36 ndash TRS segundo turno - Cenaacuterio 5 48

Figura 37 ndash AVS - Cenaacuterio 5 49Figura 38 ndash BC - Cenaacuterio 5 49Figura 39 ndash SVS - Cenaacuterio 5 50Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria 50Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego 51Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego 51Figura 43 ndash BV - Cenaacuterio 6 52Figura 44 ndash estrutura candidates 53Figura 45 ndash estrutura voters 54Figura 46 ndash estrutura votes 54Figura 47 ndash PDF - Distribuiccedilatildeo Neutral 55Figura 48 ndash CDF - Distribuiccedilatildeo Neutral 55Figura 49 ndash PDF - Distribuiccedilatildeo Liked 56Figura 50 ndash CDF - Distribuiccedilatildeo Liked 56Figura 51 ndash PDF - Distribuiccedilatildeo Disliked 57Figura 52 ndash CDF - Distribuiccedilatildeo Disliked 57Figura 53 ndash PDF - Distribuiccedilatildeo Loved 58Figura 54 ndash CDF - Distribuiccedilatildeo Loved 58Figura 55 ndash PDF - Distribuiccedilatildeo Hated 59Figura 56 ndash CDF - Distribuiccedilatildeo Hated 59Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer 60Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer 60Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer 61Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer 61

LISTA DE COacuteDIGOS

A1 Meacutetodo create_voters 67B1 Meacutetodo create_candidates 68C1 Meacutetodo calculate_means 68D1 Meacutetodo get_mean 68E1 Meacutetodo calculate_mean 69F1 Meacutetodo set_leading_candidates 69G1 Meacutetodo irv_set_leading_candidates 69H1 Meacutetodo sort_ranks 70I1 Meacutetodo fptp_count_tactical_votes 71J1 Meacutetodo fptp_count_minority_votes 72K1 Meacutetodo trs_second_round 73L1 Meacutetodo trs_account_for_coalitions 74M1 Meacutetodo irv_count_votes 75N1 Meacutetodo avs_count_votes 76O1 Meacutetodo avs_count_votes_with_tactical 76P1 Meacutetodo irv_apply_tactical_votes 77Q1 Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo) 78R1 Meacutetodo bc_sum_candidates_scores 79S1 Meacutetodo svs_apply_tactical_votes 79T1 Meacutetodo svs_sum_candidates_scores 80U1 Meacutetodo bv_count_votes 80

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 5: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

RESUMO

Existem diversos tipos de sistemas eleitorais em uso ao redor do mundo Cada paiacutes optapelo meacutetodo que melhor se adequa ao seu modo de governar muitas vezes utilizandovariaccedilotildees de um mesmo meacutetodo ou ateacute uma combinaccedilatildeo destes dependendo do cargopoliacutetico em questatildeo Atraveacutes da implementaccedilatildeo de um programa que permite simular umextenso nuacutemero de eleitores esta tese procura descobrir quais meacutetodos trazem resultadosque maximizam a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo quando testados sob diferentescenaacuterios poliacuteticos Cada eleitor simulado atribuiraacute notas para os candidatos que seratildeogeradas dependendo do cenaacuterio de maneira aleatoacuteria seguindo certa distribuiccedilatildeo de pro-babilidade ou deterministicamente atraveacutes de perfis eleitorais Tambeacutem seratildeo incluiacutedosnas simulaccedilotildees fatores reais de uma eleiccedilatildeo como o voto uacutetil e as coalizotildees entre can-didatos para que seja possiacutevel determinar de que maneira esses paracircmetros influenciamno resultado final Seraacute possiacutevel perceber que alguns dos sistemas satildeo muito eficazes naseleccedilatildeo dos melhores candidatos poreacutem afetados pelos votos taacuteticos enquanto outros satildeoresistentes a esses mas pecam em eficiecircncia

Palavras-chave Simulaccedilotildees Sistemas Eleitorais Satisfaccedilatildeo Meacutedia

ABSTRACT

There are several types of electoral systems in use around the world Each country choosesthe method that best fits their governance often using variations of the same method oreven a combination of these depending on the political position in question Through theimplementation of a program that simulates an extensive number of voters this thesisseeks to find out which methods bring results that maximize the rate of population sat-isfaction when tested under different political scenarios Each simulated voter will assignnotes to the candidates that will be generated depending on the scenario in randomfashion following a certain probability distribution or deterministically through electoralprofiles Also included in the simulations are the real factors of an election such as tacti-cal votes and coalitions between candidates so that it is possible to determine how theseparameters influence the final result It will be possible to see that some of the systemsare very effective in the selection of the best candidates however affected by tactical voteswhile others are resistant to these but lack efficiency

Keywords Simulations Electoral Systems Satisfaction Rate

LISTA DE ILUSTRACcedilOtildeES

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016 17Figura 2 ndash Captura de tela 1 30Figura 3 ndash Captura de tela 2 30Figura 4 ndash Captura de tela 3 31Figura 5 ndash Captura de tela 4 32Figura 6 ndash Captura de tela 5 32Figura 7 ndash Captura de tela 6 33Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico 34Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico 34Figura 10 ndash IRV primeiro turno - Cenaacuterio 1 35Figura 11 ndash IRV segundo turno - Cenaacuterio 1 35Figura 12 ndash IRV terceiro turno - Cenaacuterio 1 35Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico 36Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico 36Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico 36Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana 37Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 37Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto 40Figura 25 ndash IRV primeiro turno - Cenaacuterio 2 41Figura 26 ndash IRV segundo turno - Cenaacuterio 2 41Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2 42Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2 42Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 31 ndash TRS turno 1 - Cenaacuterio 4 45Figura 32 ndash TRS turno 2 - Cenaacuterio 4 46Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4 46Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4 46Figura 35 ndash FPTP - Cenaacuterio 5 48Figura 36 ndash TRS segundo turno - Cenaacuterio 5 48

Figura 37 ndash AVS - Cenaacuterio 5 49Figura 38 ndash BC - Cenaacuterio 5 49Figura 39 ndash SVS - Cenaacuterio 5 50Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria 50Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego 51Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego 51Figura 43 ndash BV - Cenaacuterio 6 52Figura 44 ndash estrutura candidates 53Figura 45 ndash estrutura voters 54Figura 46 ndash estrutura votes 54Figura 47 ndash PDF - Distribuiccedilatildeo Neutral 55Figura 48 ndash CDF - Distribuiccedilatildeo Neutral 55Figura 49 ndash PDF - Distribuiccedilatildeo Liked 56Figura 50 ndash CDF - Distribuiccedilatildeo Liked 56Figura 51 ndash PDF - Distribuiccedilatildeo Disliked 57Figura 52 ndash CDF - Distribuiccedilatildeo Disliked 57Figura 53 ndash PDF - Distribuiccedilatildeo Loved 58Figura 54 ndash CDF - Distribuiccedilatildeo Loved 58Figura 55 ndash PDF - Distribuiccedilatildeo Hated 59Figura 56 ndash CDF - Distribuiccedilatildeo Hated 59Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer 60Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer 60Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer 61Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer 61

LISTA DE COacuteDIGOS

A1 Meacutetodo create_voters 67B1 Meacutetodo create_candidates 68C1 Meacutetodo calculate_means 68D1 Meacutetodo get_mean 68E1 Meacutetodo calculate_mean 69F1 Meacutetodo set_leading_candidates 69G1 Meacutetodo irv_set_leading_candidates 69H1 Meacutetodo sort_ranks 70I1 Meacutetodo fptp_count_tactical_votes 71J1 Meacutetodo fptp_count_minority_votes 72K1 Meacutetodo trs_second_round 73L1 Meacutetodo trs_account_for_coalitions 74M1 Meacutetodo irv_count_votes 75N1 Meacutetodo avs_count_votes 76O1 Meacutetodo avs_count_votes_with_tactical 76P1 Meacutetodo irv_apply_tactical_votes 77Q1 Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo) 78R1 Meacutetodo bc_sum_candidates_scores 79S1 Meacutetodo svs_apply_tactical_votes 79T1 Meacutetodo svs_sum_candidates_scores 80U1 Meacutetodo bv_count_votes 80

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 6: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

ABSTRACT

There are several types of electoral systems in use around the world Each country choosesthe method that best fits their governance often using variations of the same method oreven a combination of these depending on the political position in question Through theimplementation of a program that simulates an extensive number of voters this thesisseeks to find out which methods bring results that maximize the rate of population sat-isfaction when tested under different political scenarios Each simulated voter will assignnotes to the candidates that will be generated depending on the scenario in randomfashion following a certain probability distribution or deterministically through electoralprofiles Also included in the simulations are the real factors of an election such as tacti-cal votes and coalitions between candidates so that it is possible to determine how theseparameters influence the final result It will be possible to see that some of the systemsare very effective in the selection of the best candidates however affected by tactical voteswhile others are resistant to these but lack efficiency

Keywords Simulations Electoral Systems Satisfaction Rate

LISTA DE ILUSTRACcedilOtildeES

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016 17Figura 2 ndash Captura de tela 1 30Figura 3 ndash Captura de tela 2 30Figura 4 ndash Captura de tela 3 31Figura 5 ndash Captura de tela 4 32Figura 6 ndash Captura de tela 5 32Figura 7 ndash Captura de tela 6 33Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico 34Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico 34Figura 10 ndash IRV primeiro turno - Cenaacuterio 1 35Figura 11 ndash IRV segundo turno - Cenaacuterio 1 35Figura 12 ndash IRV terceiro turno - Cenaacuterio 1 35Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico 36Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico 36Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico 36Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana 37Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 37Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto 40Figura 25 ndash IRV primeiro turno - Cenaacuterio 2 41Figura 26 ndash IRV segundo turno - Cenaacuterio 2 41Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2 42Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2 42Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 31 ndash TRS turno 1 - Cenaacuterio 4 45Figura 32 ndash TRS turno 2 - Cenaacuterio 4 46Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4 46Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4 46Figura 35 ndash FPTP - Cenaacuterio 5 48Figura 36 ndash TRS segundo turno - Cenaacuterio 5 48

Figura 37 ndash AVS - Cenaacuterio 5 49Figura 38 ndash BC - Cenaacuterio 5 49Figura 39 ndash SVS - Cenaacuterio 5 50Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria 50Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego 51Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego 51Figura 43 ndash BV - Cenaacuterio 6 52Figura 44 ndash estrutura candidates 53Figura 45 ndash estrutura voters 54Figura 46 ndash estrutura votes 54Figura 47 ndash PDF - Distribuiccedilatildeo Neutral 55Figura 48 ndash CDF - Distribuiccedilatildeo Neutral 55Figura 49 ndash PDF - Distribuiccedilatildeo Liked 56Figura 50 ndash CDF - Distribuiccedilatildeo Liked 56Figura 51 ndash PDF - Distribuiccedilatildeo Disliked 57Figura 52 ndash CDF - Distribuiccedilatildeo Disliked 57Figura 53 ndash PDF - Distribuiccedilatildeo Loved 58Figura 54 ndash CDF - Distribuiccedilatildeo Loved 58Figura 55 ndash PDF - Distribuiccedilatildeo Hated 59Figura 56 ndash CDF - Distribuiccedilatildeo Hated 59Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer 60Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer 60Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer 61Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer 61

LISTA DE COacuteDIGOS

A1 Meacutetodo create_voters 67B1 Meacutetodo create_candidates 68C1 Meacutetodo calculate_means 68D1 Meacutetodo get_mean 68E1 Meacutetodo calculate_mean 69F1 Meacutetodo set_leading_candidates 69G1 Meacutetodo irv_set_leading_candidates 69H1 Meacutetodo sort_ranks 70I1 Meacutetodo fptp_count_tactical_votes 71J1 Meacutetodo fptp_count_minority_votes 72K1 Meacutetodo trs_second_round 73L1 Meacutetodo trs_account_for_coalitions 74M1 Meacutetodo irv_count_votes 75N1 Meacutetodo avs_count_votes 76O1 Meacutetodo avs_count_votes_with_tactical 76P1 Meacutetodo irv_apply_tactical_votes 77Q1 Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo) 78R1 Meacutetodo bc_sum_candidates_scores 79S1 Meacutetodo svs_apply_tactical_votes 79T1 Meacutetodo svs_sum_candidates_scores 80U1 Meacutetodo bv_count_votes 80

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 7: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

LISTA DE ILUSTRACcedilOtildeES

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016 17Figura 2 ndash Captura de tela 1 30Figura 3 ndash Captura de tela 2 30Figura 4 ndash Captura de tela 3 31Figura 5 ndash Captura de tela 4 32Figura 6 ndash Captura de tela 5 32Figura 7 ndash Captura de tela 6 33Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico 34Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico 34Figura 10 ndash IRV primeiro turno - Cenaacuterio 1 35Figura 11 ndash IRV segundo turno - Cenaacuterio 1 35Figura 12 ndash IRV terceiro turno - Cenaacuterio 1 35Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico 36Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico 36Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico 36Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana 37Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 37Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana 38Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana 39Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto 40Figura 25 ndash IRV primeiro turno - Cenaacuterio 2 41Figura 26 ndash IRV segundo turno - Cenaacuterio 2 41Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2 42Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2 42Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 44Figura 31 ndash TRS turno 1 - Cenaacuterio 4 45Figura 32 ndash TRS turno 2 - Cenaacuterio 4 46Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4 46Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4 46Figura 35 ndash FPTP - Cenaacuterio 5 48Figura 36 ndash TRS segundo turno - Cenaacuterio 5 48

Figura 37 ndash AVS - Cenaacuterio 5 49Figura 38 ndash BC - Cenaacuterio 5 49Figura 39 ndash SVS - Cenaacuterio 5 50Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria 50Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego 51Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego 51Figura 43 ndash BV - Cenaacuterio 6 52Figura 44 ndash estrutura candidates 53Figura 45 ndash estrutura voters 54Figura 46 ndash estrutura votes 54Figura 47 ndash PDF - Distribuiccedilatildeo Neutral 55Figura 48 ndash CDF - Distribuiccedilatildeo Neutral 55Figura 49 ndash PDF - Distribuiccedilatildeo Liked 56Figura 50 ndash CDF - Distribuiccedilatildeo Liked 56Figura 51 ndash PDF - Distribuiccedilatildeo Disliked 57Figura 52 ndash CDF - Distribuiccedilatildeo Disliked 57Figura 53 ndash PDF - Distribuiccedilatildeo Loved 58Figura 54 ndash CDF - Distribuiccedilatildeo Loved 58Figura 55 ndash PDF - Distribuiccedilatildeo Hated 59Figura 56 ndash CDF - Distribuiccedilatildeo Hated 59Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer 60Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer 60Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer 61Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer 61

LISTA DE COacuteDIGOS

A1 Meacutetodo create_voters 67B1 Meacutetodo create_candidates 68C1 Meacutetodo calculate_means 68D1 Meacutetodo get_mean 68E1 Meacutetodo calculate_mean 69F1 Meacutetodo set_leading_candidates 69G1 Meacutetodo irv_set_leading_candidates 69H1 Meacutetodo sort_ranks 70I1 Meacutetodo fptp_count_tactical_votes 71J1 Meacutetodo fptp_count_minority_votes 72K1 Meacutetodo trs_second_round 73L1 Meacutetodo trs_account_for_coalitions 74M1 Meacutetodo irv_count_votes 75N1 Meacutetodo avs_count_votes 76O1 Meacutetodo avs_count_votes_with_tactical 76P1 Meacutetodo irv_apply_tactical_votes 77Q1 Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo) 78R1 Meacutetodo bc_sum_candidates_scores 79S1 Meacutetodo svs_apply_tactical_votes 79T1 Meacutetodo svs_sum_candidates_scores 80U1 Meacutetodo bv_count_votes 80

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 8: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

Figura 37 ndash AVS - Cenaacuterio 5 49Figura 38 ndash BC - Cenaacuterio 5 49Figura 39 ndash SVS - Cenaacuterio 5 50Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria 50Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego 51Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego 51Figura 43 ndash BV - Cenaacuterio 6 52Figura 44 ndash estrutura candidates 53Figura 45 ndash estrutura voters 54Figura 46 ndash estrutura votes 54Figura 47 ndash PDF - Distribuiccedilatildeo Neutral 55Figura 48 ndash CDF - Distribuiccedilatildeo Neutral 55Figura 49 ndash PDF - Distribuiccedilatildeo Liked 56Figura 50 ndash CDF - Distribuiccedilatildeo Liked 56Figura 51 ndash PDF - Distribuiccedilatildeo Disliked 57Figura 52 ndash CDF - Distribuiccedilatildeo Disliked 57Figura 53 ndash PDF - Distribuiccedilatildeo Loved 58Figura 54 ndash CDF - Distribuiccedilatildeo Loved 58Figura 55 ndash PDF - Distribuiccedilatildeo Hated 59Figura 56 ndash CDF - Distribuiccedilatildeo Hated 59Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer 60Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer 60Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer 61Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer 61

LISTA DE COacuteDIGOS

A1 Meacutetodo create_voters 67B1 Meacutetodo create_candidates 68C1 Meacutetodo calculate_means 68D1 Meacutetodo get_mean 68E1 Meacutetodo calculate_mean 69F1 Meacutetodo set_leading_candidates 69G1 Meacutetodo irv_set_leading_candidates 69H1 Meacutetodo sort_ranks 70I1 Meacutetodo fptp_count_tactical_votes 71J1 Meacutetodo fptp_count_minority_votes 72K1 Meacutetodo trs_second_round 73L1 Meacutetodo trs_account_for_coalitions 74M1 Meacutetodo irv_count_votes 75N1 Meacutetodo avs_count_votes 76O1 Meacutetodo avs_count_votes_with_tactical 76P1 Meacutetodo irv_apply_tactical_votes 77Q1 Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo) 78R1 Meacutetodo bc_sum_candidates_scores 79S1 Meacutetodo svs_apply_tactical_votes 79T1 Meacutetodo svs_sum_candidates_scores 80U1 Meacutetodo bv_count_votes 80

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 9: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

LISTA DE COacuteDIGOS

A1 Meacutetodo create_voters 67B1 Meacutetodo create_candidates 68C1 Meacutetodo calculate_means 68D1 Meacutetodo get_mean 68E1 Meacutetodo calculate_mean 69F1 Meacutetodo set_leading_candidates 69G1 Meacutetodo irv_set_leading_candidates 69H1 Meacutetodo sort_ranks 70I1 Meacutetodo fptp_count_tactical_votes 71J1 Meacutetodo fptp_count_minority_votes 72K1 Meacutetodo trs_second_round 73L1 Meacutetodo trs_account_for_coalitions 74M1 Meacutetodo irv_count_votes 75N1 Meacutetodo avs_count_votes 76O1 Meacutetodo avs_count_votes_with_tactical 76P1 Meacutetodo irv_apply_tactical_votes 77Q1 Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo) 78R1 Meacutetodo bc_sum_candidates_scores 79S1 Meacutetodo svs_apply_tactical_votes 79T1 Meacutetodo svs_sum_candidates_scores 80U1 Meacutetodo bv_count_votes 80

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 10: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

LISTA DE TABELAS

Tabela 1 ndash Exemplo FPTP 18Tabela 2 ndash 2deg turno do TRS 20Tabela 3 ndash Exemplo IRV 22Tabela 4 ndash Desenvolvimento do IRV 22Tabela 5 ndash Exemplo AVS 24Tabela 6 ndash Resultado AVS 24Tabela 7 ndash Resultado BC 26Tabela 8 ndash Exemplo SVS 27Tabela 9 ndash Resultado SVS 27Tabela 10 ndash Exemplo BV 28Tabela 11 ndash Resultado BV 28Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2 41Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2 42Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3 43Tabela 15 ndash Resultados do Cenaacuterio 3 44Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5 47Tabela 17 ndash Resultados do Cenaacuterio 5 48Tabela 18 ndash Resultados do Cenaacuterio 6 52

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 11: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

LISTA DE ABREVIATURAS E SIGLAS

FPTP First Past The Post

TRS Two-Round System

IRV Instant Runoff Voting

AVS Approval Voting System

BC Borda Count

SVS Score Voting System

BV Bloc Vote

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 12: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

SUMAacuteRIO

1 INTRODUCcedilAtildeO 1511 MOTIVACcedilAtildeO E OBJETIVO 1512 MEacuteTODO 1513 ESTRUTURA 15

2 SISTEMAS ELEITORAIS 1721 FISRT PAST THE POST 17211 Exemplo 18212 Vantagens e Desvantagens do FPTP 18213 Voto Uacutetil no FPTP 1922 TWO-ROUND SYSTEM 19221 Exemplo 20222 Vantagens e Desvantagens do TRS 20223 Voto Uacutetil no TRS 2123 INSTANT-RUNOFF VOTING 21231 Exemplo 22232 Vantagens e Desvantagens do IRV 22233 Voto Uacutetil no IRV 2324 APPROVAL VOTING SYSTEM 24241 Exemplo 24242 Vantagens e Desvantagens do AVS 24243 Voto Uacutetil no AVS 2525 THE BORDA COUNT 25251 Exemplo 25252 Vantagens e Desvantagens do BC 26253 Voto Uacutetil no BC 2626 SCORE VOTING SYSTEM 26261 Exemplo 27262 Vantagens e Desvantagens do SVS 27263 Voto Uacutetil no SVS 2727 BLOC VOTE 28271 Exemplo 28272 Voto Uacutetil no BV 29

3 O SIMULADOR 30

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 13: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

4 CENAacuteRIOS PERTINENTES 3441 CENAacuteRIO 1 VOTO TAacuteTICO 3442 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV 4143 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE 4344 CENAacuteRIO 4 COALIZOtildeES 4545 CENAacuteRIO 5 DILEMA DO PRISIONEIRO 4746 CENAacuteRIO 6 VOTO DE MINORIA 50

5 COMO FUNCIONA O SIMULADOR 5351 CLASSE Elections 5352 CLASSE FirstPastThePost 6053 CLASSE TwoRoundSystem 6254 CLASSE InstantRunoffVoting 6255 CLASSE ApprovalVoting 6356 CLASSE BordaCount 6357 CLASSE ScoreVoting 6358 CLASSE BlocVote 6459 TECNOLOGIAS UTILIZADAS 64

6 CONCLUSAtildeO 65

REFEREcircNCIAS 66

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS 67

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES 68

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS 68

APEcircNDICE D ndash MEacuteTODO GET_MEAN 68

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN 69

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES 69

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES 69

APEcircNDICE H ndash MEacuteTODO SORT_RANKS 70

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES 71

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES 72

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 14: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND 73

APEcircNDICE L ndash MEacuteTODOTRS_ACCOUNT_FOR_COALITIONS 74

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES 75

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES 76

APEcircNDICE O ndash MEacuteTODOAVS_COUNT_VOTES_WITH_TACTICAL 76

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES 77

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES (CON-TINUACcedilAtildeO) 78

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES 79

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES 79

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES 80

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES 80

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 15: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

15

1 INTRODUCcedilAtildeO

Em toda eleiccedilatildeo existe pelo menos um grupo de indiviacuteduos que sai completamentedesfavorecido e insatisfeito com o resultado O contentamento completo de uma populaccedilatildeoeacute certamente improvaacutevel e muitas vezes impossiacutevel considerando a gama de candidatosque se dispotildee a concorrer Em todo caso o miacutenimo que pode ser feito eacute escolher demaneira eficiente o melhor candidato ao cargo dentre as opccedilotildees disponiacuteveis Diante dissoeacute necessaacuterio avaliar como essa escolha eacute feita e quais meacutetodos satildeo capazes de tornaacute-larealidade

11 MOTIVACcedilAtildeO E OBJETIVO

Em conformidade com o extenso nuacutemero de sistemas eleitorais pelo mundo este tra-balho tem como objetivo testar uma porccedilatildeo desses sistemas sob a simulaccedilatildeo de diferentescenaacuterios especiacuteficos a fim de determinar quais deles podem ser considerados como os maisjustos perante a taxa de satisfaccedilatildeo meacutedia da populaccedilatildeo

12 MEacuteTODO

Para que essa anaacutelise seja possiacutevel foi desenvolvido um programa que permite a criaccedilatildeoe configuraccedilatildeo de diferentes cenaacuterios onde os sistemas eleitorais seratildeo simulados Nele eacutepossiacutevel definir o nuacutemero total de eleitores e candidatos como esses eleitores iratildeo votar eo niacutevel de popularidade de cada candidato Aleacutem disso eacute possiacutevel formar coalizotildees entreos candidatos e escolher a porcentagem dos eleitores que optaratildeo pelo voto uacutetil Dessamaneira seraacute possiacutevel elaborar cenaacuterios que buscam expor os pontos fortes e fracos decada sistema

13 ESTRUTURA

Este trabalho eacute relatado ao longo de seis capiacutetulos No Capiacutetulo 2 seratildeo apresentados ossistemas eleitorais implementados no simulador suas vantagens e desvantagens conhecidase outras caracteriacutesticas especiacuteficas de cada um A intenccedilatildeo do capiacutetulo eacute tornar o textomais autocontido trazendo conceitos jaacute estudados que ajudaratildeo na melhor compreensatildeodos capiacutetulos seguintes por isso grande parte de sua composiccedilatildeo eacute oriunda de diferentesfontes consultadas

O Capiacutetulo 3 eacute uma apresentaccedilatildeo das funcionalidades que o simulador possui Seratildeoexplicados todos os campos de entrada e os dois modos distintos nos quais o programaopera

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 16: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

16

No Capiacutetulo 4 os sistemas seratildeo colocados em teste Todos seratildeo simulados em cenaacuteriosespeciacuteficos a fim de fazer sobressair aqueles com as maiores taxas de satisfaccedilatildeo meacutedia

A estrutura e implementaccedilatildeo do simulador seratildeo abordadas em detalhes no Capiacutetulo5 assim como uma breve descriccedilatildeo da stack utilizada Todos os meacutetodos relevantes aofuncionamento das simulaccedilotildees seratildeo explicados passo a passo

No Capiacutetulo 6 seratildeo apresentadas as conclusotildees referentes agrave anaacutelise dos resultadosobtidos no Capiacutetulo 4 e as consideraccedilotildees finais do projeto como um todo

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 17: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

17

2 SISTEMAS ELEITORAIS

Atualmente mais e mais paiacuteses estatildeo adotando sistemas democraacuteticos de governoCerca de 6 em 10 governos no mundo satildeo democracias (Pew Research Center 2017) o quepode ser observado na Figura 1 abaixo Em um sistema democraacutetico a populaccedilatildeo escolheseus liacutederes atraveacutes de seu sistema eleitoral Existem diversos sistemas eleitorais em usono mundo muitos dos quais satildeo usados em conjunto para eleger um uacutenico candidato Emvaacuterios paiacuteses mais de um sistema eleitoral pode ser utilizado tambeacutem em diferentes niacuteveisde governo tanto presidencial quanto estadual ou municipal Natildeo apenas imersos nomeio poliacutetico eles tambeacutem podem ser usados em escopos menores como em esportes oucompeticcedilotildees artiacutesticas poreacutem sempre com a finalidade de alocar um ou mais indiviacuteduosa determinado cargo ou tiacutetulo

Figura 1 ndash de paiacuteses de cada tipo de regime 1946-2016

Fonte Center of Systemic Peacersquos Polity IV Project

Os proacuteximos trecircs toacutepicos discutidos neste capiacutetulo referentes aos meacutetodos First Pastthe Post Two-Round System e Instant Runoff Voting possuem seus conceitos e infor-maccedilotildees relevantes com exceccedilatildeo dos exemplos traduzidos livremente do livro Behind theBallot Box A Citizenrsquos Guide to Voting Systems (AMY 2000)

21 FISRT PAST THE POST

O meacutetodo First Past the Post tambeacutem conhecido como Plurality Voting ou WinnerTakes All eacute o meacutetodo mais simples e direto e provavelmente o primeiro meacutetodo que sepensa quando se fala de eleiccedilotildees Os eleitores escolhem apenas um candidato e apoacutes a

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 18: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

18

contagem dos votos o candidato com o maior nuacutemero de votos eacute eleito O vencedor natildeonecessita da aprovaccedilatildeo de mais de 50 dos eleitores ele apenas precisa de uma pluralidadedos votos ou seja apenas possuir mais votos que os outros candidatos

Esse sistema eacute utilizado em escala nos Estados Unidos para a maior parte das eleiccedilotildeesvoltadas a eleger apenas um candidato como prefeitos e governadores aleacutem de ser usadana disputa presidencial Dentre outros paiacuteses que empregam o sistema em suas corridaspresidenciais estatildeo listados o Meacutexico as Filipinas a Coreia do Sul e a Venezuela

211 Exemplo

Tabela 1 ndash Exemplo FPTP

Candidatos VotosA 36B 25C 22D 17

Neste exemplo o candidato A possui uma pluralidade dos votos com 36 e ele eacute ocandidato eleito mesmo natildeo tendo uma maioria

212 Vantagens e Desvantagens do FPTP

A vantagem do FPTP eacute a sua simplicidade Natildeo eacute difiacutecil para um eleitor comumcompreender o seu funcionamento eles apenas precisam se decidir por um candidato Eletambeacutem eacute muito simples e direto na sua contagem e seleccedilatildeo do vencedor

Esse meacutetodo tambeacutem tende a criar listas de candidatos concorrentes mais curtasCandidatos independentes ou de partidos menores frequentemente acabam se sentindodesencorajados a concorrer devido agraves suas baixas chances de vitoacuteria Isso normalmentefornece aos eleitores uma faacutecil decisatildeo entre um ou dois candidatos dos maiores partidosao mesmo tempo poreacutem limitando suas opccedilotildees

No entanto sua essecircncia eacute sua principal desvantagem a pluralidade O fato do can-didato eleito natildeo necessitar de uma maioridade dos votos da populaccedilatildeo parece violaros princiacutepios baacutesicos da democracia Democracia eacute em sua origem o poder(kratos) nopovo(demos) poreacutem na pluralidade o poder de eleger um candidato pode residir emapenas uma fraccedilatildeo relativamente pequena do povo Em um cenaacuterio hipoteacutetico comapenas trecircs candidatos um deles apenas poderia necessitar de natildeo mais do que 34 dosvotos para ser eleito o que significa que no pior dos casos 66 da populaccedilatildeo rejeitao candidato eleito O cenaacuterio soacute piora com mais e mais candidatos concorrendo Paraquatro candidatos satildeo necessaacuterios 26 dos votos no pior dos casos para cinco satildeo 21 eassim por diante

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 19: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

19

213 Voto Uacutetil no FPTP

No FPTP tambeacutem existe a possibilidade de os eleitores evitarem votar em sua prefe-recircncia verdadeira No caso de sua preferecircncia natildeo aparentar ter boas chances de vitoacuteriamuitas vezes opta-se por uma segunda opccedilatildeo que esteja mais bem colocada nas eleiccedilotildeesO motivo disso eacute que nessas situaccedilotildees votar em sua preferecircncia pode parecer um des-perdiacutecio do seu voto e no pior dos cenaacuterios optar por natildeo transferir seu voto para umasegunda opccedilatildeo pode acabar resultando na eleiccedilatildeo de um candidato de seu desgosto As-sim votar de maneira verdadeira muitas vezes pode acabar prejudicando o eleitor que sevecirc forccedilado a abandonar seus interesses poliacuteticos mais imediatos e escolher o menor entredois(ou mais) males Os candidatos de partidos menores satildeo os que mais sofrem com essetipo de voto estrateacutegico por natildeo conseguirem agregar as maiores quantidades de votos

Entretanto ao mesmo tempo que partidos maiores roubam votos de partidos meno-res com os votos taacuteticos partidos menores tambeacutem tem a oportunidade de ganhar algunsvotos com o denominado spoiler effect Ao entrarem na eleiccedilatildeo candidatos de partidosmenores podem adquirir votos de candidatos mais populares que possuem inclinaccedilatildeo po-liacutetica semelhante Logo eacute possiacutevel que haja certo equiliacutebrio ao se contrapor as mudanccedilasde voto devido aos votos uacuteteis agraves mudanccedilas oriundas do spoiler effect

Poreacutem o spoiler effect natildeo necessariamente ocorre apenas entre partidos maiores emenores mas pode prejudicar candidatos de popularidades proacuteximas Por exemplo entretrecircs candidatos A B e C onde A representa determinada posiccedilatildeo no espectro poliacuteticoenquanto B e C possuem posiccedilotildees parecidas o que pode acontecer eacute B e C se prejudicaremmutuamente jaacute que ambos dividem os eleitores de um mesmo espectro poliacutetico Se esseespectro tem a maioria com 60 por exemplo com B e C compartilhando cada um 30dos votos o candidato A sairia vencedor com 40 mesmo que todos os eleitores de Bprefiram C e todos os eleitores de C prefiram B Esse exemplo demonstra claramente oproblema com os sistemas de pluralidade

22 TWO-ROUND SYSTEM

Uma das primeiras tentativas de lidar com a desvantagem dos sistemas por pluralidadeo Two-round System eacute usado desde o seacuteculo XIX no ocidente e atualmente ainda eacute utilizadoem corridas presidecircncias de paiacuteses como o Brasil Bulgaacuteria Chile Colocircmbia FinlacircndiaPolocircnia Portugal Ruacutessia e em inuacutemeras eleiccedilotildees locais nos Estados Unidos

O principal objetivo do TRS eacute garantir que o vencedor tenha conseguido uma maioriados votos Para isso as eleiccedilotildees satildeo estruturadas em duas rodadas de votaccedilatildeo Na primeirarodada os eleitores se dirigem agraves urnas e votam no candidato de sua preferecircncia Apoacutesa contagem se a quantidade de votos do candidato mais votado superar a proporccedilatildeo de50 natildeo haacute a necessidade de uma segunda rodada e este candidato eacute eleito No entantose este natildeo for o caso haveraacute uma segunda rodada com apenas os dois candidatos mais

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 20: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

20

votados Nesta rodada os eleitores retornam as urnas para escolher uma das duas opccedilotildeessendo eleito o candidato mais votado agora definitivamente com uma maioria dos votos

221 Exemplo

Utilizando a mesma distribuiccedilatildeo de votos descrita na tabela 1 Neste caso como ocandidato A natildeo possui uma maioria dos votos ele e o candidato B iratildeo concorrer em umsegundo turno Digamos que as distribuiccedilotildees dos votos dos eleitores dos candidatos C eD em relaccedilatildeo aos candidatos A e B satildeo as seguintes

Tabela 2 ndash 2deg turno do TRS

Candidatos Votos dos eleitoresde C

Votos dos eleitoresde D

Votos do 1degturno

A 7 5 36B 15 12 25

O candidato B agora eacute eleito com uma maioria dos votos 52 contra 48 do candidatoA

222 Vantagens e Desvantagens do TRS

Por ser parecido com o FPTP esse sistema tambeacutem eacute de faacutecil compreensatildeo do eleitorcomum poreacutem a maior vantagem do TRS eacute a garantia de que o candidato vencedor teraacute oapoio da maioria dos eleitores no segundo turno eliminando a pluralidade Argumenta-seque isso daacute maior legitimidade poliacutetica ao mandato do candidato eleito

O TRS tende a abrigar uma lista maior de candidatos sendo mais convidativo acandidatos de partidos menores mesmo que suas chances natildeo sejam maiores quandocomparadas agraves eleiccedilotildees sob o FPTP Mesmo assim essa listagem mais abrangente eacute umavantagem do sistema pois daacute aos eleitores uma variedade maior de opccedilotildees de voto

Em relaccedilatildeo agraves suas desvantagens o TRS possui duas principais A primeira satildeo oscustos elevados do sistema decorrentes da necessidade da organizaccedilatildeo de um segundoturno de votaccedilotildees A segunda eacute o aumento no iacutendice de ausecircncias dos eleitores agraves urnasEssa ampliaccedilatildeo no natildeo comparecimento dos eleitores se daacute tambeacutem devido ao segundoturno por pura fatiga eleitoral bem como consequecircncia da desistecircncia de eleitores queapoiam candidatos que jaacute foram eliminados

Outro ponto negativo do TRS eacute a sua natildeo-monotonicidade Isso significa que umcandidato pode ser prejudicado com um aumento em sua popularidade e suporte e domesmo modo um candidato pode se beneficiar com a perda de popularidade e suporteSe os candidatos A e B satildeo os esperados para ir ao segundo turno onde A eacute mais fortedo que B um aumento no suporte pelo candidato A pode resultar na sua derrota quandoesse aumento causa uma alteraccedilatildeo nos candidatos que satildeo selecionados para ir ao segundoturno Se esse aumento na popularidade de A resultar na eliminaccedilatildeo preacutevia de B um

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 21: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

21

terceiro candidato C pode ser vitorioso sobre A no segundo turno caso os eleitores de Bprefiram C ao candidato A Se natildeo houvesse esse crescimento de popularidade A teriaderrotado B no segundo turno Essa situaccedilatildeo seraacute vista em melhores detalhes na seccedilatildeo 43

223 Voto Uacutetil no TRS

Esse sistema minimiza os efeitos do voto uacutetil em relaccedilatildeo ao FPTP pois um eleitorqualquer pode tranquilamente votar em sua preferecircncia sem se preocupar em desperdiccedilaacute-lo mesmo que seu candidato natildeo tenha chances de vitoacuteria Se este natildeo for eleito aindapoderaacute escolher a sua preferecircncia dentre os dois candidatos que prosseguirem para osegundo turno

Apesar disso ainda existe um cenaacuterio em que o eleitor pode ser tentado a natildeo votar emsua preferecircncia Eacute possiacutevel que ele opte pela sua segunda opccedilatildeo se souber que sua primeiraopccedilatildeo possui miacutenimas chances de ir ao segundo turno ou ateacute mesmo por saber que issodiminuiraacute as chances de algum outro candidato ser eleito Mesmo assim eacute evidente queo TRS natildeo proporciona o mesmo apelo ao voto taacutetico que o FPTP

Outra caracteriacutestica do TRS eacute o incentivo a formaccedilatildeo de coalizotildees entre candidatosde partidos mais populares com candidatos de partidos menos populares As coalizotildeesfornecem benefiacutecios agrave ambas as partes onde os candidatos classificados para o segundoturno em geral se juntam a candidatos jaacute eliminados com a intenccedilatildeo de agregar maisvotos enquanto os candidatos jaacute eliminados apoiam um dos dois classificados na esperanccedilade inserir propostas proacuteprias ou modificaccedilotildees agrave chapa deles

23 INSTANT-RUNOFF VOTING

Instant Runoff Voting foi uma alternativa aos meacutetodos FPTP e TRS desenvolvidanos anos 70 por um professor do Instituto de Tecnologia de Massachusetts(MIT) O IRVelimina as principais desvantagens desses outros dois sistemas a pluralidade do FPTP e anecessidade de mais de uma rodada de votaccedilatildeo do TRS Este meacutetodo tambeacutem opera emmais de uma rodada poreacutem como o proacuteprio nome sugere essas rodadas satildeo instantacircneasnatildeo sendo necessaacuterio o retorno dos eleitores agraves urnas Atualmente ele eacute utilizado naIrlanda nas eleiccedilotildees presidenciais em Londres na eleiccedilatildeo de seu prefeito e em distritosindividuais na Austraacutelia para eleger membros de sua cacircmara baixa do parlamento OIRV tambeacutem eacute usado por vaacuterias organizaccedilotildees privadas nos Estados Unidos incluindoa American Political Science Association e a American Psychological Association paraeleger seus funcionaacuterios

Nesse sistema os eleitores natildeo satildeo solicitados a votar em um uacutenico candidato aoinveacutes disso eles listam todos os candidatos concorrentes na ordem de sua preferecircnciaA partir dessas listas as primeiras opccedilotildees de cada eleitor recebem o seu voto e apoacutes acontagem se um candidato obtiver 50 dos votos mais um este candidato eacute eleito Se

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 22: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

22

isso natildeo ocorrer o candidato menos votado eacute eliminado das eleiccedilotildees e seus votos satildeotransferidos para a segunda opccedilatildeo de cada um de seus eleitores Esse procedimento serepete eliminando o candidato menos votado a cada rodada ateacute que algum dos candidatospossuam a maioridade dos votos

231 Exemplo

Na tabela 3 pode-se verificar a distribuiccedilatildeo de votos por perfil de eleitor e na tabela4 vecirc-se o desenvolvimento do IRV para essas distribuiccedilotildees O candidato D eacute o menosvotado e por consequecircncia eacute o primeiro a ser eliminado A segunda opccedilatildeo de todos oseleitores que votaram no candidato D eacute o candidato C por isso este recebe todos os votosdistribuiacutedos na segunda rodada Com isso o candidato B eacute eliminado com 25 dos votos eos candidatos A e C concorrem na uacuteltima rodada Mesmo com o candidato C na lideranccedilana segunda rodada a maior parte dos eleitores do B tem como preferecircncia o candidatoA por isso A eacute eleito com 55 dos votos contra 45 do C

Tabela 3 ndash Exemplo IRV

Rankings Ndeg de eleitoresABCD 20ABDC 16BDAC 19BDCA 6CABD 7CDBA 15DCAB 5DCBA 12

Tabela 4 ndash Desenvolvimento do IRVTurnos D C B A

1 17 22 25 362 eliminado 39 25 363 eliminado 45 eliminado 55

232 Vantagens e Desvantagens do IRV

Assim como no TRS a pluralidade eacute irrelevante no IRV e um candidato soacute eacute eleitocom a maioridade dos votos dando maior legitimidade ao mandato deste No entantopode-se argumentar que o IRV faz isso com mais eficiecircncia pois natildeo requer a execuccedilatildeode mais de uma rodada de votaccedilotildees Isso diminui os custos das eleiccedilotildees como um todoao mesmo tempo que proporciona um nuacutemero menor de isenccedilotildees por parte dos eleitoresdevido ao desgaste de todo o processo eleitoral

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 23: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

23

Aleacutem disso candidatos de partidos menores tendem a receber mais votos do queno FPTP e portanto satildeo mais encorajados a se candidatar Com uma lista maior decandidatos eleitores desfrutam de uma variedade maior de opccedilotildees de voto Contudomesmo com mais candidatos menos populares o spoiler effect mencionado anteriormentetambeacutem natildeo possui espaccedilo nesse sistema de votaccedilatildeo Partidos menores natildeo tem comoroubar votos de partidos maiores visto que esses votos eventualmente seratildeo transferidosde volta a eles durante o desenvolvimento das rodadas do IRV

Em virtude de sua estrutura acredita-se que esse meacutetodo tende a encorajar os can-didatos tambeacutem a elaborar suas campanhas de forma mais abrangente ampliando suainfluecircncia para mais do que apenas um grupo especiacutefico de maneira que ele consiga agre-gar votos de segunda ou terceira opccedilatildeo aleacutem dos votos de seus eleitores principais

A principal desvantagem do IRV eacute o fato de ele ainda natildeo ser amplamente utilizado aoredor do mundo Essa falta de familiaridade do sistema pode causar confusatildeo ao eleitorcomum em suas primeiras ocorrecircncias No entanto nos paiacuteses em que este eacute utilizadonatildeo parece haver confusatildeo entre os eleitores Aleacutem disso na maioria dos casos haveraacute umcusto potencialmente alto da substituiccedilatildeo ou alteraccedilatildeo dos sistemas das urnas eletrocircnicaspara que seja possiacutevel haver a implementaccedilatildeo do meacutetodo

Aleacutem disso assim como o TRS este sistema tambeacutem possui natildeo-monotonicidade ouseja um candidato pode ser prejudicado ao ser ranqueado mais alto enquanto que outropode se beneficiar sendo ranqueado mais baixo pelos eleitores (ORNSTEIN 2018) issopode ocorrer quando esse ranqueamento causa alteraccedilotildees na ordem em que os candidatossatildeo eliminados Essa caracteriacutestica se manifesta em fenocircmenos complexos e especiacuteficos epor isso um exemplo de sua ocorrecircncia seraacute abordada em detalhes na seccedilatildeo 43

233 Voto Uacutetil no IRV

Como os sistemas de votaccedilatildeo anteriores o IRV natildeo eacute completamente imune ao vototaacutetico No entanto este meacutetodo se mostra bem resistente a eles quando comparado aoutros meacutetodos como o FPTP e o Borda Count (Bartholdi John J III and Orlin JamesB 1990) Distintivamente o IRV requer um maior esforccedilo do eleitor para elaborar umaestrateacutegia que melhor ajuste os resultados da eleiccedilatildeo de acordo com a sua preferecircnciaAleacutem disso eacute necessaacuterio que ele tenha informaccedilatildeo suficiente sobre os rankings de outroseleitores naturalmente obtida atraveacutes de pesquisas eleitorais

Existe tambeacutem a possibilidade de ocorrer uma exaustatildeo dos votos quando natildeo haacuteo completo preenchimento do ranking por parte dos eleitores Nessas ocasiotildees o votonatildeo pode continuar a ser transferido a outros candidatos e ele eacute descartado Isso afetaa legitimidade do mandato do candidato eleito pois o resultado final natildeo representaraacute100 da populaccedilatildeo votante Essas ocorrecircncias no entanto podem ser minimizadas comuma melhor educaccedilatildeo eleitoral ou como foi implementado na Austraacutelia requerer que osrankings incluam uma totalidade dos candidatos concorrentes

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 24: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

24

24 APPROVAL VOTING SYSTEM

No meacutetodo Approval Voting os eleitores natildeo satildeo limitados pelo nuacutemero de candidatosem que podem votar por isso approval cada eleitor pode votar em todos os candidatos osquais ele aprova Apoacutes as votaccedilotildees o candidato com a maior quantidade de votos eacute eleitoSegundo Hamlin (2015) a cidade de Fargo na Dakota do Norte se tornou a primeiracidade nos EUA a colocar em praacutetica este sistema em suas eleiccedilotildees gerais em novembrode 2018 AVS tambeacutem eacute utilizado para eleger o secretaacuterio-geral das Naccedilotildees Unidas e emdiversas outras organizaccedilotildees

241 Exemplo

Na tabela 5 abaixo pode-se encontrar 8 perfis de eleitores com seus candidatos apro-vados e quantidade de eleitores que se encaixam no perfil Na tabela 6 temos o resultadoda contabilizaccedilatildeo dos votos destes perfis O candidato mais popular eacute o B que se encontraaprovado em 5 perfis distintos totalizando 60 votos ou aproximadamente 32

Tabela 5 ndash Exemplo AVS

Aprovaccedilotildees Ndeg de eleitoresA 20AB 16B 19

BDC 6CAB 7CD 15DC 5DCB 12

Tabela 6 ndash Resultado AVSCandidatos Total de votos

A 43B 60C 45D 38

242 Vantagens e Desvantagens do AVS

Aleacutem de simples este meacutetodo permite um niacutevel maior de expressividade aos eleitoresOnde no FPTP e TRS eles satildeo limitados pelo seu uacutenico voto aqui os eleitores tecircm aliberdade de demonstrar exatamente quais candidatos consideram aptos ou aceitaacuteveis aocargo

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 25: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

25

Outro efeito dessa liberdade trazida pelo AVS eacute a dizimaccedilatildeo do spoiler effect Can-didatos de partidos menores natildeo tem como roubar votos de partidos maiores nessesistema ambos os candidatos contabilizariam o voto

243 Voto Uacutetil no AVS

O tipo de voto uacutetil no AVS eacute denominado bullet voting Segundo The Center forElection Science (2015) esta taacutetica envolve simplesmente ignorar a possibilidade de votarem mais de um candidato e votar apenas em sua primeira opccedilatildeo Um eleitor pode serlevado a adotar essa estrateacutegia quando percebe que sua preferecircncia pode ser prejudicadacom o voto em alguma segunda opccedilatildeo sua Em um cenaacuterio extremo onde 100 doseleitores adotam esta estrateacutegia as eleiccedilotildees satildeo convertidas a um simples First Past ThePost

25 THE BORDA COUNT

Este meacutetodo carrega o nome em homenagem a seu criador Jean-Charles de Bordaque o desenvolveu em 1770 (LIPPMAN 2012) A contagem de Borda utiliza a abordagemde ranqueamento dos candidatos poreacutem de maneira diferente ao IRV Este eacute um sistemaque atribui uma pontuaccedilatildeo aos candidatos com base nestes rankings O candidato na basedo ranking natildeo recebe pontos o candidato imediatamente acima deste recebe 1 pontoo proacuteximo recebe 2 pontos e assim por diante ateacute o topo do ranking As pontuaccedilotildees detodos os rankings satildeo contabilizadas e o candidato com maior pontuaccedilatildeo eacute eleito Deacordo com Lippman variaccedilotildees deste meacutetodo satildeo encontradas em uso na premiaccedilatildeo dediversos esportes como na seleccedilatildeo do MVP(Most Valuable Player) da MLB(principal ligade beisebol dos EUA) e no Trofeacuteu Heisman de futebol americano universitaacuterio

251 Exemplo

Neste exemplo seratildeo aproveitados os mesmos rankings apresentados na tabela 3 Porserem 4 candidatos o primeiro colocado de cada ranking receberaacute 3 pontos o segundo 2pontos o terceiro 1 e o quarto 0 Assim o nuacutemero maacuteximo de pontos que um candidatopode atingir eacute igual a 300(se ficar na primeira posiccedilatildeo em todos os rankings) e o nuacutemerototal de pontos no sistema eacute 600 O nuacutemero maacuteximo de pontos que um candidato podeatingir eacute calculado com

(cminus 1)times e

Sendo c igual ao nuacutemero de candidatos e e o nuacutemero de eleitores Por sua vez onuacutemero total de pontos no sistema eacute

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 26: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

26

(cminus 1)times c2

times e

A contagem final dos pontos eacute apresentada na tabela 7 abaixo

Tabela 7 ndash Resultado BCCandidatos Total de pontos

A 146B 181C 126D 147

O candidato eleito eacute o B com 181 pontos ou aproximadamente 60 da pontuaccedilatildeomaacutexima

252 Vantagens e Desvantagens do BC

Em comparaccedilatildeo com os meacutetodos abordados anteriormente que apenas consideramas primeiras opccedilotildees de cada eleitor este meacutetodo regularmente escolhe candidatos comaceitaccedilatildeo mais ampla ao inveacutes de uma preferecircncia direta dos eleitores (Electoral ReformSociety 2017b)

Ele tambeacutem encoraja uma abordagem estrateacutegica por parte dos partidos onde seriade seu interesse nomear mais de um candidato para concorrer pois quanto mais candi-datos estatildeo no paacutereo maior eacute a pontuaccedilatildeo dos primeiros colocados Logo a nomeaccedilatildeo decandidatos menos populares pode beneficiar os principais candidatos de um partido

253 Voto Uacutetil no BC

Existem duas estrateacutegias aplicaacuteveis a esse sistema A primeira denominada compromi-sing de maneira similar a outros meacutetodos de votaccedilatildeo se resume em ranquear em primeirolugar um dos candidatos que estejam liderando as eleiccedilotildees mesmo que este natildeo seja suapreferecircncia real A segunda estrateacutegia burying eacute o oposto esta se baseia em ranquearem uacuteltimo lugar um dos candidatos liacutederes mesmo que este natildeo seja o seu candidato demaior desgosto Ambas estrateacutegias podem ser aplicadas ao mesmo tempo por um eleitor

26 SCORE VOTING SYSTEM

Score Voting ou Range Voting como tambeacutem eacute conhecido eacute mais um meacutetodo quetenta trazer maior liberdade de expressatildeo aos eleitores Assim como o Borda Counteste sistema funciona baseado na pontuaccedilatildeo dos candidatos no entanto ao inveacutes dessapontuaccedilatildeo ser relativa agrave posiccedilatildeo do candidato no ranking de cada eleitor este por sua veztem completa liberdade de atribuir qualquer quantidade de pontos aos candidatos dentro

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 27: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

27

de determinada escala Um eleitor pode dar o mesmo nuacutemero de pontos para diferentescandidatos e apoacutes o somatoacuterio de todas as pontuaccedilotildees o candidato com a pontuaccedilatildeo maisalta eacute eleito Incorporado ao escopo poliacutetico o SVS eacute utilizado no Partido Pirata Alematildeobem como em diversas organizaccedilotildees tais como o Fedora Project e Mozilla e tambeacutem emvariados esportes oliacutempicos e reality shows como o American Idol aponta Hamlin (2015)

261 Exemplo

Neste exemplo temos apresentados na tabela 8 abaixo 4 perfis distintos de eleitorese suas respectivas atribuiccedilotildees de pontos aos 4 candidatos Cada eleitor pode atribuirqualquer pontuaccedilatildeo a um candidato dentro da escala de -10 a 10 O resultado da eleiccedilatildeoapoacutes a soma de todos os pontos por candidato se encontra na tabela 9 onde o candidatoA eacute eleito com um total de 605 pontos

Tabela 8 ndash Exemplo SVS

Perfil A B C D Ndeg de eleitores1 10 -1 5 2 362 6 9 -3 4 253 2 0 8 4 224 3 3 3 10 17

Tabela 9 ndash Resultado SVSCandidatos Total de pontos

A 605B 240C 332D 430

262 Vantagens e Desvantagens do SVS

A grande vantagem do SVS eacute como ele proporciona aos eleitores expressar de maneiramuito proacutexima potencialmente exata suas impressotildees poliacuteticas de cada candidato Eleeacute ainda mais expressivo que o AVS Dessa maneira o spoiler effect tambeacutem se torna nuloao passo que toda intenccedilatildeo de voto eacute precisamente representada neste sistema

Assim como outros meacutetodos eleitorais este sofre igualmente dos males produzidos pelovoto taacutetico Sua principal desvantagem eacute discutida na seccedilatildeo abaixo

263 Voto Uacutetil no SVS

Da mesma maneira que no Approval Voting atraveacutes do bullet voting o SVS tambeacutempode ser convertido em uma eleiccedilatildeo sob o meacutetodo FPTP em um cenaacuterio com um grande

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 28: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

28

volume de eleitores maliciosos O voto uacutetil sob este sistema se manifesta pontuando-seapenas um candidato com uma nota positiva e todos os outros com as notas mais baixasda escala Se todos os eleitores se aproveitarem dessa abordagem natildeo existiraacute distinccedilatildeoefetiva entre uma eleiccedilatildeo sob SVS e FPTP Essencialmente cada eleitor estaacute votando emapenas um candidato Essa eacute a principal desvantagem do SVS e ela consegue eliminarsua principal vantagem dar ao eleitor um poder maior de expressatildeo

27 BLOC VOTE

O Bloc Vote eacute um meacutetodo utilizado para a eleiccedilatildeo de candidatos a cargos no governocom mais de uma vacacircncia Pode ser considerado um meio-termo entre o FPTP e oAVS pois os eleitores podem votar em mais de um candidato poreacutem satildeo limitados pelonuacutemero de vagas Em uma eleiccedilatildeo com duas vagas por exemplo cada eleitor selecionaraacutedois candidatos ou menos Sensatamente o candidato mais votado eacute eleito Ele possuialgumas utilizaccedilotildees em eleiccedilotildees locais em algumas partes da Inglaterra (Electoral ReformSociety 2017a)

271 Exemplo

Neste exemplo dois candidatos seratildeo eleitos logo cada eleitor votaraacute em no maacuteximodois candidatos A distribuiccedilatildeo de votos pode ser conferida na tabela 10 e o resultado dacontagem de votos na tabela 11 abaixo Os candidatos eleitos satildeo o C totalizando 78do maacuteximo de votos possiacuteveis para um candidato e o A com 43

Tabela 10 ndash Exemplo BV

Aprovaccedilotildees Ndeg de eleitoresAC 20AB 16BC 19BD 6CA 7CD 15DC 17

Tabela 11 ndash Resultado BVCandidatos Total de votos

A 43B 41C 78D 38

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 29: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

29

272 Voto Uacutetil no BV

Neste sistema eacute possiacutevel que um eleitor evite votar em sua primeira opccedilatildeo quandoeste natildeo tem chances de vitoacuteria e se fazendo isto ele diminuiraacute as chances de algum outrocandidato de seu desgosto ganhar Poreacutem o sistema previne um outro tipo de voto uacutetilEm eleiccedilotildees com mais de uma vaga onde os eleitores soacute podem votar em um candidatose um eleitor sabe que sua primeira opccedilatildeo tambeacutem eacute a primeira opccedilatildeo da maior parteda populaccedilatildeo e portanto muito provavelmente seraacute um dos candidatos eleitos eacute possiacutevelque ele arrisque votar em uma segunda opccedilatildeo sua na esperanccedila de a longo prazo elegersuas duas principais opccedilotildees de voto Com os eleitores podendo votar no nuacutemero exato devagas disponiacuteveis esse tipo de pensamento taacutetico perde o sentido

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 30: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

30

3 O SIMULADOR

Para este trabalho foi implementado um simulador eleitoral na forma de uma aplicaccedilatildeoweb para que a interaccedilatildeo do usuaacuterio fosse facilitada Veremos a seguir como se daacute suautilizaccedilatildeo de forma geral

Figura 2 ndash Captura de tela 1

Figura 3 ndash Captura de tela 2

A primeira opccedilatildeo encontrada pelo usuaacuterio eacute a escolha de quais sistemas de votaccedilatildeo se-ratildeo simulados (Figura 2) Todos eles podem ser selecionados para rodar simultaneamentePoreacutem natildeo eacute permitido rodar uma simulaccedilatildeo do Bloc Vote para uma eleiccedilatildeo onde apenasum candidato eacute eleito aleacutem disso natildeo existe implementaccedilatildeo dos meacutetodos TRS e IRV para

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 31: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

31

eleiccedilotildees com mais de um candidato eleito jaacute que eles se comportariam exatamente comono FPTP

A maioria das linguagens de programaccedilatildeo senatildeo todas possuem um gerador de nuacuteme-ros pseudoaleatoacuterios que fornece a possibilidade de definir uma seed para o gerador Estaseed funciona como um ponto de partida para a geraccedilatildeo dos nuacutemero e portanto todasimulaccedilatildeo que rodar com a mesma seed sempre teraacute os mesmos resultados Se nenhumvalor for fornecido pelo usuaacuterio o tempo atual do sistema eacute utilizado As opccedilotildees subse-quentes satildeo a escolha do nuacutemero de eleitores gerados e o nuacutemero de vagas (Figura 3) Senenhum valor for fornecido o nuacutemero de eleitores padratildeo utilizado eacute 1000 e o nuacutemero devagas igual a 1

Figura 4 ndash Captura de tela 3

Este simulador possui dois modos para a criaccedilatildeo dos rankings dos eleitores No modoManipulate (Figura 4) primeiramente se define o nuacutemero de candidatos atraveacutes do campode entrada ao lado do tiacutetulo Candidates ou alternativamente pode-se adicionar candida-tos um a um atraveacutes do sinal de mais na parte inferior da paacutegina Para cada candidatoeacute possiacutevel definir a porcentagem de seus eleitores que optaraacute pelo voto taacutetico e pelovoto de minoria Tambeacutem eacute possiacutevel alterar o nome dos candidatos se for do interessedo usuaacuterio

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 32: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

32

Figura 5 ndash Captura de tela 4

Figura 6 ndash Captura de tela 5

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 33: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

33

Figura 7 ndash Captura de tela 6

Apoacutes a criaccedilatildeo dos candidatos o usuaacuterio pode criar perfis de eleitores que definiratildeo demaneira exata como partes da populaccedilatildeo iraacute votar (Figura 5) Em cada perfil se defineo valor em porcentos da populaccedilatildeo votante que o adotaraacute e a nota de cada candidatoTambeacutem eacute possiacutevel nomear cada perfil livremente

No modo Generate (Figura 6) eacute onde o gerador de nuacutemeros pseudoaleatoacuterios eacute usadoNesse modo ao inveacutes do usuaacuterio criar perfis de eleitores ele define qual seraacute a distribuiccedilatildeoadotada para a geraccedilatildeo de notas de cada candidato Essas distribuiccedilotildees seratildeo mais bemdetalhadas no Capiacutetulo 5 Da mesma maneira que no modo Manipulate nesse modotambeacutem eacute possiacutevel definir os valores para os dois tipos de voto uacutetil os votos taacuteticos eos votos de minoria No primeiro estatildeo incluiacutedas as estrateacutegias de mudanccedila de votoespeciacuteficas de cada sistema como o bullet voting no AVS e SVS ou quando a preferecircnciade um eleitor claramente natildeo possui chances de vitoacuteria e ele muda seu voto para um doscandidatos que esteja na lideranccedila o que ocorre no FPTP e TRS O voto de minoriase apresenta apenas no FPTP em eleiccedilotildees onde mais de um candidato eacute eleito Se apreferecircncia de um eleitor claramente lidera a eleiccedilatildeo por ser tambeacutem a preferecircncia damaior parte da populaccedilatildeo esse eleitor pode mudar o seu voto para uma segunda opccedilatildeona esperanccedila de eleger dois de seus candidatos favoritos

Por fim em ambos os modos o usuaacuterio tem a opccedilatildeo de definir coalizotildees entre oscandidatos se o sistema TRS estiver habilitado pois as coalizotildees apenas se manifestamnesse sistema Essas coalizotildees alteraratildeo as notas dos candidatos dependendo dos outroscandidatos pertencentes a elas (Figura 7)

A aplicaccedilatildeo pode ser encontrada na paacutegina httpelectionsimpythonanywherecom

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 34: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

34

4 CENAacuteRIOS PERTINENTES

Para todos os cenaacuterios deste capiacutetulo seraacute usada a seed do simulador igual a 100 e apopulaccedilatildeo de eleitores igual a 1000 para que exista consistecircncia na anaacutelise e tambeacutem paraque possa haver replicaccedilatildeo dos resultados se necessaacuterio

41 CENAacuteRIO 1 VOTO TAacuteTICO

Neste exemplo teremos quatro candidatos Ana Beto Carla e Diego Ana e Betoseratildeo gerados a partir da distribuiccedilatildeo Neutral (Figura 47) Carla da distribuiccedilatildeo Disliked(Figura 51) e Diego da Hated (Figura 55) Para a simulaccedilatildeo com a seed 100 o melhorcandidato a ser eleito ou seja aquele que maximiza a meacutedia das notas dos eleitores eacute oBeto com uma meacutedia de 0073 Para cada sistema seratildeo comparados os resultados semvoto taacutetico aos com 20 de voto taacutetico a favor da Ana Abaixo se encontram osresultados para o sistema FPTP

Figura 8 ndash FPTP - Cenaacuterio 1 sem voto taacutetico

Figura 9 ndash TRS segundo turno - Cenaacuterio 1 sem voto taacutetico

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 35: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

35

Figura 10 ndash IRV primeiro turno - Cenaacuterio 1

Figura 11 ndash IRV segundo turno - Cenaacuterio 1

Figura 12 ndash IRV terceiro turno - Cenaacuterio 1

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 36: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

36

Figura 13 ndash AVS - Cenaacuterio 1 sem voto taacutetico

Figura 14 ndash BC - Cenaacuterio 1 sem voto taacutetico

Figura 15 ndash SVS - Cenaacuterio 1 sem voto taacutetico

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 37: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

37

Nesse cenaacuterio sem voto taacutetico o uacutenico sistema que natildeo elege o Beto eacute o AVS Todosos outros elegem o melhor candidato Ou seja apesar de Beto ter uma melhor meacutediadas notas dos eleitores existem mais eleitores que ranqueiam Ana com uma nota acimade 0 No entanto apenas 20 dos eleitores de Diego e Carla que preferem a Ana aoinveacutes do Beto satildeo o suficiente para fazer Beto natildeo ser eleito se eles decidirem abandonarsua primeira opccedilatildeo e votar na Ana Considerando a vantagem que os votos taacuteticosproporcionam agrave Ana esta eacute eleita em todos os sistemas menos o TRS e o IRV

Figura 16 ndash FPTP - Cenaacuterio 1 - 20 de voto taacutetico na Ana

Figura 17 ndash TRS segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 38: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

38

Figura 18 ndash IRV primeiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 19 ndash IRV segundo turno - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 20 ndash IRV terceiro turno - Cenaacuterio 1 20 de voto taacutetico na Ana

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 39: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

39

Figura 21 ndash AVS - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 22 ndash BC - Cenaacuterio 1 20 de voto taacutetico na Ana

Figura 23 ndash SVS - Cenaacuterio 1 20 de voto taacutetico na Ana

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 40: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

40

Eacute claro que se os eleitores que preferem o Beto tambeacutem votassem de maneira estra-teacutegica a situaccedilatildeo se equilibraria e haveria o mesmo niacutevel de concorrecircncia entre os doiscandidatos que ocorre quando natildeo haacute voto taacutetico Poreacutem no Borda Count esse equiliacute-brio pode natildeo acontecer e as estrateacutegias de compromising e burying podem acabar saindopela culatra se uma porcentagem elevada dos eleitores as adotarem Abaixo encontram-seos resultados para esse sistema quando 100 dos eleitores de Carla e Diego se comportammaliciosamente

Figura 24 ndash BC - Cenaacuterio 1 100 de voto taacutetico na Ana e Beto

Por causa do uso demasiado da estrateacutegia burying Ana e Beto perdem muitos pontose isso abre espaccedilo para uma vitoacuteria da Carla No entanto para porcentagens menores que100 o Beto ainda eacute o vencedor

Essas duas estrateacutegias tambeacutem foram implementadas nesse simulador para o sistemaIRV e eacute possiacutevel ver como ele eacute resistente a elas Para que seja possiacutevel mudar os resultadosde uma eleiccedilatildeo sob o IRV eacute necessaacuterio mudar a ordem de eliminaccedilatildeo dos candidatos paraque o seu candidato preferido acabe enfrentando um candidato mais fraco nas rodadasfinais Isso natildeo ocorre com compromising e burying No proacuteximo cenaacuterio seraacute analisadacomo eacute possiacutevel modificar os resultados de uma eleiccedilatildeo sob o IRV

Esses resultados podem ser replicados acessando os linksSem votos taacuteticos lthttpelectionsimpythonanywherecomdirect_res1111110

--[0021][22Ana2222Beto222022Carla2222Diego22]------100gt

Com 20 de voto taacutetico lthttpelectionsimpythonanywherecomdirect_res1111110--[0021][22Ana222022Beto2222Carla2222Diego22]1-[02000]---100gt

Com 100 de voto taacuteticona Ana e Beto lthttpelectionsimpythonanywherecomdirect_res0000100--[0021][22Ana222022Beto222022Carla2222Diego22]1-[101000]---100gt

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 41: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

41

42 CENAacuteRIO 2 VOTO TAacuteTICO NO IRV

Neste cenaacuterio teremos Ana Carla e Beto concorrendo e trecircs perfis distintos que apoiamcada candidato As distribuiccedilotildees de notas dos perfis se encontram na tabela abaixo

Tabela 12 ndash Distribuiccedilatildeo de notas - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 303 5 0 10 28

Com essas distribuiccedilotildees Carla eacute eliminada na primeira rodada e seus 28 de votossatildeo transferidos para a segunda opccedilatildeo de seus eleitores Ana que eacute eleita com 70 dosvotos e uma meacutedia de 56

Figura 25 ndash IRV primeiro turno - Cenaacuterio 2

Figura 26 ndash IRV segundo turno - Cenaacuterio 2

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 42: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

42

Cientes desse provaacutevel futuro cenaacuterio onde Ana eacute eleita uma pequena parte dos elei-tores de Beto estrategicamente o abandona e decide apoiar Carla na esperanccedila de leva-laao segundo turno contra Ana As novas distribuiccedilotildees de notas se encontram na tabelaabaixo com essa porccedilatildeo de eleitores representada pelo perfil 4

Tabela 13 ndash Distribuiccedilatildeo de notas com voto taacutetico - Cenaacuterio 2

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 422 0 10 5 283 5 0 10 284 0 8 10 2

Essa mudanccedila estrateacutegica de voto altera a ordem de eliminaccedilotildees do sistema com Betosendo o primeiro a ser eliminado Com isso seus votos satildeo naturalmente transferidos paraCarla que derrota Ana no segundo turno com 58 dos votos

Figura 27 ndash IRV primeiro turno com voto taacutetico - Cenaacuterio 2

Figura 28 ndash IRV segundo turno com voto taacutetico - Cenaacuterio 2

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 43: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

43

Percebendo que a eleiccedilatildeo de Beto natildeo era provaacutevel seus eleitores conseguiram aomenos impedir a eleiccedilatildeo do pior candidato para eles Mas para isso foi necessaacuterio queeles tivessem a informaccedilatildeo de como os outros eleitores votariam Uma aproximaccedilatildeo dessasinformaccedilotildees poderia ser obtida em um cenaacuterio real com poucos candidatos atraveacutes depesquisas eleitorais poreacutem se o nuacutemero de candidatos eacute significativo uma noccedilatildeo completadas distribuiccedilotildees dos rankings dos eleitores se torna muito menos viaacutevel e dificulta aformulaccedilatildeo de estrateacutegias para alterar a ordem em que os candidatos satildeo eliminados

Esses resultados podem ser replicados acessando os linksSem voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana22

22Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

Com voto taacuteticolthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana

2222Beto2222Carla22]-----42Voter20Profile2001020520028Voter20Profile2010201020528Voter20Profile202520020102Voter20Profile20302082010100gt

43 CENAacuteRIO 3 NAtildeO-MONOTONICIDADE

O interessante dos sistemas IRV e TRS eacute que os resultados do cenaacuterio anterior po-deriam ter sido obtidos ao inveacutes do voto taacutetico pela sua natildeo-monotonicidade Seriapossiacutevel que a Carla derrotasse a Ana no segundo turno atraveacutes do proacuteprio aumento depopularidade da Ana Assumindo que essa popularizaccedilatildeo ocorresse entre os candidatosdo perfil 2 onde 3 passasse a apoiar a Ana ao inveacutes do Beto as novas distribuiccedilotildeesseguiriam a tabela abaixo

Tabela 14 ndash Distribuiccedilatildeo de notas apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 5 0 452 0 10 5 273 5 0 10 28

Dessa maneira Beto agora com uma porcentagem dos eleitores menor do que a deCarla seraacute eliminado na primeira rodada e como seus eleitores tecircm a Carla como segundaopccedilatildeo ela receberaacute todos os seus votos e seraacute eleita na segunda rodada As rodadas doIRV podem ser vistas nas figuras 29 e 30

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 44: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

44

Figura 29 ndash IRV primeiro turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Figura 30 ndash IRV segundo turno apoacutes popularizaccedilatildeo de Ana - Cenaacuterio 3

Tabela 15 ndash Resultados do Cenaacuterio 3Candidato

eleitoMeacutedia das

notasAntes da

popularizaccedilatildeode Ana

Ana 56

Apoacutespopularizaccedilatildeo

de AnaCarla 415

Os efeitos dessa caracteriacutestica se refletem na satisfaccedilatildeo meacutedia da populaccedilatildeo A Ana eacuteclaramente a melhor candidata e mesmo com o seu ganho de popularidade (ou devido aele) a Carla eacute eleita

Esses resultados podem ser replicados acessando os linksAntes da popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecom

direct_res0010000---[22Ana2222Beto2222Carla22]-----42Voter20Profile2001020520030Voter20Profile2010201020528Voter20Profile20252002010100gt

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 45: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

45

Apoacutes popularizaccedilatildeo de Ana lthttpelectionsimpythonanywherecomdirect_res0010000---[22Ana2222Beto2222Carla22]-----45Voter20Profile2001020520027Voter20Profile2010201020528Voter20Profile20252002010100gt

44 CENAacuteRIO 4 COALIZOtildeES

O TRS por ser organizado em dois turnos separados normalmente a semanas dedistacircncia um do outro acaba abrindo brecha agrave mudanccedila de opiniatildeo por parte dos eleitorese o desenvolvimento de novas estrateacutegias por parte dos candidatos tais como a coalizatildeocom candidatos jaacute eliminados Com isso em mente nesse cenaacuterio teremos novamenteos quatro candidatos Ana Beto Carla e Diego Os trecircs primeiros seratildeo gerados dadistribuiccedilatildeo Neutral e Diego da distribuiccedilatildeo Disliked

Figura 31 ndash TRS turno 1 - Cenaacuterio 4

No TRS normal Ana Beto e Carla possuem com essas distribuiccedilotildees quantidades devotos muito proacuteximas com Beto e Carla indo para o segundo turno Carla estaacute 10 votosatraacutes de Beto e decide aproveitar o espaccedilo de tempo entre os dois turnos para tentaragregar mais votos Com isso Carla se aproxima de Diego e juntos formam uma coalizatildeoNo entanto com sua baixa popularidade Diego acaba ferindo a reputaccedilatildeo de Carla etorna o segundo turno muito mais faacutecil para Beto (Figura 33) Se Carla tivesse buscado osuporte de Ana por outro lado ela se veria vitoriosa no segundo turno e com uma amplavantagem sobre o Beto (Figura 34) Ou ateacute mesmo sem buscar uma coalizatildeo mesmosendo uma corrida apertada Carla teria naturalmente sido eleita (Figura 32)

Esses resultados podem ser replicados acessando os linksSem coalizotildees lthttpelectionsimpythonanywherecomdirect_res0100000

--[0002][22Ana222022Beto2222Carla2222Diego22]------100gt

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 46: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

46

Figura 32 ndash TRS turno 2 - Cenaacuterio 4

Figura 33 ndash TRS coalizatildeo de Carla e Diego - Cenaacuterio 4

Figura 34 ndash TRS coalizatildeo de Carla e Ana - Cenaacuterio 4

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 47: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

47

Coalizatildeo Carla e Diego lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2203Carla20Diego-100gt

Coalizatildeo Carla e Ana lthttpelectionsimpythonanywherecomdirect_res0100000--[0002][22Ana2222Beto2222Carla2222Diego22]----2200Carla20Ana-100gt

45 CENAacuteRIO 5 DILEMA DO PRISIONEIRO

Neste cenaacuterio temos uma eleiccedilatildeo de uma vaga com trecircs candidatos concorrentes e trecircsperfis distintos de eleitores que seguiratildeo as seguintes distribuiccedilotildees

Tabela 16 ndash Distribuiccedilatildeo de notas - Cenaacuterio 5

Perfil Nota da Ana Nota do Beto Nota da CarlaPorcentagem

deeleitores

1 10 -10 5 362 -10 10 5 343 -10 -10 5 30

Esse contexto nos remete ao notaacutevel dilema do prisioneiro Nele dois prisioneiroscuacutemplices satildeo interrogados individualmente sem poder se comunicar um com o outro ecada um enfrenta o dilema de delatar ou natildeo o seu parceiro Se os dois prisioneirosdecidem se manter calados sobre o crime ambos satildeo sentenciados a um ano de prisatildeo Seapenas um deles dedurar o outro o traidor sai livre enquanto seu parceiro eacute condenadoa trecircs anos Se ambos dedurarem um ao outro eles satildeo condenados juntos a dois anosde prisatildeo Esse dilema eacute uma ideia claacutessica presente no estudo da teoria dos jogos sendooriginalmente elaborada por Merrill Flood e Melvin Dresher em 1950 e mais tarde sendonomeada de dilema dos prisioneiros por Albert W Tucker (POUNDSTONE 1992)

O que esse dilema nos mostra eacute a tentaccedilatildeo que o indiviacuteduo deteacutem se sua racionalizaccedilatildeoestiver voltada para seus proacuteprios interesses e somente eles em oposiccedilatildeo a pensar no bemdo grupo como um todo Neste cenaacuterio encontramos dois grupos de eleitores expressiva-mente opostos os perfis 1 e 2 Se qualquer uma das preferecircncias desses perfis fosse eleitaisso significaria uma alta rejeiccedilatildeo de maior parte da populaccedilatildeo No entanto eles possuema segunda opccedilatildeo em comum a Carla que por sua vez eacute a preferecircncia do terceiro perfilPortanto a eleiccedilatildeo da Carla seria logicamente o resultado oacutetimo

Mesmo assim a Ana eacute eleita nos dois sistemas acima o que natildeo parece justo poispela tabela 16 eacute evidente que apenas 36 da populaccedilatildeo a aprova enquanto que os outros64 a reprovam ao maacuteximo O sistema IRV se comporta de maneira idecircntica ao TRS

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 48: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

48

Figura 35 ndash FPTP - Cenaacuterio 5

Figura 36 ndash TRS segundo turno - Cenaacuterio 5

nesta situaccedilatildeo Com esse resultado a meacutedia das notas eacute -28 No entanto os trecircs sistemasseguintes nos apresentam resultados diferentes

Tabela 17 ndash Resultados do Cenaacuterio 5

Sistema Candidatoeleito

Meacutedia dasnotas

FPTP Ana -28TRS Ana -28IRV Ana -28AVS Carla 50BC Carla 50SVS Carla 50

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 49: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

49

Figura 37 ndash AVS - Cenaacuterio 5

Figura 38 ndash BC - Cenaacuterio 5

Tanto o AVS quanto o Borda Count e o SVS satildeo sistemas que consideram todasas opiniotildees de cada eleitor ao mesmo tempo e por isso satildeo capazes de eleger o melhorcandidato nesta situaccedilatildeo diferentemente do TRS que natildeo absorve completamente todosentimento do eleitor por todos os candidatos e o IRV que apesar de ser bem expressivoquebra esse processo em inuacutemeras rodadas o que permite a perda de informaccedilatildeo ao longodelas

Esses resultados podem ser replicados acessando o linklthttpelectionsimpythonanywherecomdirect_res1111110---[22Ana

222022Beto222022Carla22]-----36Voter20Profile2001020-1020534Voter20Profile201-10201020530Voter20Profile202-1020-10205100gt

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 50: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

50

Figura 39 ndash SVS - Cenaacuterio 5

46 CENAacuteRIO 6 VOTO DE MINORIA

Neste cenaacuterio temos uma eleiccedilatildeo com quatro candidatos e duas vagas A Ana seraacutea preferecircncia de uma extensa parte da populaccedilatildeo (distribuiccedilatildeo Loved Figura 53) Betoe Carla seratildeo candidatos razoavelmente populares (distribuiccedilatildeo Neutral Figura 47) eDiego seraacute a preferecircncia de apenas um pequeno grupo especiacutefico e rejeitado pela maioria(distribuiccedilatildeo Disliked Figura 51) Eacute intuitivo esperar que os dois candidatos eleitos seratildeoa Ana e ou o Beto ou a Carla e isso eacute exatamente o que ocorre na figura 40 no sistemaFPTP sem voto de minoria

Figura 40 ndash FPTP - Cenaacuterio 6 sem voto de minoria

Eacute evidente a discrepacircncia da quantidade de votos da Ana para os outros candidatose apesar de Beto e Carla serem mais populares que Diego os trecircs natildeo se encontrammuito afastados Poreacutem se a pequena fraccedilatildeo de candidatos que possuem a Ana como

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 51: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

51

Figura 41 ndash FPTP - Cenaacuterio 6 100 voto de minoria para Diego

preferecircncia e Diego como segunda opccedilatildeo optarem pelo voto de minoria a situaccedilatildeo mudacompletamente (Figura 41) Assim apesar de extensamente rejeitado Diego conquistaa segunda vaga e a meacutedia das notas despenca de 2929 para 0505 No entanto aindaexiste um cenaacuterio pior Se os outros grupos de eleitores pensarem da mesma forma eevitarem votar na Ana achando que sua eleiccedilatildeo jaacute estaacute assegurada apenas 80 de votode minoria para esses grupos jaacute eacute o suficiente para eliminaacute-la das eleiccedilotildees (Figura 42)Com a Ana eliminada a meacutedia das notas cai ainda mais para 0058

Figura 42 ndash FPTP - Cenaacuterio 6 80 voto de minoria em Beto Carla e Diego

O sistema Bloc Vote eacute uma das soluccedilotildees para o voto de minoria Permitindo queos eleitores votem no mesmo nuacutemero de candidatos que de vagas a serem preenchidasnatildeo existe o iacutempeto a esse tipo de voto estrateacutegico O resultado desse sistema portantoretorna a meacutedia das notas a casa dos 29 (Figura 43) Os sistemas AVS Borda Count eSVS tambeacutem impedem a presenccedila do voto de minoria e atingem resultados semelhantes

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 52: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

52

Figura 43 ndash BV - Cenaacuterio 6

Tabela 18 ndash Resultados do Cenaacuterio 6

Sistema Candidatoseleitos

Meacutedia dasnotas

FPTP sem voto de minoriaAna eBeto 2929

FPTP com 100 de voto de minoria no candidato 3Ana eDiego 0505

FPTP com 80 de voto de minoriaBeto eCarla 0058

Bloc VoteAna eCarla 2913

Esses resultados podem ser replicados acessando os links

Sem voto de minoria lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]------100gt

100 voto de minoria para Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[00010]--100gt

80 voto de minoria em Beto Carla e Diego lthttpelectionsimpythonanywherecomdirect_res1000001-2[4002][22Ana222022Beto222022Carla2222Diego22]-1-[0080808]--100gt

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 53: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

53

5 COMO FUNCIONA O SIMULADOR

O programa foi implementado na linguagem Python e eacute composto por oito classes dis-tintas sendo uma classe base e outras sete (uma para cada sistema eleitoral implementado)que estendem a classe base

51 CLASSE ELECTIONS

Esta classe funciona como base para todas as outras Ela conteacutem todas as estrutu-ras requisitadas e acessadas pela simulaccedilatildeo de cada sistema eleitoral Suas principaisestruturas satildeo

bull candidates Dicionaacuterio composto por chave igual ao iacutendice de cada candidato evalor igual ao nuacutemero de votos recebidos por esse candidato

Figura 44 ndash estrutura candidates

bull voters Lista de dicionaacuterios Cada dicionaacuterio representa um eleitor e eacute compostopor chave igual ao iacutendice de cada candidato e valor igual agrave nota (-10 a 10) que oeleitor atribui agravequele candidato

bull votes Dicionaacuterio composto por chave igual ao iacutendice de cada candidato e valorigual a um set contendo todos os iacutendices dos eleitores que votaram nesse candidato

Tais estruturas guardam as informaccedilotildees de todos os candidatos e eleitores gera-dos Dois dos paracircmetros recebidos pelo construtor da classe Elections eacute o nuacute-mero de candidatos e o nuacutemero de eleitores a serem criados respectivamente pelos meacuteto-dos create_candidates (apecircndice B) e create_voters (apecircndice A) O meacutetodocreate_candidates simplesmente inicializa cada iacutendice das estruturas candidatese votes

Eleitores podem ser gerados aleatoacuteria ou deterministicamente dependendo da intenccedilatildeode uso do simulador Eacute possiacutevel gerar eleitores aleatoriamente onde a nota que esse eleitor

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 54: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

54

Figura 45 ndash estrutura voters

Figura 46 ndash estrutura votes

daraacute para cada candidato depende da distribuiccedilatildeo selecionada para esse A distribuiccedilatildeoneutral possui maior probabilidade da nota gerada ser zero ou proacutexima de zero a likede loved geram notas mais proacuteximas de 10 e de maneira oposta as distribuiccedilotildees disliked ehated geram notas mais proacuteximas de -10 e por fim as distribuiccedilotildees polarizer e stronglypolirizer geram notas em ambas extremidades e evitam notas proacuteximas de 0 Poreacutemtambeacutem eacute possiacutevel criar perfis de eleitores que definiratildeo para determinada porcentagemda populaccedilatildeo as notas exatas dadas a cada candidato

Com as listas das devidas notas de cada candidato por eleitor eacute preciso colocaacute-lasna forma de um ranking para que fique evidente em qual candidato aquele eleitor vota-ria Para isso o meacutetodo sort_ranks (apecircndice H) ordena o ranking de cada eleitor

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 55: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

55

Figura 47 ndash PDF - Distribuiccedilatildeo Neutral

Figura 48 ndash CDF - Distribuiccedilatildeo Neutral

na estrutura voters Poreacutem apoacutes a ordenaccedilatildeo dos rankings eacute necessaacuterio lidar com aduplicidade de notas dentro de um mesmo ranking pois se dois ou mais candidatos pos-suem a mesma nota ao chamarmos o meacutetodo de ordenaccedilatildeo do python o candidato como maior iacutendice sempre levaraacute prioridade na votaccedilatildeo o que natildeo eacute condizente com a reali-dade Entatildeo a partir dos rankings ordenados se cria um dicionaacuterio para cada um ondea chave eacute a nota e o valor eacute a lista dos candidatos com a mesma nota Em seguida cadauma dessas listas eacute embaralhada dando a cada candidato com a mesma nota uma chanceigual de ser escolhido Esses dicionaacuterios satildeo revertidos agrave estrutura voters agora comuma ordenaccedilatildeo justa Para definir o voto de cada eleitor simplesmente satildeo selecionados

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 56: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

56

Figura 49 ndash PDF - Distribuiccedilatildeo Liked

Figura 50 ndash CDF - Distribuiccedilatildeo Liked

(dependendo do nuacutemero de vagas da eleiccedilatildeo) os candidatos no topo de cada ranking oque tambeacutem eacute feito no meacutetodo sort_ranks Esses rankings no entanto natildeo satildeo fixosainda existe a possibilidade da alteraccedilatildeo deles apoacutes a contabilizaccedilatildeo dos votos uacuteteis oque eacute feito de maneira diferente para cada sistema eleitoral e portanto cada um possuimeacutetodos proacuteprios Eacute importante ressaltar tambeacutem que os votos de todos os eleitores satildeocontabilizados ou seja no simulador natildeo existe a possibilidade de voto nulo ou voto embranco mesmo que um eleitor natildeo aprove nenhum candidato

Apoacutes essa contabilizaccedilatildeo eacute necessaacuterio definir os candidatos que estatildeo na lideranccedila daseleiccedilotildees Isso eacute feito para definir quais candidatos seratildeo os alvos dos votos taacuteticos Os

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 57: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

57

Figura 51 ndash PDF - Distribuiccedilatildeo Disliked

Figura 52 ndash CDF - Distribuiccedilatildeo Disliked

candidatos que satildeo considerados como liacutederes satildeo iguais aos primeiros n+1 candidatosonde n eacute o nuacutemero de vagas ofertadas A definiccedilatildeo dos liacutederes eacute feita com o meacutetodoset_leading_candidates (apecircndice F) Com isso a simulaccedilatildeo do sistema FPTPestaacute quase completa e a classe FirstPastThePost apenas lidaraacute com os votos uacuteteis

Para cada sistema o simulador notifica se ele elegeu o melhor candidato Apoacutes acriaccedilatildeo dos eleitores o meacutetodo calculate_means (apecircndice C) calcula as meacutedia dasnotas de cada candidato e as guarda em um dicionaacuterio chamado stats Quando umsistema escolhe um candidato esse dicionaacuterio eacute checado e o meacutetodo get_mean (apecircndiceD) retorna a proacutepria meacutedia e True se esta eacute a maior meacutedia entre os candidatos Essa

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 58: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

58

Figura 53 ndash PDF - Distribuiccedilatildeo Loved

Figura 54 ndash CDF - Distribuiccedilatildeo Loved

funcionalidade soacute existe para eleiccedilotildees com 10 candidatos ou menos e para eleiccedilotildees de 1 vagasenatildeo ficaria custoso guardar todas as combinaccedilotildees de meacutedias para candidatos vitoriososNo entanto para esses outros casos existe o meacutetodo calculate_mean (apecircndice E) quecalcula apenas a meacutedia do(s) candidato(s) vitorioso(s) A meacutedia das notas eacute simplesmenteo somatoacuterio das notas dos candidatos dividido pelo nuacutemero de eleitores e pelo nuacutemero devagas da eleiccedilatildeo

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 59: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

59

Figura 55 ndash PDF - Distribuiccedilatildeo Hated

Figura 56 ndash CDF - Distribuiccedilatildeo Hated

Meacutedia das Notas sumei

sumvj nij

etimes v

Sendo v igual ao nuacutemero de vagas e o nuacutemero de eleitores e n ij a nota dada peloeleitor i ao candidato eleito para a vaga j

Nas proacuteximas seccedilotildees seratildeo comentados os coacutedigos das classes que representam cadasistema eleitoral implementado

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 60: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

60

Figura 57 ndash PDF - Distribuiccedilatildeo Polarizer

Figura 58 ndash CDF - Distribuiccedilatildeo Polarizer

52 CLASSE FIRSTPASTTHEPOST

Existem dois tipos de votos uacuteteis implementados neste simulador o voto taacutetico eo voto de minoria Em ambas as situaccedilotildees a decisatildeo de um eleitor mudar de votono entanto natildeo eacute certa A probabilidade da mudanccedila taacutetica de voto eacute definida por doisparacircmetros por candidato (um para cada tipo de voto uacutetil) Ou seja para cada candidatoeacute possiacutevel definir a porcentagem da populaccedilatildeo de seus eleitores que optaraacute tanto pelovoto taacutetico quanto pelo voto de minoria

Foi mencionado anteriormente que os rankings de cada eleitor natildeo satildeo fixos e que nacontabilizaccedilatildeo dos votos uacuteteis eles poderiam ser alterados poreacutem isso natildeo eacute completa-

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 61: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

61

Figura 59 ndash PDF - Distribuiccedilatildeo Strongly Polarizer

Figura 60 ndash CDF - Distribuiccedilatildeo Strongly Polarizer

mente verdade A estrutura que guarda esses rankings denominada sorted_voterseacute o resultado do meacutetodo sort_ranks da classe Elections Essa estrutura eacute fixa du-rante toda a simulaccedilatildeo e os meacutetodos correspondentes ao voto uacutetil natildeo a modificam poiscada sistema eleitoral aplica suas mudanccedilas de maneira distinta e para um nuacutemero grandede eleitores fica muito custoso fazer uma coacutepia dessa estrutura para cada um deles Aoinveacutes disso cada classe guarda uma lista separada contendo apenas os rankings modifica-dos Essa lista eacute verificada durante a contabilizaccedilatildeo dos votos taacuteticos e dos votos deminoria que satildeo feitas pelos meacutetodos fptp_count_tactical_votes (apecircndice I) efptp_count_minority_votes (apecircndice J) respectivamente

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 62: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

62

53 CLASSE TWOROUNDSYSTEM

A primeira rodada do Two-round System eacute essencialmente a simulaccedilatildeo da classe an-terior poreacutem ao inveacutes de selecionar diretamente o primeiro candidato como vencedor osistema captura os dois primeiros Durante essa primeira rodada os dois tipos de votouacutetil satildeo contabilizados da mesma forma que no FPTP Em seguida eacute feita a checagemda proporccedilatildeo de votos do primeiro colocado pois se for maior que 50 a segunda rodadanatildeo precisa ser simulada No entanto antes da simulaccedilatildeo da segunda rodada eacute necessaacuteriofazer a contabilizaccedilatildeo das coalizotildees Uma coalizatildeo pode tanto melhorar a nota de umcandidato quanto pioraacute-la dependendo das notas que o eleitor daacute para os outros candida-tos da coalizatildeo Para cada candidato de uma coalizatildeo se soma agrave sua nota a parte inteirada metade das notas dos outros candidatos pertencentes agravequela coalizatildeo Por exemplose um eleitor qualquer daacute a nota 4 para um candidato C1 que pertence a uma coalizatildeocom um outro candidato C2 a quem foi atribuiacuteda a nota 7 ao candidato C1 seraacute somadaa parte inteira da metade de 7 resultando em 4+3=7 e ao candidato C2 seraacute atribuiacuteda asua nota original mais a metade de 4 resultando em 7+2=9 Essa contabilizaccedilatildeo eacute feitapelo meacutetodo trs_account_for_coalitions (apecircndice L) Na segunda rodada todosos votos dos candidatos eliminados satildeo redistribuiacutedos segundo as segundas preferecircnciasdeterminadas pelos rankings dos eleitores Essa contabilizaccedilatildeo final eacute feita com o meacutetodotrs_second_round (apecircndice K)

54 CLASSE INSTANTRUNOFFVOTING

A simulaccedilatildeo do IRV consiste na chamada do meacutetodo irv_count_votes (apecircndiceM) a cada rodada da eleiccedilatildeo Esse meacutetodo checa se algum eleitor jaacute possui mais de 50 dosvotos ou se a rodada atual eacute a uacuteltima rodada (o nuacutemero de rodadas eacute sempre um a menosque o nuacutemero de candidatos) Caso contraacuterio o candidato com menos votos eacute adicionadoa uma lista de candidatos eliminados e o ranking de seus eleitores satildeo analisados Se iterapor cada ranking do candidato mais bem ranqueado ao menos e o primeiro candidatoque natildeo estiver na lista de eliminados recebe o voto Apoacutes a transferecircncia dos votos docandidato eliminado a simulaccedilatildeo continua para a proacutexima rodada

Quando o voto taacutetico estaacute habilitado o sistema eacute simulado duas vezes A primeirasimulaccedilatildeo ocorre sem votos taacuteticos e seu propoacutesito eacute definir quem satildeo os liacutederes da elei-ccedilatildeo Ela funciona como uma pesquisa eleitoral para os eleitores que optarem pelo vototaacutetico Com isso essa classe possui um meacutetodo proacuteprio para preencher a lista de candi-datos liacutederes que simplesmente captura os dois candidatos da uacuteltima rodada (apecircndice G)A segunda simulaccedilatildeo roda como a primeira executando o meacutetodo irv_count_votesa cada rodada poreacutem com o meacutetodo irv_apply_tactical_votes (apecircndice P e Q)sendo executado antes Esse meacutetodo simula as estrateacutegias compromising e burying onde

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 63: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

63

cada eleitor que opta pelo voto taacuteticoranqueia em primeiro lugar sua preferecircncia entreos candidatos liacutederes e em uacuteltimo lugar o liacuteder concorrente

55 CLASSE APPROVALVOTING

Essa classe possui um meacutetodo para a contagem de votos normal (apecircndice N) e umpara a contagem quando os votos taacuteticos satildeo habilitados no simulador (apecircndice O) Nacontagem normal se itera sobre todos os rankings contidos na estrutura sorted_votersjaacute mencionada anteriormente e para cada um deles todos os candidatos com notas acimade 0 recebem um voto ou seja satildeo aprovados O tipo de voto taacutetico presente nessesistema eacute o bullet voting ele eacute simulado da seguinte maneira com os votos taacuteticos habi-litados para uma porcentagem dos eleitores (fornecida pelo usuaacuterio) de cada candidatoapenas o voto em seu candidato preferido seraacute contabilizado natildeo importando se outroscandidatos tambeacutem possuam notas maiores que 0 Ou seja se o usuaacuterio definir 50 devoto taacutetico para certo candidato por volta de 50 dos eleitores que o tiverem comoprimeira opccedilatildeo apenas votam nele e em mais nenhum outro

56 CLASSE BORDACOUNT

Neste sistema de votaccedilatildeo os candidatos satildeo pontuados de acordo com suas po-siccedilotildees nos rankings dos eleitores O pior colocado recebe zero e a pontuaccedilatildeo au-menta de um em um ateacute o mais bem colocado Essa pontuaccedilatildeo eacute feita no meacutetodobc_sum_candidates_scores (apecircndice R) O voto taacutetico para essa classe eacute exa-tamente o mesmo utilizado no IRV sendo simuladas as estrateacutegias de compromising eburying (apecircndice P e Q) Como no IRV quando os votos taacuteticos estatildeo habilitadosduas simulaccedilotildees ocorrem com a primeira delas funcionando como uma pesquisa eleito-ral para os eleitores Essa classe tambeacutem possui um meacutetodo proacuteprio para a seleccedilatildeo doscandidatos liacutederes o qual eacute idecircntico ao meacutetodo na classe Elections poreacutem pode terresultados diferentes da simulaccedilatildeo no FPTP e por isso precisa executar separadamente

57 CLASSE SCOREVOTING

De maneira similar agrave classe ApprovalVoting nesta classe tambeacutem foi implemen-tada uma forma de bullet voting Isso eacute feito no meacutetodo svs_apply_tactical_votes(apecircndice S) Para uma porcentagem da populaccedilatildeo que opta pelo voto taacutetico seus ran-kings satildeo adulterados onde o candidato de sua preferecircncia receberaacute a nota maacutexima(+10)e todos os outros a nota miacutenima(-10) Logo eacute como se eles estivessem restringindo seuvoto a apenas um candidato apesar da liberdade presente neste sistema A contagemfinal dos pontos eacute feita no meacutetodo svs_sum_candidates_scores (apecircndice T) e eacutemeramente o somatoacuterio dos pontos atribuiacutedos a cada candidato

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 64: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

64

58 CLASSE BLOCVOTE

O sistema Bloc Vote elimina o voto de minoria encontrado no sistema FPTP eportanto sua classe correspondente apenas possui um meacutetodo para contagem dos vo-tos e natildeo lida com nenhum tipo de voto taacutetico A contagem eacute feita com o meacutetodobv_count_votes (apecircndice U) nele todos os n candidatos mais bem colocados noranking de um eleitor recebem um voto onde n eacute igual ao nuacutemero de vagas da eleiccedilatildeo

59 TECNOLOGIAS UTILIZADAS

A implementaccedilatildeo foi feita com uma combinaccedilatildeo dos frameworks Django para a lin-guagem Python utilizado no backend da aplicaccedilatildeo e React para Javascript no frontendO React eacute uma biblioteca para o desenvolvimento de interfaces de usuaacuterio Sua vanta-gem eacute a possibilidade de criaccedilatildeo de componentes ou classes em javascript que podemser multiplicados e reutilizados na estruturaccedilatildeo da aplicaccedilatildeo Django segue o modelo dearquitetura MTV que separa a aplicaccedilatildeo em trecircs camadas Models Templates e Viewsque eacute uma interpretaccedilatildeo proacutepria do modelo MVC A integraccedilatildeo desses dois frameworks eacutepossiacutevel com o module bundler Webpack que por sua vez gera um arquivo estaacutetico que eacuteinterpretado pelo Django a partir dos componentes do React

Em relaccedilatildeo agrave parte esteacutetica do site foi incorporado o tema Lux do Bootstrap e osgraacuteficos apresentados na sessatildeo de resultados satildeo fornecidos pela biblioteca Apex Charts

O gerenciamento de estados no frontend da aplicaccedilatildeo eacute feito com o uso de uma biblio-teca chamada Redux a criaccedilatildeo de testes unitaacuterios com a biblioteca Nose o versionamentodo projeto foi feito com o auxiacutelio do Github e por fim a aplicaccedilatildeo estaacute sendo hospedadano site pythonanywhere

Todo o coacutedigo se encontra no link lthttpsgithubcomgsbevilaquaelectionsgt

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 65: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

65

6 CONCLUSAtildeO

Dentre os sistemas abordados neste trabalho eacute niacutetido que o FPTP eacute o sistema quemenos se esforccedila em satisfazer fraccedilotildees significativas da populaccedilatildeo natildeo apenas por ser umsistema de pluralidade mas tambeacutem por ser elevadamente suscetiacutevel a mais de um tipode voto estrateacutegico O TRS apesar de ser um avanccedilo em relaccedilatildeo ao FPTP por impora necessidade da maioridade seus resultados ainda podem ser manipulados atraveacutes daformaccedilatildeo de coalizotildees e sua estrutura eacute muito mais complacente ao voto taacutetico do que oIRV

Mesmo assim diante dos resultados obtidos no Capiacutetulo 4 existe um impasse a serconsiderado Por um lado temos o IRV que se comporta melhor do que suas alternativasmais comumente usadas o FPTP e o TRS e que possui certa resistecircncia aos riscosenvolvidos com os votos taacuteticos mas que nem sempre retorna os melhores resultados epossui a estranha caracteriacutestica da natildeo-monotonicidade Por outro lado temos sistemascomo o Borda Count e o SVS que parecem ser consistentes em retornar o melhor candidatomas que podem ser completamente desajustados se um grupo razoaacutevel de indiviacuteduosresolver votar de maneira estrateacutegica ao inveacutes de votar em suas reais preferecircncias

Em relaccedilatildeo agraves eleiccedilotildees com mais de uma vaga as dificuldades tambeacutem emergem davotaccedilatildeo estrateacutegica Os denominados neste trabalho votos de minoria quando presen-tes afetam profundamente o FPTP enquanto as alternativas Bloc Vote Borda CountAVS e SVS satildeo mais eficientes porque os evitam

Eacute evidente ver que o sistema ideal seria um que ao mesmo tempo que em sua estruturarestringisse ao maacuteximo qualquer tentativa de pensamento estrateacutegico como no IRV masque tambeacutem permitisse o maior grau de expressividade possiacutevel ao eleitor e absorvessetoda a intenccedilatildeo do mesmo assim como ocorre no SVS Este sistema hiacutebrido formado poresses outros dois talvez jaacute seja o proacuteprio Borda Count que possui um tipo de voto taacuteticomas que quando presente pode ser tatildeo desastroso e friacutevolo que talvez seja o necessaacuteriopara fazer com que a populaccedilatildeo votante perceba que votar de maneira verdadeira eacute simde seu interesse

Portanto se natildeo for possiacutevel o desenvolvimento de um sistema que permita ao mesmotempo alta expressividade aos eleitores e a anulaccedilatildeo de qualquer tipo de voto estrateacutegicotalvez a melhor alternativa seja uma maior educaccedilatildeo eleitoral sobre os malefiacutecios destetipo de pensamento e com isso a utilizaccedilatildeo de sistemas eficientes como o Borda Count eo SVS

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 66: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

66

REFEREcircNCIAS

AMY D J Behind the Ballot Box A Citizenrsquos Guide to Voting Systems 88Post Road West Westport CT 06881 Praeger Publishers 2000

Bartholdi John J III and Orlin James B Single transferable vote resists strategicvoting 1990 Disponiacutevel em lthttpswww2isyegatechedu~jjbpapersstvpdfgtAcesso em 29 jul2019

Electoral Reform Society Bloc vote 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemfirst-past-the-postblock-votegt Acesso em 29 mai2019

Electoral Reform Society Borda count 2017 Disponiacutevel em lthttpswwwelectoral-reformorgukvoting-systemstypes-of-voting-systemborda-countgt Acessoem 28 mai2019

HAMLIN A Who uses approval voting 2015 Disponiacutevel em lthttpswwwelectionscienceorgvoting-methodsapproval-voting-progressgt Acesso em 27mai2019

LIPPMAN D Borda count 2012 Disponiacutevel em lthttpscourseslumenlearningcomwaymakermath4libartschapterborda-countgt Acesso em 28 mai2019

ORNSTEIN J T Monotonicity failure under irv 2018 Disponiacutevel em lthttpsjoeornsteingithubioMonotonicityFailurehtmlgt Acesso em 29 mai2019

Pew Research Center Nearly six-in-ten governments are democracies2017 Disponiacutevel em lthttpswwwpewresearchorgfact-tank20171206despite-concerns-about-global-democracy-nearly-six-in-ten-countries-are-now-democraticft_17-11-10_demo_auto_trendgt Acesso em 07 abr2019

POUNDSTONE W Prisonerrsquos Dilemma 1745 Broadway New York NY 10019Doubleday 1992

The Center for Election Science Bullet Voting 2015 Disponiacutevel em lthttpswwwelectionscienceorglibrarybullet-votinggt Acesso em 29 mai2019

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 67: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

67

APEcircNDICES

APEcircNDICE A ndash MEacuteTODO CREATE_VOTERS

Coacutedigo A1 ndash Meacutetodo create_votersdef create_voters(self)

if(not len(selfvoter_profiles))

for voter in range(selfN_VOTERS)

candidates_rank = dict()

for candidate in reversed(range(selfN_CANDIDATES))

if(selfBIAS_VECTOR[candidate]==4)

candidates_rank[candidate] = self_sortear(selfloved)

elif(selfBIAS_VECTOR[candidate]==3)

candidates_rank[candidate] = self_sortear(selfliked)

elif(selfBIAS_VECTOR[candidate]==2)

candidates_rank[candidate] = self_sortear(selfdisliked)

elif(selfBIAS_VECTOR[candidate]==1)

candidates_rank[candidate] = self_sortear(selfhated)

elif(selfBIAS_VECTOR[candidate]==-1)

candidates_rank[candidate] = self_sortear(selfpolarizer

)

elif(selfBIAS_VECTOR[candidate]==-2)

candidates_rank[candidate] = self_sortear(self

more_polarizer)

else

candidates_rank[candidate] = self_sortear(selfneutral)

selfvotersappend(candidates_rank)

else

ranges = []

ranks = []

for prof in selfvoter_profiles

rangesappend(int(prof[pop_percentage]))

rank =

for index score in enumerate(prof[scores])

rank[index] = score

ranksappend(rank)

for index _range in enumerate(ranges)

for _ in range(int(selfN_VOTERS(_range100)))

selfvotersappend(ranks[index])

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 68: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

68

APEcircNDICE B ndash MEacuteTODO CREATE_CANDIDATES

Coacutedigo B1 ndash Meacutetodo create_candidatesdef create_candidates(self)

for i in range(selfN_CANDIDATES)

selfcandidates[i] = 0

selfvotes[i] = set()

APEcircNDICE C ndash MEacuteTODO CALCULATE_MEANS

Coacutedigo C1 ndash Meacutetodo calculate_meansdef calculate_means(self)

for candidate in range(selfN_CANDIDATES)

rating_sum = 0

for voter in selfvoters

rating_sum += voter[candidate]

selfstats[rsquomeansrsquo][candidate] = rating_sumselfN_VOTERS

APEcircNDICE D ndash MEacuteTODO GET_MEAN

Coacutedigo D1 ndash Meacutetodo get_meandef get_mean(self winners)

if len(winners) gt 1 or selfN_CANDIDATES gt 10

return selfcalculate_mean(winners)

else

chose_best = True if winners[0] == selfbest_candidate else

False

return selfstats[rsquomeansrsquo][winners[0]] chose_best

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 69: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

69

APEcircNDICE E ndash MEacuteTODO CALCULATE_MEAN

Coacutedigo E1 ndash Meacutetodo calculate_meandef calculate_mean(self)

rating_sum = 0

for voter in selfvoters

for candidate in winners

rating_sum += voter[candidate]

return rating_sum(selfN_VOTERSselfN_VACANCIES) False

APEcircNDICE F ndash MEacuteTODO SET_LEADING_CANDIDATES

Coacutedigo F1 ndash Meacutetodo set_leading_candidatesdef set_leading_candidates(self)

for i in range(1 selfN_VACANCIES + 2)

selfleading_candidatesappend(selfsorted_candidates[-i][self

CANDIDATE_INDEX])

APEcircNDICE G ndash MEacuteTODO IRV_SET_LEADING_CANDIDATES

Coacutedigo G1 ndash Meacutetodo irv_set_leading_candidatesdef _set_leading_candidates(self)

for leader in selfelecrounds[-1]

selfleading_candidatesappend(leader[0])

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 70: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

70

APEcircNDICE H ndash MEacuteTODO SORT_RANKS

Coacutedigo H1 ndash Meacutetodo sort_ranksdef sort_ranks(self)

self_account_for_coalitions()

for voter in selfvoters

selfsorted_votersappend(sorted(voteritems() key=operatoritemgetter

(1)))

temp = []

for voter in selfsorted_voters

new_dict = defaultdict(list)

for k in voter

new_dict[k[1]]append(k[0])

tempappend(new_dict)

selfsorted_voters = []

for voter_index current_voter in enumerate(temp)

new_voter = []

for rating candidate_indexes in current_voteritems()

if len(current_voter[rating]) gt 1

shuffle(current_voter[rating])

for e in candidate_indexes

new_voterappend((e rating))

else

new_voterappend((candidate_indexes[0] rating))

selfsorted_votersappend(new_voter)

selfcandidates[new_voter[-1][0]] += 1

selfvotes[new_voter[-1][0]]add(voter_index)

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 71: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

71

APEcircNDICE I ndash MEacuteTODO FPTP_COUNT_TACTICAL_VOTES

Coacutedigo I1 ndash Meacutetodo fptp_count_tactical_votesdef count_tactical_votes(self)

for candidate in selfvotes_copy

if candidate not in selfelecleading_candidates

for voter_index in selfvotes_copy[candidate]

for index _candidate in enumerate(reversed(selfelec

sorted_voters[voter_index]))

if _candidate[selfelecCANDIDATE_INDEX] in selfelec

leading_candidates

if randomrandom() lt selfelec

tactical_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copy

deepcopy(selfelecsorted_voters[voter_index])

selfrankings_changed[voter_index][-(index + 1)]

selfrankings_changed[voter_index][-1] = self

rankings_changed[voter_index][-1] self

rankings_changed[voter_index][-(index + 1)]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

selfvotes[candidate]remove(voter_index)

selfvotes[_candidate[selfelecCANDIDATE_INDEX

]]add(voter_index)

break

break

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 72: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

72

APEcircNDICE J ndash MEacuteTODO FPTP_COUNT_MINORITY_VOTES

Coacutedigo J1 ndash Meacutetodo fptp_count_minority_votesdef count_minority_votes(self)

half_vacancies = mathfloor(selfelecN_VACANCIES2)

for candidate in selfelecleading_candidates

if selfelecleading_candidatesindex(candidate) gt= half_vacancies

continue

for voter_index in selfvotes_copy[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[voter_index

])

for index _candidate in enumerate(reversed(ranking))

if _candidate[selfelecCANDIDATE_INDEX] not in selfelec

leading_candidates or (_candidate[selfelec

CANDIDATE_INDEX] in selfelecleading_candidates and

selfelecleading_candidatesindex(_candidate[selfelec

CANDIDATE_INDEX]) gt= half_vacancies)

if _candidate[selfelecCANDIDATE_RANK] gt= 0

if randomrandom() lt selfelec

minority_vote_percentages[_candidate[selfelec

CANDIDATE_INDEX]]

selfcandidates[candidate] -= 1

selfcandidates[_candidate[selfelec

CANDIDATE_INDEX]] += 1

break

break

break

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 73: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

73

APEcircNDICE K ndash MEacuteTODO TRS_SECOND_ROUND

Coacutedigo K1 ndash Meacutetodo trs_second_rounddef trs_second_round(self)

self_account_for_coalitions()

for candidate in selfvotes

if candidate = selfwinner and candidate = selfsecond_place

for voter_index in selfvotes[candidate]

if voter_index in selfrankings_changed

ranking = selfrankings_changed[voter_index]

else

ranking = copydeepcopy(selfelecsorted_voters[

voter_index])

for index2 candidate in enumerate(reversed(ranking))

if candidate[selfelecCANDIDATE_INDEX] == selfwinner

selfcandidates[selfwinner] += 1

selfvotes[selfwinner]add(voter_index)

break

elif candidate[selfelecCANDIDATE_INDEX] == self

second_place

selfcandidates[selfsecond_place] += 1

selfvotes[selfsecond_place]add(voter_index)

break

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

winners = []

vacancies = selfelecN_VACANCIES

for candidate in reversed(selfsorted_candidates)

if vacancies == 0

break

winnersappend(candidate[0])

vacancies -= 1

mean chose_best = selfelecget_mean(winners = winners)

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 74: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

74

APEcircNDICE L ndash MEacuteTODO TRS_ACCOUNT_FOR_COALITIONS

Coacutedigo L1 ndash Meacutetodo trs_account_for_coalitionsdef account_for_coalitions(self)

for voter_index voter in enumerate(selfelecsorted_voters)

voter_dict = dict()

og_voter_dict = dict()

for tup in voter

voter_dict[tup[0]] = tup[1]

og_voter_dict[tup[0]] = tup[1]

for coalition in selfeleccoalitions

for candidate in coalition

add_to_score = 0

for candidate2 in coalition

if candidate == candidate2

continue

half = og_voter_dict[candidate2[rsquovaluersquo]]2

if half lt 0

add_to_score += mathceil(half)

else

add_to_score += mathfloor(half)

if voter_dict[candidate[rsquovaluersquo]] + add_to_score gt 10

voter_dict[candidate[rsquovaluersquo]] = 10

elif voter_dict[candidate[rsquovaluersquo]] + add_to_score lt -10

voter_dict[candidate[rsquovaluersquo]] = -10

else

voter_dict[candidate[rsquovaluersquo]] += add_to_score

selfrankings_changed[voter_index] = []

for candidate in voter_dict

selfrankings_changed[voter_index]append((candidate voter_dict[

candidate]))

selfrankings_changed[voter_index] = sorted(selfrankings_changed[

voter_index] key=lambda x x[1])

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 75: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

75

APEcircNDICE M ndash MEacuteTODO IRV_COUNT_VOTES

Coacutedigo M1 ndash Meacutetodo irv_count_votesdef irv_count_votes(self _round)

selfelecroundsappend(selfsorted_candidates[_round])

if(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS == 05 and _round == selfelecN_CANDIDATES - selfelec

N_VACANCIES - 1)

return 2

elif(selfsorted_candidates[selfelecN_CANDIDATES - 1][1]selfelec

N_VOTERS gt 05)

return 1

else

selfelecexcludedadd(selfsorted_candidates[_round][selfelec

CANDIDATE_INDEX])

for voter_index in selfvotes[selfsorted_candidates[_round][self

elecCANDIDATE_INDEX]]

if voter_index in selfrankings_changed

for candidate in reversed(selfrankings_changed[voter_index

])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

else

for candidate in reversed(selfelecsorted_voters[

voter_index])

if candidate[selfelecCANDIDATE_INDEX] not in selfelec

excluded

selfcandidates[candidate[selfelecCANDIDATE_INDEX

]] += 1

selfvotes[candidate[selfelecCANDIDATE_INDEX]]

add(voter_index)

break

else

continue

selfsorted_candidates = selfelecsort_candidates(selfcandidates)

return 0

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 76: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

76

APEcircNDICE N ndash MEacuteTODO AVS_COUNT_VOTES

Coacutedigo N1 ndash Meacutetodo avs_count_votesdef avs_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

APEcircNDICE O ndash MEacuteTODO AVS_COUNT_VOTES_WITH_TACTICAL

Coacutedigo O1 ndash Meacutetodo avs_count_votes_with_tacticaldef _count_votes_with_tactical(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfcandidates[voter[-1][selfelecCANDIDATE_INDEX]] += 1

else

for candidate in reversed(voter)

if candidate[selfelecCANDIDATE_SCORE] gt 0

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

else

break

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 77: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

77

APEcircNDICE P ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES

Coacutedigo P1 ndash Meacutetodo irv_apply_tactical_votesdef irv_apply_tactical_votes(self)

pos = set()

for index perc in enumerate(selfelectactical_vote_percentages)

if perc gt 0

posadd(index)

for candidate in selfeleccandidates

if candidate not in selfleading_candidates

for voter_index in selfvotes[candidate]

raised = None

for candidate_tuple in reversed(selfelecsorted_voters[voter_index

])

if candidate_tuple[selfelecCANDIDATE_INDEX] in self

leading_candidates

if candidate_tuple[selfelecCANDIDATE_INDEX] in pos

if randomrandom() lt selfelectactical_vote_percentages[

candidate_tuple[selfelecCANDIDATE_INDEX]]

ranking = [None]selfelecN_CANDIDATES

ranking[-1] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

raised = candidate_tuple[selfelecCANDIDATE_INDEX]

break

break

break

if raised = None

for _candidate in selfleading_candidates

if _candidate = ranking[-1][0]

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] in [raised

buried]

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 78: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

78

APEcircNDICE Q ndash MEacuteTODO IRV_APPLY_TACTICAL_VOTES(CONTINUACcedilAtildeO)

Coacutedigo Q1 ndash Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)elif candidate in pos

for voter_index in selfvotes[candidate]

if randomrandom() lt selfelectactical_vote_percentages[candidate

]

for _candidate in selfleading_candidates

if _candidate = candidate

ranking = [None]selfelecN_CANDIDATES

ranking[0] = (_candidate selfelecvoters[voter_index][

_candidate])

buried = _candidate

break

i = 1

for candidate_tuple in selfelecsorted_voters[voter_index]

if candidate_tuple[selfelecCANDIDATE_INDEX] == buried

continue

else

ranking[i] = (candidate_tuple[selfelecCANDIDATE_INDEX]

selfelecvoters[voter_index][candidate_tuple[selfelec

CANDIDATE_INDEX]])

i += 1

selfrankings_changed[voter_index] = ranking

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 79: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

79

APEcircNDICE R ndash MEacuteTODO BC_SUM_CANDIDATES_SCORES

Coacutedigo R1 ndash Meacutetodo bc_sum_candidates_scoresdef bc_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

score = 0

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += score

score += 1

APEcircNDICE S ndash MEacuteTODO SVS_APPLY_TACTICAL_VOTES

Coacutedigo S1 ndash Meacutetodo svs_apply_tactical_votesdef svs_apply_tactical_votes(self)

for voter_index voter in enumerate(selfelecsorted_voters)

if randomrandom() lt selfelectactical_vote_percentages[voter[-1][self

elecCANDIDATE_INDEX]]

selfrankings_changed[voter_index] = copydeepcopy(selfelec

sorted_voters[voter_index])

for candidate_index candidate in enumerate(reversed(voter))

if candidate_index == 0

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] 10)

else

selfrankings_changed[voter_index][-(candidate_index + 1)] = (

voter[-(candidate_index + 1)][selfelecCANDIDATE_INDEX] -10)

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes
Page 80: UNIVERSIDADEFEDERALDORIODEJANEIRO ......RESUMO Existemdiversostiposdesistemaseleitoraisemusoaoredordomundo. Cadapaísopta pelo método que melhor se adequa ao …

80

APEcircNDICE T ndash MEacuteTODO SVS_SUM_CANDIDATES_SCORES

Coacutedigo T1 ndash Meacutetodo svs_sum_candidates_scoresdef svs_sum_candidates_scores(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter_index voter in enumerate(selfelecsorted_voters)

if voter_index in selfrankings_changed

for candidate in selfrankings_changed[voter_index]

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

else

for candidate in voter

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += candidate[

selfelecCANDIDATE_RANK]

APEcircNDICE U ndash MEacuteTODO BV_COUNT_VOTES

Coacutedigo U1 ndash Meacutetodo bv_count_votesdef bv_count_votes(self)

for index in range(selfelecN_CANDIDATES)

selfcandidates[index] = 0

for voter in selfelecsorted_voters

votes = selfelecN_VACANCIES

for candidate in reversed(voter)

if votes == 0

break

selfcandidates[candidate[selfelecCANDIDATE_INDEX]] += 1

votes -= 1

  • Folha de aprovaccedilatildeo
  • Agradecimentos
  • Epiacutegrafe
  • Resumo
  • Abstract
  • Lista de ilustraccedilotildees
  • Lista de Coacutedigos
  • Lista de tabelas
  • Lista de abreviaturas e siglas
  • Sumaacuterio
  • INTRODUCcedilAtildeO
    • MOTIVACcedilAtildeO E OBJETIVO
    • MEacuteTODO
    • ESTRUTURA
      • SISTEMAS ELEITORAIS
        • FISRT PAST THE POST
          • Exemplo
          • Vantagens e Desvantagens do FPTP
          • Voto Uacutetil no FPTP
            • TWO-ROUND SYSTEM
              • Exemplo
              • Vantagens e Desvantagens do TRS
              • Voto Uacutetil no TRS
                • INSTANT-RUNOFF VOTING
                  • Exemplo
                  • Vantagens e Desvantagens do IRV
                  • Voto Uacutetil no IRV
                    • APPROVAL VOTING SYSTEM
                      • Exemplo
                      • Vantagens e Desvantagens do AVS
                      • Voto Uacutetil no AVS
                        • THE BORDA COUNT
                          • Exemplo
                          • Vantagens e Desvantagens do BC
                          • Voto Uacutetil no BC
                            • SCORE VOTING SYSTEM
                              • Exemplo
                              • Vantagens e Desvantagens do SVS
                              • Voto Uacutetil no SVS
                                • BLOC VOTE
                                  • Exemplo
                                  • Voto Uacutetil no BV
                                      • O SIMULADOR
                                      • CENAacuteRIOS PERTINENTES
                                        • CENAacuteRIO 1 VOTO TAacuteTICO
                                        • CENAacuteRIO 2 VOTO TAacuteTICO NO IRV
                                        • CENAacuteRIO 3 NAtildeO-MONOTONICIDADE
                                        • CENAacuteRIO 4 COALIZOtildeES
                                        • CENAacuteRIO 5 DILEMA DO PRISIONEIRO
                                        • CENAacuteRIO 6 VOTO DE MINORIA
                                          • COMO FUNCIONA O SIMULADOR
                                            • CLASSE Elections
                                            • CLASSE FirstPastThePost
                                            • CLASSE TwoRoundSystem
                                            • CLASSE InstantRunoffVoting
                                            • CLASSE ApprovalVoting
                                            • CLASSE BordaCount
                                            • CLASSE ScoreVoting
                                            • CLASSE BlocVote
                                            • TECNOLOGIAS UTILIZADAS
                                              • CONCLUSAtildeO
                                              • Referecircncias
                                              • Meacutetodo create_voters
                                              • Meacutetodo create_candidates
                                              • Meacutetodo calculate_means
                                              • Meacutetodo get_mean
                                              • Meacutetodo calculate_mean
                                              • Meacutetodo set_leading_candidates
                                              • Meacutetodo irv_set_leading_candidates
                                              • Meacutetodo sort_ranks
                                              • Meacutetodo fptp_count_tactical_votes
                                              • Meacutetodo fptp_count_minority_votes
                                              • Meacutetodo trs_second_round
                                              • Meacutetodo trs_account_for_coalitions
                                              • Meacutetodo irv_count_votes
                                              • Meacutetodo avs_count_votes
                                              • Meacutetodo avs_count_votes_with_tactical
                                              • Meacutetodo irv_apply_tactical_votes
                                              • Meacutetodo irv_apply_tactical_votes (continuaccedilatildeo)
                                              • Meacutetodo bc_sum_candidates_scores
                                              • Meacutetodo svs_apply_tactical_votes
                                              • Meacutetodo svs_sum_candidates_scores
                                              • Meacutetodo bv_count_votes