REMARQUE: ce défi est actuellement mort, car je ne peux pas installer les langues nécessaires pour exécuter une correspondance. Si quelqu'un d'autre a le temps et l'intérêt de le faire, je ne m'y oppose pas.
Voir le bas du message pour un classement.
Il s'agit d'un défi semi-coopératif du roi de la colline, où les bots construisent des chemins à travers un graphique en grille à deux dimensions. Le bot qui contrôle les nœuds avec le plus de trafic est le gagnant. Cependant, il faut plus de ressources d'un bot pour réellement construire un chemin de connexion, donc les bots devront travailler ensemble - dans une certaine mesure.
Gameplay
Dans ce qui suit, N > 0
soit le nombre de bots en jeu.
La grille
Le jeu se joue sur une grille entière bidimensionnelle de taille , dont la coordonnée en bas à gauche est à . Chaque coordonnée avec comporte des bords sortants vers les trois coordonnées , et au- dessus, où les -coordinates sont prises modulo . Cela signifie que la grille s'enroule sur les bords est et ouest. Chaque coordonnée inférieure est une source et chaque coordonnée supérieure est un puits .⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
L'image suivante montre une 8 × 8
grille.
Chaque sommet du graphique est inactif , actif ou cassé . Tous les sommets commencent inactifs et peuvent être activés par des bots, qui seront alors leurs propriétaires. De plus, les bots peuvent casser des sommets et ne peuvent pas être réparés.
Tournez l'ordre
Un tour consiste en une phase de destruction et une phase d'activation . Dans la phase de destruction, chaque bot peut casser un sommet inactif. Ce sommet est brisé à partir de ce moment et ne peut être activé par personne. Dans la phase d'activation, chaque bot peut activer un sommet inactif. À partir de ce moment, ils possèdent ce sommet, et il ne peut être réactivé par personne d'autre. Plusieurs robots peuvent posséder un seul sommet, s'ils l'activent tous au même tour. Dans chaque phase, les sélections de sommets sont effectuées simultanément.
Notation
Un tour dure exactement les tours. Après cela, le tour est marqué comme suit. À partir de chaque sommet source actif, nous effectuons fois une recherche aléatoire en profondeur d'abord le long des sommets actifs (ce qui signifie que les enfants de chaque sommet sont visités dans un ordre aléatoire). Si un chemin est trouvé de la source vers un puits, alors pour tous les sommets le long de ce chemin, chaque propriétaire du sommet obtient un point.N2
N
Le jeu entier dure 100 tours, et le bot avec le plus de points au total est le gagnant. Je peux augmenter ce nombre, si la variance des scores est trop élevée.
Règles supplémentaires
- Pas de problème avec le contrôleur ou d'autres soumissions.
- Au plus une soumission par candidat.
- Aucune ressource externe, à l'exception d'un fichier texte privé, nettoyé au début du jeu.
- Ne concevez pas votre bot pour battre ou soutenir des adversaires spécifiques.
- Fournissez des commandes pour compiler et exécuter votre bot. Tout compilateur / interprète librement disponible pour Debian Linux est acceptable.
Le controlle
Le contrôleur est écrit en Python 3 et se trouve dans GitHub . Voir le fichier README pour des instructions détaillées. Voici une API pour vous aider à démarrer:
- Les bots commencent au début de chaque manche et persistent jusqu'à la fin de la manche. La communication avec le contrôleur via STDIN et STDOUT, à l'aide de messages terminés par une nouvelle ligne.
BEGIN [num-of-bots] [num-of-turns] [side-length]
est entrée au début.DESTROY [turn]
est entré au début de chaque phase de destruction. Votre bot doit répondre soitVERTEX x,y
pour choisir un sommet, soitNONE
.BROKEN [turn] [your-choice] [other-choices]
est entré à la fin de chaque phase de destruction. L'ordre des autres bots est aléatoire au début de chaque partie, mais reste fixe pendant celui-ci. Les choix sont présentés commex,y
ouN
.ACTIVATE [turn]
etOWNED [turn] [your-choice] [other-choices]
sont les équivalents de ce qui précède pour la phase d'activation, et ont la même sémantique.SCORE [your-score] [other-scores]
est entré à la fin de la partie.- Votre bot a 1 seconde pour analyser les résultats d'une phase et choisir le sommet suivant, et 1 seconde pour quitter après avoir obtenu le score. Je vais tester les soumissions sur mon ordinateur portable relativement vieux, il est donc préférable de laisser une marge ici.
N'oubliez pas de vider votre tampon de sortie. Ne pas le faire peut bloquer le contrôleur dans certains environnements.
Classement
Mise à jour 13/03/2015
Peacemaker est opérationnel et Funnelweb a également reçu une mise à jour. Les scores ont bondi d'un ordre de grandeur. Le connecteur a dépassé la limite de temps dans deux jeux.
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
Le journal complet avec les graphiques artistiques ASCII se trouve dans le référentiel du contrôleur, dans graphical_log.txt
.
Quelques observations:
- Le connecteur peut très facilement être arrêté en cassant un seul sommet devant lui. Je soupçonne que l'agacement fait souvent cela. Cependant, cela n'a actuellement guère de sens car seul le connecteur peut concevoir un chemin.
- La pastèque peut obtenir un score décent en se trouvant simplement sur un chemin de connexion (car le DFS est très susceptible d'utiliser ses sommets).
- Explorer aime cultiver des vignes à partir des pastèques.
- Le Funnelweb mis à jour obtient de très bons scores, car Connector se verrouille généralement dessus dans la moitié inférieure de la grille.
- Les jeux deviennent assez longs, la manche moyenne prenant environ 25 secondes sur ma machine.
4/3*N^2
, et même là, les bots ont eu des problèmes pour former des chemins valides. Cependant, Connector a été temporairement disqualifié en raison d'une erreur, et maintenant qu'il a été corrigé, je m'attends à ce que les jeux soient plus intéressants. Je vais exécuter un autre lot ce soir.