Ký hiệu:
chơi mảng: p[1], ..., p[n]
Đội mảng: T[1], T[2], T[3], T[4]
Sẵn sàng ma trận: w[i,j]
; dimension = nx4
; w[i,j]
= sự sẵn sàng của pi
để ở trong đội Tj
. Giả định ở đây là w[i,1] + w[i,2] + w[i,3] + w[i,4] = 1
cho tất cả i
.
Ma trận thành viên: x[i,j]
, dimension = nx4
; x[i,j]=1
hoặc 0
tùy thuộc vào việc pi
có thuộc về Tj
hay không.
Mảng hài lòng: s[1], ..., s[n]
; s[i] := w[i,1] * x[i,1] + ... + w[i,4] * x[i,4]
.
Sự hài lòng: s := (s[1] + ... + s[n])/n
.
hoạt động:
Giả như sau:
x[k,q] = 1
(p[k]
thuộc về T[q]
)
x[k,r] = 0
(p[k]
không thuộc trong T[r]
x[h,r] = 1
(p[h]
thuộc về T[r]
)
x[h,q] = 0
(p[h]
không thuộc trong T[q]
Các hoạt động swap([k,q][h,r])
giao người chơi p[k]
và p[h]
giữa đội T[q]
và T[r]
. Đây là:
x[k,q] := 0
, x[k,r] := 1
.
x[h,r] := 0
, x[h,q] := 1
.
s[k] := s[k] - w[k,q] + w[k,r]
, s[h] = s[h] - w[h,r] + w[h,q]
.
s := (s * n - w[k,q] - w[h,r] + w[h,r] + w[k,q])/n
.
Bây giờ bạn đã sẵn sàng sử dụng Simulated Annealing để tối đa hóa sự hài lòng s
.Dưới đây là một phác thảo của thuật toán:
Bắt đầu với bất kỳ cấu hình (chỉ cần gán cầu thủ đội như chúng hiển thị)
Thiết lập một nhiệt độ
Pick hai cặp [k,q]
và [h,r]
tại ngẫu nhiên
Hãy thử thao tác swap
. Nếu sự hài lòng s
tăng, hãy chấp nhận hoán đổi. Nếu không, chỉ chấp nhận nó với xác suất nhất định, nếu không thì hãy từ chối trao đổi (xem thuật toán Annulated Annealing để biết chi tiết)
Lặp lại bước 3 và 4 một số lần.
Giảm nhiệt độ và quay trở lại 3.
Ghi chú:
Nếu người chơi có sở thích trong khoảng 1, ..., 4
(hoặc bất kỳ khác,) chia cho mọi người chơi những con số bằng tổng của họ để có được vector sẵn sàng của mỗi người trong số họ đáp ứng các ràng buộc w[i,1] + ... + w[i,4] = 1
.
Việc chọn ngẫu nhiên hai cặp [h,q]
và [k,r]
phải thỏa mãn các giả định của hoạt động swap
. Vì vậy, về cơ bản nó bao gồm trong việc lựa chọn hai đội một cách ngẫu nhiên (q
và r
) và sau đó hai người chơi một trong mỗi đội.
Các bước 3 và 4 trong hoạt động swap
là điều cần thiết để giảm thiểu số lượng và sản phẩm, vì vậy các thử nghiệm trao đổi rất nhanh.
Để từ chối swap
, chỉ cần swap
một lần nữa các cặp giống nhau.
Điều đó có vẻ giống như một biến thể của [Vấn đề bệnh viện/cư dân] (http://www.dcs.gla.ac.uk/publications/PAPERS/5784/SWAT00.pdf) (hoặc vấn đề tuyển sinh đại học), có thể mà không có bất kỳ thứ hạng nào ở phía 'bệnh viện'. – Arnauld