Legislatures Elected by Evaluative Proportional Representation (EPR): An Algorithm

Journal of Political Risk, Vol. 7, No. 6, June 2018 

By Steve Bosworth and Anders Corr1

Abstract

Illustration of grading. Source: Getty.

This article describes a new and relatively simple evaluative method to elect all the members in any legislative body, such as a city council or national legislature.2 Called Evaluative Proportional Representation (EPR), each voter grades any number of candidates on their fitness for office as EXCELLENT, VERY GOOD, GOOD, ACCEPTABLE, POOR, or REJECT.  These evaluations are counted by hand or computer algorithm (here provided in the R statistical computer language).  This evaluative method of social choice is particularly good at revealing and optimizing voters’ utilities.  It ensures proportionate minority representation in legislative bodies by enabling each voter to guarantee that his or her evaluations of the candidates will continue fully to count in the deliberations and decisions made by their elected legislative body.  Each elected member of this body is given a different weighted vote as determined by counting all voters’ evaluations. As a result, each citizen’s vote continues to count within the weighted vote given to the elected member she most highly values.


This article explains how a new voting method called Evaluative Proportional Representation (EPR) fully satisfies the demand that in the best representative democracy, no citizen’s vote would be involuntarily wasted, quantitatively or qualitatively.2 EPR is intended for voters who are electing members of a legislative body, for example a city council, board of directors or national legislature. The method can be used for electing all members of the elected body at the same time. Until now, none of the available electoral systems could entirely satisfy the above demand.  Our description of EPR will be simplified by only referring to the election of a city council throughout.

We see a citizen’s vote as being wasted quantitatively to the degree that it fails proportionately to add to the voting power of the councilmember whom she has helped to elect.2  A citizen’s vote is wasted qualitatively when it fails to increase the voting power of the member she sees as most fit for the office, e.g. the one she trusts most to speak, work, and vote in the council as she would herself if she had the time, energy, skills and opportunity to do so.  Her vote is partly wasted qualitatively when her vote is instead given to a member who is less valued in this way by her.

Evaluative Voting

The most recent refinement 3 that has made waste free voting possible is an adaptation of Balinski and Laraki’s general argument in their book, Majority Judgment (2010).  They cogently argue that rather than asking citizens to rank, score, or mark candidates for a single post in some other way, evaluating (or grading) them is more likely to elect higher quality candidates, and thus the highest possible quality council in the eyes of its electorate.

Balinski and Laraki ask citizens to grade candidates’ fitness for the office as either EXCELLENT, VERY GOOD, GOOD, ACCEPTABLE, POOR, or REJECT.  This has the advantage of prompting citizens to think about what qualities the office needs, and these grades are more discerning, meaningful, and informative than numbers, scores, x’s or ticks.4

Each candidate who is not explicitly graded by a voter is counted as REJECTED by that voter.  As a result, all the candidates will have the same number of evaluations but a different set of grades received from the voters.

In a single-winner election, the Majority Judgment (MJ) winner is the one who has received grades from an absolute majority of voters that are equal to, or higher than, the highest median-grade given to any candidate. This median-grade is found as follows:

  • Place all the grades, high to low, top to bottom, in side-by-side columns, the name of each candidate at the top of each of these columns.
  • The median-grade for each candidate is the grade located half way down each column, i.e. in the middle if there is an odd number of voters, the lower middle if the number is even.

If more than one candidate has the same highest median-grade, the MJ winner is discovered by removing any grades equal in value to this grade (one-by-one) from each tied candidate’s total until only one of the previously tied candidates is found to retain the highest median-grade.5

In contrast to using ranking, scoring, or approving methods, MJ’s and EPR’s way of counting the evaluations offers voters fewer incentives and opportunities to vote insincerely or manipulatively.6  Additionally, grading is easier than ranking.  Consequently, MJ and EPR offer citizens every appropriate incentive not only to vote, but to reveal their honest evaluations of each candidate.

EPR adapts MJ

In order instead to elect multi-winners, we have adapted these MJ features to create EPR.  While MJ must allow up to 50% minus 1 of all citizens’ votes to be wasted, EPR has the advantage of allowing no votes to be wasted.  Each EPR citizen’s vote will be added to the weighted vote7 in the council of the member whom he or she had evaluated most highly,8 i.e. as at least ACCEPTABLE.

The next section describes the simple step by step process by which all citizens’ evaluations of the candidates for a city council are counted by EPR.  It describes the results of a simulated election of 7 members at-large (all citizens are able to grade any of all the candidates simultaneously).  They are elected by 70 citizens from 10 candidates, labeled A through J.  In the simulation fully described below, the winning candidates receive the following weighted votes in the council:

A-18, C-11, E-15, G-10, D-9, I-4, B-1.

Two citizens reject all candidates, and so waste their votes.

This simulation illustrates how each citizen’s vote continues fully to count quantitatively.  At the same time, because each citizen has had the opportunity to grade all the candidates, each citizen will be able to ensure that his or her vote will be added to the weighted vote of the winner she respects most, i.e. the one that she expects will best represent her qualitatively. 8

How EPR Counts the Votes

This illustration starts with the following sample ballot:


Introduction to this Sample Secret Ballot for EPR
How to Vote for Candidates:

The ballot on the next page allows you to guarantee that your one vote will increase the voting power in the council of the one elected candidate in the legislative body whom you see as most fit for the office. To do this, it is best for you to grade each candidate you know about as being either EXCELLENT, VERY GOOD, GOOD, ACCEPTABLE, POOR, or REJECTED.  Any candidates you do not grade will be counted as REJECTED by you.  Your vote will be added to the weighted vote in the council of the member you have most highly valued.  However, if none of the candidates you have evaluated as at least ACCEPTABLE is elected, your vote will instead be transferred to the weighted vote of the elected member most highly valued by the unelected candidate whom you most highly valued.

Candidate CodeCandidate NameExcellentVery GoodGoodAcceptablePoorReject
AStephen Collins
BCandice Crosby
CAmina Mir
DJune Glover
FFrank Field
GJack Straw
HRobin Levy
IRobert Reich
JRalph Alpert

After all ballots, such as the sample ballot above, are received by the electoral commission, all the grades awarded to all the candidates can be put into a matrix format as below. The name (or code) of each candidate at the top of each of the columns (e.g. 10 candidates, A to J, in our simulated election); the code number of each citizen voter listed on the left of each row (e.g. 70 voters in our simulation).  The grade given to each candidate by each voter is listed in his or her row and in the column under the relevant candidate’s name.  Note that in the following matrix, the grades are given number-names, where 6 = EXCELLENT, 5 =VERY GOOD, 4 = GOOD, 3 = ACCEPTABLE, 2 = POOR, and 1 = REJECT. These numbers are not numeric, but nominal.

         A B C D E F G H I J

Voter 1  6 1 1 1 1 1 1 1 1 1

Voter 2  6 1 1 1 1 1 1 1 1 1

Voter 3  6 1 1 1 1 1 1 1 1 1

Voter 4  6 1 1 1 1 1 1 1 1 1

Voter 5  6 1 1 1 1 1 1 1 1 1

Voter 6  6 1 1 1 1 1 1 1 1 1

Voter 7  6 1 1 1 1 1 1 1 1 1

Voter 8  6 1 1 1 1 1 1 1 1 1

Voter 9  6 1 1 1 1 1 1 1 1 1

Voter 10 5 6 1 3 1 4 1 1 1 1

Voter 11 5 6 1 3 1 4 1 1 1 1

Voter 12 5 6 1 3 1 4 1 1 1 1

Voter 13 1 6 1 1 1 1 1 1 1 1

Voter 14 5 1 5 1 1 1 3 3 4 1

Voter 15 5 1 5 1 1 1 3 3 4 1

Voter 16 5 1 5 1 1 1 3 3 4 1

Voter 17 5 1 1 1 1 1 1 1 1 1

Voter 18 6 6 1 1 1 1 1 1 1 1

Voter 19 6 6 1 1 1 1 1 1 1 1

Voter 20 6 6 1 1 1 1 1 1 1 1

Voter 21 6 6 1 1 1 1 1 1 1 1

Voter 22 6 6 1 1 1 1 1 1 1 1

Voter 23 6 6 1 1 1 1 1 1 1 1

Voter 24 1 1 6 1 1 1 1 1 1 1

Voter 25 1 1 6 1 1 1 1 1 1 1

Voter 26 1 1 6 1 1 1 1 1 1 1

Voter 27 1 1 6 1 1 1 1 1 1 1

Voter 28 1 1 6 1 1 1 1 1 1 1

Voter 29 1 1 6 1 1 1 1 1 1 1

Voter 30 1 1 6 1 1 1 1 1 1 1

Voter 31 1 1 1 6 1 1 1 1 1 4

Voter 32 1 1 1 6 1 1 1 1 1 4

Voter 33 1 1 1 6 1 1 1 1 1 4

Voter 34 1 1 1 6 1 1 1 1 1 4

Voter 35 1 1 1 6 1 1 1 1 1 4

Voter 36 1 1 1 6 1 3 1 1 1 1

Voter 37 1 1 5 1 6 1 1 1 1 1

Voter 38 1 1 5 1 6 1 1 1 1 1

Voter 39 1 1 5 1 6 1 1 1 1 1

Voter 40 1 1 5 1 6 1 1 1 1 1

Voter 41 1 1 5 1 6 1 1 1 1 1

Voter 42 1 1 5 1 5 6 1 1 1 1

Voter 43 1 1 5 1 5 6 1 1 1 1

Voter 44 1 1 5 1 5 6 1 1 1 1

Voter 45 1 1 5 1 5 6 1 1 1 1

Voter 46 1 1 5 1 5 6 1 1 1 1

Voter 47 1 1 5 1 5 6 1 1 1 1

Voter 48 1 1 1 1 1 1 6 5 1 4

Voter 49 1 1 1 1 1 1 6 5 1 4

Voter 50 1 1 1 1 1 1 6 5 1 4

Voter 51 1 1 1 1 1 1 6 1 1 1

Voter 52 6 6 1 1 1 1 6 6 1 1

Voter 53 6 6 1 1 1 1 6 6 1 1

Voter 54 1 1 1 1 1 3 4 6 5 1

Voter 55 1 1 1 1 1 3 4 6 5 1

Voter 56 1 1 1 1 1 3 4 6 5 1

Voter 57 1 1 1 1 1 3 4 6 5 1

Voter 58 1 1 6 1 6 6 6 6 1 1

Voter 59 1 1 6 1 6 6 6 6 1 1

Voter 60 1 1 1 5 5 1 1 1 6 1

Voter 61 1 1 1 5 5 1 1 1 6 1

Voter 62 1 1 1 1 1 1 1 1 6 1

Voter 63 1 1 6 6 1 1 1 1 6 1

Voter 64 1 1 6 6 1 1 1 1 6 1

Voter 65 1 1 1 6 6 1 5 5 6 1

Voter 66 1 1 1 6 6 1 5 5 6 1

Voter 67 1 1 5 4 1 4 5 1 4 6

Voter 68 1 1 5 4 1 4 5 1 4 6

Voter 69 1 1 1 1 1 1 1 1 1 1

Voter 70 1 1 1 1 1 1 1 1 1 1

The EPR Algorithm

EPR is structured only to elect the candidates who have received the highest available evaluations from the voters. This can be done by hand, but to improve convenience and accuracy, we provide a computer algorithm (Appendix A) for which the input is a matrix such as that above, and the output (Appendix B) is the counting process, plus a list of winning councilmembers and their respective number of affirmed evaluations (weighted votes). The algorithm is easily customized to any number of voters, council size, and number of candidates.

