Hallo zusammen,
Neulich wollte mein Sohn die karierte Version von „Schiffe versenken“ spielen. Jeder Spieler hatte 5 „Schiffe“, die 5, 4, 3, 3 und 2 Einheiten lang (und eine Einheit breit) waren. Die „Schiffe“ wurden auf einem 10 x 10 großen Raster im XY-Raum platziert; jedes „Schiff“ hatte einen einzigartigen Satz von (x,y)-Koordinaten. Beispielsweise könnte eines der 3 „Schiffe“ die Koordinaten (3,4), (4,4) und (5,4) haben. Nicht mehr als ein „Schiff“ kann dieselbe (x,y)-Koordinate einnehmen. „Schiffe“ können nur vertikal oder horizontal verlaufen – eine diagonale Anordnung ist nicht zulässig.
Dann riefen wir abwechselnd Koordinatenpaare (x,y) aus, um zu sehen, wer einen Volltreffer auf das „Schiff“ eines anderen landete. Jeder von uns hatte nur 16 Runden Zeit, um zu versuchen, so viele „Schiffe“ des anderen wie möglich zu treffen (oder zu versenken). Während wir das durchgingen, dachte ich mir, dass es einen besseren Ansatz geben muss, um die Chancen zu maximieren, das „Schiff“ einer anderen Person zu treffen (und/oder zu versenken), als einfach nur wahllos Koordinaten auszurufen. Natürlich würde man keine Koordinate (x,y) ausrufen, die man bereits verwendet hat, da man dann wüsste, ob man ein „Schiff“ getroffen hat oder nicht.
Zuerst dachte ich, dass die Custom Design-Plattform vielleicht der richtige Weg wäre, aber wenn Sie ein Design erstellen, bei dem Y „Treffer“ ist (0/1 für Nein/Ja) und X1 = x und X2 = y-Koordinaten (10-stufige diskrete numerische Werte), generiert die Plattform ein Design, bei dem sie nur die hohen und niedrigen Ebenen für jedes X und Y verwendet. Die Modellterme sind übrigens nur x, y und der Kreuzterm x*y. Das Custom Design funktioniert also leider nicht.
Die vollständig faktorielle DOE-Plattform funktioniert nicht, da sie 100 Durchläufe (10 x 10 faktoriell) durchführen möchte und wir jeweils nur 16 Durchläufe (Versuche) haben.
Die RSM DOE-Plattform funktioniert nur auf den hohen/niedrigen Ebenen und gibt 1 und 10 für die niedrigen/hohen Ebenen ein. Die CCD-Designoptionen füllen den Platz des 10 x 10-Rasters, in dem die „Schiffe“ platziert würden, nicht wirklich aus – zu viele Mittelläufe, um den Rasterraum abzudecken.
Die einzige andere Plattform, die hierfür in Frage käme, wäre das Space Filling Design. Mit denselben Einstellungen für niedrig/hoch, 1/10 für x und y und „Hit“ als Antwort (dies wäre binär, 0/1 für nein/ja) kann ich eine DOE-Tabelle mit (x,y)-Paarungen erhalten, die den Rasterraum ausfüllen. Ich bin mir nicht sicher, was die beste Wahl für die Space-Filling-Designmethoden wäre, FFF oder Uniform oder Latin Hypercube usw.
Ich denke, wichtiger ist, dass das DOE fest ist und nicht „anpassbar“ in dem Sinne, dass das DOE auf Grundlage des Ergebnisses des ersten Durchlaufs geändert werden könnte, um die bekannten Informationen zu berücksichtigen. Nehmen wir an, mein erster Durchlauf, bei dem ich die 3-Einheiten-Bootskoordinaten von oben verwende, besteht darin, die Koordinaten (3,4) aufzurufen und einen Treffer zu erzielen. Da ich weiß, dass die Anordnung der „Schiffe“ entweder horizontal oder vertikal ist, wäre mein nächster Aufruf nicht, dem DOE überhaupt zu folgen, sondern (3,5), (3,3), (2,4) oder (4,4) aufzurufen – ich würde entweder x oder y um eine Einheit erhöhen und sehen, was das Ergebnis ist. Und so weiter, bis das Boot gesunken ist oder zur nächsten möglichen Startkoordinate weiterfährt.
Ich würde gerne eine wissenschaftlichere Methode finden, um ein adaptives DOE zu generieren, das die 16 Durchläufe für die Generierung von „Treffern“ optimieren kann. Mit einem statischen DOE funktioniert das nicht, da nach jedem Durchlauf eine Koordinate „aufgebraucht“ ist und ich erfahre, ob es ein Treffer ist oder nicht. Jeder Durchlauf informiert den n+1 nachfolgenden Durchlauf. Soweit ich weiß, gibt es kein DOE, das so etwas handhaben kann, aber ich bin auch kein Experte auf diesem Gebiet.
Ist die zufällige Auswahl eines Startpunkts das Beste, was man bei „Battleship“ machen kann? Ich glaube nicht, aber ich habe Schwierigkeiten, herauszufinden, wie ich ein adaptives DOE erstellen kann, das im Wesentlichen „Wenn/Dann“-Anweisungen enthält, sodass es die Nutzung meiner 16 Versuche optimiert und gleichzeitig die Informationen aus dem vorherigen Schritt berücksichtigt. Es wäre cool, ein „anpassungsfähiges“ DOE zu haben, das Ihre Auswahl für jeden Durchlauf optimiert, um Ihre Gewinnchancen in 16 Versuchen zu maximieren.
Danke für das Gespräch!,
DS
PS: Bei meiner Suche nach JMP und „Battleship“ bin ich auf diesen Beitrag von @Jordan_Hiller gestoßen, der zeigt, wie man mit JMP verschiedene Spiele spielen kann, und @brady_brady hat JSL-Code geschrieben, um „Battleship“ tatsächlich spielen zu können. Sehr cool! Werde mir das JSL bald herunterladen!
Hallo @Jordan_Hiller ,
Vielen Dank für den Link zum Blog, der Artikel hat mir gefallen.
Ich verstehe im Allgemeinen das Konzept hinter der Berechnung der Wahrscheinlichkeit, dass sich ein Schiff in einem bestimmten Feld befindet – das wäre für jeden Schiffstyp unterschiedlich. Da sich jedoch der Wahrscheinlichkeitszustand für das Spielbrett nach jeder Spielrunde ändern würde, ändert sich auch die Auswahl des nächsten Feldes, auf das geschossen wird, was für mich nichts weiter ist als ein neu optimiertes raumfüllendes Design, das Treffer/Fehlschläge berücksichtigt. Bootsgröße/und Anzahl der verbleibenden Abfahrten.
Dem Blog-Poster gelang es, einen Algorithmus zu generieren, der das Spiel in 34 Zügen ausführen kann, was genau der doppelten Anzahl der von den Booten eingenommenen Felder entspricht. Vermutlich wäre es möglich, einen optimalen Entscheidungsweg zu generieren, der die erforderliche Anzahl an Gewinnzügen näher an 17 bringen könnte. Vielleicht nicht gerade 17, aber sehr nah dran.
Sicherlich kann ein ML/KI-Ansatz einen Algorithmus entwickeln, der das Spiel gewinnt, aber ich stimme zu, das ist übertrieben und nicht das, wonach ich wirklich suche. Ich interessiere mich eher für eine Mischung aus dem, was der Blog-Benutzer gemacht hat, und der Verwendung eines DOE. Offensichtlich ist die Wahrscheinlichkeitsdichtefunktion für das Spielbrett entscheidend für die Entscheidungsfindung. Aber könnte man das von einer reinen Wahrscheinlichkeitsberechnung zu einer ändern, die auf einer optimierten Raumfüllung basiert – fast so, als würde man die Wahrscheinlichkeitsfunktion des Boards als „Gewichtungsfunktion“ für das DOE einspeisen, sodass das DOE die wahrscheinlichsten Treffer generieren würde? Es scheint mir, dass es zu einem schnelleren Sieg führen würde, wenn man zuerst die höchste Trefferzahl generiert und sich dann auf das Versenken konzentriert, als es der Blogger gemacht hat, der sich zunächst darauf konzentrierte, ein Schiff zu versenken, bevor er in den Jagdmodus überging.
Wie auch immer, ich fand es interessant, darüber nachzudenken und darüber nachzudenken, und anscheinend haben es auch andere getan!
Danke!,
DS