Fair matchmaking Do Gier online

Większość gier online arbitralnie tworzą zespoły. Często czasy jego do użytkownika, a oni wybrać szybki serwer z wolnym slotem. To zachowanie powoduje niesprawiedliwe zespoły i ludzie wściekłość rzucić. Śledząc statykę gracza (lub wszelkie statyki, które można zebrać), jak możesz wybrać drużyny, które są jak najbardziej sprawiedliwe?

Author: rook, 2010-07-03

5 answers

Jednym z bardziej znanych obecnie systemów jest algorytm TrueSkill firmy Microsoft .

Ludzie próbowali również dostosować system Elodo dobierania drużyn, choć jest on bardziej zaprojektowany do Par 1-v-1.

 10
Author: Amber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-03 19:29:45

Po mojej poprzedniej odpowiedzi, zdałem sobie sprawę, że jeśli chcesz uzyskać naprawdę fantazji można użyć naprawdę prosty, ale potężny pomysł: Markov Łańcuchy.

Intuicyjna idea korzystania z łańcucha Markowa brzmi mniej więcej tak:

  1. Utwórz wykres G = (V, E)
  2. niech każdy wierzchołek w V reprezentuje byt
  3. niech każda krawędź w E reprezentuje prawdopodobieństwo przejścia między bytami. Oznacza to, że suma stopni wyjściowych każdego wierzchołka musi wynosić 1.
  4. W start (Czas t=0) Przypisz każdej jednostce wartość jednostkową 1
  5. w każdym kroku czasowym, Przejście tworzy podmiot i, j przez prawdopodobieństwo przejścia określone w 3.
  6. niech t - >nieskończoność wtedy wartość każdej jednostki w t = nieskończoność jest równowagą (czyli szansa przejścia w byt jest taka sama jak całkowita szansa przejścia z bytu.)

Ten pomysł został na przykład z powodzeniem wykorzystany do wdrożenia algorytmu page rank Google. Aby opisać jak można użyj go rozważ następujące:

  1. V = gracze E = prawdopodobieństwo przejścia postaci gracza do gracza na podstawie względnych współczynników wygranych / przegranych
  2. każdy gracz jest wierzchołkiem.
  3. przewaga od gracza a do B (B nie jest równa A) ma prawdopodobieństwo x/n, gdzie N to całkowita liczba gier rozegranych przez A, A X to całkowita liczba gier przegranych do B. Dodaj przewagę od A do a z prawdopodobieństwem M / n, gdzie M to całkowita liczba gier wygranych przez A.
  4. Przypisz poziom umiejętności 1 każdemu graczowi na zaczynaj.
  5. użyj metody mocy , aby znaleźć dominujący eigenwektor macierzy łącza zbudowanej z prawdopodobieństw zdefiniowanych w 3.
  6. dominującym eigenvectorem jest ilość umiejętności, jaką posiada każdy gracz w t = nieskończoność, czyli ilość umiejętności, jaką posiada każdy gracz, gdy łańcuch Markowa osiągnie równowagę. Jest to bardzo solidna miara umiejętności każdego gracza przy użyciu topologii przestrzeni wygranych/przegranych.

Niektóre zastrzeżenia: jest kilka problemów przy stosowaniu to bezpośrednio, największym problemem będą oddzielone wstęgi (czyli Twój łańcuch Markowa nie będzie nieredukowalny, a więc metoda zasilania nie będzie gwarantowana.) Na szczęście dla Ciebie, google poradził sobie z tymi wszystkimi problemami i nie tylko podczas wdrażania algorytmu page rank i wszystko, co pozostaje dla ciebie, to sprawdzić, jak obejść te problemy, jeśli jesteś tak skłonny.

 7
Author: ldog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-05 22:02:09

Jednym ze sposobów byłoby po prostu stworzenie listy graczy szukających meczów w danym momencie, posortowanej według rangi gracza. Gdy dotrzesz do wystarczającej liczby osób, aby rozpocząć nowy mecz (a może o dwie mniej niż wymagane), Grupuj je w taki sposób:

  1. Usuń najlepszego i najgorszego gracza i umieść go w drużynie 1
  2. Usuń teraz-najlepszego i teraz-najgorszego gracza (naprawdę drugiego-najlepszego i drugiego najgorszego) i umieść ich w drużynie 2
  3. Jeśli zostało tylko dwóch graczy, umieść każdego z nich w różnych drużynach, w zależności od tego, kto ma najniższy łączny wynik. W przeciwnym razie powtórz:
  4. Usuń teraz-najlepsze i teraz-najgorsze i umieść je w drużynie 1
  5. Usuń teraz-najlepsze i teraz-najgorsze i umieść je w drużynie 2

Itd. itd. itd. dopóki nie wypełnią się wasze drużyny.

