Bataille navale!
En 2003 (quand j'avais 17 ans), j'ai participé à un concours de codage IA de Bataille navale. Même si j'ai perdu ce tournoi, j'ai beaucoup apprécié et beaucoup appris.
Maintenant, j'aimerais faire renaître cette compétition, à la recherche de la meilleure IA de bataille navale.
Voici le cadre, maintenant hébergé sur Bitbucket.
Le vainqueur recevra +450 de réputation! La compétition débutera le 17 novembre 2009. Aucune entrée ou modification postérieure à zéro heure le 17 ne sera acceptée. (Heure normale du centre) Soumettez vos participations tôt, pour ne pas manquer votre opportunité!
Pour rester OBJECTIF, veuillez suivre l'esprit de la compétition.
Règles du jeu:
- Le jeu se déroule sur une grille de 10x10.
- Chaque concurrent placera chacun des 5 navires (de longueurs 2, 3, 3, 4, 5) sur leur grille.
- Aucun navire ne peut se chevaucher, mais ils peuvent être adjacents.
- Les concurrents se relaient ensuite pour tirer des coups simples sur leur adversaire.
- Une variation du jeu permet de tirer plusieurs coups par salve, un pour chaque navire survivant.
- L'adversaire informera le concurrent si le tir coule, touche ou rate.
- Le jeu se termine lorsque tous les navires d'un joueur sont coulés.
Règles de la compétition:
- L'esprit de la compétition est de trouver le meilleur algorithme de Bataille navale.
- Tout ce qui est jugé contraire à l'esprit de la compétition pourra entraîner une disqualification.
- Interférer avec un adversaire est contraire à l'esprit de la compétition.
- Le multithreading peut être utilisé sous les restrictions suivantes:
- Pas plus d'un thread ne peut s'exécuter lorsque ce n'est pas votre tour. (Cependant, plusieurs threads peuvent être dans un état "Suspendu").
- Aucun thread ne doit s'exécuter à une priorité autre que "Normale".
- Étant donné les deux restrictions ci-dessus, vous aurez la garantie d'au moins 3 cœurs de CPU dédiés pendant votre tour.
- Une limite de 1 seconde de temps CPU par jeu est allouée à chaque concurrent sur le thread principal.
- Le fait de manquer de temps entraîne la perte du jeu en cours.
- Toute exception non gérée entraînera la perte du jeu en cours.
- L'accès au réseau et au disque est autorisé, mais vous pourriez trouver les restrictions de temps assez contraignantes. Cependant, quelques méthodes de mise en place et de disparition ont été ajoutées pour soulager la contrainte de temps.
- Le code doit être posté sur stack overflow en tant que réponse, ou, s'il est trop volumineux, lié.
- La taille totale maximale (non compressée) d'une entrée est de 1 Mo.
- Officiellement, .Net 2.0 / 3.5 est la seule exigence de cadre.
- Votre entrée doit implémenter l'interface IBattleshipOpponent.
Score:
- Les meilleurs 51 jeux sur 101 jeux remportent une partie.
- Tous les concurrents joueront des matchs les uns contre les autres, de style round-robin.
- La meilleure moitié des concurrents joueront ensuite un tournoi à double élimination pour déterminer le vainqueur. (La plus petite puissance de deux qui est supérieure ou égale à la moitié, en fait.)
- J'utiliserai le cadre TournamentApi pour le tournoi.
- Les résultats seront publiés ici.
- Si vous soumettez plus d'une entrée, seule votre meilleure entrée en termes de score est éligible pour la double élimination.
Bonne chance! Amusez-vous!
EDIT 1:
Merci à Freed, qui a trouvé une erreur dans la fonction Ship.IsValid
. Elle a été corrigée. Veuillez télécharger la version mise à jour du cadre.
EDIT 2:
Comme il y a eu un intérêt important pour la sauvegarde des statistiques sur disque, j'ai ajouté quelques événements de mise en place et de disparition non chronométrés qui devraient fournir la fonctionnalité requise. Il s'agit d'un changement partiellement dérangeant. C'est-à-dire que l'interface a été modifiée pour ajouter des fonctions, mais aucun code n'est requis pour elles. Veuillez télécharger la version mise à jour du cadre.
EDIT 3:
Correction de bug 1: GameWon
et GameLost
n'étaient appelés que en cas de dépassement de délai.
Correction de bug 2: Si un moteur dépassait le temps à chaque jeu, la compétition ne se terminerait jamais.
Veuillez télécharger la version mise à jour du cadre.
EDIT 4:
Résultats du tournoi: