Wie aufwändig ist es, einen Schach-Computer zu programmieren (siehe unten)?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich sehe drei Möglichkeiten die unterschiedliche Probleme haben:

  1. eine KI die mit hunderttausenden Zügen und Spielen angelernt wird. Mit Python kann man dies mit wenigen Zeilen Code erledigen (10-20) aber die Datenmenge die der PC benötigt um daraus zu lernen wird extrem groß und man muss diese nicht nur aufbereiten sondern auch mit einem Ergebnis versehen (zB guter oder schlechter Zug in der Situation) und das wird eine Mammutaufgabe...
  2. ein Programm, dass alle möglichen Züge und Gegenzüge des Gegeners berechnet und das im Idealfall bis zum Spielende. Dieses Programm kann dann jeden Zug bewerten je nach dem wie viele Optionen der Gegener danach hat, wie wahrscheinlich der Sieg des Gegeners danach ist, usw. und dann den bestmöglichen Zug ermitteln. Hier ist der Programmieraufwand viel viel höher aber durchaus stemmbar wenn auch absolut kein Anfänger-Projekt.
  3. eine primitivere Version von Variante 2 kann ein paar grundlegenden Vorgaben folgen und nur Züge aus Basis dieser Vorgabe und der Regeln errechnen. Das würde die Datenmenge und den Rechen- und Speicherbedarf extrem senken.

Man kann die Varianten natürlich auch kombinieren und so zB die Daten für ML mit Hilfe von einem Programm generieren...

Woher ich das weiß:Berufserfahrung – Softwareentwickler f. Web, Win. & Linux (seit 2001)
Retrohure 
Fragesteller
 01.04.2020, 19:15

Und wenn der Schachcomputer "nicht so gut" ist - ich hab ja nicht gesagt, das er gewinnen muss :D Geht es denn überhaupt, dass ich etwas programmiere, dass mit einer Webseite von wem anders interagiert?

0
Mark Berger  01.04.2020, 19:31
@Retrohure
Geht es denn überhaupt, dass ich etwas programmiere, dass mit einer Webseite von wem anders interagiert?

Jein, wenn dann muss das der andere integrieren oder eine entsprechende Schnittstelle zur Verfügung stellen die du dann ansprechen kannst.

Außer du meinst eine Browserspiel - da könnte man zB den Browser fernsteuern und den Schachcomputer statt dir spielen lassen...

Und wenn der Schachcomputer "nicht so gut" ist - ich hab ja nicht gesagt, das er gewinnen muss :D

Das macht kaum einen Unterschied außer in der Rechenzeit und Speicherauslasung. Ob ich nun 1, 2 oder 257 Züge vorausberechne wirkt sich nicht wirklich auf den Programmieraufwand aus denn auch für nur einen Zug muss der PC die Regeln kennen.

Im Grunde läuft es auf folgendes raus:

  1. Wissen wann der eigene König im Schach steht.
  2. Berechnen aller möglichen Züge für jede Figur - hierbei muss man natürlich wissen welche Figur wie ziehen darf...
  3. Dann muss man die Züge werten - verursacht der Zug eine Schach- oder Matt-Stellung? Hilft er falls man im Schach steht weiter? Gewinnt oder verliert man durch diesen Zug? usw.
  4. Den "besten" Zug auswählen und durchführen.

Dabei stellen sich einige Fragen:

  • Wo bekommt ich die Position der gegnerischen Figuren her bzw. wie ermittle ich den letzten Zug?
  • Wie teile ich dem Gegner meinen Zug mit?
  • usw.

Programmiert man ein Schach-Spiel dann ist das relativ einfach, man lässt den Gegner mit der Maus ziehen bzw. versetzt die Figuren auf dem virtuellen Spielfeld. Online auf einer Webseite ist das eine eigene Herausforderung für sich und erfordert unter Umständen das du alle möglichen Techniken anwendest um die Seite zu überwachen und Züge zu ermitteln bzw. die Züge deines Programms zu übermitteln...

1
Mark Berger  01.04.2020, 19:37
@Mark Berger

Nachtrag: Damit das Programm irgendwas spielt das annähernd Sinn macht und nicht einfach zufällig irgendwelche Züge macht sollte es zumindest prüfen ob durch einen Zug eine Figur gefährdet wird.

Es macht wenig Sinn einen Bauern zu schlagen und dadurch die Dame direkt vor eine andere Figur zu stellen und mit dem nächsten Zug es Gegners zu verlieren.

Außerdem muss das Programm natürlich wissen welche Figuren noch da sind und welche geschlagen wurden.

1
Retrohure 
Fragesteller
 03.04.2020, 12:02
@Mark Berger

Vielen Dank für Deine hilfreichen Kommentare! Eine Nachfrage habe ich noch:

Ja, es ist ein Browserspiel. Wie aufwändig wäre es dann, den Computer den Browser "fernsteuern" zu lassen? Ist das fortgeschritten oder kann man das auch als Programmierneuling zügig hinkriegen?

