Forum: Mikrocontroller und Digitale Elektronik 4 Gewinnt auf Seeeduino Xiao: Keine Chance gegen den Rechner?


von Christian J. (Gast)


Lesenswert?

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?

von Schnedermann (Gast)


Lesenswert?

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.
von A. S. (Gast)


Lesenswert?

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.

von Cyblord -. (cyblord)


Lesenswert?

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.

von Christian J. (Gast)


Lesenswert?

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.

von Johannes S. (Gast)


Lesenswert?

Jedes Mädel in Taiwans Bars hat dich schon vor 20 Jahren bei dem Spiel 
abgezogen...

von Markus (Gast)


Lesenswert?

Frag doch die Teilnehmer deines kleinen Feldversuchs, ob sie wie der 
XIAO 8 Rekursionsstufen im Kopf berechnet haben...

von Georg S. (randy)


Lesenswert?

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

von A. S. (Gast)


Lesenswert?

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.

von SoDa (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

SoDa schrieb:
> Gewinne ich auf Stufe 10

Aber nur, wenn Du anfängst, oder?

von SoDa (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

nö, egal wer anfängt.

von SoDa (Gast)



Lesenswert?

Falsches Bildformat.

von avr (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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.

von avr (Gast)


Lesenswert?

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.

von Christian J. (Gast)


Lesenswert?

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.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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?

von Jochen (Gast)


Lesenswert?

Abdul K. schrieb:

Kurz und gut: Wer anfängt und optimal spielt, gewinnt immer.

von A. S. (Gast)


Lesenswert?

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.

von avr (Gast)


Lesenswert?

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.
von A. S. (Gast)


Lesenswert?

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.

von avr (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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.

von avr (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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.

von avr (Gast)


Angehängte Dateien:

Lesenswert?

Ist das echt so schwer nachzuvollziehen?

von A. S. (Gast)


Lesenswert?

avr schrieb:
> Ist das echt so schwer nachzuvollziehen?

Ja. Ich sehe. Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.