Gestion de tournois multi-joueurs

Pouf, pouf.

Ça fait un moment que j'ai dans l'idée d'organiser des tournois multi-joueurs, éventuellement multi-jeux, un peu comme les EuropeMasters.

Pour me simplifier la vie, j'en profite pour réaliser un petit logiciel pour gérer tout ça automatiquement. La première version beta du projet vient d'être mise à disposition à l'adresse http://jswisstour.sourceforge.net/. Elle est disponible pour Windows et Linux 32 bits (je peux facilement sortir des versions MacOSX et 64 bits) et nécessite Java 6. Cette version propose une petite interface graphique et ne devrait pas être trop compliquée à utiliser, une fois qu'on a compris le principe de base :

Le grand cadre à gauche doit contenir les informations suivantes :
* Sur la première ligne, le nom des joueurs, séparés par une virgule
* Sur la seconde ligne, la liste des tables (le nombre de joueurs pour chaque table)
À partir de la troisième ligne, les résultats de chaque match, avec à chaque fois le nom du joueur suivi de son score, séparés par des espace.
On peut faire des commentaires en commençant une ligne par un point d'exclamation.
Par exemple, mon fichier final à la fin du dernier tournoi à Nantes :
xavier,davy,laura,ronan,jim,seb,michael,marc,julien,jeoffrey,jl
4,4,3
!Funkenschlag
michael 1610 marc 1604 laura 1513 ronan 1502 jim 1300
amelie 1633 xavier 1622 julien 1618 jeoffrey 1560 seb 1511
jl 1707 stephane 1687 alban 1664 nadia 1650 davy 0
!samurai
marc 4 michael 2 jl 1 amelie 0
jeoffrey 2 alban 1 julien 0
!rftg
xavier 3 laura 2 davy 1
ronan 2 seb 1 jim -1
!rftg
julien 45 alban 41 marc 33 jeoffrey 23 michael 20 jl -1 amelie -1
!samurai
davy 3 laura 2 jim 1
xavier 3 ronan 2 seb 1

On n'est pas obligé de faire apparaitre le nom de tous les joueurs à la première ligne, mais il n'y a qu'eux qui seront pris en compte (pratique en cas de désistements). Dans cet exemple, je génère deux tables de 4 et une table de 3.



