Frage

Ich mag ein Schach-Engine programmieren, die guten Züge zu machen, lernt und gewinnen Sie gegen andere Spieler. Ich habe bereits eine Darstellung des Schachbretts und eine Funktion codiert, die alle möglichen Züge gibt. Also brauche ich nur eine Bewertungsfunktion, die besagt, wie gut eine gegebene Situation der Karte ist. Daher würde Ich mag ein künstliches neuronales Netzwerk verwenden, die dann eine bestimmte Position bewerten sollen. Die Ausgabe sollte ein numerischer Wert sein. Je höher der Wert ist, desto besser ist die Position für den weißen Spieler ist.

Mein Ansatz ist es, ein Netzwerk von 385 Neuronen aufbauen: Es gibt sechs einzigartige Schachfiguren und 64 Felder auf dem Brett. So wird für jeden Bereich nehmen wir 6 Neuronen (1 für jedes Stück). Wenn ein weißes Stück ist, ist der Eingabewert 1. Wenn es ein schwarzes Stück ist, ist der Wert -1. Und wenn es kein Stück dieser Art auf diesem Gebiet ist, ist der Wert 0. Zusätzlich zu, dass es ein Neuron für den Spieler zu bewegen. Wenn es Weißes an der Reihe ist, ist der Eingangswert 1 und wenn es Schwarz an der Reihe ist, ist der Wert -1.

Ich denke, dass die Konfiguration des neuronalen Netzes recht gut. Aber der Hauptteil fehlt: Wie kann ich das neuronale Netz in eine Codierung Sprache implementieren (z Delphi)? Ich denke, die Gewichte für jedes Neuron sollen gleich am Anfang sein. Je nach dem Ergebnis eines Spiels sollten die Gewichte dann eingestellt werden. Aber wie? Ich glaube, ich sollte zwei Computer-Spieler lassen (beide meine Engine) gegeneinander spielen. Wenn Weiß gewinnt, bekommt Schwarz das Feedback, dass seine Gewichte sind nicht gut.

So wäre es toll, wenn ihr mir helfen könntet das neuronale Netz in eine Codierung Sprache Umsetzung (beste Delphi wäre, sonst Pseudo-Code). Vielen Dank im Voraus!

War es hilfreich?

Lösung

Been there, done that. Da es keine Kontinuität in Ihrem Problem ist (der Wert einer Position ist nicht eng mit nur 1 Wechsel zu einer anderen Position bezogen auf dem Wert eines Eingangs), gibt es kaum eine Chance funktionieren würde ein NN. Und es hat nie in meinen Versuchen.

Ich würde eher ein simuliertes Glühen System mit einer Ad-hoc-Heuristik sehen (von denen es vielen da draußen ist), um den Wert der Position zu bewerten ...

Wenn Sie jedoch auf der Verwendung eines NN festgelegt sind, ist relativ einfach darzustellen. Eine allgemeine NN ist einfach ein Diagramm, wobei jeder Knoten ein Neuron ist. Jedes Neuron hat einen aktuellen Aktivierungswert, und eine Übergangsformel den nächsten Aktivierungswert zu berechnen, basierend auf Eingangswert, d.h. Aktivierungs Werte aller Knoten, die einen Link zu ihm haben.

A klassischeren NN, das mit einer Eingangsschicht, eine Ausgangsschicht, identisch Neuronen für jede Schicht, und keine Zeitabhängigkeit, kann somit durch eine Anordnung von Eingangsknoten dargestellt werden, ein Array von Ausgangsknoten, und einem verbunden graph von Knoten diejenigen verbinden. Jeder Knoten besitzt einen aktuellen Aktivierungswert, und eine Liste der Knoten an es weiterleitet. den Ausgangswert der Berechnung setzt einfach die Aktivierungen der Eingabeneuronen auf die Eingangswerte, und der Reihe nach durch jede nachfolgende Schicht Iterieren die Aktivierungswerte von der vorhergehenden Schicht Berechnung der Übergangs Formel. Wenn Sie die letzte (Ausgang) Schicht erreicht haben, haben Sie Ihr Ergebnis.

Andere Tipps

