postaciach:
tablicy gracza: p[1], ..., p[n]
Tablica zespołu: T[1], T[2], T[3], T[4]
Gotowość matrycy: w[i,j]
; dimension = nx4
; w[i,j]
= gotowość pi
do zostania w drużynie Tj
. Założeniem jest tutaj, że w[i,1] + w[i,2] + w[i,3] + w[i,4] = 1
dla wszystkich i
.
Macierz członkostwa: x[i,j]
, wymiar = nx4
; x[i,j]=1
lub 0
w zależności od tego, czy pi
należy do Tj
, czy nie.
Tablica satysfakcji: s[1], ..., s[n]
; s[i] := w[i,1] * x[i,1] + ... + w[i,4] * x[i,4]
.
Satysfakcja: s := (s[1] + ... + s[n])/n
.
pracy:
przyjęto następujące założenia:
x[k,q] = 1
(p[k]
przynależy T[q]
)
x[k,r] = 0
(p[k]
nie podlega T[r]
x[h,r] = 1
(p[h]
przynależy T[r]
)
x[h,q] = 0
(p[h]
nie należą T[q]
Operacja swap([k,q][h,r])
węzłów graczy p[k]
i p[h]
między zespołami T[q]
i T[r]
. Jest to:
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
.
Teraz jesteś gotowy do użycia symulowanego wyżarzania, aby zmaksymalizować satysfakcję s
.Oto szkic algorytmu:
zacząć od dowolnej konfiguracji (wystarczy przypisać zawodników do zespołów jak oni pokazać się)
Ustalić temperaturę
Wybierz dwie pary [k,q]
i [h,r]
na losowy
Wypróbuj operację swap
. Jeśli wzrośnie satysfakcja s
, zaakceptuj zamianę. Jeśli tak się nie stanie, zaakceptuj to tylko z pewnym prawdopodobieństwem, w przeciwnym razie odrzuć zamianę (zobacz szczegóły w algorytmie symulowanego wyżarzania).
Powtórz kroki 3 i 4 kilka razy.
Zmniejszyć temperaturę i powrócić do 3.
Uwagi:
Jeśli gracze mają preferencje w zakresie 1, ..., 4
(lub jakiegokolwiek innego), podziału dla każdego gracza przez te numery ich suma, aby uzyskać wektor gotowości każdego z nich, spełnia warunek w[i,1] + ... + w[i,4] = 1
.
Losowy wybór dwóch par [h,q]
i [k,r]
musi spełniać założenia operacji swap
. Zasadniczo polega to na losowym wybraniu dwóch drużyn (q
i r
), a następnie dwóch graczy po jednym w każdej drużynie.
Kroki 3 i 4 w operacji swap
są niezbędne, aby zminimalizować liczbę sum i produktów, dlatego próby wymiany są szybkie.
Aby odrzucić numer swap
, wystarczy swap
ponownie te same pary.
To bardziej przypomina odmianę [Problem szpitali/mieszkańców] (http://www.dcs.gla.ac.uk/publications/PAPERS/5784/SWAT00.pdf) (lub College Admissions Problem), może bez żadnego rankingu po stronie "szpitala". – Arnauld