Hallo,
inzwischen habe ich mit dem Seeeduino XIAO (Mini Arduino auf SAMD Basis,
48Mhz, 256kb Flash, 32 kb RAM) und einem Display mit Tastenbedienung das
Spielt 4 Gewinnt an nur 2 Abenden implementiert. Die Engine habe ich von
1998 aus dem Netz von einem Programmierer den den MinMax Algorithmus und
Alpha Beta Pruning umgesetzt hat und sie in die Arduino IDE eingepasst.
Grundsätzlich ist das ein binärer Baum, mit Vorausberechnung, 8
Rekursionsstufen sind möglich mit den 32kb des Xiao. 1 Zug dauert
zwischen 1s und 8s, je nach Komplexität.
Inzwischen haben etliche Personen versucht den XIAO zu schlagen, nicht
ein einziger hat jemals ein Spiel gewonnen.
Lässt man es gegen sich selbst spielen enden die meisten Spiele
unentschieden, weil das Board voll ist. Dauert aber, rund 2 Minuten pro
Spiel.
Ein Arbeitskollege fluchte nur als er den winzigen XIAO sah, dass dieses
Teilchen bei diesem Spiel immer besser war als er.
Hat man überhaupt eine Chance den zu schlagen?
Hallo Christian,
laut Wikipedia gewinnt der perfekte Spieler wenn er beginnt und mir dem
ersten Stein in der Mitte anfängt.
Ist wie beim Schach .... :-)
Schnedermann schrieb im Beitrag #6751917:
> Hallo Christian,>> laut Wikipedia gewinnt der perfekte Spieler wenn er beginnt und mit dem> ersten Stein in der Mitte anfängt.>> Ist wie beim Schach .... :-)
Beim Schach gewinnt man so aber nur wenn man gleich am Anfang eine 6
würfelt.
A. S. schrieb:> Wenn man anfängt, soll es eine einfach Möglichkeit geben, nicht zu> verlieren. Einfach im Sinne von jeder Dreijährige kann das nach kurzer> Instruktion.
Das kannste wohl getrost vergessen, da der Rechner nicht immer die
gleichen Züge spielt, sondern der Zufall (rand()) da mit im Spiel ist
und zu Beginn natürlich mit randomSeed aus einem AD Port eine Startzahl
erzeugt wird. Sonst würde ja jede Partie die er gegen sich selbst spielt
gleich ablaufen. Tun sie aber nicht.
Die Regeln um ein "perfekter Spieler" zu werden sind bei 4 Gewinnt
wesentlich einfacher als beim Schach:
https://www.wired.co.uk/article/maths-christmas-board-games-win
So how do you become a perfect player? Allis’ Connect Four-winning
computer program VICTOR holds the answer. VICTOR’s moves are dictated by
nine rules. One of the simpler ones, called ‘baseinverse’, says that you
can always block a four-in-a-row that needs two playable squares.
Another, called ‘vertical’, says you can always block a vertical
four-in-a-row by playing one of the two squares directly above. If you
want to be a Connect Four champion every time, you can find the other
more complicated and hard-to-master rules in Allis’ 91-page thesis.
Enjoy!
http://www.informatik.uni-trier.de/~fernau/DSL0607/Masterthesis-Viergewinnt.pdf
Christian J. schrieb:> Das kannste wohl getrost vergessen, da der Rechner nicht immer die> gleichen Züge spielt, sondern der Zufall (rand()) da mit im Spiel ist> und zu Beginn natürlich mit randomSeed aus einem AD Port eine Startzahl> erzeugt wird.
Wie kannst Du, ohne die Regeln zu kennen, wissen, dass sie nicht
funktioniert? Und wie kann die Zugfolge des Rechners eine Rolle spielen,
wenn ein Dreijähriger es spielen können soll?
Regel A: Setze immer auf den Gegner.
Regel B: sonst möglichst mittig.
Ich habe es nie ausprobiert, es scheint aber sehr plausibel:
Durch den "Versatz (B)" in der Mitte gibt es niemals eine Waagerechte
Straße.
Durch das "drüber (A)" gibt es niemals eine senkrechte Straße
Durch die "waagerechten Streifen (A)" gibt es niemals eine schräge
Straße.
Also wenn es einer schaft, meine Nichte zu schlagen, ... 1000€! Der
Jüngere fängt an.
Hi,
ich spiele ab und an For In A Line von A Design Studio auf dem Handy.
Wenn ich aufpassse und keine Fehler mache, Gewinne ich auf Stufe 10.
Bisher habe ich noch kein stärkes Spiel gefunden.
Gegen deine Nichte würde ich es mal versuchen.
A. S. schrieb:> Regel A: Setze immer auf den Gegner.> Regel B: sonst möglichst mittig.
So einfach ist das nicht. Es macht schon Sinn sich theoretisch mit dem
Spiel zu beschäftigen. Es gibt genug paper dazu - das kann jeder durch
selbst anschauen.
Ich habe in meiner Schulzeit auch Mal ein Engine für einen atmega8
geschrieben. Alpha-Beta, Suchtiefe 4. Das Ziel des Engines war es, die
Steine taktisch zu setzen. Das Engine hat auch die meisten Spiele
gewonnen - meist erst, wenn fast alle Felder belegt waren durch
Zugzwang.
avr schrieb:> So einfach ist das nicht.
Es geht darum, dass niemand gegen einen Dreijährigen gewinnen kann, wenn
er die beiden Regeln befolgt und anfängt.
Natürlich kann er mit der Regel auch selber nie gewinnen, zudem versagt
sie vollkommen (Matt in 4 Zügen) wenn der andere anfängt.
A. S. schrieb:> Es geht darum, dass niemand gegen einen Dreijährigen gewinnen kann, wenn> er die beiden Regeln befolgt und anfängt.
Das vielleicht. Aber mit Anzug unentschieden zu spielen ist eben für den
Nachziehenden ein gutes Ergebnis bei dem Spiel.
Ich habe jetzt Dutzende Spiele ohne Vorbildung über Strategien gemacht.
Und den Xioa auch stundenlang gegen sich selbst spielen lassen. Spielt
er gegen sich selbst baut er hauptsächlich Türme auf, die gefüllt werden
bis oben und gewinnt oder verliert meist wegen Zugzwang wenn das Brett
nahezu voll ist. Die Spiele sehen ziemlich langweilig aus.
Spiele ich sieht das alles etwas abwechslungsreicher aus, ich verliere
aber hauptsächlich deswegen weil ich kaum mehr als 2 Züge voraus denke
und stolpere dann meist in Fallen, also dass "er" nur einen Stein legen
muss, um dann zwei Möglichkeiten zu haben 4er fertig zu stellen.
Die AI verfügt natürlich über keine Strategien oder kann Fallen bauen.
Die geht nur stur nach Erfolgsaussichten in 2-3-4 Zügen einen Vierer
bauen zu können. Und da sie dabei alle meine möglichen Züge vorhersehen
kann ist sie im Vorteil.
Zumindest nicht verlieren geht über Blockade, aber auch das endet oft
damit dass gegen Ende doch verloren wird wegen Zugzwang.
Bei Schach früher habe ich nur gegen Menschen gespielt, weil die Fehler
machen können. Gegen einen Rechner, die es schon in den 80igern in guter
Spielstärke gab fand ich es stinklangweilig.
Genau, find ich auch.
Ohne jetzt groß recherchiert zu haben, denke ich es ist ein Spiel der
Klasse:
2 Personen Nullsummenspiel mit vollständiger Information
und daraus folgt, daß der der anfängt strategisch im Vorteil ist und
normalerweise gewinnt. Dessen Gegner kann bei eigener optimaler
Spielweise im allgemeinen nur maximal ein Unentschieden
herauswirtschaften.
Das gilt im Prinzip auch für Schach.
Das aber eine Dreijährige schon so weit die Sache durchschaut, finde ich
außergewöhnlich. Oder hat Papa es zu genau erklärt?
Abdul K. schrieb:> Das aber eine Dreijährige schon so weit die Sache durchschaut, finde ich> außergewöhnlich. Oder hat Papa es zu genau erklärt?anfängt und nicht verlierenA. S. schrieb:> Wenn man anfängt, soll es eine einfach Möglichkeit geben, nicht zu> verlieren. Einfach im Sinne von jeder Dreijährige kann das nach kurzer> Instruktion.
Die Instruktion:
A. S. schrieb:> Regel A: Setze immer auf den Gegner.> Regel B: sonst möglichst mittig.
A. S. schrieb:> A. S. schrieb:>> Regel A: Setze immer auf den Gegner.>> Regel B: sonst möglichst mittig.
Ja, funktioniert aber nicht. Bei den Instruktionen gewinne man immer,
indem man eine 3er Reihe baut, die in einer geraden Zeile den vierten
Stein benötigt.
1
.......
2
.......
3
.~o....
4
..xo...
5
..oxo..
6
..xox..
Das ist der Startaufbau. Das mit ~ markierte Feld wird am Ende der 4.
Stein sein, den der Gegner durch Zugzwang erlauben muss. Nachdem man
diesen Aufbau erzeugt hat (und verhindert hat, dass er trivial gewinnt),
bringt man den Gegner durch füllen der mittleren Reihe in Zugzwang und
gewinnt letztendlich.
avr schrieb:> bringt man den Gegner durch füllen der mittleren Reihe in Zugzwang und> gewinnt letztendlich.
Spiel das Mal durch. Das wird nicht passieren. Es ist zwar möglich, dass
man die Regel A (möglichst Mittig) noch erweitern muss. Glaube ich aber
nicht.
A. S. schrieb:> Das wird nicht passieren.
? Ich muss doch nur zwei Mal in die Mitte werfen und ab dann kann ich
immer auf den Gegner setzen. Da hilft auch keine Erweiterung der Regel A
nicht. Immer drauf setzen erlaubt es, einen gewinnenden Dreier zu
erzeugen.
avr schrieb:> Ich muss doch nur zwei Mal in die Mitte werfen und ab dann kann ich> immer auf den Gegner setzen.
Aber dann verlierst Du doch. Nicht verlieren heißt: Der Dreijährige
spielt unentschieden oder gewinnt.
Was verstehst du nicht an nicht trivial gewinnen lassen? Ich hab dir den
Startaufbau gezeigt. Ab da verhinderst du, dass er gewinnt und
irgendwann muss er in die 2. Spalte setzen und du gewinnst. Spiel es
durch, du gewinnst jedes Mal.
avr schrieb:> Spiel es durch, du gewinnst jedes Mal.
Es gibt nur 42 Steine.
Zeig doch Mal eine echte Möglichkeit. Dein Vorschlag funktioniert nicht.
Entweder ist mittig noch was frei oder Du verlierst vorher. Es mag
Strategien geben, aber ich sehe keine.