The algorithm starts (and continues) with a Bucklin-like9 discovery of the first of the 7 winners.  This is done by seeing if any candidate has received at least 1/7 of the 70 highest evaluations given by the voting citizens, i.e. at least 10.  Thus, the 1st Round in the count finds the total number of EXCELLENTs received by each candidate from all the voters. The total received by each candidate is placed at the bottom of each candidate’s column.  If one has received the highest number of at least 10 EXCELLENTs, the 1st winner is discovered.  In our example, candidate A has received 17 of these affirmed evaluations and is elected.  The principle of one-person-one-vote requires that the rows of the 17 who valued A as EXCELLENT must now be marked as used, i.e. no longer available for electing another winner. Thus, any EXCELLENTs which these 17 voters may have also awarded to other candidates will no longer be counted for them in any later round.  The 17 received by A are called affirmed evaluations because the count has discovered that these 17 must be given exclusively to A.   These affirmed evaluations will not be called weighted votes until they have been finalized.

In Round 2, it is discovered that C has exclusively received 11 EXCELLENTs and is elected.  Again, after these 11 rows are marked as used, Round 3 discovers that no remaining candidates have received at least 10 EXCELLENTs.  So, a 3rd winner has not been discovered in Round 3.

Consequently, in Round 4, all the available VERY GOODs are added to the remaining EXCELLENTs for the remaining candidates to see if the 3rd candidate is elected as a result of receiving at least 10 EXCELLENTs and VERY GOODs.  This round discovers that E has received 15 such affirmed evaluations and is thus elected.

Following a similar process, the 4th winner is not discovered until Round 6. This is after all the remaining GOODs have been added to all the remaining EXCELLENTs and VERY GOODs, i.e. in Round 6, G is discovered to have 10 affirmed evaluations and is elected.  Still, this is the result only after breaking the tie between G, I, and J because each has received 10 evaluations at this stage.  In this case, the tie does not have to be broken by lot because G’s 10 is composed of the set of highest evaluations.  That G’s are highest is discovered by counting the EXCELLENTs, VERY GOODs, and GOODs that each had received instead as SCORES, i.e. as 6, 5, and 4.  Consequently, each tied candidate’s total score at this stage is G-50, I-46, and J-44.

Round 7 searches for the 5th winner.  However, one cannot be found even by Round 8 and even after all the available ACCEPTABLEs have been added to the remaining EXCELLENTs, VERY GOODs, and GOODs.  No evaluations of POOR or REJECT must be added to help elect any candidate. Therefore, the remaining winners must instead be discovered by lowering the threshold of 10 iteratively by subtracting 1 (one-at-a-time) until the remaining winners are discovered.

Consequently, Round 9 discovers that D is the 5th winner with 9 affirmed evaluations.  Round 14 discovers that I is the 6th winner with 4 affirmed evaluations.  Round 18 discovers that B is the 7th winner with 1 affirmed evaluation.

After discovering these 7 winners, all but 3 of the 70 voters’ rows (ballots) have been marked as used.  If any of the evaluations recorded in these 3 voter’s rows grade any of the 7 winners as at least ACCEPTABLE, each such evaluation must now be added to the affirmed evaluations already counted for the relevant winner.

In any case, evaluations from Voters 69 and 70 cannot be added to any of the winners’ affirmed evaluations because they REJECTED every candidate, i.e. these voters deliberately wasted their votes.  However, voter 17’s unused vote evaluated candidate A as VERY GOOD.  Therefore, her evaluation must now be added to the 17 affirmed evaluations already received by A. This gives a new total of 18 for A.  Thus, at this stage,8 each winner has the following number of affirmed evaluations:

A-18, C-11, E-15, G-10, D-9, I-4, B-1.8

See Appendix B: Computer Algorithm for EPR Implemented in the R Statistical Computing Language, which provides the algorithm created by Stephen Bosworth and Anders Corr (25 February 2018) by which any EPR election can be counted as described above.  Appendix C provides the Computer Output for the simulated election describe above.

Conclusion

From the point of view of those who believe that an ideal representative democracy would not waste any citizens votes, if at all possible, EPR is superior to all the alternatives.

  1. EPR prompts citizens firstly to consider what qualities are ideally required of the office being sought. By allowing citizens to express the full range of their evaluations of as many of the candidates as they might wish, this makes an EPR election process more discerning, meaningful, and informative than the alternative processes.
  2. Unlike all varieties of Instant Run-off Voting (IRV),10 EPR cannot eliminate any candidate before all the winners have been discovered.
  3. EPR wastes no votes. Unlike other multi-winner methods, the equality that EPR offers to each citizen is exact because only EPR enables each citizen to guarantee that her one vote will continue fully to count (both quantitatively and qualitatively) in her council through the weighted vote earned by the member she most values.8
  4. As a result, the EPR council more accurately represents the interests or utilities of the electorate as a whole. In the above example, EPR would theoretically allow up to 7 somewhat different sets of hopes and concerns present in the minds of citizens to be enthusiastically, skillfully and proportionately represented on the council.  For example, any minority supported by at least 1/7 of the electorate would be proportionately represented.  Thus, EPR allows as many somewhat different sets of hopes and concerns as possible that are present in the minds of citizens to be represented proportionately in the legislative body.
  5. Each EPR council member would be more accountable to his electors because:
    1. Electors would probably have more specific expectations and thus a greater incentive to study and monitor the behavior of their respective members; and
    2. EPR provides an easier way to punish elected representatives whose behavior fails to match the electors’ expectations. This is partly because the next EPR election is always likely to provide electors with many other more attractive candidates to evaluate.
  6. Thus, an EPR council is more likely to help solve its city’s real economic, social and political problems. This is because each council member is both more likely to be trusted by her electors
    1. Accurately and skillfully to present their perspectives on these problems, and
    2. To negotiate the necessary compromises with opposing members in the council in order to pass laws to help solve these problems.
  7. In addition to the above advantages, because grading candidates is easier, more accurate and more satisfying than ranking or approving them; each citizen is more likely to see EPR as more user-friendly and informative than any alternative method.
  8. As contrasted to all other methods, EPR provides fewer incentives and less scope for citizens to vote dishonestly (manipulatively, strategically, or tactically).
  9. Unlike other methods, EPR provides every appropriate incentive for every citizen to vote, and to vote honestly.

References

BALINSKI, Michel and LARAKI, Rida. 2010. Majority Judgment, MIT

ERDMAN, Sol. 2010. ‘To Reverse America’s Decline, We Have to Fix Congress’s Dysfunctional Incentives’, Center for Collaborative Democracy, 7—17, Appendices III-V

OLSSONS (a), https://www.olssons.us/thelibrary/Center%20for%20Collaborative%20

OLSSONS (b), Democracy_%20Case%20for%20PAR.pdf

ERS97 STV Rules, Available at http://www.electoralreform.org.uk/votingsystems/stvrules.htm

GREEN-ARMYTAGE, James.  2010. ‘Voluntary delegation as the basis for a future political system’, Available at http://econ.ucsb.edu/~armytage/proxy2010.pdf 

GREEN-ARMYTAGE, James. 2004.  ‘A Survey of Basic Voting Methods’ Available at http://www.econ.ucsb.edu/~armytage/voting/survey.htm#_ftn12, also see: http://www.econ.ucsb.edu/~armytage/voting/

HEGEL, G.W.F. 1965. Philosophy of Right, tr. by T.M. Knox, Oxford: Oxford, paragraphs 229, 251, 263, 270, 276, 288, and 308

ELECTOLOGY, https://www.electology.org/bucklin-voting

MEEK, Brian. 1994. ‘A New Approach to the Single Transferable Vote’ Paper I, pp.1-7 and Paper II, pp.8-11. Voting matters, Issue 1, March 1994.  Available at www.votingmatters.org.uk

MILL, J.S. 1962. ‘Representative Government’ (1861) in Utilitarianism; Liberty; Representative Government, Everyman’s Library, 1962, pp.261-8

MILLER III, James C. 1969. ‘A Program for Direct and Proxy Voting in the Legislative Process’ Public Choice (Fall), 107-113

SIMMONS, Forest (http://rangevoting.org/Asset.html; http://www.rangevoting.org/AssetSumm.html)

TULLOCK, Gordon. 1967. Toward a Mathematics of Politics, University of Michigan Press, pp. 145-8)

