Salut tout le monde,
L'autre jour, mon fils a demandé à jouer la version papier quadrillé de "Battleship". Chaque personne avait 5 "vaisseaux" qui mesuraient 5, 4, 3, 3 et 2 unités de longueur (et une unité de largeur). Les "vaisseaux" ont été placés sur une grille de 10 par 10 dans l'espace XY ; chaque "navire" avait un ensemble unique de coordonnées (x,y). Par exemple, l'un des 3 "navires" unitaires pourrait avoir les coordonnées (3,4), (4,4) et (5,4). Pas plus d'un "navire" ne peut occuper la même coordonnée (x,y). Les "navires" ne peuvent fonctionner 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 de nous n'avait que 16 tours pour essayer de toucher (ou de couler) autant de "vaisseaux" de l'autre personne. Pendant que nous traversions cela, je me suis dit qu'il devait y avoir une meilleure approche pour maximiser les chances de toucher (et / ou couler) le "navire" d'une autre personne que de simplement appeler au hasard des coordonnées. 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 plate-forme Custom Design serait peut-être la bonne solution, mais si vous créez un design où Y est "Hit" (0/1 pour non/oui), et X1 = x et X2 = coordonnées y (numérique discret à 10 niveaux), la plate-forme générera une conception où elle n'utilise que les niveaux haut et bas pour chaque X et Y. Soit dit en passant, 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 Full Factorial DOE ne fonctionnera pas car elle veut faire 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 entre 1 et 10 pour les niveaux bas/haut. Les options de conception CCD ne remplissent pas vraiment l'espace de la grille 10 par 10 où les "navires" seraient placés - trop de courses centrales pour couvrir l'espace de la grille.
La seule autre plate-forme qui serait applicable pour cela serait la conception de remplissage d'espace. En utilisant les mêmes paramètres bas/élevé, 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 sais pas 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, c'est que le DOE est fixe, il n'est pas "adaptable" dans le sens où en fonction du résultat de la première exécution, 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 ma première course consiste à appeler les coordonnées (3,4) et j'obtiens un coup. Connaissant la disposition des "navires" comme étant 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 je verrais quel est le résultat. Et ainsi de suite jusqu'à ce que le bateau coule 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". Sortir d'un DOE statique ne le fera pas car après chaque exécution, une coordonnée est "utilisée", et j'apprends si c'est un succès ou non. Chaque run informe le n+1 run suivant. 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 chose que l'on puisse faire à "Battleship" ? Je ne pense pas, mais j'ai du mal à comprendre comment avoir un DOE adaptatif qui contient essentiellement des instructions "si/alors" afin qu'il optimise l'utilisation de mes 16 essais tout en tenant compte des informations de l'étape précédente. Ce serait cool d'avoir un DOE "adaptable" qui optimiserait vos choix à chaque run afin de maximiser vos chances de gagner en 16 essais.
Merci pour la discussion!,
DS
PS, en cherchant JMP et "Battleship", j'ai trouvé ceci Publier par @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 téléchargerai bientôt 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/ taille du bateau/et 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