Und wie weit lässt sich das auf andere Aktionen übertragen: Kann man den Computer programmieren auf einer Hotelbuchungswebseite selbstständig Buchungen durchzuführen und bei Eintritt gewisser Umstände zu stornieren? Oder bei einer ebay-Aktion mitzubieten nach Anweisungen wie: "wenn Du nicht mehr das Höchstgebot hast, biete 10% mehr. Biete nie mehr als 50€. Wenn Du erst nach einer Stunde überboten wirst, biete nicht weiter" oder sowas.

0
Mark Berger  03.04.2020, 16:33
@Retrohure

Klar kann man das machen und nur das bieten bzw. das buchen ist auch einiges einfacher als das Schachspiel.

Du solltest dir mal die Module beautifulsoup und requests ansehen!

0
Mark1268  31.12.2021, 17:22

könnten Sie Mark Berger vielleicht mir verraten was diese 10-20 zeilen codes sind? LG Mark

0
Mark Berger  31.12.2021, 18:53
@Mark1268

Was genau meinst du - sag mir mal in 3-5 Sätzen was das Programm genau tun soll.

0
Mark1268  01.01.2022, 16:02
@Mark Berger

Also ich meine ihr 1. Vorschlag an Retrohure " eine KI die mit hunderttausenden Zügen und Spielen angelernt wird. Mit Python kann man dies mit wenigen Zeilen Code erledigen (10-20) aber die Datenmenge die der PC benötigt um daraus zu lernen wird extrem groß und man muss diese nicht nur aufbereiten sondern auch mit einem Ergebnis versehen (zB guter oder schlechter Zug in der Situation) und das wird eine Mammutaufgabe... " Sie haben gesagt das man die KI in 10-20 Zeilen Code in Python schreiben kann und ich möchte wissen was in den Zeilen Codes stehen muss.

0
Mark Berger  01.01.2022, 16:35
@Mark1268

zB:

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import pandas as pd

# Daten einlesen
dataset = pd.read_csv('dataset.csv')

# Daten in Test- und Trainingsdaten aufteilen
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Modell trainieren
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)

# Modell vorhersagen machen lassen
prediction = lin_reg.predict(X_test)

Daten musst du eventuell noch umformen oder dergleichen.

Das schwierigste ist es die Daten passend aufzubereiten und die Daten erst mal zu beschaffen.

0
Mark Berger  01.01.2022, 16:47
@Mark Berger

Sorry, hatte vergessen die zwei Zeilen rauszukopieren:

X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values

Damit werden die Daten aus der CSV-Datei so umgeformt, wie das Modell diese benötigt...

Du kannst mit div. Modulen auf fertige Modelle zugreifen und diese dann Trainieren. Wie gesagt der Code ist trivial aber die Daten zu beschaffen, aufzubereiten und dann das bestmögliche Modell auszuwählen und es zu trainieren ist die Schwierigkeit.

0
Mark1268  02.01.2022, 19:06
@Mark1268

Aber wie behebe von sklearn.model_selection das reportMissingImports und das reportMissingModuleSource bei import pandas as pd und wie definiere ich x und y

0
Mark Berger  02.01.2022, 22:11
@Mark1268

Mit pip installieren.

Du solltest erstmal einen Python Grundkurs machen sonst wird das nichts! Um kopier ganze Fehlermeldungen raus mit den ganzen Ausgaben - hier kann ich nur raten das die Module nicht installiert hast...

0

Der kleinste Schachcomputer, den ich mal sah, hatte im Quelltext nur 100 Zeilen oder so und er war frei benutzbar. Also musst Du nicht selber ran, sondern kannst dich für deine Zwecke an verfügbaren Maschinen bedienen. Eventuell kannst Du ihn dann auch in python abschreiben, wenn er unbedingt in python sein soll.

Interaktionen mit Internetseiten, die kein Interface zur Verfügung stellen, sind da wesentlich komplizierter.

Retrohure 
Fragesteller
 01.04.2020, 18:36

Danke für die Antwort. Kannst Du mir vielleicht basal erklären, was ein Interface ist bzw. wo da die Schwierigkeit liegt?

0

Schachcomputer sind relativ komplex zu programmieren. Es gibt verdammt viele mögliche Züge. Ein Schachcomputer müsste, wenn er perfekt spielen soll, jeden Zug bis zum maximal möglichen Ende vorausberechnen können, um stets den perfekten zug wählen zu können. Da nach jedem Zug eines Spielers der gegenspieler mehrere dutzend mögliche Züge zur Verfügung hat, müsste der Computer dann jeden dieser Züge vorausberechnen und bei jeder einzelnen Vorausberechnung wiederum die mögichen Gegenzüge berechnen. Über wieviele Ebenen das geht, entscheidet darüber, wie stark ein Schachcomputer ist.

Jedoch ist soetwas EXTREM rechenintensiv und kann durchaus äußerst schwierig zu programmieren sein.

Möglich ja ... Einfach nein