Endnotes

  1. Stephen Bosworth (stevebosworth@hotmail.com) is a retired Professor of Political Philosophy and Comparative Politics.  He taught at universities in the UK, California, and the Turkish Republic of Northern Cyprus. Dr. Anders Corr (corr@canalyt.com) is publisher of the Journal of Political Risk. Contact Dr. Bosworth for more details on EPR, and Dr. Corr for details on the computer simulation.
  2. EPR is new in the sense that it applies evaluative voting to the election of a legislative body, e.g. a city council or a legislature. The algorithm used to count all the voters’ evaluations of the candidates is also new.
  3. Immediately before proposing EPR, Dr. Bosworth offered a system using a modified use of Single Transferrable Voting (STV). He called it Associational Proportional Representation (APR). One of the key differences between EPR and APR is that EPR counts the evaluations rather than any rankings that citizens have made of the candidates.  This enables EPR to offer all the advantages of APR, but more completely.  Unlike APR, EPR cannot eliminate any candidate who is preferred by more citizens than some who are elected. Also, EPR is:
    1. More likely than APR to prompt the highest quality candidates both to run and to be elected, and
    2. More user- friendly because grading is easier than ranking, as well as being more meaningful, discerning, informative, and satisfying.
  4. Balinski & Laraki, p.283.
  5. Pp. 5, 17.
  6. Pp. 14, 190, 191, 193, 374. Also see pp. 15, 19, and 187-198, where Balinski and Laraki show, in contrast to other systems, how MJ cuts by almost half any incentives to vote dishonestly.
  7. Gordon Tullock included weighted votes in his own proposals. However, in Tullock’s case, these would have only been produced by using the existing FPTP or Plurality arrangements in the USA. Sol Erdman’s Personal Accountability Representation (PAR) proposals also include weighted votes that are to be discovered by using modified STV.  However, unlike EPR, Erdman’s weighted votes are not derived by allowing citizens to evaluate as many candidates in the whole country as they might wish.  Instead, his PAR limits each voter to ranking only the candidates who are seeking to represent the geographically defined electoral district in which they reside, and which is smaller than the whole state or nation.
  8. This is the rule except when none of the candidates elected are graded as at least ACCEPTABLE by a voter. Because this can happen, the ballot allows this voter to require her default vote to be transferred to the elected candidate most fit for the office as judged by the unelected candidate she valued most highly. Also, if any very popular elected candidate receives more affirmed evaluations than allowed, she is required to transfer her extra affirmed evaluations to the weighted votes of one or more of her trusted fellow councilmembers to avoid any single member having the voting power to dictate to the council. These are the two ways in which EPR incorporates the use of ‘Asset Voting’ after the count by the algorithm has been completed.  Of course, these uses of Asset Voting could slightly modify the weighted votes that some of the councilmembers would receive.
  9. Originally, Bucklin voting was a single-winner voting method. It is named after its promoter, James W. Bucklin.  First choice votes are counted first. If one candidate has an absolute majority, that candidate wins.  Otherwise, the second choices are added to the first choices, and so on (see https://www.electology.org/bucklin-voting).
  10. Rank Choice Voting (RCV) is just another name for IRV. With IRV, voters are asked to rank the candidates 1, 2, 3 etc. If no candidate receives at least 50% plus one of the votes cast, the candidate who has received the fewest number of 1st preferences is eliminated.  The votes of the citizens who had given their 1st preferences to this eliminated candidate are now given to their respective 2nd preference candidates.  This process is repeated until one of the remaining candidates has received a majority.  Single Transferrable Voting (STV) is an adaption of IRV for the election of multi-winners.

Appendix A: Example of IRV Methods

The following is an example of how IRV type methods usually waste some votes and can even eliminate the candidate preferred by most voters before the winner is discovered:

If 100 citizens vote in the following way, IRV would make candidate C win.

B would be eliminated even though she is preferred by more citizens, i.e. by 20 citizens’ 1st preference votes and by 80 citizens’ 2nd preference votes.  Candidate C is supported only by 40 1st preference votes and by 20 2nd preference votes.  Candidate A is supported only by a different group of 40 1st preference votes.  Still IRV elects C:

100 CITIZENS:

40 prefer A over B over D

40 prefer C over B

20 prefer B over C

When C is elected, also notice that all the votes cast by the 40 voters (who preferred A over B over D) are wasted in the sense defined by the 2nd paragraph in the article.

Fortunately, EPR does not suffer from this flaw.

Appendix B: Computer Algorithm for EPR Implemented in the R Statistical Computing Language

# Authors: Stephen Bosworth (stevebosworth@hotmail.com) and Anders Corr (corr@canalyt.com)
# R Statistical Software, "Computer Algorithm for EPR Implemented in the R Statistical Computing Language"
# Date: June 1, 2018

# Remove old data, set random seed, and set directory
rm(list=ls()) 
elections<-10
set.seed(1)

# User sets paramaters
grades<-1:6 # Excellent = 6, Very Good = 5, Good = 4, Acceptable = 3, Poor = 2, Reject = 1
candidates<-10
names<-toupper(letters)
positions<-7
external.data.name<-"18b-Cary Evaluative Voting DataCORRECTED 5.csv" 
voters<-70
thresh<- voters/positions #0 thresh leads
max.select<-3
#maxweight<- 2/positions # For a large number of positions, e.g., House of Representatives, can use 1/10
simulation<-FALSE
apportion<-FALSE # Apportion unconfirmed voters to weights of favorite of already elected council members
setwd("C:/Users/ander/Downloads/Bosworth Corr Evaluative Voting")

# Sink output to file if running multiple simulations
#sink("sink-examp.txt")


# Initialize candidate and voter matrices
candidate.names<-names[1:candidates]
voter.names<-paste("Voter", 1:voters, sep=" ")
voter.votes<-1:voters*NA
voter.round<-1:voters*NA
voter.mat<-matrix(nrow=voters,ncol=candidates)
rownames(voter.mat)<-voter.names

# Load voter data
if(simulation){
for(i in 1:voters){
voter.mat[i,]<-sample(grades,size=candidates,replace=TRUE)
}
}
if(! simulation){
voter.mat<-as.matrix(read.csv(external.data.name, strip.white=TRUE, header=FALSE))
rownames(voter.mat)<-voter.names
colnames(voter.mat)<-candidate.names
}

# Initialize candidate computation matrices
candidate.vec1<-1:candidates
candidate.evals.vec1<-1:candidates
council<-NULL
council.numbers<-NULL
weights<-NULL
selectors<-6
selector.add<-6

# Calculate winners
for(i in 1:100){
print("*******************************************************")
print(paste("ROUND: ",i,sep=""))
print("*******************************************************")
#if(i==18) break
print("Ballots remaining:")
print(voter.mat)
selectors<-unique(c(selectors,selector.add))
print("Selectors: ")
print(selectors)
for(j in 1:candidates){
candidate.vec1[j]<-sum(voter.mat[,j] %in% selectors)
candidate.evals.vec1[j]<-sum(voter.mat[,j][voter.mat[,j] %in% selectors])
}
candidate.vec1[council.numbers]<-0
candidate.evals.vec1[council.numbers]<-0
print(paste("Threshold: ",thresh,sep=""))
print("Count of selectors (Candidate Vector): ")
print(candidate.vec1)
print("Sum of Candidate Evaluations: ")
print(candidate.evals.vec1)
selection<-candidate.vec1==max(candidate.vec1) & candidate.vec1>=thresh
print("Selection: ")
print(selection)
if(sum(selection)>0){
winner.names<-candidate.names[which(selection)]
topWinnersByEvals<-which(max(candidate.evals.vec1[selection])==candidate.evals.vec1) #In case of tie in count of selectors this selects top by sum of evals
winner<-sample(winner.names[which(winner.names==names[topWinnersByEvals])],size=1) #IN case of tie in both count of selectors and sum of evals, choose by lot
winner.number<-which(winner==candidate.names)
weights<-c(weights,candidate.vec1[winner.number])
council.numbers<-c(council.numbers,winner.number)
council<-c(council,winner)[1:min(7,length(c(council,winner)))]
#voter.ind<-which(voter.names %in% rownames(voter.mat[voter.mat[,winner.number] %in% selectors,]))
voter.ind<-which(voter.names %in% rownames(voter.mat)[voter.mat[,winner.number] %in% selectors])
voter.votes[voter.ind]<-winner
voter.round[voter.ind]<-i
voter.mat<-voter.mat[! voter.mat[,winner.number] %in% selectors,]
print(paste("The winner of round ",i," is: ",winner,", with ",candidate.vec1[winner.number]," affirmed evaluations.",sep=""))
print(paste("Winner number: ",winner.number))
print("Council: ")
print(council)
print("Weights (affirmed evaluations): ")
print(weights)
vote.tally<-cbind(voter.names,voter.votes)
print("Votes thus far: ")
print(cbind(voter.names,voter.votes,voter.round))
if(length(council)>0) for(m in 1:length(council)){
print(paste(council[m], " has the following supporters: "))
print(voter.names[voter.votes %in% council[m]])
}
}
if(length(council)>(positions-1)) {
print("Remaining ballots:")
print(voter.mat)
notremoved<-NULL
for(k in 1:dim(voter.mat)[1]){
if(max(voter.mat[k,])>(max.select-1)){
newchoice<-which(voter.mat[k,]==max(voter.mat[k,]))
weights[newchoice]<-weights[newchoice]+1
print(paste("The weight of ",rownames(voter.mat)[k], " goes to ",names(newchoice),". ","This selection is based on the voter's evaluation which is above max.select.",sep=""))
voter.ind<-which(voter.names %in% rownames(voter.mat)[k])
voter.votes[voter.ind]<-names(newchoice)
voter.round[voter.ind]<-"Final above max.select"
} else notremoved<-c(notremoved,k)
}
voter.mat<-voter.mat[notremoved,]
print("Ballots remaining:")
print(voter.mat)
break
} 
if(sum(selection)<1 && selector.add>max.select) selector.add<-selector.add-1
if(selector.add==max.select && length(candidate.names[council.numbers])==positions) break
if(selector.add==max.select && length(candidate.names[council.numbers])<positions && sum(selection)==0) thresh<-thresh-1
if(i==1) voter.mat.orig<-apply(voter.mat,2,mean)
#if(i==1)stop("i=1")
}

# Apportion unconfirmed voters to weights of favorite of already elected council members
# This assures that sum of weights = number of voters
if(apportion){
for(n in 1:dim(voter.mat)[1]){
council.in.ballot<-voter.mat[n,council.numbers]
fave<-sample(which(council.in.ballot==max(council.in.ballot)),size=1) # Choose favorite of already elected candidates -- if tie choose by lot among those tied
weights[fave]<-weights[fave]+1
print(paste("The weight of ",rownames(voter.mat)[n], " goes to ",names(fave),". ","This selection is based on the voter's evaluation which is below max.select.",sep=""))
voter.ind<-which(voter.names %in% rownames(voter.mat)[n])
voter.votes[voter.ind]<-names(fave)
voter.round[voter.ind]<-"Final below max.select"
}
}

if(! apportion){
for(n in 1:dim(voter.mat)[1]){
voter.ind<-which(voter.names %in% rownames(voter.mat)[n])
voter.votes[voter.ind]<-"None."
voter.round[voter.ind]<-"Uncountable ballot."
}
}

# Check to see that sum of weights equals number of voters
sum(weights)
sum(weights)==voters

# Print final votes
print("Final vote apportionment: ")
print(cbind(voter.names,voter.votes,voter.round))

# Final output of candidates and weights
candidate.names[council.numbers]
weights

Appendix C: Computer Output for EPR Implemented in the R Statistical Computing Language
R version 3.3.1 (2016-06-21)
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
> 
> # Remove old data, set random seed, and set directory
> rm(list=ls()) 
> elections<-10
> set.seed(1)
> 
> # User sets paramaters
> grades<-1:6 # Excellent = 6, Very Good = 5, Good = 4, Acceptable = 3, Poor = 2, Reject = 1
> candidates<-10
> names<-toupper(letters)
> positions<-7
> external.data.name<-"18b-Cary Evaluative Voting DataCORRECTED 5.csv" 
> voters<-70
> thresh<- voters/positions #0 thresh leads
> max.select<-3
> #maxweight<- 2/positions # For a large number of positions, e.g., House of Representatives, can use 1/10
> simulation<-FALSE
> apportion<-FALSE # Apportion unconfirmed voters to weights of favorite of already elected council members
> setwd("C:/Users/ander/Downloads/Bosworth Corr Evaluative Voting")
> 
> # Sink output to file if running multiple simulations
> #sink("sink-examp.txt")
> 
> 
> # Initialize candidate and voter matrices
> candidate.names<-names[1:candidates]
> voter.names<-paste("Voter", 1:voters, sep=" ")
> voter.votes<-1:voters*NA
> voter.round<-1:voters*NA
> voter.mat<-matrix(nrow=voters,ncol=candidates)
> rownames(voter.mat)<-voter.names
> 
> # Load voter data
> if(simulation){
+ for(i in 1:voters){
+ voter.mat[i,]<-sample(grades,size=candidates,replace=TRUE)
+ }
+ }
> if(! simulation){
+ voter.mat<-as.matrix(read.csv(external.data.name, strip.white=TRUE, header=FALSE))
+ rownames(voter.mat)<-voter.names
+ colnames(voter.mat)<-candidate.names
+ }
> 
> # Initialize candidate computation matrices
> candidate.vec1<-1:candidates
> candidate.evals.vec1<-1:candidates
> council<-NULL
> council.numbers<-NULL
> weights<-NULL
> selectors<-6
> selector.add<-6
> 
> # Calculate winners
> for(i in 1:100){
+ print("*******************************************************")
+ print(paste("ROUND: ",i,sep=""))
+ print("*******************************************************")
+ #if(i==18) break
+ print("Ballots remaining:")
+ print(voter.mat)
+ selectors<-unique(c(selectors,selector.add))
+ print("Selectors: ")
+ print(selectors)
+ for(j in 1:candidates){
+ candidate.vec1[j]<-sum(voter.mat[,j] %in% selectors)
+ candidate.evals.vec1[j]<-sum(voter.mat[,j][voter.mat[,j] %in% selectors])
+ }
+ candidate.vec1[council.numbers]<-0
+ candidate.evals.vec1[council.numbers]<-0
+ print(paste("Threshold: ",thresh,sep=""))
+ print("Count of selectors (Candidate Vector): ")
+ print(candidate.vec1)
+ print("Sum of Candidate Evaluations: ")
+ print(candidate.evals.vec1)
+ selection<-candidate.vec1==max(candidate.vec1) & candidate.vec1>=thresh
+ print("Selection: ")
+ print(selection)
+ if(sum(selection)>0){
+ winner.names<-candidate.names[which(selection)]
+ topWinnersByEvals<-which(max(candidate.evals.vec1[selection])==candidate.evals.vec1) #In case of tie in count of selectors this selects top by sum of evals
+ winner<-sample(winner.names[which(winner.names==names[topWinnersByEvals])],size=1) #IN case of tie in both count of selectors and sum of evals, choose by lot
+ winner.number<-which(winner==candidate.names)
+ weights<-c(weights,candidate.vec1[winner.number])
+ council.numbers<-c(council.numbers,winner.number)
+ council<-c(council,winner)[1:min(7,length(c(council,winner)))]
+ #voter.ind<-which(voter.names %in% rownames(voter.mat[voter.mat[,winner.number] %in% selectors,]))
+ voter.ind<-which(voter.names %in% rownames(voter.mat)[voter.mat[,winner.number] %in% selectors])
+ voter.votes[voter.ind]<-winner
+ voter.round[voter.ind]<-i
+ voter.mat<-voter.mat[! voter.mat[,winner.number] %in% selectors,]
+ print(paste("The winner of round ",i," is: ",winner,", with ",candidate.vec1[winner.number]," affirmed evaluations.",sep=""))
+ print(paste("Winner number: ",winner.number))
+ print("Council: ")
+ print(council)
+ print("Weights (affirmed evaluations): ")
+ print(weights)
+ vote.tally<-cbind(voter.names,voter.votes)
+ print("Votes thus far: ")
+ print(cbind(voter.names,voter.votes,voter.round))
+ if(length(council)>0) for(m in 1:length(council)){
+ print(paste(council[m], " has the following supporters: "))
+ print(voter.names[voter.votes %in% council[m]])
+ }
+ }
+ if(length(council)>(positions-1)) {
+ print("Remaining ballots:")
+ print(voter.mat)
+ notremoved<-NULL
+ for(k in 1:dim(voter.mat)[1]){
+ if(max(voter.mat[k,])>(max.select-1)){
+ newchoice<-which(voter.mat[k,]==max(voter.mat[k,]))
+ weights[newchoice]<-weights[newchoice]+1
+ print(paste("The weight of ",rownames(voter.mat)[k], " goes to ",names(newchoice),". ","This selection is based on the voter's evaluation which is above max.select.",sep=""))
+ voter.ind<-which(voter.names %in% rownames(voter.mat)[k])
+ voter.votes[voter.ind]<-names(newchoice)
+ voter.round[voter.ind]<-"Final above max.select"
+ } else notremoved<-c(notremoved,k)
+ }
+ voter.mat<-voter.mat[notremoved,]
+ print("Ballots remaining:")
+ print(voter.mat)
+ break
+ } 
+ if(sum(selection)<1 && selector.add>max.select) selector.add<-selector.add-1
+ if(selector.add==max.select && length(candidate.names[council.numbers])==positions) break
+ if(selector.add==max.select && length(candidate.names[council.numbers])<positions && sum(selection)==0) thresh<-thresh-1
+ if(i==1) voter.mat.orig<-apply(voter.mat,2,mean)
+ #if(i==1)stop("i=1")
+ }
[1] "*******************************************************"
[1] "ROUND: 1"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 1 6 1 1 1 1 1 1 1 1 1
Voter 2 6 1 1 1 1 1 1 1 1 1
Voter 3 6 1 1 1 1 1 1 1 1 1
Voter 4 6 1 1 1 1 1 1 1 1 1
Voter 5 6 1 1 1 1 1 1 1 1 1
Voter 6 6 1 1 1 1 1 1 1 1 1
Voter 7 6 1 1 1 1 1 1 1 1 1
Voter 8 6 1 1 1 1 1 1 1 1 1
Voter 9 6 1 1 1 1 1 1 1 1 1
Voter 10 5 6 1 3 1 4 1 1 1 1
Voter 11 5 6 1 3 1 4 1 1 1 1
Voter 12 5 6 1 3 1 4 1 1 1 1
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 18 6 6 1 1 1 1 1 1 1 1
Voter 19 6 6 1 1 1 1 1 1 1 1
Voter 20 6 6 1 1 1 1 1 1 1 1
Voter 21 6 6 1 1 1 1 1 1 1 1
Voter 22 6 6 1 1 1 1 1 1 1 1
Voter 23 6 6 1 1 1 1 1 1 1 1
Voter 24 1 1 6 1 1 1 1 1 1 1
Voter 25 1 1 6 1 1 1 1 1 1 1
Voter 26 1 1 6 1 1 1 1 1 1 1
Voter 27 1 1 6 1 1 1 1 1 1 1
Voter 28 1 1 6 1 1 1 1 1 1 1
Voter 29 1 1 6 1 1 1 1 1 1 1
Voter 30 1 1 6 1 1 1 1 1 1 1
Voter 31 1 1 1 6 1 1 1 1 1 4
Voter 32 1 1 1 6 1 1 1 1 1 4
Voter 33 1 1 1 6 1 1 1 1 1 4
Voter 34 1 1 1 6 1 1 1 1 1 4
Voter 35 1 1 1 6 1 1 1 1 1 4
Voter 36 1 1 1 6 1 3 1 1 1 1
Voter 37 1 1 5 1 6 1 1 1 1 1
Voter 38 1 1 5 1 6 1 1 1 1 1
Voter 39 1 1 5 1 6 1 1 1 1 1
Voter 40 1 1 5 1 6 1 1 1 1 1
Voter 41 1 1 5 1 6 1 1 1 1 1
Voter 42 1 1 5 1 5 6 1 1 1 1
Voter 43 1 1 5 1 5 6 1 1 1 1
Voter 44 1 1 5 1 5 6 1 1 1 1
Voter 45 1 1 5 1 5 6 1 1 1 1
Voter 46 1 1 5 1 5 6 1 1 1 1
Voter 47 1 1 5 1 5 6 1 1 1 1
Voter 48 1 1 1 1 1 1 6 5 1 4
Voter 49 1 1 1 1 1 1 6 5 1 4
Voter 50 1 1 1 1 1 1 6 5 1 4
Voter 51 1 1 1 1 1 1 6 1 1 1
Voter 52 6 6 1 1 1 1 6 6 1 1
Voter 53 6 6 1 1 1 1 6 6 1 1
Voter 54 1 1 1 1 1 3 4 6 5 1
Voter 55 1 1 1 1 1 3 4 6 5 1
Voter 56 1 1 1 1 1 3 4 6 5 1
Voter 57 1 1 1 1 1 3 4 6 5 1
Voter 58 1 1 6 1 6 6 6 6 1 1
Voter 59 1 1 6 1 6 6 6 6 1 1
Voter 60 1 1 1 5 5 1 1 1 6 1
Voter 61 1 1 1 5 5 1 1 1 6 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 63 1 1 6 6 1 1 1 1 6 1
Voter 64 1 1 6 6 1 1 1 1 6 1
Voter 65 1 1 1 6 6 1 5 5 6 1
Voter 66 1 1 1 6 6 1 5 5 6 1
Voter 67 1 1 5 4 1 4 5 1 4 6
Voter 68 1 1 5 4 1 4 5 1 4 6
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6
[1] "Threshold: 10"
[1] "Count of selectors (Candidate Vector): "
[1] 17 12 11 10 9 8 8 8 7 2
[1] "Sum of Candidate Evaluations: "
[1] 102 72 66 60 54 48 48 48 42 12
[1] "Selection: "
[1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "The winner of round 1 is: A, with 17 affirmed evaluations."
[1] "Winner number: 1"
[1] "Council: "
[1] "A"
[1] "Weights (affirmed evaluations): "
[1] 17
[1] "Votes thus far: "
voter.names voter.votes voter.round
[1,] "Voter 1" "A" "1" 
[2,] "Voter 2" "A" "1" 
[3,] "Voter 3" "A" "1" 
[4,] "Voter 4" "A" "1" 
[5,] "Voter 5" "A" "1" 
[6,] "Voter 6" "A" "1" 
[7,] "Voter 7" "A" "1" 
[8,] "Voter 8" "A" "1" 
[9,] "Voter 9" "A" "1" 
[10,] "Voter 10" NA NA 
[11,] "Voter 11" NA NA 
[12,] "Voter 12" NA NA 
[13,] "Voter 13" NA NA 
[14,] "Voter 14" NA NA 
[15,] "Voter 15" NA NA 
[16,] "Voter 16" NA NA 
[17,] "Voter 17" NA NA 
[18,] "Voter 18" "A" "1" 
[19,] "Voter 19" "A" "1" 
[20,] "Voter 20" "A" "1" 
[21,] "Voter 21" "A" "1" 
[22,] "Voter 22" "A" "1" 
[23,] "Voter 23" "A" "1" 
[24,] "Voter 24" NA NA 
[25,] "Voter 25" NA NA 
[26,] "Voter 26" NA NA 
[27,] "Voter 27" NA NA 
[28,] "Voter 28" NA NA 
[29,] "Voter 29" NA NA 
[30,] "Voter 30" NA NA 
[31,] "Voter 31" NA NA 
[32,] "Voter 32" NA NA 
[33,] "Voter 33" NA NA 
[34,] "Voter 34" NA NA 
[35,] "Voter 35" NA NA 
[36,] "Voter 36" NA NA 
[37,] "Voter 37" NA NA 
[38,] "Voter 38" NA NA 
[39,] "Voter 39" NA NA 
[40,] "Voter 40" NA NA 
[41,] "Voter 41" NA NA 
[42,] "Voter 42" NA NA 
[43,] "Voter 43" NA NA 
[44,] "Voter 44" NA NA 
[45,] "Voter 45" NA NA 
[46,] "Voter 46" NA NA 
[47,] "Voter 47" NA NA 
[48,] "Voter 48" NA NA 
[49,] "Voter 49" NA NA 
[50,] "Voter 50" NA NA 
[51,] "Voter 51" NA NA 
[52,] "Voter 52" "A" "1" 
[53,] "Voter 53" "A" "1" 
[54,] "Voter 54" NA NA 
[55,] "Voter 55" NA NA 
[56,] "Voter 56" NA NA 
[57,] "Voter 57" NA NA 
[58,] "Voter 58" NA NA 
[59,] "Voter 59" NA NA 
[60,] "Voter 60" NA NA 
[61,] "Voter 61" NA NA 
[62,] "Voter 62" NA NA 
[63,] "Voter 63" NA NA 
[64,] "Voter 64" NA NA 
[65,] "Voter 65" NA NA 
[66,] "Voter 66" NA NA 
[67,] "Voter 67" NA NA 
[68,] "Voter 68" NA NA 
[69,] "Voter 69" NA NA 
[70,] "Voter 70" NA NA 
[1] "A has the following supporters: "
[1] "Voter 1" "Voter 2" "Voter 3" "Voter 4" "Voter 5" "Voter 6" 
[7] "Voter 7" "Voter 8" "Voter 9" "Voter 18" "Voter 19" "Voter 20"
[13] "Voter 21" "Voter 22" "Voter 23" "Voter 52" "Voter 53"
[1] "*******************************************************"
[1] "ROUND: 2"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 10 5 6 1 3 1 4 1 1 1 1
Voter 11 5 6 1 3 1 4 1 1 1 1
Voter 12 5 6 1 3 1 4 1 1 1 1
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 24 1 1 6 1 1 1 1 1 1 1
Voter 25 1 1 6 1 1 1 1 1 1 1
Voter 26 1 1 6 1 1 1 1 1 1 1
Voter 27 1 1 6 1 1 1 1 1 1 1
Voter 28 1 1 6 1 1 1 1 1 1 1
Voter 29 1 1 6 1 1 1 1 1 1 1
Voter 30 1 1 6 1 1 1 1 1 1 1
Voter 31 1 1 1 6 1 1 1 1 1 4
Voter 32 1 1 1 6 1 1 1 1 1 4
Voter 33 1 1 1 6 1 1 1 1 1 4
Voter 34 1 1 1 6 1 1 1 1 1 4
Voter 35 1 1 1 6 1 1 1 1 1 4
Voter 36 1 1 1 6 1 3 1 1 1 1
Voter 37 1 1 5 1 6 1 1 1 1 1
Voter 38 1 1 5 1 6 1 1 1 1 1
Voter 39 1 1 5 1 6 1 1 1 1 1
Voter 40 1 1 5 1 6 1 1 1 1 1
Voter 41 1 1 5 1 6 1 1 1 1 1
Voter 42 1 1 5 1 5 6 1 1 1 1
Voter 43 1 1 5 1 5 6 1 1 1 1
Voter 44 1 1 5 1 5 6 1 1 1 1
Voter 45 1 1 5 1 5 6 1 1 1 1
Voter 46 1 1 5 1 5 6 1 1 1 1
Voter 47 1 1 5 1 5 6 1 1 1 1
Voter 48 1 1 1 1 1 1 6 5 1 4
Voter 49 1 1 1 1 1 1 6 5 1 4
Voter 50 1 1 1 1 1 1 6 5 1 4
Voter 51 1 1 1 1 1 1 6 1 1 1
Voter 54 1 1 1 1 1 3 4 6 5 1
Voter 55 1 1 1 1 1 3 4 6 5 1
Voter 56 1 1 1 1 1 3 4 6 5 1
Voter 57 1 1 1 1 1 3 4 6 5 1
Voter 58 1 1 6 1 6 6 6 6 1 1
Voter 59 1 1 6 1 6 6 6 6 1 1
Voter 60 1 1 1 5 5 1 1 1 6 1
Voter 61 1 1 1 5 5 1 1 1 6 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 63 1 1 6 6 1 1 1 1 6 1
Voter 64 1 1 6 6 1 1 1 1 6 1
Voter 65 1 1 1 6 6 1 5 5 6 1
Voter 66 1 1 1 6 6 1 5 5 6 1
Voter 67 1 1 5 4 1 4 5 1 4 6
Voter 68 1 1 5 4 1 4 5 1 4 6
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6
[1] "Threshold: 10"
[1] "Count of selectors (Candidate Vector): "
[1] 0 4 11 10 9 8 6 6 7 2
[1] "Sum of Candidate Evaluations: "
[1] 0 24 66 60 54 48 36 36 42 12
[1] "Selection: "
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "The winner of round 2 is: C, with 11 affirmed evaluations."
[1] "Winner number: 3"
[1] "Council: "
[1] "A" "C"
[1] "Weights (affirmed evaluations): "
[1] 17 11
[1] "Votes thus far: "
voter.names voter.votes voter.round
[1,] "Voter 1" "A" "1" 
[2,] "Voter 2" "A" "1" 
[3,] "Voter 3" "A" "1" 
[4,] "Voter 4" "A" "1" 
[5,] "Voter 5" "A" "1" 
[6,] "Voter 6" "A" "1" 
[7,] "Voter 7" "A" "1" 
[8,] "Voter 8" "A" "1" 
[9,] "Voter 9" "A" "1" 
[10,] "Voter 10" NA NA 
[11,] "Voter 11" NA NA 
[12,] "Voter 12" NA NA 
[13,] "Voter 13" NA NA 
[14,] "Voter 14" NA NA 
[15,] "Voter 15" NA NA 
[16,] "Voter 16" NA NA 
[17,] "Voter 17" NA NA 
[18,] "Voter 18" "A" "1" 
[19,] "Voter 19" "A" "1" 
[20,] "Voter 20" "A" "1" 
[21,] "Voter 21" "A" "1" 
[22,] "Voter 22" "A" "1" 
[23,] "Voter 23" "A" "1" 
[24,] "Voter 24" "C" "2" 
[25,] "Voter 25" "C" "2" 
[26,] "Voter 26" "C" "2" 
[27,] "Voter 27" "C" "2" 
[28,] "Voter 28" "C" "2" 
[29,] "Voter 29" "C" "2" 
[30,] "Voter 30" "C" "2" 
[31,] "Voter 31" NA NA 
[32,] "Voter 32" NA NA 
[33,] "Voter 33" NA NA 
[34,] "Voter 34" NA NA 
[35,] "Voter 35" NA NA 
[36,] "Voter 36" NA NA 
[37,] "Voter 37" NA NA 
[38,] "Voter 38" NA NA 
[39,] "Voter 39" NA NA 
[40,] "Voter 40" NA NA 
[41,] "Voter 41" NA NA 
[42,] "Voter 42" NA NA 
[43,] "Voter 43" NA NA 
[44,] "Voter 44" NA NA 
[45,] "Voter 45" NA NA 
[46,] "Voter 46" NA NA 
[47,] "Voter 47" NA NA 
[48,] "Voter 48" NA NA 
[49,] "Voter 49" NA NA 
[50,] "Voter 50" NA NA 
[51,] "Voter 51" NA NA 
[52,] "Voter 52" "A" "1" 
[53,] "Voter 53" "A" "1" 
[54,] "Voter 54" NA NA 
[55,] "Voter 55" NA NA 
[56,] "Voter 56" NA NA 
[57,] "Voter 57" NA NA 
[58,] "Voter 58" "C" "2" 
[59,] "Voter 59" "C" "2" 
[60,] "Voter 60" NA NA 
[61,] "Voter 61" NA NA 
[62,] "Voter 62" NA NA 
[63,] "Voter 63" "C" "2" 
[64,] "Voter 64" "C" "2" 
[65,] "Voter 65" NA NA 
[66,] "Voter 66" NA NA 
[67,] "Voter 67" NA NA 
[68,] "Voter 68" NA NA 
[69,] "Voter 69" NA NA 
[70,] "Voter 70" NA NA 
[1] "A has the following supporters: "
[1] "Voter 1" "Voter 2" "Voter 3" "Voter 4" "Voter 5" "Voter 6" 
[7] "Voter 7" "Voter 8" "Voter 9" "Voter 18" "Voter 19" "Voter 20"
[13] "Voter 21" "Voter 22" "Voter 23" "Voter 52" "Voter 53"
[1] "C has the following supporters: "
[1] "Voter 24" "Voter 25" "Voter 26" "Voter 27" "Voter 28" "Voter 29"
[7] "Voter 30" "Voter 58" "Voter 59" "Voter 63" "Voter 64"
[1] "*******************************************************"
[1] "ROUND: 3"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 10 5 6 1 3 1 4 1 1 1 1
Voter 11 5 6 1 3 1 4 1 1 1 1
Voter 12 5 6 1 3 1 4 1 1 1 1
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 31 1 1 1 6 1 1 1 1 1 4
Voter 32 1 1 1 6 1 1 1 1 1 4
Voter 33 1 1 1 6 1 1 1 1 1 4
Voter 34 1 1 1 6 1 1 1 1 1 4
Voter 35 1 1 1 6 1 1 1 1 1 4
Voter 36 1 1 1 6 1 3 1 1 1 1
Voter 37 1 1 5 1 6 1 1 1 1 1
Voter 38 1 1 5 1 6 1 1 1 1 1
Voter 39 1 1 5 1 6 1 1 1 1 1
Voter 40 1 1 5 1 6 1 1 1 1 1
Voter 41 1 1 5 1 6 1 1 1 1 1
Voter 42 1 1 5 1 5 6 1 1 1 1
Voter 43 1 1 5 1 5 6 1 1 1 1
Voter 44 1 1 5 1 5 6 1 1 1 1
Voter 45 1 1 5 1 5 6 1 1 1 1
Voter 46 1 1 5 1 5 6 1 1 1 1
Voter 47 1 1 5 1 5 6 1 1 1 1
Voter 48 1 1 1 1 1 1 6 5 1 4
Voter 49 1 1 1 1 1 1 6 5 1 4
Voter 50 1 1 1 1 1 1 6 5 1 4
Voter 51 1 1 1 1 1 1 6 1 1 1
Voter 54 1 1 1 1 1 3 4 6 5 1
Voter 55 1 1 1 1 1 3 4 6 5 1
Voter 56 1 1 1 1 1 3 4 6 5 1
Voter 57 1 1 1 1 1 3 4 6 5 1
Voter 60 1 1 1 5 5 1 1 1 6 1
Voter 61 1 1 1 5 5 1 1 1 6 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 65 1 1 1 6 6 1 5 5 6 1
Voter 66 1 1 1 6 6 1 5 5 6 1
Voter 67 1 1 5 4 1 4 5 1 4 6
Voter 68 1 1 5 4 1 4 5 1 4 6
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6
[1] "Threshold: 10"
[1] "Count of selectors (Candidate Vector): "
[1] 0 4 0 8 7 6 4 4 5 2
[1] "Sum of Candidate Evaluations: "
[1] 0 24 0 48 42 36 24 24 30 12
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 4"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 10 5 6 1 3 1 4 1 1 1 1
Voter 11 5 6 1 3 1 4 1 1 1 1
Voter 12 5 6 1 3 1 4 1 1 1 1
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 31 1 1 1 6 1 1 1 1 1 4
Voter 32 1 1 1 6 1 1 1 1 1 4
Voter 33 1 1 1 6 1 1 1 1 1 4
Voter 34 1 1 1 6 1 1 1 1 1 4
Voter 35 1 1 1 6 1 1 1 1 1 4
Voter 36 1 1 1 6 1 3 1 1 1 1
Voter 37 1 1 5 1 6 1 1 1 1 1
Voter 38 1 1 5 1 6 1 1 1 1 1
Voter 39 1 1 5 1 6 1 1 1 1 1
Voter 40 1 1 5 1 6 1 1 1 1 1
Voter 41 1 1 5 1 6 1 1 1 1 1
Voter 42 1 1 5 1 5 6 1 1 1 1
Voter 43 1 1 5 1 5 6 1 1 1 1
Voter 44 1 1 5 1 5 6 1 1 1 1
Voter 45 1 1 5 1 5 6 1 1 1 1
Voter 46 1 1 5 1 5 6 1 1 1 1
Voter 47 1 1 5 1 5 6 1 1 1 1
Voter 48 1 1 1 1 1 1 6 5 1 4
Voter 49 1 1 1 1 1 1 6 5 1 4
Voter 50 1 1 1 1 1 1 6 5 1 4
Voter 51 1 1 1 1 1 1 6 1 1 1
Voter 54 1 1 1 1 1 3 4 6 5 1
Voter 55 1 1 1 1 1 3 4 6 5 1
Voter 56 1 1 1 1 1 3 4 6 5 1
Voter 57 1 1 1 1 1 3 4 6 5 1
Voter 60 1 1 1 5 5 1 1 1 6 1
Voter 61 1 1 1 5 5 1 1 1 6 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 65 1 1 1 6 6 1 5 5 6 1
Voter 66 1 1 1 6 6 1 5 5 6 1
Voter 67 1 1 5 4 1 4 5 1 4 6
Voter 68 1 1 5 4 1 4 5 1 4 6
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5
[1] "Threshold: 10"
[1] "Count of selectors (Candidate Vector): "
[1] 0 4 0 10 15 6 8 9 9 2
[1] "Sum of Candidate Evaluations: "
[1] 0 24 0 58 82 36 44 49 50 12
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
[1] "The winner of round 4 is: E, with 15 affirmed evaluations."
[1] "Winner number: 5"
[1] "Council: "
[1] "A" "C" "E"
[1] "Weights (affirmed evaluations): "
[1] 17 11 15
[1] "Votes thus far: "
voter.names voter.votes voter.round
[1,] "Voter 1" "A" "1" 
[2,] "Voter 2" "A" "1" 
[3,] "Voter 3" "A" "1" 
[4,] "Voter 4" "A" "1" 
[5,] "Voter 5" "A" "1" 
[6,] "Voter 6" "A" "1" 
[7,] "Voter 7" "A" "1" 
[8,] "Voter 8" "A" "1" 
[9,] "Voter 9" "A" "1" 
[10,] "Voter 10" NA NA 
[11,] "Voter 11" NA NA 
[12,] "Voter 12" NA NA 
[13,] "Voter 13" NA NA 
[14,] "Voter 14" NA NA 
[15,] "Voter 15" NA NA 
[16,] "Voter 16" NA NA 
[17,] "Voter 17" NA NA 
[18,] "Voter 18" "A" "1" 
[19,] "Voter 19" "A" "1" 
[20,] "Voter 20" "A" "1" 
[21,] "Voter 21" "A" "1" 
[22,] "Voter 22" "A" "1" 
[23,] "Voter 23" "A" "1" 
[24,] "Voter 24" "C" "2" 
[25,] "Voter 25" "C" "2" 
[26,] "Voter 26" "C" "2" 
[27,] "Voter 27" "C" "2" 
[28,] "Voter 28" "C" "2" 
[29,] "Voter 29" "C" "2" 
[30,] "Voter 30" "C" "2" 
[31,] "Voter 31" NA NA 
[32,] "Voter 32" NA NA 
[33,] "Voter 33" NA NA 
[34,] "Voter 34" NA NA 
[35,] "Voter 35" NA NA 
[36,] "Voter 36" NA NA 
[37,] "Voter 37" "E" "4" 
[38,] "Voter 38" "E" "4" 
[39,] "Voter 39" "E" "4" 
[40,] "Voter 40" "E" "4" 
[41,] "Voter 41" "E" "4" 
[42,] "Voter 42" "E" "4" 
[43,] "Voter 43" "E" "4" 
[44,] "Voter 44" "E" "4" 
[45,] "Voter 45" "E" "4" 
[46,] "Voter 46" "E" "4" 
[47,] "Voter 47" "E" "4" 
[48,] "Voter 48" NA NA 
[49,] "Voter 49" NA NA 
[50,] "Voter 50" NA NA 
[51,] "Voter 51" NA NA 
[52,] "Voter 52" "A" "1" 
[53,] "Voter 53" "A" "1" 
[54,] "Voter 54" NA NA 
[55,] "Voter 55" NA NA 
[56,] "Voter 56" NA NA 
[57,] "Voter 57" NA NA 
[58,] "Voter 58" "C" "2" 
[59,] "Voter 59" "C" "2" 
[60,] "Voter 60" "E" "4" 
[61,] "Voter 61" "E" "4" 
[62,] "Voter 62" NA NA 
[63,] "Voter 63" "C" "2" 
[64,] "Voter 64" "C" "2" 
[65,] "Voter 65" "E" "4" 
[66,] "Voter 66" "E" "4" 
[67,] "Voter 67" NA NA 
[68,] "Voter 68" NA NA 
[69,] "Voter 69" NA NA 
[70,] "Voter 70" NA NA 
[1] "A has the following supporters: "
[1] "Voter 1" "Voter 2" "Voter 3" "Voter 4" "Voter 5" "Voter 6" 
[7] "Voter 7" "Voter 8" "Voter 9" "Voter 18" "Voter 19" "Voter 20"
[13] "Voter 21" "Voter 22" "Voter 23" "Voter 52" "Voter 53"
[1] "C has the following supporters: "
[1] "Voter 24" "Voter 25" "Voter 26" "Voter 27" "Voter 28" "Voter 29"
[7] "Voter 30" "Voter 58" "Voter 59" "Voter 63" "Voter 64"
[1] "E has the following supporters: "
[1] "Voter 37" "Voter 38" "Voter 39" "Voter 40" "Voter 41" "Voter 42"
[7] "Voter 43" "Voter 44" "Voter 45" "Voter 46" "Voter 47" "Voter 60"
[13] "Voter 61" "Voter 65" "Voter 66"
[1] "*******************************************************"
[1] "ROUND: 5"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 10 5 6 1 3 1 4 1 1 1 1
Voter 11 5 6 1 3 1 4 1 1 1 1
Voter 12 5 6 1 3 1 4 1 1 1 1
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 31 1 1 1 6 1 1 1 1 1 4
Voter 32 1 1 1 6 1 1 1 1 1 4
Voter 33 1 1 1 6 1 1 1 1 1 4
Voter 34 1 1 1 6 1 1 1 1 1 4
Voter 35 1 1 1 6 1 1 1 1 1 4
Voter 36 1 1 1 6 1 3 1 1 1 1
Voter 48 1 1 1 1 1 1 6 5 1 4
Voter 49 1 1 1 1 1 1 6 5 1 4
Voter 50 1 1 1 1 1 1 6 5 1 4
Voter 51 1 1 1 1 1 1 6 1 1 1
Voter 54 1 1 1 1 1 3 4 6 5 1
Voter 55 1 1 1 1 1 3 4 6 5 1
Voter 56 1 1 1 1 1 3 4 6 5 1
Voter 57 1 1 1 1 1 3 4 6 5 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 67 1 1 5 4 1 4 5 1 4 6
Voter 68 1 1 5 4 1 4 5 1 4 6
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5
[1] "Threshold: 10"
[1] "Count of selectors (Candidate Vector): "
[1] 0 4 0 6 0 0 6 7 5 2
[1] "Sum of Candidate Evaluations: "
[1] 0 24 0 36 0 0 34 39 26 12
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 6"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 10 5 6 1 3 1 4 1 1 1 1
Voter 11 5 6 1 3 1 4 1 1 1 1
Voter 12 5 6 1 3 1 4 1 1 1 1
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 31 1 1 1 6 1 1 1 1 1 4
Voter 32 1 1 1 6 1 1 1 1 1 4
Voter 33 1 1 1 6 1 1 1 1 1 4
Voter 34 1 1 1 6 1 1 1 1 1 4
Voter 35 1 1 1 6 1 1 1 1 1 4
Voter 36 1 1 1 6 1 3 1 1 1 1
Voter 48 1 1 1 1 1 1 6 5 1 4
Voter 49 1 1 1 1 1 1 6 5 1 4
Voter 50 1 1 1 1 1 1 6 5 1 4
Voter 51 1 1 1 1 1 1 6 1 1 1
Voter 54 1 1 1 1 1 3 4 6 5 1
Voter 55 1 1 1 1 1 3 4 6 5 1
Voter 56 1 1 1 1 1 3 4 6 5 1
Voter 57 1 1 1 1 1 3 4 6 5 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 67 1 1 5 4 1 4 5 1 4 6
Voter 68 1 1 5 4 1 4 5 1 4 6
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4
[1] "Threshold: 10"
[1] "Count of selectors (Candidate Vector): "
[1] 0 4 0 8 0 5 10 7 10 10
[1] "Sum of Candidate Evaluations: "
[1] 0 24 0 44 0 20 50 39 46 44
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE
[1] "The winner of round 6 is: G, with 10 affirmed evaluations."
[1] "Winner number: 7"
[1] "Council: "
[1] "A" "C" "E" "G"
[1] "Weights (affirmed evaluations): "
[1] 17 11 15 10
[1] "Votes thus far: "
voter.names voter.votes voter.round
[1,] "Voter 1" "A" "1" 
[2,] "Voter 2" "A" "1" 
[3,] "Voter 3" "A" "1" 
[4,] "Voter 4" "A" "1" 
[5,] "Voter 5" "A" "1" 
[6,] "Voter 6" "A" "1" 
[7,] "Voter 7" "A" "1" 
[8,] "Voter 8" "A" "1" 
[9,] "Voter 9" "A" "1" 
[10,] "Voter 10" NA NA 
[11,] "Voter 11" NA NA 
[12,] "Voter 12" NA NA 
[13,] "Voter 13" NA NA 
[14,] "Voter 14" NA NA 
[15,] "Voter 15" NA NA 
[16,] "Voter 16" NA NA 
[17,] "Voter 17" NA NA 
[18,] "Voter 18" "A" "1" 
[19,] "Voter 19" "A" "1" 
[20,] "Voter 20" "A" "1" 
[21,] "Voter 21" "A" "1" 
[22,] "Voter 22" "A" "1" 
[23,] "Voter 23" "A" "1" 
[24,] "Voter 24" "C" "2" 
[25,] "Voter 25" "C" "2" 
[26,] "Voter 26" "C" "2" 
[27,] "Voter 27" "C" "2" 
[28,] "Voter 28" "C" "2" 
[29,] "Voter 29" "C" "2" 
[30,] "Voter 30" "C" "2" 
[31,] "Voter 31" NA NA 
[32,] "Voter 32" NA NA 
[33,] "Voter 33" NA NA 
[34,] "Voter 34" NA NA 
[35,] "Voter 35" NA NA 
[36,] "Voter 36" NA NA 
[37,] "Voter 37" "E" "4" 
[38,] "Voter 38" "E" "4" 
[39,] "Voter 39" "E" "4" 
[40,] "Voter 40" "E" "4" 
[41,] "Voter 41" "E" "4" 
[42,] "Voter 42" "E" "4" 
[43,] "Voter 43" "E" "4" 
[44,] "Voter 44" "E" "4" 
[45,] "Voter 45" "E" "4" 
[46,] "Voter 46" "E" "4" 
[47,] "Voter 47" "E" "4" 
[48,] "Voter 48" "G" "6" 
[49,] "Voter 49" "G" "6" 
[50,] "Voter 50" "G" "6" 
[51,] "Voter 51" "G" "6" 
[52,] "Voter 52" "A" "1" 
[53,] "Voter 53" "A" "1" 
[54,] "Voter 54" "G" "6" 
[55,] "Voter 55" "G" "6" 
[56,] "Voter 56" "G" "6" 
[57,] "Voter 57" "G" "6" 
[58,] "Voter 58" "C" "2" 
[59,] "Voter 59" "C" "2" 
[60,] "Voter 60" "E" "4" 
[61,] "Voter 61" "E" "4" 
[62,] "Voter 62" NA NA 
[63,] "Voter 63" "C" "2" 
[64,] "Voter 64" "C" "2" 
[65,] "Voter 65" "E" "4" 
[66,] "Voter 66" "E" "4" 
[67,] "Voter 67" "G" "6" 
[68,] "Voter 68" "G" "6" 
[69,] "Voter 69" NA NA 
[70,] "Voter 70" NA NA 
[1] "A has the following supporters: "
[1] "Voter 1" "Voter 2" "Voter 3" "Voter 4" "Voter 5" "Voter 6" 
[7] "Voter 7" "Voter 8" "Voter 9" "Voter 18" "Voter 19" "Voter 20"
[13] "Voter 21" "Voter 22" "Voter 23" "Voter 52" "Voter 53"
[1] "C has the following supporters: "
[1] "Voter 24" "Voter 25" "Voter 26" "Voter 27" "Voter 28" "Voter 29"
[7] "Voter 30" "Voter 58" "Voter 59" "Voter 63" "Voter 64"
[1] "E has the following supporters: "
[1] "Voter 37" "Voter 38" "Voter 39" "Voter 40" "Voter 41" "Voter 42"
[7] "Voter 43" "Voter 44" "Voter 45" "Voter 46" "Voter 47" "Voter 60"
[13] "Voter 61" "Voter 65" "Voter 66"
[1] "G has the following supporters: "
[1] "Voter 48" "Voter 49" "Voter 50" "Voter 51" "Voter 54" "Voter 55"
[7] "Voter 56" "Voter 57" "Voter 67" "Voter 68"
[1] "*******************************************************"
[1] "ROUND: 7"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 10 5 6 1 3 1 4 1 1 1 1
Voter 11 5 6 1 3 1 4 1 1 1 1
Voter 12 5 6 1 3 1 4 1 1 1 1
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 31 1 1 1 6 1 1 1 1 1 4
Voter 32 1 1 1 6 1 1 1 1 1 4
Voter 33 1 1 1 6 1 1 1 1 1 4
Voter 34 1 1 1 6 1 1 1 1 1 4
Voter 35 1 1 1 6 1 1 1 1 1 4
Voter 36 1 1 1 6 1 3 1 1 1 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4
[1] "Threshold: 10"
[1] "Count of selectors (Candidate Vector): "
[1] 0 4 0 6 0 3 0 0 4 5
[1] "Sum of Candidate Evaluations: "
[1] 0 24 0 36 0 12 0 0 18 20
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 8"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 10 5 6 1 3 1 4 1 1 1 1
Voter 11 5 6 1 3 1 4 1 1 1 1
Voter 12 5 6 1 3 1 4 1 1 1 1
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 31 1 1 1 6 1 1 1 1 1 4
Voter 32 1 1 1 6 1 1 1 1 1 4
Voter 33 1 1 1 6 1 1 1 1 1 4
Voter 34 1 1 1 6 1 1 1 1 1 4
Voter 35 1 1 1 6 1 1 1 1 1 4
Voter 36 1 1 1 6 1 3 1 1 1 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 9"
[1] "Count of selectors (Candidate Vector): "
[1] 0 4 0 9 0 4 0 3 4 5
[1] "Sum of Candidate Evaluations: "
[1] 0 24 0 45 0 15 0 9 18 20
[1] "Selection: "
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "The winner of round 8 is: D, with 9 affirmed evaluations."
[1] "Winner number: 4"
[1] "Council: "
[1] "A" "C" "E" "G" "D"
[1] "Weights (affirmed evaluations): "
[1] 17 11 15 10 9
[1] "Votes thus far: "
voter.names voter.votes voter.round
[1,] "Voter 1" "A" "1" 
[2,] "Voter 2" "A" "1" 
[3,] "Voter 3" "A" "1" 
[4,] "Voter 4" "A" "1" 
[5,] "Voter 5" "A" "1" 
[6,] "Voter 6" "A" "1" 
[7,] "Voter 7" "A" "1" 
[8,] "Voter 8" "A" "1" 
[9,] "Voter 9" "A" "1" 
[10,] "Voter 10" "D" "8" 
[11,] "Voter 11" "D" "8" 
[12,] "Voter 12" "D" "8" 
[13,] "Voter 13" NA NA 
[14,] "Voter 14" NA NA 
[15,] "Voter 15" NA NA 
[16,] "Voter 16" NA NA 
[17,] "Voter 17" NA NA 
[18,] "Voter 18" "A" "1" 
[19,] "Voter 19" "A" "1" 
[20,] "Voter 20" "A" "1" 
[21,] "Voter 21" "A" "1" 
[22,] "Voter 22" "A" "1" 
[23,] "Voter 23" "A" "1" 
[24,] "Voter 24" "C" "2" 
[25,] "Voter 25" "C" "2" 
[26,] "Voter 26" "C" "2" 
[27,] "Voter 27" "C" "2" 
[28,] "Voter 28" "C" "2" 
[29,] "Voter 29" "C" "2" 
[30,] "Voter 30" "C" "2" 
[31,] "Voter 31" "D" "8" 
[32,] "Voter 32" "D" "8" 
[33,] "Voter 33" "D" "8" 
[34,] "Voter 34" "D" "8" 
[35,] "Voter 35" "D" "8" 
[36,] "Voter 36" "D" "8" 
[37,] "Voter 37" "E" "4" 
[38,] "Voter 38" "E" "4" 
[39,] "Voter 39" "E" "4" 
[40,] "Voter 40" "E" "4" 
[41,] "Voter 41" "E" "4" 
[42,] "Voter 42" "E" "4" 
[43,] "Voter 43" "E" "4" 
[44,] "Voter 44" "E" "4" 
[45,] "Voter 45" "E" "4" 
[46,] "Voter 46" "E" "4" 
[47,] "Voter 47" "E" "4" 
[48,] "Voter 48" "G" "6" 
[49,] "Voter 49" "G" "6" 
[50,] "Voter 50" "G" "6" 
[51,] "Voter 51" "G" "6" 
[52,] "Voter 52" "A" "1" 
[53,] "Voter 53" "A" "1" 
[54,] "Voter 54" "G" "6" 
[55,] "Voter 55" "G" "6" 
[56,] "Voter 56" "G" "6" 
[57,] "Voter 57" "G" "6" 
[58,] "Voter 58" "C" "2" 
[59,] "Voter 59" "C" "2" 
[60,] "Voter 60" "E" "4" 
[61,] "Voter 61" "E" "4" 
[62,] "Voter 62" NA NA 
[63,] "Voter 63" "C" "2" 
[64,] "Voter 64" "C" "2" 
[65,] "Voter 65" "E" "4" 
[66,] "Voter 66" "E" "4" 
[67,] "Voter 67" "G" "6" 
[68,] "Voter 68" "G" "6" 
[69,] "Voter 69" NA NA 
[70,] "Voter 70" NA NA 
[1] "A has the following supporters: "
[1] "Voter 1" "Voter 2" "Voter 3" "Voter 4" "Voter 5" "Voter 6" 
[7] "Voter 7" "Voter 8" "Voter 9" "Voter 18" "Voter 19" "Voter 20"
[13] "Voter 21" "Voter 22" "Voter 23" "Voter 52" "Voter 53"
[1] "C has the following supporters: "
[1] "Voter 24" "Voter 25" "Voter 26" "Voter 27" "Voter 28" "Voter 29"
[7] "Voter 30" "Voter 58" "Voter 59" "Voter 63" "Voter 64"
[1] "E has the following supporters: "
[1] "Voter 37" "Voter 38" "Voter 39" "Voter 40" "Voter 41" "Voter 42"
[7] "Voter 43" "Voter 44" "Voter 45" "Voter 46" "Voter 47" "Voter 60"
[13] "Voter 61" "Voter 65" "Voter 66"
[1] "G has the following supporters: "
[1] "Voter 48" "Voter 49" "Voter 50" "Voter 51" "Voter 54" "Voter 55"
[7] "Voter 56" "Voter 57" "Voter 67" "Voter 68"
[1] "D has the following supporters: "
[1] "Voter 10" "Voter 11" "Voter 12" "Voter 31" "Voter 32" "Voter 33" "Voter 34"
[8] "Voter 35" "Voter 36"
[1] "*******************************************************"
[1] "ROUND: 9"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 9"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 3 4 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 9 18 0
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 10"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 8"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 3 4 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 9 18 0
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 11"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 7"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 3 4 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 9 18 0
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 12"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 6"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 3 4 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 9 18 0
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 13"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 5"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 3 4 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 9 18 0
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 14"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 14 5 1 5 1 1 1 3 3 4 1
Voter 15 5 1 5 1 1 1 3 3 4 1
Voter 16 5 1 5 1 1 1 3 3 4 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 62 1 1 1 1 1 1 1 1 6 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 4"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 3 4 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 9 18 0
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[1] "The winner of round 14 is: I, with 4 affirmed evaluations."
[1] "Winner number: 9"
[1] "Council: "
[1] "A" "C" "E" "G" "D" "I"
[1] "Weights (affirmed evaluations): "
[1] 17 11 15 10 9 4
[1] "Votes thus far: "
voter.names voter.votes voter.round
[1,] "Voter 1" "A" "1" 
[2,] "Voter 2" "A" "1" 
[3,] "Voter 3" "A" "1" 
[4,] "Voter 4" "A" "1" 
[5,] "Voter 5" "A" "1" 
[6,] "Voter 6" "A" "1" 
[7,] "Voter 7" "A" "1" 
[8,] "Voter 8" "A" "1" 
[9,] "Voter 9" "A" "1" 
[10,] "Voter 10" "D" "8" 
[11,] "Voter 11" "D" "8" 
[12,] "Voter 12" "D" "8" 
[13,] "Voter 13" NA NA 
[14,] "Voter 14" "I" "14" 
[15,] "Voter 15" "I" "14" 
[16,] "Voter 16" "I" "14" 
[17,] "Voter 17" NA NA 
[18,] "Voter 18" "A" "1" 
[19,] "Voter 19" "A" "1" 
[20,] "Voter 20" "A" "1" 
[21,] "Voter 21" "A" "1" 
[22,] "Voter 22" "A" "1" 
[23,] "Voter 23" "A" "1" 
[24,] "Voter 24" "C" "2" 
[25,] "Voter 25" "C" "2" 
[26,] "Voter 26" "C" "2" 
[27,] "Voter 27" "C" "2" 
[28,] "Voter 28" "C" "2" 
[29,] "Voter 29" "C" "2" 
[30,] "Voter 30" "C" "2" 
[31,] "Voter 31" "D" "8" 
[32,] "Voter 32" "D" "8" 
[33,] "Voter 33" "D" "8" 
[34,] "Voter 34" "D" "8" 
[35,] "Voter 35" "D" "8" 
[36,] "Voter 36" "D" "8" 
[37,] "Voter 37" "E" "4" 
[38,] "Voter 38" "E" "4" 
[39,] "Voter 39" "E" "4" 
[40,] "Voter 40" "E" "4" 
[41,] "Voter 41" "E" "4" 
[42,] "Voter 42" "E" "4" 
[43,] "Voter 43" "E" "4" 
[44,] "Voter 44" "E" "4" 
[45,] "Voter 45" "E" "4" 
[46,] "Voter 46" "E" "4" 
[47,] "Voter 47" "E" "4" 
[48,] "Voter 48" "G" "6" 
[49,] "Voter 49" "G" "6" 
[50,] "Voter 50" "G" "6" 
[51,] "Voter 51" "G" "6" 
[52,] "Voter 52" "A" "1" 
[53,] "Voter 53" "A" "1" 
[54,] "Voter 54" "G" "6" 
[55,] "Voter 55" "G" "6" 
[56,] "Voter 56" "G" "6" 
[57,] "Voter 57" "G" "6" 
[58,] "Voter 58" "C" "2" 
[59,] "Voter 59" "C" "2" 
[60,] "Voter 60" "E" "4" 
[61,] "Voter 61" "E" "4" 
[62,] "Voter 62" "I" "14" 
[63,] "Voter 63" "C" "2" 
[64,] "Voter 64" "C" "2" 
[65,] "Voter 65" "E" "4" 
[66,] "Voter 66" "E" "4" 
[67,] "Voter 67" "G" "6" 
[68,] "Voter 68" "G" "6" 
[69,] "Voter 69" NA NA 
[70,] "Voter 70" NA NA 
[1] "A has the following supporters: "
[1] "Voter 1" "Voter 2" "Voter 3" "Voter 4" "Voter 5" "Voter 6" 
[7] "Voter 7" "Voter 8" "Voter 9" "Voter 18" "Voter 19" "Voter 20"
[13] "Voter 21" "Voter 22" "Voter 23" "Voter 52" "Voter 53"
[1] "C has the following supporters: "
[1] "Voter 24" "Voter 25" "Voter 26" "Voter 27" "Voter 28" "Voter 29"
[7] "Voter 30" "Voter 58" "Voter 59" "Voter 63" "Voter 64"
[1] "E has the following supporters: "
[1] "Voter 37" "Voter 38" "Voter 39" "Voter 40" "Voter 41" "Voter 42"
[7] "Voter 43" "Voter 44" "Voter 45" "Voter 46" "Voter 47" "Voter 60"
[13] "Voter 61" "Voter 65" "Voter 66"
[1] "G has the following supporters: "
[1] "Voter 48" "Voter 49" "Voter 50" "Voter 51" "Voter 54" "Voter 55"
[7] "Voter 56" "Voter 57" "Voter 67" "Voter 68"
[1] "D has the following supporters: "
[1] "Voter 10" "Voter 11" "Voter 12" "Voter 31" "Voter 32" "Voter 33" "Voter 34"
[8] "Voter 35" "Voter 36"
[1] "I has the following supporters: "
[1] "Voter 14" "Voter 15" "Voter 16" "Voter 62"
[1] "*******************************************************"
[1] "ROUND: 15"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 4"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 0 0 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 0 0 0
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 16"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 3"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 0 0 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 0 0 0
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 17"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 2"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 0 0 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 0 0 0
[1] "Selection: "
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "*******************************************************"
[1] "ROUND: 18"
[1] "*******************************************************"
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 13 1 6 1 1 1 1 1 1 1 1
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "Selectors: "
[1] 6 5 4 3
[1] "Threshold: 1"
[1] "Count of selectors (Candidate Vector): "
[1] 0 1 0 0 0 0 0 0 0 0
[1] "Sum of Candidate Evaluations: "
[1] 0 6 0 0 0 0 0 0 0 0
[1] "Selection: "
[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[1] "The winner of round 18 is: B, with 1 affirmed evaluations."
[1] "Winner number: 2"
[1] "Council: "
[1] "A" "C" "E" "G" "D" "I" "B"
[1] "Weights (affirmed evaluations): "
[1] 17 11 15 10 9 4 1
[1] "Votes thus far: "
voter.names voter.votes voter.round
[1,] "Voter 1" "A" "1" 
[2,] "Voter 2" "A" "1" 
[3,] "Voter 3" "A" "1" 
[4,] "Voter 4" "A" "1" 
[5,] "Voter 5" "A" "1" 
[6,] "Voter 6" "A" "1" 
[7,] "Voter 7" "A" "1" 
[8,] "Voter 8" "A" "1" 
[9,] "Voter 9" "A" "1" 
[10,] "Voter 10" "D" "8" 
[11,] "Voter 11" "D" "8" 
[12,] "Voter 12" "D" "8" 
[13,] "Voter 13" "B" "18" 
[14,] "Voter 14" "I" "14" 
[15,] "Voter 15" "I" "14" 
[16,] "Voter 16" "I" "14" 
[17,] "Voter 17" NA NA 
[18,] "Voter 18" "A" "1" 
[19,] "Voter 19" "A" "1" 
[20,] "Voter 20" "A" "1" 
[21,] "Voter 21" "A" "1" 
[22,] "Voter 22" "A" "1" 
[23,] "Voter 23" "A" "1" 
[24,] "Voter 24" "C" "2" 
[25,] "Voter 25" "C" "2" 
[26,] "Voter 26" "C" "2" 
[27,] "Voter 27" "C" "2" 
[28,] "Voter 28" "C" "2" 
[29,] "Voter 29" "C" "2" 
[30,] "Voter 30" "C" "2" 
[31,] "Voter 31" "D" "8" 
[32,] "Voter 32" "D" "8" 
[33,] "Voter 33" "D" "8" 
[34,] "Voter 34" "D" "8" 
[35,] "Voter 35" "D" "8" 
[36,] "Voter 36" "D" "8" 
[37,] "Voter 37" "E" "4" 
[38,] "Voter 38" "E" "4" 
[39,] "Voter 39" "E" "4" 
[40,] "Voter 40" "E" "4" 
[41,] "Voter 41" "E" "4" 
[42,] "Voter 42" "E" "4" 
[43,] "Voter 43" "E" "4" 
[44,] "Voter 44" "E" "4" 
[45,] "Voter 45" "E" "4" 
[46,] "Voter 46" "E" "4" 
[47,] "Voter 47" "E" "4" 
[48,] "Voter 48" "G" "6" 
[49,] "Voter 49" "G" "6" 
[50,] "Voter 50" "G" "6" 
[51,] "Voter 51" "G" "6" 
[52,] "Voter 52" "A" "1" 
[53,] "Voter 53" "A" "1" 
[54,] "Voter 54" "G" "6" 
[55,] "Voter 55" "G" "6" 
[56,] "Voter 56" "G" "6" 
[57,] "Voter 57" "G" "6" 
[58,] "Voter 58" "C" "2" 
[59,] "Voter 59" "C" "2" 
[60,] "Voter 60" "E" "4" 
[61,] "Voter 61" "E" "4" 
[62,] "Voter 62" "I" "14" 
[63,] "Voter 63" "C" "2" 
[64,] "Voter 64" "C" "2" 
[65,] "Voter 65" "E" "4" 
[66,] "Voter 66" "E" "4" 
[67,] "Voter 67" "G" "6" 
[68,] "Voter 68" "G" "6" 
[69,] "Voter 69" NA NA 
[70,] "Voter 70" NA NA 
[1] "A has the following supporters: "
[1] "Voter 1" "Voter 2" "Voter 3" "Voter 4" "Voter 5" "Voter 6" 
[7] "Voter 7" "Voter 8" "Voter 9" "Voter 18" "Voter 19" "Voter 20"
[13] "Voter 21" "Voter 22" "Voter 23" "Voter 52" "Voter 53"
[1] "C has the following supporters: "
[1] "Voter 24" "Voter 25" "Voter 26" "Voter 27" "Voter 28" "Voter 29"
[7] "Voter 30" "Voter 58" "Voter 59" "Voter 63" "Voter 64"
[1] "E has the following supporters: "
[1] "Voter 37" "Voter 38" "Voter 39" "Voter 40" "Voter 41" "Voter 42"
[7] "Voter 43" "Voter 44" "Voter 45" "Voter 46" "Voter 47" "Voter 60"
[13] "Voter 61" "Voter 65" "Voter 66"
[1] "G has the following supporters: "
[1] "Voter 48" "Voter 49" "Voter 50" "Voter 51" "Voter 54" "Voter 55"
[7] "Voter 56" "Voter 57" "Voter 67" "Voter 68"
[1] "D has the following supporters: "
[1] "Voter 10" "Voter 11" "Voter 12" "Voter 31" "Voter 32" "Voter 33" "Voter 34"
[8] "Voter 35" "Voter 36"
[1] "I has the following supporters: "
[1] "Voter 14" "Voter 15" "Voter 16" "Voter 62"
[1] "B has the following supporters: "
[1] "Voter 13"
[1] "Remaining ballots:"
A B C D E F G H I J
Voter 17 5 1 1 1 1 1 1 1 1 1
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
[1] "The weight of Voter 17 goes to A. This selection is based on the voter's evaluation which is above max.select."
[1] "Ballots remaining:"
A B C D E F G H I J
Voter 69 1 1 1 1 1 1 1 1 1 1
Voter 70 1 1 1 1 1 1 1 1 1 1
> 
> # Apportion unconfirmed voters to weights of favorite of already elected council members
> # This assures that sum of weights = number of voters
> if(apportion){
+ for(n in 1:dim(voter.mat)[1]){
+ council.in.ballot<-voter.mat[n,council.numbers]
+ fave<-sample(which(council.in.ballot==max(council.in.ballot)),size=1) # Choose favorite of already elected candidates -- if tie choose by lot among those tied
+ weights[fave]<-weights[fave]+1
+ print(paste("The weight of ",rownames(voter.mat)[n], " goes to ",names(fave),". ","This selection is based on the voter's evaluation which is below max.select.",sep=""))
+ voter.ind<-which(voter.names %in% rownames(voter.mat)[n])
+ voter.votes[voter.ind]<-names(fave)
+ voter.round[voter.ind]<-"Final below max.select"
+ }
+ }
> 
> if(! apportion){
+ for(n in 1:dim(voter.mat)[1]){
+ voter.ind<-which(voter.names %in% rownames(voter.mat)[n])
+ voter.votes[voter.ind]<-"None."
+ voter.round[voter.ind]<-"Uncountable ballot."
+ }
+ }
> 
> # Check to see that sum of weights equals number of voters
> sum(weights)
[1] 68
> sum(weights)==voters
[1] FALSE
> 
> # Print final votes
> print("Final vote apportionment: ")
[1] "Final vote apportionment: "
> print(cbind(voter.names,voter.votes,voter.round))
voter.names voter.votes voter.round 
[1,] "Voter 1" "A" "1" 
[2,] "Voter 2" "A" "1" 
[3,] "Voter 3" "A" "1" 
[4,] "Voter 4" "A" "1" 
[5,] "Voter 5" "A" "1" 
[6,] "Voter 6" "A" "1" 
[7,] "Voter 7" "A" "1" 
[8,] "Voter 8" "A" "1" 
[9,] "Voter 9" "A" "1" 
[10,] "Voter 10" "D" "8" 
[11,] "Voter 11" "D" "8" 
[12,] "Voter 12" "D" "8" 
[13,] "Voter 13" "B" "18" 
[14,] "Voter 14" "I" "14" 
[15,] "Voter 15" "I" "14" 
[16,] "Voter 16" "I" "14" 
[17,] "Voter 17" "A" "Final above max.select"
[18,] "Voter 18" "A" "1" 
[19,] "Voter 19" "A" "1" 
[20,] "Voter 20" "A" "1" 
[21,] "Voter 21" "A" "1" 
[22,] "Voter 22" "A" "1" 
[23,] "Voter 23" "A" "1" 
[24,] "Voter 24" "C" "2" 
[25,] "Voter 25" "C" "2" 
[26,] "Voter 26" "C" "2" 
[27,] "Voter 27" "C" "2" 
[28,] "Voter 28" "C" "2" 
[29,] "Voter 29" "C" "2" 
[30,] "Voter 30" "C" "2" 
[31,] "Voter 31" "D" "8" 
[32,] "Voter 32" "D" "8" 
[33,] "Voter 33" "D" "8" 
[34,] "Voter 34" "D" "8" 
[35,] "Voter 35" "D" "8" 
[36,] "Voter 36" "D" "8" 
[37,] "Voter 37" "E" "4" 
[38,] "Voter 38" "E" "4" 
[39,] "Voter 39" "E" "4" 
[40,] "Voter 40" "E" "4" 
[41,] "Voter 41" "E" "4" 
[42,] "Voter 42" "E" "4" 
[43,] "Voter 43" "E" "4" 
[44,] "Voter 44" "E" "4" 
[45,] "Voter 45" "E" "4" 
[46,] "Voter 46" "E" "4" 
[47,] "Voter 47" "E" "4" 
[48,] "Voter 48" "G" "6" 
[49,] "Voter 49" "G" "6" 
[50,] "Voter 50" "G" "6" 
[51,] "Voter 51" "G" "6" 
[52,] "Voter 52" "A" "1" 
[53,] "Voter 53" "A" "1" 
[54,] "Voter 54" "G" "6" 
[55,] "Voter 55" "G" "6" 
[56,] "Voter 56" "G" "6" 
[57,] "Voter 57" "G" "6" 
[58,] "Voter 58" "C" "2" 
[59,] "Voter 59" "C" "2" 
[60,] "Voter 60" "E" "4" 
[61,] "Voter 61" "E" "4" 
[62,] "Voter 62" "I" "14" 
[63,] "Voter 63" "C" "2" 
[64,] "Voter 64" "C" "2" 
[65,] "Voter 65" "E" "4" 
[66,] "Voter 66" "E" "4" 
[67,] "Voter 67" "G" "6" 
[68,] "Voter 68" "G" "6" 
[69,] "Voter 69" "None." "Uncountable ballot." 
[70,] "Voter 70" "None." "Uncountable ballot." 
> 
> # Final output of candidates and weights
> candidate.names[council.numbers]
[1] "A" "C" "E" "G" "D" "I" "B"
> weights
[1] 18 11 15 10 9 4 1
> 
>

JPR Status: Working Paper.