Proportional Methods
This section covers voting methods that aim to achieve proportional representation.
Proportional methods are designed to allocate seats or results in a way that reflects the proportion of votes received by each group or candidate. These methods are especially useful in multi-winner elections.
Proportional methods allow to elect assemblies. Condorcet manages proportional methods compatible with preferential ballots, as every others.
It is thus possible to request results for preferential methods called "single winner" then switch to a proportional one in the same election object.
The API of the proportional methods is almost identical to that of the classical preferential methods. It is simply increased by an additional parameter, the number of seats to be filled (by default 100). This parameter is likely to act on the calculation of the results according to the methods, and thus to be more than a simple cut to x results.
Condorcet PHP has an agnostic and generic approach of these elections. The notion of parties is not explicitly managed and is left to the implementation of each method.
This means that implementations can result in the same candidate being voted for several times in several ranks, de facto considering it as a party; or on the contrary require the existence of real candidates duly registered and voted individually.
The implementation of the native methods Highest Average / Largest Ramainder implicitly use a notion of parties, considering each candidate of the election as a party and not a seat. The following examples should speak for themselves. The implementation of STV methods can't use a parties style due to theirs internal logics or works really candidates by candidates.
Exemples with differents methods
<<< @/code_snippets/proportional_method_stv.php
<<< @/code_snippets/proportional_method_jefferson.php
Quotas
Some methods require choosing a quota. Precise definitions and default settings can be found in the voting method documentation. Normally, implementation use the Election->setMethodOption()
API.
Some of them share the enum Enum StvQuotas
as an option to implement usual quotas:
StvQuotas::DROOP
StvQuotas::HARE
StvQuotas::HAGENBACH_BISCHOFF
StvQuotas::IMPERIALI
The StvQuotas
enum has some specials methods: <<< @/code_snippets/stv_quotas.php