L'objectif du logiciel est de gérer un tournoi sous la forme de « rondes suisses », comme aux échecs, mais avec des tables de plus de deux joueurs. Les rondes suisses ont plein d'avantages : tout le monde fait le même nombre de parties (pas d'élimination), on joue très vite contre des joueurs de son niveau. Par contre, il n'existait aucune solution pour gérer des tables de plus de deux joueurs. Mon logiciel y arrive en utilisant des algorithmes assez complexes, à la pointe de la recherche scientifique en informatique.


Je ne sais pas si d'autre TTciens pourraient être intéressés par un système de ce genre. Là où je bloque un peu, c'est pour déterminer un classement des joueurs après un certain nombre de parties. Je ne connais pas de manière satisfaisante pour y parvenir. Du coup, mon logiciel permet le développement de « plugins », de sorte que de nouveaux systèmes de classement puissent être proposés. Cette version beta du logiciel propose quatre solutions :
* Un score est attribué à chaque joueur en fonction de son classement, on fait le total à la fin, le plus élevé gagne. C'est le genre de classement utilisé en Formule 1, par exemple. Il a le mérite d'être assez simple.
* Score pondéré : proposé par Loic pour ses tournois à Rennes, comme au dessus mais le score est pondéré avec les points obtenus au jeu par rapport au premier de la partie. Le problème ici, c'est que ça ne peut vraiment marcher que si le vainqueur d'une partie est décidé aux points (il y en a quand même pas mal), et qu'il n'y a qu'un seul jeu au tournoi.
* Méthode Schulze (cf Wikipedia), qui gère très finement qui a battu qui à chaque ronde. Le problème, c'est qu'il est difficile de comprendre comment on arrive au résultat final (il faut faire confiance au programme !), et qu'il y a facilement des égalités si tout le monde est à peu près du même niveau.
* Méthode Alternative (cf Wikipedia), plus simple à comprendre, mais peu satisfaisante : perdre contre les derniers d'un tournoi peut rapporter des points…


Pour l'instant, je suis à la recherche d'une « bonne » méthode de classement, et éventuellement de personnes prêtes à essayer mon appli de manière à la rendre la plus adaptable possible !

D'ici la version finale, j'essaierai d'être capable de gérer un tournoi de type Europemaster, avec leurs règles. Ça suppose cependant de gérer un tournoi par équipes…

Et quand je pense que je me fais chier à organiser les pronos de foot...

Ca m'interesse bcp. Je télécharge et vois comment le mettre en oeuvre de part chez moi et je t'en fais un retour.

Je tiens à préciser que le calcul des tables peut être assez longs (les algorithmes utilisés sont exponentiels). Ça passe sans problème jusqu'à une vingtaine de joueurs, au delà il faut parfois interrompre l'algo avant la fin (bouton Stop). Normalement, ça devrait suffire à calculer des solutions approchées satisfaisantes, mais il faut quand même attendre un peu entre chaque clic sur « Stop ».

Pourquoi tu penses que ma méthode ne marche avec des jeux différents.
Elle est moins efficace, mais tant qu'il y un score, ça fonctionne.
Pour les rondes, j'ai quand même l'impression qu'à partir du moment où on donne comme contrainte le fait de rencontrer au moins une fois chaque adversaire, le coté "suisse" s'efface un peu tellement cette contrainte est "chiante" avec des tables de 4 (quand elles sont peu nombreuses).

loic dit:Pourquoi tu penses que ma méthode ne marche avec des jeux différents.
Elle est moins efficace, mais tant qu'il y un score, ça fonctionne.
Pour les rondes, j'ai quand même l'impression qu'à partir du moment où on donne comme contrainte le fait de rencontrer au moins une fois chaque adversaire, le coté "suisse" s'efface un peu tellement cette contrainte est "chiante" avec des tables de 4 (quand elles sont peu nombreuses).


Avec des jeux différents, on a le risque de se retrouver avec des systèmes de score très disparates, et certains jeux compteraient plus que d'autres sans raison… À Funkenschlag, finir avec trois villes de moins que le premier, c'est se prendre une tôle, alors dans un autre jeu ça sera une partie serrée… Enfin j'avoue que ça reste faisable.

Pour la deuxième remarque, le mot « contrainte » est bien choisi ;) À 5 tables de 4 par exemple, on peut déjà faire 5 rondes sans que jamais deux joueurs ne se rencontrent deux fois… À 6 tables de 4 on peut faire 7 rondes, mais c'est impossible à calculer à la main. Mais même au delà, on peut calculer des trucs intermédiaires pour répartir les « doublons » aux mieux (là, ça devient difficile à calculer même par ordinateur). C'est l'objectif de mon programme !

J'ai entendu parler du classement ELO, j'en ai compris les bases, mais pour expliquer...

En gros tout le monde commence avec 1000 points.

A la fin de chaque partie, on recalcule le score de chacun en fonction des écarts de classement.

Gagner contre un bon rapporte plus de points que gagne contre un mauvais.

Perdre contre un bon fait perdre moins de points que perdre contre un mauvais.

Triz dit:J'ai entendu parler du classement ELO, j'en ai compris les bases, mais pour expliquer...
En gros tout le monde commence avec 1000 points.
A la fin de chaque partie, on recalcule le score de chacun en fonction des écarts de classement.
Gagner contre un bon rapporte plus de points que gagne contre un mauvais.
Perdre contre un bon fait perdre moins de points que perdre contre un mauvais.


Oui oui je connais le principe, mais c'est plutôt utilisé pour obtenir un classement à « long terme » que pour un tournoi unique. De plus, le système n'est pas défini pour des matchs à plus de deux joueurs, même si on peut s'en sortir en comptant autant de « matchs » que de paires de joueurs dans une partie.

En solution Locale ... il y a aussi celui ci fait initialement pour Dungeon Twister ... mais utilisable pour les jeux de société ...

http://diabologeek.over-blog.net/article-17215738.html

Sinon les solutions internet sont plus basées sur les "lan gamers" de jeux video ...

Il y avait WebLeague .. en php mais plus basé sur une ligue permanente avec classement ELO ...

soft-bug dit:En solution Locale ... il y a aussi celui ci fait initialement pour Dungeon Twister ... mais utilisable pour les jeux de société ...
http://diabologeek.over-blog.net/article-17215738.html
Sinon les solutions internet sont plus basées sur les "lan gamers" de jeux video ...
Il y avait WebLeague .. en php mais plus basé sur une ligue permanente avec classement ELO ...


La véritable difficulté à laquelle je voudrais m'attaquer est la gestion de parties à plus de deux joueurs… Ça pose des problèmes à la fois pour générer un classement et pour générer les rondes… A priori, il n'y a pas de problème de ce genre pour Dungeon Twister.

Effectivement, il y a peut-être des gens qui ont réfléchi à ça dans le cadre des JV, mais il faut des jeux jouables en FFA…

Bonjour,

Merci ! En 2008 je m’étais arraché les cheveux pour planifier un tournoi à 4 d’un jeu unique en rondes… Et planté dans la planification des tables…

https://laurent36.typepad.com/blog/2008/09/tournoi-de-b%C3%AAte-hombr%C3%A9e-2008.html



Hello,

Si j’ai bien compris, tu listes 3 problèmes:
0) difficulté d’intégrer des contraintes type " tous rencontrent tous".
​​​​​​1) complexité algorithmique pour définir les tables, donc temps trop long.
2) difficulté de donner un classement satisfaisant.

D’abord, je te propose de donner des détails techniques plus précis, étant entendu que pour te répondre, il faut avoir des compétences en la matière et que donc on peut utiliser des termes techniques.

0) La ronde Suisse a pour objectif d’organiser un tournoi avec un grand nombre de participants, d’obtenir un classement satisfaisant (mais imparfait) sans faire rencontrer tous les participants.
Pour N participants, il faut log N tours.
Le classement obtenu est satisfaisant. Mais pas super précis. Sur 100 participants, le 40eme n’est pas forcément meilleur que le 50eme.

1) C’est une contrainte fondamentale, ajoutée au fait que les parties n’ont pas forcément les mêmes durées. Tout ça génère de l’attente, difficile dans un tournoi en temps réel.
Il y a des parades pour atténuer ce problème.
Comme  organiser initialement 2 parties. Les résultats des parties du tour N déterminent celles du tour N+2 (et non N+1). Le calcul se fait donc pendant le tour N+1 et disparaît donc du chemin critique.

2) La je ne comprends pas quel est ton problème.
Seul le classement dans la partie doit être pris en compte. Elo répond donc parfaitement.
Sauf si tu as des jeux par équipes, où là ça devient bien plus ardu.
Peux-tu donner des détails stp?
Et je répète, le classement ne sera pas parfait. Mais bon ce n’est pas l’objet d’une ronde Suisse. Si tu veux être plus précis, tu fais une finale entre les x premiers à l’issue de la ronde Suisse.




​​​​​​

Pour du tournoi entre potes >> https://challonge.com/fr

Du ELO entre potes ? >> http://www.challengeboards.net

Dicepool dit :Pour du tournoi entre potes >> https://challonge.com/fr

Du ELO entre potes ? >> http://www.challengeboards.net

Bonjour,

Moi je cherche qqc pour gérer des tournois avec des tables d'un nombre variable de joueurs (et plus de 2) et refaire des appareillements après chaque ronde. l'outil de scand1sk semble mieux correspondre à mes besoins.

 

Bonjour ! J’avoue que je suis super intéressé aussi par ça pour des tournois TFM  /Dune ou autre jeu à plusieurs… Je vois rien de très concluant pour l’instant, quelqu’un a t-il une application miracle ou un super calc ? :smiley: