10
votes

Matchmaking équitable pour les jeux en ligne

La plupart des jeux en ligne forment des équipes arbitraires. Souvent, c'est jusqu'à l'utilisateur, et ils choisiront un serveur rapide avec une fente gratuite. Ce comportement produit des équipes injustes et des personnes qui arrêtent de rage. En suivant un statique du joueur (ou toute statique pouvant être recueillie) Comment Pouvez-vous choisir des équipes aussi justes que possible?


2 commentaires

Ces statistiques du joueur sont-elles simples et scalaires? I.e. ont-ils un "niveau de compétence" spécifique ou ont-ils des compétences mappées sur plusieurs critères?


@Jamie Wong toutes les statistiques pouvant être rassemblées.


5 Réponses :


1
votes

Un moyen de créer une liste de joueurs à la recherche de matchs à un moment donné, triés par classement des joueurs. Une fois que vous avez atteint assez de personnes pour commencer un nouveau match (ou peut-être, deux moins que les requis), les grouper en tant que tels:

  1. Supprimer le meilleur et le pire joueur et les mettre en équipe 1
  2. Supprimer maintenant le meilleur et le meilleur joueur (vraiment secondaire et deuxième et second pire) et les mettre en équipe 2
  3. S'il reste seulement deux joueurs, placez-les sur différentes équipes, en fonction de la score combinée la plus basse. Sinon, répétez:
  4. Supprimer maintenant le meilleur et maintenant le pire et les mettre en équipe 1
  5. Supprimer maintenant le meilleur et maintenant le pire et les mettre en équipe 2

    etc. etc., etc. Jusqu'à ce que vos équipes soient remplies.

    Si vous avez décidé de démarrer un nouveau match avec moins que le nécessaire, il est temps de laisser les joueurs à attendre que de nouvelles personnes rejoignent. Dès qu'une nouvelle personne se joint, vous voudrez les mettre sur l'équipe ouverte avec le meilleur score combiné.

    Alternativement, si vous vouliez éviter les jeux qui combinaient des bons et des mauvais joueurs de la même équipe, vous pourriez diviser tout le monde en niveaux (groupes basés sur leur classement) et ne correspondant que des personnes dans la même niveau. Cela nécessiterait une nouvelle liste ouverte / triée pour chaque niveau supplémentaire.

    exemple

    jeu est 4v4

    A - 1000 pnts

    B - 800 PNTS

    C - 600 PNTS

    D - 400 pnts

    E - 200 pnts

    F - 100 PNTS

    Dès que vous obtenez ces six, regroupez-les dans des équipes comme telles:

    Équipe 1: A, F, D (Score combiné 1500)

    Team 2: B, E, C (Score combiné 1600)

    Maintenant, nous attendons que deux autres joueurs rejoignent.

    Premier, le joueur E vient avec 500 pnts. Il va à l'équipe 1, car ils ont un score combiné inférieur.

    Ensuite, le joueur F est livré avec 800 pnts. Il va à l'équipe 2, car la seule équipe ouverte est partie.

    Total des équipes:

    Équipe 1: A, F, D, E (Score combiné 2000)

    Équipe 2: B, E, C, F (Score combiné 2400)

    Notez que les équipes étaient réellement assez foires jusqu'à ce que les deux derniers arrivés. Pour être honnête, le moyen meilleur serait de créer uniquement le match lorsque vous avez suffisamment de joueurs pour la démarrer. Mais alors les temps d'attente peuvent être trop longs pour le joueur.

    Ajustez combien vous avez besoin avant de former le match. Basse = moins de temps d'attente, plus d'injuste. Plus élevé = plus de temps d'attente, moins éventuellement injuste.

    Si vous avez un écran de pré-jeu, BAYS offrirait également plus de temps aux personnes à discuter et à parler avec leurs coéquipiers pour attendre.


1 commentaires

Mettre les meilleurs et les pires joueurs de l'équipe frustreront souvent les deux, car la combinaison de niveaux de compétence dans le jeu sera si grande que certains joueurs seront dominés par d'autres, même si le solde global de l'équipe est correct. Bien sûr, le pire joueur pourrait être sur l'équipe gagnante, mais leur expérience personnelle sera probablement terrible car le 2e meilleur joueur se bat contre eux et le joueur n ° 1 sera ennuyé de devoir supporter le pire joueur étant sur leur équipe.



12
votes

L'un des systèmes les plus connus est maintenant est Microsoft's Algorithme Trueskill .

Les gens ont également tenté d'adapter le elo system pour le matchmaking de l'équipe, bien qu'il soit plus conçu pour Jumelage 1-V-1.


1 commentaires

La recherche Microsoft est en fait l'une des meilleures divisions de recherche dans son domaine - le reste de la société ne convient pas toujours.



1
votes

Il est difficile d'estimer la compétence d'un joueur d'un seul métrique et une telle méthode est sujette à l'abus. Cependant, si vous vous souciez que de mettre en œuvre quelque chose de simple qui fonctionnera bien, essayez ce qui suit:

  1. garder une trace des victoires et des pertes
  2. Utilisez le pourcentage de victoires victimes de la statistique pour correspondre aux joueurs (dans un sens du mot match, c'est-à-dire des joueurs de groupe avec des pourcentages similaires)

    Ceci a la chute évidente du cas où un joueur peut avoir un rapport de perte de victoire de 5-0 et une autre de 50 à 20, le premier a un pourcentage infini tandis que l'autre a un pourcentage plus raisonnable. Il est logique que le système correspondant de reconnaître cela et d'être beaucoup plus confiant que ce dernier joueur a réellement des compétences en raison de la consistance requise; Cependant, les deux joueurs les uns contre les autres seront probablement une bonne chose car le joueur 5-0 essaie probablement de travailler le système en jouant à des joueurs plus faibles, ce qui lui convient donc un joueur de manière constante.

    Remarque, je parle d'expérience de ne jouant que des jeux de stratégie telles que Warcraft 3 où il s'agit du comportement typique de la tâche. Il me semble que le pourcentage de victoires sur les pertes est une excellente métrique pour correspondre aux joueurs.


3 commentaires

Cela ne fonctionne pas si bien à moins que tous les matchs soient arrangés de manière aléatoire. Si j'ai un record de 1-2 aux échecs contre Gary Kasparov, c'est presque toujours beaucoup mieux que vous n'avez un record de 100-1 contre un enfant d'âge préscolaire. Mais votre algorithme vous classerait beaucoup plus haut que moi.


@Peter Rapport: par le libellé de la question, j'ai supposé que ce qu'il avait l'intention de faire correspondre la correspondance automatique ou «aléatoire» à mesure que vous l'appelez.


Mais une fois que vous avez commencé à attribuer des matchs en fonction du niveau de compétence, vous ne pouvez pas utiliser le% gagnant en tant que métrique utile. Gagner 50% des matchs contre un Pro n'est pas la même chose que gagner 50% des matchs contre un nouveaub.



8
votes

Après ma réponse précédente, j'ai réalisé que si vous vouliez vraiment vous gêner, vous pouvez utiliser une idée très simple mais puissante: les chaînes de Markov.

L'idée intuitive derrière l'utilisation d'une chaîne de Markov va quelque chose comme ceci:

  1. créer un graphique g = (v, e)
  2. Laissez chaque sommet dans V représenter une entité
  3. Laissez chaque bord dans E représenter une probabilité de transition entre les entités. Cela signifie que la somme des degrés de chaque sommet doit être de 1.
  4. au début (heure t = 0) Attribuez à chaque entité une valeur unitaire de 1
  5. à chaque étape de l'étape, entité de formulaire de transition I, J par la probabilité de transition définie dans 3.
  6. Soit T-> l'infini que la valeur de chaque entité à t = Infinity est l'équilibre (c'est-à-dire que la possibilité d'une transition dans une entité est identique à celle d'une transition d'une entité.)

    Cette idée a par exemple été utilisée avec succès pour implémenter l'algorithme de classement de la page de Google. Pour décrire comment vous pouvez l'utiliser, considérez ce qui suit:

    1. v = joueurs E = probabilité de transition du joueur au joueur basé sur des ratios de victoires / pertes relatives
    2. Chaque joueur est un sommet.
    3. Un bord du joueur A à B (B n'est pas égal à a) a une probabilité x / n où n est le nombre total de jeux joués par A et X est le total des jeux perdus à B. Ajoutez un bord de A à A avec probabilité m / n où m est le nombre total de jeux gagnés par un.
    4. Attribuez un niveau de compétence de 1 à chaque joueur au début.
    5. Utilisez le Méthode d'alimentation pour trouver le proprevecteur propre dominant de la matrice de liaison construite à partir des probabilités définies en 3.
    6. L'Eigenvecteur dominant est la quantité de compétences que chaque joueur a à t = infini, c'est-à-dire La quantité de compétence chaque joueur a une fois que la chaîne de Markov a atteint l'équilibre. C'est une mesure très robuste de chaque compétence des acteurs utilisant la topologie de l'espace de victoire / perte.

      Certaines mises en garde: il y a plusieurs problèmes lors de l'application directement, le plus gros problème sera une bande séparée (c'est-à-dire que votre chaîne de Markov ne sera pas irréductible et la méthode de puissance ne sera donc pas garantie de converger.) Lucky pour vous, Google a traité de tous ces problèmes et plus lors de la mise en œuvre de leur algorithme de classement de la page et de tout ce qui vous reste pour vous permettre de rechercher la manière dont ils contournent ces problèmes si vous êtes tellement enclin.


0 commentaires

0
votes

Match basé sur plusieurs attributs. J'ai mis en œuvre un Système de matchmaking simple en utilisant AWS CloudSearch (basé sur Apache Solr). Par exemple, la correspondance basée sur la combinaison des champs suivants est possible xxx pré>

Il est maintenant possible d'exécuter des requêtes de multiples champs tels que ceux suivants. P>

(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 commentaires