4 Gewinnt auf Seeeduino Xiao: Keine Chance gegen den Rechner?

Gast #6751887
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?
Gast #6751916
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 .... :-)
Beitrag #6751917 wurde von einem Moderator gelöscht.
Gast #6751924
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.
#6751933
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.
Gast #6751957
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.
#6751996
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
Gast #6752355
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.
Gast #6752874
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.
Gast #6753358
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.
Gast #6753477
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.
Gast #6753754
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.
Gast #6753864
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.
Persönliche Seite #6754038
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?
Gast #6754516
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 verlieren

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.

Die Instruktion:

A. S. schrieb:
> Regel A: Setze immer auf den Gegner.
> Regel B: sonst möglichst mittig.
Gast #6754560
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.
Beitrag #6754574 wurde von einem Moderator gelöscht.
Gast #6754582
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.
Gast #6754591
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.
Gast #6754619
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.
Gast #6754729
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.
Gast #6754747
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.