Phương pháp Schulze

Phương pháp Schulze () là một phương pháp đầu phiếu xếp hạng chỉ có một người thắng cuộc do nhà nghiên cứu người Đức Markus Schulze phát triển. Phương pháp này được một số tổ chức như Debian, Ubuntu, Gentoo, Đảng Cướp biển, v.v. sử dụng. Thêm vào đó, Wikimedia từng sử dụng phương pháp này trước khi áp dụng hình thức đầu phiếu chấm điểm.

== Miêu tả ==
Phương pháp Schulze sử dụng hệ thống đầu phiếu xếp hạng cho phép cử tri xếp hạng giống nhau cho nhiều ứng cử viên khác nhau. Phương pháp Schulze có thể được mô tả theo hai cách tương đương nhau như sau:

=== Hướng mô tả "chuỗi đánh bại" ===
Theo phương pháp Schulze, nếu Alice đánh bại Bob và Bob đánh bại Charlie thì ta có thể suy ra là Alice đã "gián tiếp" đánh bại Charlie. Tập hợp các chiến thắng trên được gọi là một "chuỗi đánh bại".

Mỗi một chuỗi đánh bại có một "độ mạnh" xác định: độ mạnh của một chuỗi đánh bại đơn (chẳng hạn như giữa Alice và Bob) chính là số cử tri xếp hạng Alice cao hơn Bob. Độ mạnh của một chuỗi đánh bại đa bước với nhiều chiến thắng là độ mạnh của chiến thắng có độ mạnh thấp nhất trong số các chiến thắng thành phần (tức là chiến thắng với số lượng cử tri thấp nhất).

Ta có thể nói Alice chiến thắng Bob "dựa trên chuỗi đánh bại" nếu như chuỗi đánh bại Bob mạnh nhất của Alice có độ mạnh lớn hơn tất cả các chuỗi đánh bại Alice mạnh nhất của Bob. Ứng cử viên chiến thắng trong cuộc bầu cử là người chiến thắng tất cả các ứng cử viên còn lại dựa trên chuỗi đánh bại.

Markus Schulze đã chứng minh được rằng "chiến thắng dựa trên chuỗi đánh bại" có tính chất bắc cầu, tức là nếu Alice chiến thắng Bob dựa trên chuỗi đánh bại, và Bob chiến thắng Charlie dựa trên chuỗi đánh bại, thì Alice chiến thắng Charlie dựa trên chuỗi đánh bại. Do đó, phương pháp Schulze cũng là một phương pháp đầu phiếu kiểu Condorcet và mở rộng trọn vẹn quy tắc đa số đối với tất cả cuộc bầu cử kiểu Condorcet.

=== Hướng mô tả lặp ===
1. Vẽ một đồ thị có hướng với các nút là các ứng viên và đặt tên cho các mũi tên theo số lượng cử tri ủng hộ người thắng cuộc
2. Nếu như chưa chọn được ứng cử viên chiến thắng:
- Kiểm tra xem có ứng cử viên nào hòa không (nếu có các ứng cử viên hòa, hãy quyết định người chiến thắng bằng cách bỏ phiếu ngẫu nhiên)
- Loại bỏ tất cả các ứng cử viên không thuộc tập hợp được đa số ưa thích
- Xóa mũi tên có độ mạnh gần với độ mạnh hòa nhất

Người duy nhất trụ lại sau quy trình trên là người chiến thắng trong cuộc bầu cử.

== Ví dụ ==
Trong cuộc bầu cử sau, có 45 cử tri và 5 ứng cử viên.

Trước hết, ta cần tính độ ưa thích cặp đôi. Chẳng hạn, khi so sánh cặp A và B, ta thấy có cử tri thích ' hơn ' và cử tri thích ' hơn '. Vì thế formula_1 và formula_2. Sau đây là bảng thể hiện độ ưa thích cặp đôi của tất cả các cặp.
Ô formula_3 có màu xanh lá cây khi formula_4 và có màu đỏ khi formula_5. Dựa trên bảng này, ta chưa thể xác định được người thắng cuộc tuyệt đối.

Bây giờ ta xác định chuỗi đánh bại có độ lớn mạnh nhất. Để trực quan hóa chuỗi đánh bại này, ta vẽ một sơ đồ có dạng đồ thị có hướng như hình bên dựa trên ma trận độ ưa thích cặp đôi. Mũi tên kéo từ điểm X tới điểm Y được gán độ mạnh formula_3. Trong sơ đồ bên, ta chỉ vẽ mũi tên từ điểm X tới điểm Y khi formula_4 (độ mạnh trong ô màu xanh lá cây) để tránh trình bày quá nhiều số liệu.

Sau đây là một ví dụ về việc tính chuỗi đánh bại mạnh nhất. Theo đồ thị , ta thấy formula_8: mũi tên có độ mạnh lớn nhất từ B đến D là mũi tên từ B đến D, có độ mạnh là 33. Tuy nhiên, chuỗi đánh bại mạnh nhất của A đối với C không phải là mũi tên thẳng từ A đến C với độ mạnh 26, nhưng lại là chuỗi gián tiếp (A, D, C) với độ mạnh bằng formula_9. Như ta đã trình bày ở trên, độ mạnh của một chuỗi đánh bại chính bằng độ mạnh của chiến thắng thành phần có độ mạnh nhỏ nhất.

Với mỗi một cặp ứng cử viên X và Y, bảng sau thể hiện chuỗi đánh bại mạnh nhất của X đối với Y được in đậm với nét màu đỏ và chiến thắng thành phần với độ mạnh nhỏ nhất được gạch chân.
Tiếp theo ta sẽ xác định kết quả của phương pháp Schulze. Chẳng hạn, khi so sánh hai ứng cử viên ' và ', ta thấy ứng cử viên ' tốt hơn hơn ứng cử viên ' vì formula_10. Trong một ví dụ khác, ứng cử viên ' tốt hơn hơn ứng cử viên ' vì formula_11. Tiếp tục lặp lại việc so sánh, ta kết luận rằng thứ hạng được tính toán theo phương pháp Schulze là formula_12 và người chiến thắng là ứng cử viên formula_13. Nói cách khác, ứng cử viên formula_13 chiến thắng vì formula_15 với mọi ứng cử viên X.

== Liên kết ngoài ==
- The Schulze Method by Hubert Bray
- Spieltheorie by Bernhard Nebel
- Accurate Democracy by Rob Loring
- Christoph Börgers (2009), "Mathematics of Social Choice: Voting, Compensation, and Division", SIAM,
- Nicolaus Tideman (2006), "Collective Decisions and Voting: The Potential for Public Choice", Burlington: Ashgate,
- preftools by the Public Software Group
- Arizonans for Condorcet Ranked Voting
- Condorcet PHP Command line application and PHP library, supporting multiple Condorcet methods, including Schulze.
- Implementation in Java
- Implementation in Ruby
- Implementation in Python 2
- Implementation in Python 3