Falls jemand findet zufällig auf dieser Seite. Nach dem, was wir jetzt wissen, was der OP vorschlägt, ist mit ziemlicher Sicherheit möglich. In der Tat konnten wir es für ein Spiel mit vielen größeren Zustandsraum tun - Go ( https://deepmind.com/alpha -go ).

Ich sehe nicht, warum Sie nicht ein neuronales Netz für eine statische Auswerter haben können, wenn Sie auch mit Alpha-Beta-Suche einig klassisches Mini-max Look-Ahead tun. Viele Schachengines verwenden Minimax mit einem hirntoten statischen Auswerter, der nur die Stücke oder etwas aufsummiert; es ist nicht so viel aus, wenn Sie genug Ebenen der Minimax haben. Ich weiß nicht, wie viel von einer Verbesserung der Netto machen würde, aber es gibt wenig zu verlieren. Ausbildung wäre es allerdings schwierig sein. Ich würde vorschlagen, einen Motor verwenden, die vor vielen bewegt aussieht (und nimmt Lasten der CPU usw.), um die Auswerter für einen Motor zu trainieren, die vor weniger bewegt aussieht. So können Sie mit einem Motor am Ende, die nicht so viel CPU (hoffentlich) nicht nehmen.

Was brauchen Sie ein ANN zu trainieren ist entweder so etwas wie Backpropagation Lernen oder irgendeine Form von ein genetischen Algorithmus . Aber Schach ist ein so komplexes Spiel, dass es unlikly ist, dass ein einfaches ANN lernen, es zu spielen -. Noch mehr, wenn der Lernprozess unbeaufsichtigt ist

Ferner Ihre Frage sagt nichts über die Anzahl der Schichten. Sie wollen 385 Eingangsneuronen verwenden, um die aktuelle Situation zu kodieren. Aber wie wollen Sie entscheiden, was zu tun ist? Auf Neuron pro Feld? Höchste Anregung gewinnt? Aber es ist oft mehr als eine mögliche Bewegung.

Weiterhin finden Sie mehrere versteckte Schichten benötigen -. Die Funktionen, die mit einem Eingang und einer Ausgangsschicht ohne versteckte Schicht dargestellt werden können, sind wirklich begrenzt

Also ich will dich nicht verhindern, versuchen es, aber die Chancen für eine erfolgreiche Implementierung zu und Ausbildung innerhalb eines Jahres sagen oder so ein praktisch gleich Null.

Ich habe versucht, zu bauen und ein ANN zu trainieren Tic-Tac-Toe zu spielen, wenn ich 16 Jahre war, oder so ... und ich schlug fehl. Ich würde vorschlagen, ein solches einfaches Spiel zuerst zu versuchen.

Das Hauptproblem ich hier sehen, ist ein Training. Sie sagen, Sie wollen Ihre ANN die aktuelle Brettstellung zu nehmen und zu bewerten, wie gut es für einen Spieler ist. (Ich nehme an, Sie werden jede mögliche Bewegung für einen Spieler nehmen, es auf den aktuellen Board Zustand auswerten über das ANN und dann den mit dem höchsten Ausgang - das heißt: Hill-Climbing)

Ihre Optionen wie ich sie sehe, sind:

  • Entwickeln Sie eine heuristische Funktion des Board Zustand und trainieren das Netzwerk aus, das zu bewerten. Aber das wirft die Frage auf, warum überhaupt einen ANN verwenden, wenn Sie nur Ihre Heuristik verwenden könnten.

  • einige statistische Maß wie „Wie viele Spiele wurden von weiß oder schwarz aus dieser Board-Konfiguration gewonnen?“, Mit dem Sie einen Fitness-Wert zwischen Weiß oder Schwarz geben würde. Die Schwierigkeit dabei ist, die Menge der Trainingsdaten für die Größe des Problems Raum erforderlich ist.

Mit der zweiten Option, die Sie immer es Board-Sequenzen aus Großmeisterpartien ernähren konnten und hoffen, dass es genügend Deckung ist für den ANN eine Lösung zu entwickeln.

Aufgrund der Komplexität des Problems möchte ich würde das größte Netzwerk (dh: viele interne Knoten) werfen. Es, wie ich konnte, ohne die Ausbildung Verlangsamung zu viel

Es ist möglich, aber nicht trivial mit allen Mitteln.

https://erikbern.com/2014/11/ 29 / deep-Learning-for-Schach /

Um seine Auswertungsfunktion zu trainieren, er verwendet eine Menge Rechenleistung, dies zu tun.

im Allgemeinen Zusammenfassend könnte man darüber gehen Sie wie folgt vor. Ihre Bewertungsfunktion ist ein Vors NN. Lassen Sie die Matrixberechnungen zu einem skalaren Ausgang führen die Bewertung, wie gut die bewegen. Der Eingangsvektor für das Netzwerk ist das Brett Zustand von allen Figuren auf dem Brett so dargestellt sagt weißer Bauer 1, White Knight 2 ... und leerer Raum ist 0. Ein Beispiel Platine Zustand Eingangsvektor ist einfach eine Folge von 0 -12 Jahren. Diese Auswertung kann trainiert werden, Großmeisterpartien mit (erhältlich bei einer fics Datenbank zum Beispiel) für viele Spiele, die Minimierung Verlust zwischen dem, was die aktuellen Parameter sagen, ist die höchste Bewertung und was bewegen, um die aus Großmeister (die die höchste Bewertung haben sollte). Dies setzt natürlich voraus, dass die Großmeister bewegt sich korrekt und optimal.

Wir waren hier zu sagen, was Silas sagte. Unter Verwendung eines Minimax-Algorithmus, können Sie erwarten zu können, bewegt sich nach vorne schauen N. Alpha-Beta Beschneidung verwenden, können Sie feststellen, dass theoretisch 2 * N bewegt erweitern, aber realistische 3 * N / 4 bewegt. Neuronale Netze sind wirklich hier angebracht.

Vielleicht wenn ein genetischer Algorithmus verwendet werden könnte.

Ihre Eingabe Algorithmus ist Klang - alle Positionen, alle Teile, und beide Spieler berücksichtigt. Sie können für jeden letzten Zustand des Spielplanes eine Eingangsschicht benötigen, so dass vergangene Ereignisse wieder als Eingabe verwendet werden.

die Ausgabeschicht (in irgendeiner Form) liefert in dem Stück zu bewegen, und die Position zu bewegen.

Schreiben eines genetischen Algorithmus eine Connectome verwendet, die enthält alle Neuronengewichte und Synapse Stärken und mehrere getrennte Genpool mit einer großen Anzahl von in jeder Konnektom beginnen.

Machen Sie sie einander spielen, halten Sie die beste Hand voll, Crossover und mutieren die besten Konnektom den Pool wieder zu bevölkern.

Lesen blondie24: http: // www. amazon.co.uk/Blondie24-Playing-Kaufmann-Artificial-Intelligence/dp/1558607838 .

Es befasst sich mit Kontrolleure statt Schach, aber die Prinzipien sind die gleichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top