Forum: Mikrocontroller und Digitale Elektronik Schachcomputer mit Atmel AVR


von thom (Gast)


Lesenswert?

Hallo,

gibt es eigentlich von der Spielstärke her ernstzunehmende 
Selbstbau-Schachcomputer-Projekte mit AVR-Controllern?

Viele Grüße

von Cyblord -. (cyblord)


Lesenswert?

Die Frage wird sein wieviel Halbzüge mit dem vorhandenem Ram berechnet 
werden können bzw. im Speicher gehalten werden können. Ein guter 
Schachcomputer sollte zusätzlich noch über eine große Eröffnungs- und 
Schlussbibliothek verfügen und wirklich gut spielen zu können.

An sich ist das Prinzip simpel: Es wird ausgehend von der aktuellen 
Stellung jeder mögliche Zug "simuliert" und die daraus resultierende 
Stellung mit einem Score bewertet. Der Zug der am Ende die Stellung mit 
dem höchsten Score nach sich zieht wird dann getätigt. Der 
Speicherbedarf für den Baum wächst eben mit jeder Ebene exponentiell.
Aber es gibt schon so lange Schachcomputer die wohl auch mit eher 
mageren Controllern bestückt waren und trotzdem sehr gut spielen. Es 
sollte also möglich sein.

gruß cyblord

von db8fs (Gast)


Lesenswert?

Hi,

wäre das nicht besser über 'nen Raspberry oder ein kleines ARM-Board mit 
Linux zu lösen? Ich meine: gut, die Herausforderung wär's wert auf AVR- 
cyblord hat ja schon grob geschrieben, wie's gehen könnte. Aber für 
richtig Spielstärke hat GNUChess sicher mehr zu bieten als eine 
selbstgeproggte Lösung.

von Fallobst (Gast)


Lesenswert?

db8fs schrieb:
> selbstgeproggte Lösung

Es gibt doch schon geniale Schachprogramme für Avrs. Bsp.:
http://www.andreadrian.de/schach/#Selbstbau_Schachcomputer_SHAH
(8 Halbzüge @Atmega8; 36 Halbzüge @Atmega644; 0,3s für den ersten Zug 
bei 16Mhz).