Jeśli zdecydowałeś się rozpocząć nowy mecz z mniej niż wymagane, to nadszedł czas, aby pozwolić graczom czekać na nowych ludzi, aby dołączyć. Jak tylko nowa osoba dołączy, będziesz chciał umieścić ją w otwartym zespole z najmniej wynik łączny.

Alternatywnie, jeśli chcecie uniknąć gier łączących dobrych i złych graczy z tej samej drużyny, możecie podzielić wszystkich na poziomy (grupy na podstawie ich rankingu) i dopasować tylko osoby z tego samego poziomu. Wymagałoby to nowej listy otwartej/posortowanej dla każdej warstwy dodatkowej.

Przykład

Gra jest 4v4

A-1000 pnts

B-800 pnts

C-600 pnts

D-400 pnts

E-200 pnts

F-100 pnts

Jak tylko zdobędziesz te sześć, pogrupuj je w zespoły w taki sposób:

Drużyna 1: A, F, D (łączny wynik 1500)

Drużyna 2: B, E ,C (łączny wynik 1600)

Teraz czekamy na dwóch kolejnych graczy.

Po pierwsze, gracz E otrzymuje 500 PNT. Idzie do Drużyny 1, ponieważ mają one niższy łączny wynik.

Następnie gracz F otrzymuje 800 PNT. Idzie do Drużyny 2, bo są została tylko Otwarta drużyna.

RAZEM drużyn:

Drużyna 1: A, F, D, E (łączny wynik 2000)

Drużyna 2: B, E, C, F (łączny wynik 2400)

Zauważ, że drużyny były całkiem uczciwe, dopóki nie pojawiły się dwie ostatnie. Szczerze mówiąc, najlepszym sposobem byłoby stworzenie meczu tylko wtedy, gdy masz wystarczająco dużo graczy, aby go rozpocząć. Ale wtedy czas oczekiwania może być zbyt długi dla gracza.

Dostosuj, ile potrzebujesz przed utworzeniem meczu. Niższy = krótszy czas oczekiwania, bardziej być może niesprawiedliwy. Wyższe = więcej czasu oczekiwania, mniej być może niesprawiedliwe.

Jeśli macie ekran przed grą, lower oferuje więcej czasu na rozmowy i rozmowy z przyszłymi członkami drużyny podczas oczekiwania.

 1
Author: Justin L.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-03 19:40:30

Trudno jest oszacować umiejętności jednego gracza za pomocą jednego wskaźnika i taka metoda jest podatna na nadużycia. Jeśli jednak zależy Ci tylko na zaimplementowaniu czegoś prostego, co będzie dobrze działać, spróbuj:

  1. śledź wygrane i przegrane
  2. Użyj procentu wygranych i przegranych jako statystyki do dopasowania graczy (w pewnym sensie słowo mecz, tzn. Grupuj graczy o podobnym procencie)

Ma to oczywisty upadek sprawy, w której gracz może mieć stosunek wygranych do przegranych 5-0, a drugi 50-20, pierwszy ma nieskończony procent, podczas gdy drugi ma bardziej rozsądny procent. To ma sens dla systemu dopasowania do uznania tego i być znacznie bardziej pewni, że ten ostatni gracz ma rzeczywiste więcej umiejętności ze względu na wymaganą konsystencję; jednak Pit dwóch graczy przeciwko sobie byłoby prawdopodobnie dobrą rzeczą, ponieważ 5-0 gracz prawdopodobnie stara się pracować system grając w porównaniu słabszych graczy, więc postawienie go przeciwko konsekwentnie dobremu zawodnikowi zrobiłoby wszystkim dobrze.

Uwaga, mówię z doświadczenia z grania tylko w gry strategiczne, takie jak Warcraft 3, Gdzie jest to typowe zachowanie match making. Wydaje mi się, że procent zwycięstw nad przegranymi jest świetnym wskaźnikiem, według którego można dopasować graczy.

 1
Author: ldog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-05 16:47:41

Dopasowanie na podstawie wielu atrybutów. Zaimplementowałem prosty system matchmakingu przy użyciu AWS Cloudsearch (oparty na Apache Solr). Na przykład możliwe jest dopasowanie na podstawie kombinacji następujących pól

{
    "fields": {
    "elo_rating": 3121.44,
    "points": 404,
    "randomizer": 35,
    "last_login": "2014-10-09T22:57:57Z",
    "weapons": [
        "CANNON",
        "GUN"
    ]
}

Możliwe jest teraz uruchamianie zapytań zawierających wiele pól, takich jak poniżej.

(and (or weapons:'GUN' weapons:'CANNON' weapons:'DRONE')(and last_login:['2013-05-25T00:00:00Z','2014-10-25T00:00:00Z'])(and points:[100, 200])(and elo_rating:[1000, 2000]))}
 0
Author: smahesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-02 03:39:24