2010-07-03 15 views
9

Większość gier online arbitralnie tworzy zespoły. Często zdarza się to w stosunku do użytkownika, a oni wybierają szybki serwer z wolnym gniazdem. Takie zachowanie wytwarza niesprawiedliwe zespoły i ludzie przestają wściekłość. Śledząc numer player's statics (lub inne dane statystyczne, które można zebrać), jak wybrać zespoły, które są tak uczciwe, jak to tylko możliwe?Targowanie kojarzeń dla gier online

+1

Czy statystyki tych graczy są proste i skalarne? tj. czy mają określony "poziom umiejętności", czy też mają umiejętności odwzorowane na wiele kryteriów? –

+0

@Jamie Wong niezależnie od statystyk, które można zebrać. – rook

Odpowiedz

9

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

Ludzie również próbowali dostosować Elo system do kojarzenia zespołów, chociaż jest on bardziej przeznaczony do parowania 1-v-1.

+0

Dobrze jest zobaczyć solidne wyniki badań firmy Microsoft. – rook

+1

Microsoft Research jest w rzeczywistości jednym z lepszych działów badawczych w swojej dziedzinie - reszta firmy po prostu nie zawsze idzie w parze. – Amber

1

Jednym ze sposobów jest po prostu utworzenie listy graczy szukających meczów w danym momencie, posortowanych według rangi gracza. Po osiągnięciu wystarczająco dużo ludzi, aby rozpocząć nowy test (lub być może dwa mniej niż wymagana), grupa je jako takie:

  1. Usuń najlepszego i najgorszego gracza i umieścić je na zespół 1
  2. Usuń teraz -najlepszy i najgorszy zawodnik (naprawdę drugi najlepszy i drugi najgorszy) i umieścić go w drużynie 2
  3. Jeśli zostało tylko dwóch graczy, połóżcie je w różnych drużynach, w zależności od tego, kto ma najniższy łączny wynik. W przeciwnym razie powtórzyć:
  4. Usuń obecnie najlepszym i teraz najgorszy i umieścić je na zespół 1
  5. Usuń obecnie najlepszym i teraz najgorszy i umieścić je na zespół 2

itd. Itd. Itd. dopóki twoje zespoły nie zostaną obsadzone.

Jeśli zdecydujesz się rozpocząć nowy mecz z mniej niż wymagane, to tutaj jest czas, aby pozwolić graczom czekać na dołączenie nowych osób. Zaraz po dołączeniu nowej osoby, będziesz chciał umieścić ją w drużynie otwartej z najmniejszą liczbą punktów.

Jeśli chcesz uniknąć gier łączących dobrych i złych graczy w tej samej drużynie, możesz podzielić wszystkich na poziomy (grupy na podstawie ich rankingu) i dopasować tylko osoby z tego samego poziomu. Wymagałoby to nowej otwartej/posortowanej listy dla każdego dodatkowego poziomu.

Przykład

gry jest 4V4

A - 1000 PNTS

B - 800 PNTS

C - 600 PNTS

D - 400 PNTS

E - 200 PNTS

F - 100 PNTS

Jak najszybciej dostać te sześć, grupa ich w zespołach jako takie:

zespołu 1: A, C, D (łączny wynik 1500)

zespołu 2: D, E, K (wynik połączony 1600)

teraz w Poczekaj na dołączenie do dwóch kolejnych graczy.

Po pierwsze, gracz E ma 500 puntów.Idzie do Drużyny 1, ponieważ mają niższy łączny wynik.

Następnie gracz F ma 800 puntów. Idzie do Drużyny 2, ponieważ jest to jedyna otwarta drużyna.

Wszystkie zespoły:

zespołu 1 A, C, D, E (łączny wynik 2000)

zespołu 2: D, E, C i F (łączny wynik 2400)

Zauważ, że zespoły były w zasadzie uczciwe, dopóki nie pojawiły się dwie ostatnie. Szczerze mówiąc, najlepszym sposobem na było stworzenie meczu tylko wtedy, gdy masz wystarczającą liczbę graczy, aby go uruchomić. Ale czas oczekiwania może być zbyt długi dla gracza.

Dostosuj, ile potrzebujesz, aby utworzyć dopasowanie. Niższy = krótszy czas oczekiwania, bardziej prawdopodobnie niesprawiedliwy. Wyższe = dłuższy czas oczekiwania, mniej prawdopodobnie nieuczciwy.

Jeśli masz ekran przed grą, niższe będą oferować więcej czasu na rozmowę i rozmowę z potencjalnymi członkami drużyny podczas oczekiwania.

+3

Umieszczenie najlepszych i najgorszych zawodników w drużynie często powoduje frustrację, ponieważ ogólna mieszanka poziomów umiejętności w grze będzie tak duża, że ​​niektórzy gracze zostaną zdominowani przez innych, nawet jeśli ogólny bilans drużyny jest w porządku. Jasne, najgorszy gracz może być w zwycięskiej drużynie, ale ich osobiste doświadczenie prawdopodobnie będzie straszne, ponieważ drugi najlepszy gracz walczy przeciwko nim, a gracz nr 1 będzie zirytowany, że musi znosić najgorszego gracza będącego na swoim zespół. – Amber

1

Trudno jest oszacować umiejętności jednego gracza za pomocą pojedynczej metryki i taka metoda jest podatna na nadużycia. Jednakże, jeśli tylko dbają o wdrażaniu coś prostego, który będzie działał dobrze wypróbować następujące:

  1. śledzić wygranych i przegranych
  2. użyć procent zwycięstw vs straty jak statystyki, aby dopasować graczy (w pewnym sensie meczu słownego, tzn. gracze grupowi o podobnej wartości procentowej)