von L. Achnit (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Schreib erst mal ein Schachprogramm. Das ist einfacher

Das war der ultimative Aufruf für diesen Unsinn.

von thom (Gast)


Lesenswert?

cyblord ---- schrieb:
> Der Zug der am Ende die Stellung mit
> dem höchsten Score nach sich zieht wird dann getätigt.

ok, danke. Dachte schon es wäre komplizierter.

von Guido C. (guidoanalog)


Lesenswert?

Hallo,

Schach lief doch schon auf dem TI-59 
(http://de.wikipedia.org/wiki/TI-59).

Quelle: http://www.ti59.com/accom.htm
Zitat: "The program 'Schach 2.1' was written by Michael Sperber and 
published in TI PPC Notes v7n7/8p20-22. It followed all the rules of 
chess and could even defeat an inexperienced chess player... if he lives 
long enough to see all the moves (it usually took 3-6 hours per move)."

Mit freundlichen Grüßen
Guido

von Guido C. (guidoanalog)


Lesenswert?

Hallo,

thom schrieb:
> ok, danke. Dachte schon es wäre komplizierter.

cyblord ---- schrieb:
> An sich ist das Prinzip simpel: Es wird ausgehend von der aktuellen
> Stellung jeder mögliche Zug "simuliert" und die daraus resultierende
> Stellung mit einem Score bewertet.

Wobei letzteres nicht ganz einfach ist.

Mit freundlichen Grüßen
Guido

von thom (Gast)


Lesenswert?

Danke für die Antworten!

Das hier sieht doch schon mal ganz gut aus:

Fallobst schrieb:
> http://www.andreadrian.de/schach/#Selbstbau_Schach...

Fallobst schrieb:
> Es gibt doch schon geniale Schachprogramme für Avrs. Bsp.:
> http://www.andreadrian.de/schach/#Selbstbau_Schach...
> (8 Halbzüge @Atmega8; 36 Halbzüge @Atmega644; 0,3s für den ersten Zug
> bei 16Mhz).

Für M1284 gibt es noch nichts?

von thom (Gast)


Lesenswert?

thom schrieb:
> Für M1284 gibt es noch nichts?

Dort könnte man ja eventuell eine kleine Eröffnungs-Bibo im ProgMem 
unterbringen...

von Cyblord -. (cyblord)


Lesenswert?

Guido C. schrieb:
> Hallo,
>
> thom schrieb:
>> ok, danke. Dachte schon es wäre komplizierter.
>
> cyblord ---- schrieb:
>> An sich ist das Prinzip simpel: Es wird ausgehend von der aktuellen
>> Stellung jeder mögliche Zug "simuliert" und die daraus resultierende
>> Stellung mit einem Score bewertet.
>
> Wobei letzteres nicht ganz einfach ist.

Völlig richtig. Das Prinzip ist simpel aber der Teufel steckt im Detail. 
An und für sich ist die Programmierung eines relativ guten 
Schachprogramms schon anspruchsvoll.

gruß cyblord

von Viktor N. (Gast)


Lesenswert?

Eigentlich genuegt ja eine einzige Eroeffnung. Denn jeder der damit 
gespielt hat, denkt : sehr interessant das mal gesehen zu haben - und 
das war's dann.

von Padre (Gast)


Lesenswert?

cyblord ---- schrieb:
> Das Prinzip ist simpel aber der Teufel steckt im Detail.

Aso. Gut zu wissen, wo er ist. Ein gutes Gebet hilft sicher.

von c-hater (Gast)


Lesenswert?

thom schrieb:

> Für M1284 gibt es noch nichts?

Wenn das Programm halbwegs ordentlich geschrieben ist, sollte es 
genügen, es einfach für den 1284 neu zu übersetzen. Vermutlich würde 
sich der gegenüber dem 644 vierfache RAM sehr positiv auswirken, das 
müßte theoretisch die mögliche Zugtiefe um zwei Züge erhöhen.

Was allerdings höchstwahrscheinlich nicht automatisch durch 
Neuübersetzung passieren wird, ist die Nutzung des verdoppelten Flashs 
für eine vergrößerte Eröffnungsbibliothek. Dafür dürfte Handarbeit 
angesagt sein.

von Michael (Gast)


Lesenswert?

Ein simples Schachprogramm war noch nie eine herausragende Leistung. Die 
wahre Leistung bei Schachprogrammen (die nicht rein defensiv agieren 
oder sich auf einen Speicher mit hunderttausenden von Schachpartien 
zugreifen können) ist die Strategie. Und die ist definitiv der 
Knackpunkt an der Sache. Die Funktion strategy_inti(); und 
strategy_do(); muss erst noch erfunden werden. Es gibt ein paar 
Möglichkeiten: Bei jedem Zug voller Random oder bei jedem Zug mit einem 
Scoring oder Vorraussimulieren einiger potenzieller Züge und dann darauf 
hoffen, dass der menschliche Gegner Fehler macht. Nächste Möglichkeit 
Zurückgreifen auf bekannte Schachspiele (dafür gibt es Datenbanken) und 
mittels scoring und matching versuchen auf solche Spiele hinzuarbeiten 
und sie dann abzuarbeiten.

von thom (Gast)


Lesenswert?

Michael schrieb:
> Bei jedem Zug voller Random oder bei jedem Zug mit einem
> Scoring oder Vorraussimulieren einiger potenzieller Züge und dann darauf
> hoffen, dass der menschliche Gegner Fehler macht.

Ok, das geht dann auch mit einem Attiny13.

von Herr M. (herrmueller)


Lesenswert?

Für den Siclair ZX81 gab es mal ein Schachprogramm < 1kB.
http://en.wikipedia.org/wiki/1K_ZX_Chess

von Mybugger (Gast)


Lesenswert?


von Cyblord -. (cyblord)


Lesenswert?

Michael schrieb:
> Ein simples Schachprogramm war noch nie eine herausragende Leistung. Die
> wahre Leistung bei Schachprogrammen (die nicht rein defensiv agieren
> oder sich auf einen Speicher mit hunderttausenden von Schachpartien
> zugreifen können) ist die Strategie. Und die ist definitiv der
> Knackpunkt an der Sache. Die Funktion strategy_inti(); und
> strategy_do(); muss erst noch erfunden werden. Es gibt ein paar
> Möglichkeiten: Bei jedem Zug voller Random oder bei jedem Zug mit einem
> Scoring oder Vorraussimulieren einiger potenzieller Züge und dann darauf
> hoffen, dass der menschliche Gegner Fehler macht. Nächste Möglichkeit
> Zurückgreifen auf bekannte Schachspiele (dafür gibt es Datenbanken) und
> mittels scoring und matching versuchen auf solche Spiele hinzuarbeiten
> und sie dann abzuarbeiten.

Anscheinend reicht das aber. Seit vielen Jahren hat kein menschlicher 
Spieler mehr gegen einen professionellen Schachcomputer unter 
Wettbewerbsbedingungen gewonnen. Und das wird wohl auch nicht mehr 
passieren. Wozu also eine bessere Strategie? Beim Schach reicht 
Rechenleistung und Speicher aus um beliebig gut zu spielen. Wenn du 
Strategie willst, dann schau dir "Go" an. Dort haben Computer echte 
Probleme und verlieren regelmäßig schon gegen fortgeschrittene Spieler.

gruß cyblord

von Salewski, Stefan (Gast)


Lesenswert?

cyblord ---- schrieb:
> n sich ist das Prinzip simpel: Es wird ausgehend von der aktuellen
> Stellung jeder mögliche Zug "simuliert" und

Statt zu labern wäre das Stichwort "Alpha–beta pruning" gewesen.

http://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning

Das ist entscheidend für die Spielstärke -- mir war das damals leider 
nicht selbst eingefallen. Aber heute ist all das ja nur noch einen 
Mausklick entfernt.

von Osterhasi (Gast)


Lesenswert?

Wozu Spielstärke?
Der Mensch braucht auch mal Erfolgserlebnisse.
Gegen einen AVR wird sicherlich kein Schachweltmeister spielen wollen.
Also einen Backtracking-Algorithmus mit "einfacher" Zugbewertung. Dann 
noch ein paar halbwegs intelligente Eröffnungszüge und fertig.
Das Teil wird auch so schon besser sein, als die Vielzahl der Spieler.

von gerri (Gast)


Lesenswert?

cyblord ---- schrieb:
> Wenn du
> Strategie willst, dann schau dir "Go" an.

http://de.wikipedia.org/wiki/Go_%28Spiel%29

Meiner Meinung nach das ultimative Brettspiel, super-simple Regeln und 
hochkomplexe Spielsituationen.

von Karl H. (kbuchegg)


Lesenswert?

Osterhasi schrieb:
> Wozu Spielstärke?
> Der Mensch braucht auch mal Erfolgserlebnisse.
> Gegen einen AVR wird sicherlich kein Schachweltmeister spielen wollen.
> Also einen Backtracking-Algorithmus mit "einfacher" Zugbewertung. Dann
> noch ein paar halbwegs intelligente Eröffnungszüge und fertig.
> Das Teil wird auch so schon besser sein, als die Vielzahl der Spieler.

Ich hab vor Jahrzehnten mal das Sargon II auf einem Z80 zum laufen 
gebracht. Der Code war für mich damals eine Lehrstunde zum Thema 
Datenstrukturen, rekursive Algorithmen und wie man das alles in 
Assembler managed. Ganz interessant und clever gelöst waren die Teile 
'Darstellung des Feldes' bzw. 'Generierung aller in einer Stellung 
möglichen Züge'.
Meine Schach-Spielstärke war damals eher mies und ist seitdem nicht 
besser geworden :-) Ich hab Sargon nie geschlagen. Aber allgemein war 
die Auffassung unter den Leuten denen ich das Pgm gegeben habe, dass es 
eher schwach spielte.

von Marwin (Gast)


Lesenswert?

Wow, genau eine passende Antwort bisher und viel sinnfreie Angeberei...

von MaWin (Gast)


Lesenswert?

> Wobei letzteres nicht ganz einfach ist.

Na ja, letztlich doch, einfach alle möglichen weiteren gegnerischen Züge 
bis zum Matt/Remis durchspielen und zählen wie viele davon in einem 
eigenen Sieg enden.

> Seit vielen Jahren hat kein menschlicher
> Spieler mehr gegen einen professionellen Schachcomputer unter
> Wettbewerbsbedingungen gewonnen.

Daher ist es entscheidender, dem Computer ein wening Spielschwäche 
beizubringen, damit der arme Gegner auch mal eine Chance hat.

von Yalu X. (yalu) (Moderator)


Lesenswert?

MaWin schrieb:
>> Wobei letzteres nicht ganz einfach ist.
>
> Na ja, letztlich doch, einfach alle möglichen weiteren gegnerischen Züge
> bis zum Matt/Remis durchspielen und zählen wie viele davon in einem
> eigenen Sieg enden.

Einfach ist die Sache vor allem dann, wenn der Computer nicht auf Zeit
spielen muss. Gewährt man ihm 10^NNNN Jahre Bedenkzeit pro Zug, lässt
sich nach deinem Vorschlag das perfekte Schachprogramm realisieren. Da
dieses Programm im Wesentlichen nur aus einem Zuggenerator und einer
Matt-/Remis-Erkennung besteht, dürften wenige Hundert Programmzeilen
dafür ausreichen. Das passt gut in einen AVR. Nur mit dem internen RAM
wird es etwas hapern, da man eine maximale Suchtiefe von fast 20000
Halbzügen vorsehen muss. Aber man kann ja ein paar Megabyte externes RAM
an den AVR pappen, dann ist auch dieses Problem gelöst.

Ja, Schachprogrammierung ist wirklich ganz einfach ;-)

von d4! (Gast)


Lesenswert?

MaWin schrieb:
> Daher ist es entscheidender, dem Computer ein wening Spielschwäche
> beizubringen, damit der arme Gegner auch mal eine Chance hat.

Angesichts der hier vertretenen Experten dürfte dies kaum nötig 
werden.
Nun gut, irgendwo muss man ja sein angestautes Expertenwissen 
ejakulieren dürfen.

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.