# KI (künstliche Intelligenz) für Schachlogik



## Ohne? (10. Mai 2010)

Hallo Liebe Forumuser,

ich habe letztes Jahr in der Schule im Zusammenhang einer Projektarbeit mit meinem Team ein Netzwerkschach in JAVA porgrammiert.

Nun wollte ich eine kleine KI dazu entwickeln, habe aber noch keine Erfahrungen damit:-(!
Ich habe bereits, genau analysiert, wie die Algorithmusabfolge sein muss (z.B. muss zuerst auf Schach überprüft werden, wenn Koenig.gibtSchach=true, dann König.FigurVerhindereSchach überprüfen, wenn König.FigurVerhindereSchach=true, dann ziehe Figur vor Schachlinie oder, wenn man keine Figur vorziehen kann, dann soll überprüft werden, ob der König aus dem Schach selbst kommt Koenig.gibmoeglicheFelder[] sezte König auf ein mögliches Feld, wenn Koenig.gibmoeglicheFelder[]=false, König.FigurVerhindereSchach=false, dann ist Schachmatt und Figur.SchlageGegnerAufSchachlinie=false, ....)

Ich suche mal noch die genauen Methoden, die wir vor einem Jahr verwendet haben, poste diese zuzüglich Beschreibungen, so dass ihr wisst, welche Methoden schon zur Verfügung stehen und was diese jeweils machen.

Vielen Dank schon mal für Ideen und Vorschläge!

Liebe Grüße 
Ohne?


----------



## Sanix (11. Mai 2010)

Am besten baust du dir einen Baum auf, mit Berechnungen der nächsten 3 Züge. Die Eröffnungen würde ich übernehmen und nicht dynamisch berechnen lassen.
Schau dir Mal den Min Max-Algorithmus an.


----------



## Marco13 (11. Mai 2010)

Min-Max ist nicht falsch, aber ohne Alpha-Beta wird man bei Schach wohl wirklich kaum über 3 Halbzüge rauskommen 

Ganz pragmatisch gesagt ist der Ablauf bei allen 2-Spieler-Spielen gleich. Und man braucht bei allen 2-Spieler-Spielen (von TicTacToe bis Schach) im wesentlichen die folgenden Methoden:
- Erstelle eine Liste aller möglichen Züge
- Mache einen Zug
- Bewerte den aktuellen Spielstand
- Mache einen Zug rückgängig

Bei Schach kann das schon tricky sein, aber falls ich das richtig verstanden habe, wäre dein erstes Ziel ja jetzt nichtmal die ausgefeilten Strategien die man auf http://chessprogramming.wikispaces.com/ nachlesen kann, sondern die Methode, die einem die Liste aller möglichen Züge gibt? Grob angedeutet hast du das ja schon... das umzusetzen kann ein bißchen fummelig sein (Schach hat bei genauer Betrachtung viele Spezialfälle) aber es geht schon... 

Solche Sachen wie [c]Figur.SchlageGegnerAufSchachlinie=false[/c] sollten aber (hoffentlich) wohl nur Pseudocode sein...?


----------



## Nardian (14. Mai 2010)

falls das noch aktuell ist... ich hab mal von einer "art" ki gehört, die folgendes macht: es gibt im internet seiten wo sehr viele spiele aufgezeichnet wurden (inkl allen zügen, etc). die aufgabe der ki ist nun, diese anzufragen, jene spiele / unterschritte zu suchen in denen die partie gerade ganz genau gleich aussieht wie die aktuelle, und aus denen dann die "beste" aussucht. ka was die beste partie ist, vermutlich würds auch reichen wenns nur ne partie auswählt wo er dabei gewinnt.. 

wie gesagt, ich hab nur davon gehört, ich weiß auch nich ob das überhaupt machbar ist, ob der rechen- / speicher-aufwand dafür viel zu hoch ist oder sowas... mal als anregung 

(achja, und sorry, wie genau die seite heißt wos diese sammlung gibt, hab ich leider vergessen... aber es gibt sie definitiv! )


----------



## Ohne? (26. Mai 2010)

Guten Morgen,

ja, das Thema ist noch aktuell!
Ich kam bisher leider nicht früher dazu das Schachprojekt mal auf einem Server zu laden.
Unter diesem Link:  "http://bit.ly/bFR9yp" könnt Ihr den Workspace für eclipse runterladen (Netbeans durften wir leider nicht verwenden :-( ) und mal den Quellcode durchforsten.
Ich gebe ja zu, der Quellcode ist nicht immer gut zu lesen, z.B. sind die Bezeichner manchmal etwas unpassend gewählt.

Ich danke schon mal im Voraus für Eure Mühe!!
Ich arbeite zur Zeit an der KI mit dem Minimax-Algorithmus mit Alpha-Beta-Cutoff und bräuchte da demnächste Hilfe.

Vielen Dank und schöne Ferien, für die die welche haben, den anderen gutes Arbeiten!
Ohne?


----------