To ma oczywisty upadek przypadku, w którym gracz może mieć współczynnik wygranej 5-0, a inny 50-20, pierwszy ma nieskończony procent, podczas gdy drugi ma bardziej uzasadniony procent. Sensowny system powinien to potwierdzać i być znacznie bardziej pewnym, że ten ostatni ma więcej umiejętności ze względu na wymaganą konsystencję; jednak postawienie dwóch graczy przeciwko sobie byłoby prawdopodobnie dobrą rzeczą, ponieważ gracz 5-0 prawdopodobnie próbuje pracować systemem, grając przeciwko słabszym graczom, więc postawienie go przeciwko konsekwentnie dobremu graczowi przydałoby się wszystkim.

Uwaga, mówię z doświadczenia z gry tylko w gry strategiczne, takie jak Warcraft 3, gdzie jest to typowe zachowanie przy dopasowywaniu. Wydaje mi się, że procent wygranych nad stratami jest świetnym wskaźnikiem, dzięki któremu można dopasować graczy.

+0

to nie działa tak dobrze, chyba że wszystkie mecze są losowo ułożone. Jeśli mam 1-2 rekordy w szachach przeciwko Gary Kasparov, to prawie zawsze jest o wiele lepiej, niż mając 100-1 rekord przeciwko przedszkolakowi. Ale twój algorytm będzie cię oceniał znacznie wyżej ode mnie. –

+0

@Peter Recore: według sformułowania pytania, założyłem, że to, co zamierzał, to system automatycznego lub "losowego" dopasowywania, jak go nazywasz. – ldog

+1

Ale gdy zaczniesz przypisywać mecze w oparciu o poziom umiejętności, nie będziesz już mógł użyć zwycięskiego% jako użytecznej metryki. wygrywanie 50% gier przeciwko profesjonalistom to nie to samo, co wygrywanie 50% gier przeciwko nowemu. –

6

Po mojej poprzedniej odpowiedzi zdałem sobie sprawę, że jeśli chcesz naprawdę się spodobać, możesz użyć naprawdę prostego, ale mocnego pomysłu: Łańcuchy Markowa.

Intuicyjny Ideą użyciu Łańcuch Markowa idzie mniej więcej tak:

  1. Utwórz graf G = (V, E)
  2. Niech każdy wierzchołek w V reprezentowania podmiotu
  3. Niech każda krawędź w E reprezentuje prawdopodobieństwo przejścia między jednostkami. Oznacza to, że suma wychodzących stopni każdego wierzchołka musi wynosić 1.
  4. Na początku (czas t = 0) przypisz każdej jednostce wartość jednostkową 1
  5. Przy każdym kroku czasowym, jednostka formularza przejścia, i, j przez prawdopodobieństwo przejścia zdefiniowane w 3.
  6. Niech t-> nieskończoność to wartość każdej jednostki w t = nieskończoności jest równowagą (to jest szansa przejścia do jednostki jest taka sama jak całkowita szansa przejścia poza jednostką.)

Pomysł ten został na przykład z powodzeniem zastosowany w celu implementacji algorytmu Google Page Rank. Aby opisać jak można używać go rozważyć następujące kwestie:

  1. V = gracze E = prawdopodobieństwo, że przejście odtwarzacza formularz do odtwarzacza na podstawie względnych współczynników wygrana/strata
  2. Każdy gracz jest wierzchołek.
  3. Krawędź od gracza A do B (B nie jest równe A) ma prawdopodobieństwo X/N, gdzie N jest łączną liczbą gier rozegranych przez A i X, jest sumą gier przegranych z B. Dodaj krawędź od A do A z prawdopodobieństwem M/N, gdzie M jest łączną liczbą gier wygranych przez A.
  4. Przypisać poziom umiejętności 1 do każdego gracza na starcie.
  5. pomocą Power Method znaleźć dominującą wektor własny matrycy łącza wykonanego z prawdopodobieństw określonych w 3.
  6. Dominujący wektora własnego jest ilość specjalistom każdy z graczy przy t = nieskończoności, to jest ilość każdego specjalisty gracz ma raz łańcuch Markowa osiągnął stan równowagi. Jest to bardzo mocna miara umiejętności każdego gracza, wykorzystująca topologię przestrzeni wygranych/strat.

Niektóre ostrzeżenia: istnieje kilka problemów przy stosowaniu tego bezpośrednio, największym problemem będzie ci oddzielne wstęgi (czyli Twój Łańcuch Markowa nie będzie nieredukowalne i dlatego metoda zasilania nie będzie zagwarantowane zbieżne.) Szczęście Ty, Google, poradziłeś sobie z tymi wszystkimi problemami i nie tylko podczas implementacji algorytmu swojej strony, a wszystko, co pozostaje dla ciebie, polega na sprawdzeniu, w jaki sposób omijają te problemy, jeśli jesteś tak skłonny.

0

Dopasowanie oparte na wielu atrybutach. Zaimplementowałem simple matchmaking system przy użyciu AWS Cloudsearch (w oparciu o Apache Solr). Na przykład dopasowywania na podstawie kombinacji następujących dziedzin jest możliwe

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

Jest obecnie możliwe do uruchamiania kwerend włącznie z wielu dziedzin, 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]))}