Salut tout le monde,
L'autre jour, mon fils m'a demandé de jouer à la version quadrillée de "Battleship". Chaque personne avait 5 "vaisseaux" de 5, 4, 3, 3 et 2 unités de longueur (et une unité de largeur). Les "vaisseaux" étaient placés sur une grille de 10 par 10 dans l'espace XY ; chaque "vaisseau" avait un ensemble unique de coordonnées (x,y). Par exemple, l'un des 3 "vaisseaux" unitaires pouvait avoir les coordonnées (3,4), (4,4) et (5,4). Pas plus d'un "vaisseau" ne peut occuper la même coordonnée (x,y). Les "vaisseaux" ne peuvent être disposés que verticalement ou horizontalement -- aucune disposition en diagonale n'est autorisée.
Nous avons ensuite appelé à tour de rôle des paires de coordonnées (x, y) pour voir qui avait touché directement le « navire » de quelqu'un d'autre. Chacun d'entre nous n'avait que 16 tours pour essayer de toucher (ou de couler) autant de « navires » de l'autre personne. Alors que nous faisions cela, je me suis dit qu'il devait y avoir une meilleure approche pour maximiser ses chances de toucher (et/ou de couler) le « navire » d'une autre personne que de simplement appeler des coordonnées au hasard. Bien sûr, vous n'appelleriez pas une coordonnée (x, y) que vous avez déjà utilisée car vous sauriez si vous avez touché un « navire » ou non.
Au début, je pensais que la plateforme Custom Design serait peut-être la bonne solution, mais si vous créez une conception où Y est « Hit » (0/1 pour non/oui) et X1 = x et X2 = y coordonnées (numériques discrètes à 10 niveaux), la plateforme générera une conception où elle n'utilisera que les niveaux haut et bas pour chaque X et Y. Au fait, les termes du modèle sont simplement x, y et le terme croisé x*y. Donc, malheureusement, la conception personnalisée ne fonctionne pas.
La plate-forme DOE factorielle complète ne fonctionnera pas car elle souhaite effectuer 100 exécutions (factorielle 10x10) et nous n'avons que 16 exécutions (essais) chacune.
La plate-forme RSM DOE ne fonctionne que sur les niveaux haut/bas, et en saisissant 1 et 10 pour les niveaux bas/haut. Les options de conception CCD ne remplissent pas vraiment l'espace de la grille 10 x 10 où les « navires » seraient placés – trop de passages centraux pour couvrir l'espace de la grille.
La seule autre plateforme qui pourrait s'appliquer à cela serait la conception de remplissage d'espace. En utilisant les mêmes paramètres bas/haut, 1/10 pour x et y et « Hit » comme réponse (ce serait binaire, 0/1 pour non/oui), je peux obtenir une table DOE avec des appariements (x, y) qui remplissent l'espace de la grille. Je ne suis pas sûr de savoir quel serait le meilleur choix pour les méthodes de conception de remplissage d'espace, FFF ou Uniform, ou Latin Hypercube, etc.
Je pense que le plus important est que le DOE est fixe, il n'est pas "adaptable" dans le sens où, en fonction du résultat du premier essai, comment le DOE serait-il ensuite modifié pour prendre en compte les informations connues. En utilisant les coordonnées du bateau à 3 unités ci-dessus, disons que mon premier essai consiste à appeler les coordonnées (3,4) et que j'obtiens un résultat. Sachant que la disposition des "navires" est horizontale ou verticale, mon prochain appel ne serait pas du tout de suivre le DOE, mais plutôt d'appeler (3,5), (3,3), (2,4) ou (4,4) -- j'augmenterais x ou y d'une unité et verrais quel est le résultat. Et ainsi de suite jusqu'à ce que le bateau soit coulé ou passe à la prochaine coordonnée de départ possible.
J'aimerais trouver une méthode plus scientifique pour générer un DOE adaptatif qui puisse optimiser les 16 exécutions pour générer des « hits ». Partir d'un DOE statique ne fera pas cela car après chaque exécution, une coordonnée est « utilisée » et j'apprends s'il s'agit d'un hit ou non. Chaque exécution informe l'exécution suivante n+1. Autant que je sache, il n'existe pas de DOE qui puisse gérer quelque chose comme ça, mais je ne suis pas non plus un expert dans ce domaine.
La sélection aléatoire d'un point de départ est-elle la meilleure méthode que l'on puisse utiliser dans "Battleship" ? Je ne pense pas, mais j'ai du mal à comprendre comment avoir un DOE adaptatif qui contient essentiellement des instructions "si/alors" de manière à optimiser l'utilisation de mes 16 essais tout en prenant en compte les informations de l'étape précédente. Il serait intéressant d'avoir un DOE "adaptable" qui optimiserait vos choix pour chaque exécution afin de maximiser vos chances de gagner en 16 essais.
Merci pour la discussion !,
DS
PS, en cherchant JMP et « Battleship », j'ai trouvé ce post de @Jordan_Hiller qui montre comment JMP peut être utilisé pour jouer à différents jeux, et @brady_brady a écrit du code JSL pour jouer à « Battleship ». Très cool ! Je vais bientôt télécharger ce JSL !
Salut @Jordan_Hiller ,
Merci pour le lien vers le blog, j'ai bien aimé l'article.
Je comprends généralement le concept derrière la façon dont ils ont calculé la probabilité qu'un navire se trouve dans un certain carré - ce serait différent pour chaque type de navire. Cependant, étant donné que l'état de probabilité du plateau changerait après chaque tour de jeu, le choix du prochain carré à tirer sur les changements, ce qui pour moi n'est rien de plus qu'une conception de remplissage d'espace ré-optimisée qui prend en compte les succès/échecs/ la taille du bateau/et le nombre de descentes restantes.
L'affiche du blog a pu générer un algorithme qui peut avec le jeu en 34 coups, soit exactement le double du nombre de cases occupées par les bateaux. Vraisemblablement, il serait possible de générer un chemin de décision optimal qui pourrait obtenir le nombre de coups requis pour gagner plus près de 17. Peut-être pas exactement 17 ans, mais très proche.
Certes, une approche ML/AI peut créer un algorithme pour gagner le jeu, mais je suis d'accord, c'est exagéré et ce n'est pas ce que je recherche vraiment. Je suis peut-être plus intéressé par un mélange de ce que le blogueur a fait et de l'utilisation d'un DOE. De toute évidence, la fonction de densité de probabilité pour le plateau de jeu est essentielle pour prendre des décisions. Mais pourrait-on modifier cela d'un calcul purement probabiliste à un calcul basé sur un remplissage d'espace optimisé - presque comme alimenter la fonction de probabilité du tableau comme une fonction de "pondération" pour le DOE de sorte que le DOE générerait les résultats les plus probables. Il me semble que générer d'abord le nombre de coups le plus élevé, puis se concentrer sur le naufrage conduirait à une victoire plus rapide par rapport à la façon dont le blogueur l'a fait, qui consistait à se concentrer d'abord sur le naufrage d'un navire avant de passer au mode chasse.
Quoi qu'il en soit, j'ai trouvé intéressant d'y réfléchir et d'y réfléchir, et apparemment d'autres l'ont fait aussi !
Merci!,
DS
Idée amusante, Diedrich!
Voici un ancien article de blog sur ce sujet, quelqu'un a compris comment calculer la probabilité qu'un navire se trouve sur chaque case de la grille pour un état de jeu donné. https://www.datagenetics.com/blog/december32011/ Après cela, vous n'avez même pas besoin d'un modèle, vous pouvez simplement choisir le carré le plus probable. Il existe également des projets d'apprentissage automatique, mais cela semble exagéré !
Jordan