Hallo, gibt es eigentlich von der Spielstärke her ernstzunehmende Selbstbau-Schachcomputer-Projekte mit AVR-Controllern? Viele Grüße
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
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.
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).
Karl Heinz Buchegger schrieb: > Schreib erst mal ein Schachprogramm. Das ist einfacher Das war der ultimative Aufruf für diesen Unsinn.
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.
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
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
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?
thom schrieb: > Für M1284 gibt es noch nichts? Dort könnte man ja eventuell eine kleine Eröffnungs-Bibo im ProgMem unterbringen...
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
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.
cyblord ---- schrieb: > Das Prinzip ist simpel aber der Teufel steckt im Detail. Aso. Gut zu wissen, wo er ist. Ein gutes Gebet hilft sicher.
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.
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.
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.
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
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.
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.
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.
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.
Wow, genau eine passende Antwort bisher und viel sinnfreie Angeberei...
> 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.
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 ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.