Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ideen zur Schach KI (https://www.delphipraxis.net/44025-ideen-zur-schach-ki.html)

dizzy 13. Apr 2005 17:13

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Airblader
Das Problem bei einer Stellungsbewertung ist doch, dass eine Stellung für die Berechnung *schwäbisch* sauschlecht */schwäbisch* aussehen kann und trotzdem im nächsten Zug einen deutlichen Vorteil arrangiert

air

Und ganz genau deshalb nimmt man einen Baum. Weil dort in alle möglichen Zukünfte gesehen werden kann, und eine Wahrscheinlichkeit angenähert, mit der die KI gewinnt. Und deshalb entscheidet auch die Tiefe des Baumes maßgeblich mit über die Stärke der KI.
Durch das "Hochziehen" der Blattbewertungen erkennt die KI nämlich dass ein zunächst ungünstiger Zug in der Folge aber vorteilhaft sein kann (so die Heuristik akkurat ist).

@Speedmaster: Weiss ich doch :). Ich hatte es nur nochmal explizit hingeschrieben falls sich auch mal jemand auf "englische Suche" begibt ;).

Airblader 13. Apr 2005 17:43

Re: Ideen zur Schach KI
 
@dizzy

Da hilft dir doch auch ein Baum nichts.
Du kannst damit verschiedene mögl. Züge aufzählen, aber was in 2-3 Zügen ist, weisst du nicht ;)
(Außer du lässt 2 KI's spielen *g*)

glkgereon 13. Apr 2005 17:57

Re: Ideen zur Schach KI
 
doch, du guckst für jede position im baum, wies aussieht.

ausserdem sollte imho die ki schon erkennen, wenn im nächsten zug "was geht" sprich was geschlagen werden kann oder so.

aber ich seh schon, ich bau meine eröffnungsklasse, aber halt die (erstmal) unter verschluss, falls das mit den teams noch was gibt ;)

Speedmaster 13. Apr 2005 18:27

Re: Ideen zur Schach KI
 
@Dizzi: Das kann man aber dann mit meinem Vorschlag kombinieren.

Eine andere als eine Logische KI machen ist sau, bis extrem schwer.

Catbytes 13. Apr 2005 19:00

Re: Ideen zur Schach KI
 
Hallo,

schau mal hier.

Mehr Infos wirst Du in Bezug auf Delphi wohl nicht finden...

Viel Spaß beim Source studieren :mrgreen:

dizzy 13. Apr 2005 20:01

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Speedmaster
@Dizzi: Das kann man aber dann mit meinem Vorschlag kombinieren.

Ich vermute dass dein Vorschlag lediglich auf die Heuristik abzielt. Dann ist das nicht nur kombinierbar, sondern zwangsläufig dazugehörig. Entschuldige bitte dass ich dich zunächst nicht so ganz richtig verstanden hab :angel2:

Zitat:

Zitat von Speedmaster
Eine andere als eine Logische KI machen ist sau, bis extrem schwer.

Logisch ist klar, aber das statisch ist mein Kritikpunkt ;).


Interessant

Cicaro 14. Apr 2005 07:49

Re: Ideen zur Schach KI
 
Zitat:

Zitat von glkgereon
bevor du mit ner ki anfängst, schreib erstmal eine "grafik"-engine, die folgende anforderungen erfüllt:

- darstellung der akuellen stellung
- entgegennahme von user-inputs (maus, tastatur)
- entgegennahme von programm-inputs (functions/ procedures)
- einfach ansteuerung (zb. TrackFigure(x1,y1,x2,y2); )

dann erweiterst du diese engine mit einem reinen bewertungssystem, das einfach sagt, wie es seiner meinung nach grade steht.

dieses testest du dann ausführlich

wenn es gut ist, dann baust du ein das er züge selber ausprobiert.

und dann, ist es nur noch ein kleiner schritt bis zur "richtigen" ki

Guck mal hier:

Delphi-Quellcode:
type
 TMove = record
          A,B,rA,rB,V:TPoint;
         end;

 TFigure = record
            Pos:TPoint;
            ID:Integer;
           end;

 TFields = array[1..8,1..8] of TFigure;

 TBoard = class
 public
  Children:array of TBoard;
  Parent:TBoard;

  Fields:TFields;
  Move:TMove;
  Turn:Integer;
  wGetPawn,bGetPawn,wRochade,bRochade:Boolean;

  constructor Create(AParent:TBoard);
  destructor Destroy;override;

  procedure NewBoard;
  procedure LineUpFigures;
  procedure CopyFrom(B:TBoard);

  function KingMoveAllowed:Boolean;
  function RochadeAllowed:Boolean;
  function RookMoveAllowed:Boolean;
  function KnightMoveAllowed:Boolean;
  function BishopMoveAllowed:Boolean;
  function PawnMoveAllowed:Boolean;
  function PawnKillAllowed:Boolean;

  function Checked(Side,x,y:Integer):Boolean;
  function KingChecked(Side:Integer):Boolean;
  function GettingChecked:Boolean;

  function MovePossible:Boolean;
  function MoveAllowed:Boolean;
  procedure DoMove;
  // Einstieg der KI
  procedure TryNewMove;
 end;

 TChessBoard = class(TComponent)
 private
  FImage:TImage;
  FFieldWidth,FFieldHeight:Integer;
  FWhiteFieldColor,FWhiteFrameColor,FBlackFieldColor,FBlackFrameColor:TColor;
 public
  BitmapCollection:TBitmapCollection;
  Board:TBoard;

  constructor Create(Owner:TComponent);override;
  destructor Destroy;override;

  procedure DoBestMove;

  procedure DrawField(x,y:Integer);
  procedure DrawMovedFigures;
  procedure DrawBoard;
 published
  property Image:TImage read FImage write FImage;
  property FieldWidth:Integer read FFieldWidth write FFieldWidth default 32;
  property FieldHeight:Integer read FFieldHeight write FFieldHeight default 32;
  property WhiteFieldColor:TColor read FWhiteFieldColor write FWhiteFieldColor default $EFEFEF;
  property WhiteFrameColor:TColor read FWhiteFrameColor write FWhiteFrameColor default $DFDFDF;
  property BlackFieldColor:TColor read FBlackFieldColor write FBlackFieldColor default $BFBFBF;
  property BlackFrameColor:TColor read FBlackFrameColor write FBlackFrameColor default $CFCFCF;
 end;
Die meisten Methoden außer TBoard.TryNewMove funktionieren.
Du siehst hab schon vieles vorbereitet. Ist auch 'n Kopie von meinem Mehrspieler-Schach

Hier ist es!

glkgereon 14. Apr 2005 08:00

Re: Ideen zur Schach KI
 
Sauba!!!

ich hab soweit meine DB für die Eröffnungen fertig.

was soll ich für ne DB nehmen? is Access die schlechteste wahl?
weil diesen Borland-DB-Designer finde ich gelinde gesagt gagga.

ich werd ne klasse machen, die den ganzen kram verwaltet, der brauch man nur zu sagen
"ey du, da wurde gerade e2e4 gespielt" und dann trägt die das ein und dann sagt man
"ey du, rück mal nächsten zug raus" dann kommt ein int zurück
entweder 0, dann steht zb e7e5 in nem var-parameter, oder was anderes dann hatsn problem gegeben.

Cicaro 15. Apr 2005 10:04

Re: Ideen zur Schach KI
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hey, Leute !

Danke für die vielen Ratschläge !

Hier könnt ihr euch mein Programm ansehen.
Die KI arbeitet REIN zufällig. (Vorsicht: Ende der Partie wird NICHT erkannt!)

Binärbaum 15. Apr 2005 13:00

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Cicaro
Hey, Leute !

Danke für die vielen Ratschläge !

Hier könnt ihr euch mein Programm ansehen.
Die KI arbeitet REIN zufällig. (Vorsicht: Ende der Partie wird NICHT erkannt!)

Da gibt es aber noch viel zu tun. Dein Programm sollte wenigstens erkennen, wenn eine Partie zu Ende ist. ;-)

MfG
Binärbaum

//Edit: Rechtschreibfehler.Destroy; :)

Cicaro 18. Apr 2005 11:35

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von Cicaro
Hey, Leute !

Danke für die vielen Ratschläge !

Hier könnt ihr euch mein Programm ansehen.
Die KI arbeitet REIN zufällig. (Vorsicht: Ende der Partie wird NICHT erkannt!)

Da gibt es aber noch viel zu tun. Dein Programm sollte wenigstens erkennen, wenn eine Partie zu Ende ist. ;-)

MfG
Binärbaum

//Edit: Rechtschreibfehler.Destroy; :)

So war das auch nicht gemeint. Das Projekt wird selbstverständlich fortgeführt und ich erwarte auch weiterhin Ideen-Übermittlungen von euch.

Slartibartfass 19. Apr 2005 10:18

Re: Ideen zur Schach KI
 
(Da ich, was das Programmieren angeht, vollkommener Laie bin, bitte ich zu entschuldigen, wenn folgende Bemerkungen falsch oder fehl am Platze sein sollten.)
Zitat:

Zitat von Speedmaster
Warum nicht gleich eine richtige KI( AI?? ), eine künstliche Intelligenz für unser Forum!!

Hier stellt sich allerdings die Frage, als was wir KI definieren. Bisher ist die Schach-KI als Programm zum Analysieren einer Stellung definiert. Abgeleitet vom lateinischen Wort intellegere = einsehen/verstehen haben wir es mit den Vorschlägen der "Baum"-KI oder der statischen KI streng genommen mit Programmen zu tun, die auf gleiche Stellungen mit gleichen Lösungen reagieren, nicht aber mit "intelligenten", also lernfähigen Programmen.
Wäre es nicht angebrachter, auch, um dem Begriff "Intelligenz" Rechnung zu tragen, ein Programm zu entwickeln, das aus mehreren Spielen gegen einen menschlichen oder künstlichen Gegner dessen Reaktionen beurteilt und - was mit einem Lernprozess vergleichbar wäre - dessen "Schwächen" und "Reaktionen" in einem Spiel zu erkennen und in späteren Spielen mögliche Spielverläufe (im Falle der Baum-KI) zu bevorzugen, die diese Schwächen des Gengners ausnutzen?
Das ist natürlich nur ein Vorschlag für die Zukunft, wenn die "normale" KI fertiggestellt ist.

dizzy 19. Apr 2005 10:21

Re: Ideen zur Schach KI
 
Dann kommt zu dem Baum noch ein Regelsystem bzw. wissensbasiertes System mit erweiterbarer Datenbank. Mit solchen Dingen beschäftigen sich ganze Fakultäten ;).

himitsu 19. Apr 2005 10:24

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Slartibartfass
Hier stellt sich allerdings die Frage, als was wir KI definieren. Bisher ist die Schach-KI als Programm zum Analysieren einer Stellung definiert. Abgeleitet vom lateinischen Wort intellegere = einsehen/verstehen haben wir es mit den Vorschlägen der "Baum"-KI oder der statischen KI streng genommen mit Programmen zu tun, die auf gleiche Stellungen mit gleichen Lösungen reagieren, nicht aber mit "intelligenten", also lernfähigen Programmen.
Wäre es nicht angebrachter, auch, um dem Begriff "Intelligenz" Rechnung zu tragen, ein Programm zu entwickeln, das aus mehreren Spielen gegen einen menschlichen oder künstlichen Gegner dessen Reaktionen beurteilt und - was mit einem Lernprozess vergleichbar wäre - dessen "Schwächen" und "Reaktionen" in einem Spiel zu erkennen und in späteren Spielen mögliche Spielverläufe (im Falle der Baum-KI) zu bevorzugen, die diese Schwächen des Gengners ausnutzen?
Das ist natürlich nur ein Vorschlag für die Zukunft, wenn die "normale" KI fertiggestellt ist.

Ja ... versuche doch lieber erstmal die "normalen Funktionen in einem Prograsmm unterzubekommen, dieses ist ja auch schon schwierig genug ... wenn die KI auch noch "wirklich" Inteligent und dazun noch selbstständig lernen soll, dann wird das ganz echt schwirig ... ich arbeite ja auch schon einige Jahre an meine "KI" und bin noch lange nicht fertig.

Cicaro 19. Apr 2005 10:30

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Slartibartfass
(Da ich, was das Programmieren angeht, vollkommener Laie bin, bitte ich zu entschuldigen, wenn folgende Bemerkungen falsch oder fehl am Platze sein sollten.)
Zitat:

Zitat von Speedmaster
Warum nicht gleich eine richtige KI( AI?? ), eine künstliche Intelligenz für unser Forum!!

Hier stellt sich allerdings die Frage, als was wir KI definieren. Bisher ist die Schach-KI als Programm zum Analysieren einer Stellung definiert. Abgeleitet vom lateinischen Wort intellegere = einsehen/verstehen haben wir es mit den Vorschlägen der "Baum"-KI oder der statischen KI streng genommen mit Programmen zu tun, die auf gleiche Stellungen mit gleichen Lösungen reagieren, nicht aber mit "intelligenten", also lernfähigen Programmen.
Wäre es nicht angebrachter, auch, um dem Begriff "Intelligenz" Rechnung zu tragen, ein Programm zu entwickeln, das aus mehreren Spielen gegen einen menschlichen oder künstlichen Gegner dessen Reaktionen beurteilt und - was mit einem Lernprozess vergleichbar wäre - dessen "Schwächen" und "Reaktionen" in einem Spiel zu erkennen und in späteren Spielen mögliche Spielverläufe (im Falle der Baum-KI) zu bevorzugen, die diese Schwächen des Gengners ausnutzen?
Das ist natürlich nur ein Vorschlag für die Zukunft, wenn die "normale" KI fertiggestellt ist.

Zum Thema 'intellegere': Die KÜNSTLICHE Intelligenz nimmt veränderungen wahr und reagiert darauf. Es ist auf jeden Fall eine Intelligenz wenn auch eine künstliche.

Cicaro 19. Apr 2005 12:18

Re: Ideen zur Schach KI
 
Zitat:

Zitat von himitsu
Ja ... versuche doch lieber erstmal die "normalen Funktionen in einem Prograsmm unterzubekommen, dieses ist ja auch schon schwierig genug ... wenn die KI auch noch "wirklich" Inteligent und dazun noch selbstständig lernen soll, dann wird das ganz echt schwirig ... ich arbeite ja auch schon einige Jahre an meine "KI" und bin noch lange nicht fertig.

Das Lernen neuer Denkstrukturen ist für eine KI tatsächlich schwierig. Man könnte ja eine Programmier-KI einbauen, die die DLL der Schach-KI umschreibt und neu compiliert.

Allerdings kann man ja bei fertiger Struktur die Gewichtungen verlagern. Das heißt die KI sollte dann merken welche Strategien (z.B.: eher auf Figurenvorteil achten) eher zum Erfolg führen und diese in späteren Spielen (oder in selber Partie) mehr gewichten. Das ist glaube ich in 'Fritz X' schon möglich.

Binärbaum 19. Apr 2005 12:39

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Cicaro
Das Lernen neuer Denkstrukturen ist für eine KI tatsächlich schwierig. Man könnte ja eine Programmier-KI einbauen, die die DLL der Schach-KI umschreibt und neu compiliert.

Ich glaube, dass Delphi nicht die richtige Programmiersprache ist, um solch eine lernende KI zu entwickeln. Das soll nicht heißen, dass es nicht möglich wäre, aber mit einer speziell für die Logikprogrammierung geschaffenen Sprache wäre es sehr viel einfacher umzusetzen.

MfG
Binärbaum

Cicaro 20. Apr 2005 09:30

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von Cicaro
Das Lernen neuer Denkstrukturen ist für eine KI tatsächlich schwierig. Man könnte ja eine Programmier-KI einbauen, die die DLL der Schach-KI umschreibt und neu compiliert.

Ich glaube, dass Delphi nicht die richtige Programmiersprache ist, um solch eine lernende KI zu entwickeln. Das soll nicht heißen, dass es nicht möglich wäre, aber mit einer speziell für die Logikprogrammierung geschaffenen Sprache wäre es sehr viel einfacher umzusetzen.

So ließe sich theoretisch eine allgemeine, einem Menschen ähnliche KI programmieren, die quasi sich eigenständig erweitert, lernt und wie ein Mensch denkt, oder ?

Binärbaum 20. Apr 2005 09:43

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Cicaro
So ließe sich theoretisch eine allgemeine, einem Menschen ähnliche KI programmieren, die quasi sich eigenständig erweitert, lernt und wie ein Mensch denkt, oder ?

Ja, theoretisch ist das möglich. Allerdings wird das nicht gerade einfach. Es gibt schließlich ganze Institute an Universitäten, die sich mit solchen Ideen beschäftigen.
Deshalb würde ich vorerst davon abraten, eine lernfähige KI zu programmieren. Eine "normale" KI wird schon schwer genug. Wenn du die erstmal hast, kannst du ja eine lernfähige KI hinzufügen. :wink:

Zitat:

Zitat von Cicaro
Man könnte ja eine Programmier-KI einbauen, die die DLL der Schach-KI umschreibt und neu compiliert.

Da gibt es nur ein Problem: man müsste den Compiler gleich mitliefern, um das möglich zu machen. Und gerade darüber wird die Firma Borland nicht so erfreut sein.
Stattdessen könnte man z.B. den FPC verwenden, der ist OpenSource. Allerdings hat das auch zur Folge, dass das Programm durch den Compiler aufgebläht wird.

MfG
Binärbaum

Cicaro 22. Apr 2005 10:29

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von Cicaro
So ließe sich theoretisch eine allgemeine, einem Menschen ähnliche KI programmieren, die quasi sich eigenständig erweitert, lernt und wie ein Mensch denkt, oder ?

Ja, theoretisch ist das möglich. Allerdings wird das nicht gerade einfach. Es gibt schließlich ganze Institute an Universitäten, die sich mit solchen Ideen beschäftigen.
Deshalb würde ich vorerst davon abraten, eine lernfähige KI zu programmieren. Eine "normale" KI wird schon schwer genug. Wenn du die erstmal hast, kannst du ja eine lernfähige KI hinzufügen. :wink:

Das hatte ich eigentlich ja auch gar nicht vor, eine lernfähige KI zu programmieren (Vorerst nicht :-D ).

Zitat:

Zitat von Binärbaum
Zitat:

Zitat von Cicaro
Man könnte ja eine Programmier-KI einbauen, die die DLL der Schach-KI umschreibt und neu compiliert.

Da gibt es nur ein Problem: man müsste den Compiler gleich mitliefern, um das möglich zu machen. Und gerade darüber wird die Firma Borland nicht so erfreut sein.
Stattdessen könnte man z.B. den FPC verwenden, der ist OpenSource. Allerdings hat das auch zur Folge, dass das Programm durch den Compiler aufgebläht wird.

Alternative zum Compiler wäre ja auch ein "Interpreter", den man entweder selber erstellt oder sich 'nen passenden irgendwo hernimmt.

Binärbaum 22. Apr 2005 13:08

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Cicaro
Alternative zum Compiler wäre ja auch ein "Interpreter", den man entweder selber erstellt oder sich 'nen passenden irgendwo hernimmt.

Ja, allerdings sind Interpreter immer etwas langsamer als Kompilate.
Jetzt mag zwar der eine oder andere sagen, was stört mich das? Aber wenn z.B. bei der KI mehrere Zugvarianten durchgegeangen werden (und davon gehe ich mal aus), dann macht das schon eine deutlichen Unterschied.

MfG
Binärbaum

himitsu 23. Apr 2005 10:47

Re: Ideen zur Schach KI
 
Das stimmt ... vor kurzem gab es da mal 'ne nette "Doku" über Schachcomputer/Programme im TV.

Da gab es einen Computer, der zwar die Züge schlechter berechnete, aber den Fritz dann doch geschlagen hatte, weil er halt schnller war und somit viel mehr Züge berechnen konnte und über die Masse dann halt dennoch bessere Wege fand.

Dieser Computer basierte auf mehreren "einzelnen" Chips, welche speziell für solche Berechnungen ausgelegt waren und durch eine Zusammenschaltung sozusagen einen rießigen Parallelrechnwer ergaben.
Na ja, nach diesem Match wurde er dann aber wieder zerlegt ... der war dn Machern dann doch zu stark, oder so :mrgreen:

tr909 25. Apr 2005 09:39

Re: Ideen zur Schach KI
 
Also was die KI angeht, würde ich es folgendermaßen machen.
Eine Eröffnungsdatenbank, wo der Spielbaum für die ersten Züge abgelegt wird, sowie eine Endspiel-Datenbank. (z.b. der komplette Spielbaum für 3,4 oder 5 verbleibende Figuren).
Die Züge zwischendrin könne man mittel a-b-prunning berechnen.

Und zum Thema selbstlernen KI schmeiße ich jetzt einfach mal das sitchwort Neuronale-Netze in den Raum (viel Spaß damit ;) )

Gruß
tr909

Cicaro 25. Apr 2005 10:10

Re: Ideen zur Schach KI
 
Zitat:

Zitat von tr909
Und zum Thema selbstlernen KI schmeiße ich jetzt einfach mal das sitchwort Neuronale-Netze in den Raum (viel Spaß damit ;) )

Das ist Wahnsinn !!! :shock: :pale:
So viel Zeit hab' ich nun wirklich nicht ! Und überhaupt, wie soll das denn bitte mit neuronalen Netzen gehen ? Wenn du dazu schon eine Idee hast, dann nur raus damit ! Ich bin schon gespannt. :shock:

Binärbaum 25. Apr 2005 16:20

Re: Ideen zur Schach KI
 
Zitat:

Zitat von tr909
Also was die KI angeht, würde ich es folgendermaßen machen.
Eine Eröffnungsdatenbank, wo der Spielbaum für die ersten Züge abgelegt wird, sowie eine Endspiel-Datenbank. (z.b. der komplette Spielbaum für 3,4 oder 5 verbleibende Figuren).
Die Züge zwischendrin könne man mittel a-b-prunning berechnen.

Und zum Thema selbstlernen KI schmeiße ich jetzt einfach mal das sitchwort Neuronale-Netze in den Raum (viel Spaß damit ;) )

Gruß
tr909

Neuronale Netze, das wird dann doch zuviel des Guten!!
Aber was den Rest angeht, stimme ich zu, bis auf die DB für das Endspiel. Die ist IMHO nicht nötig (im Gegensatz zur Eröffnungsdatenbank).

MfG Binärbaum

Speedmaster 25. Apr 2005 17:07

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Cicaro
Zitat:

Zitat von tr909
Und zum Thema selbstlernen KI schmeiße ich jetzt einfach mal das sitchwort Neuronale-Netze in den Raum (viel Spaß damit ;) )

Das ist Wahnsinn !!! :shock: :pale:
So viel Zeit hab' ich nun wirklich nicht ! Und überhaupt, wie soll das denn bitte mit neuronalen Netzen gehen ? Wenn du dazu schon eine Idee hast, dann nur raus damit ! Ich bin schon gespannt. :shock:

Ich sage nur suchen suchen suchen, es gab sogar mal einen CS-Bot der auf einfache weisse ein Neurales Netz hatte, war die Arbeit von einem Studenten, wobei ich sagen muss das die Bot's zwar lernten, aber auch nicht sonderlich gut!

Airblader 25. Apr 2005 17:17

Re: Ideen zur Schach KI
 
Zitat:

Zitat von himitsu
Da gab es einen Computer, der zwar die Züge schlechter berechnete, aber den Fritz dann doch geschlagen hatte, weil er halt schnller war und somit viel mehr Züge berechnen konnte und über die Masse dann halt dennoch bessere Wege fand.

´

Sowas darf nich als "Gewinn" gewertet werden.
Wenn 2 Kinder gegeneinander spielen ist nach 30 Sekunden auch Schluss und es gibt (meist) nen Gewinner.
Spielen 2 Schach(groß-)meister gegeneinander, dauert ne Partie auch mal ein paar Stündchen und es gibt (meist) nen Gewinner.

Wenn bei Schach etwas Nebensache ist, dann wohl die Zeit ;)

air

Seniman 25. Apr 2005 17:19

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von tr909
Also was die KI angeht, würde ich es folgendermaßen machen.
Eine Eröffnungsdatenbank, wo der Spielbaum für die ersten Züge abgelegt wird, sowie eine Endspiel-Datenbank.

Aber was den Rest angeht, stimme ich zu, bis auf die DB für das Endspiel. Die ist IMHO nicht nötig (im Gegensatz zur Eröffnungsdatenbank).

Dazu kommt, das eine DB für das Endspiel viel zu groß, einfach, weil die Endsituation immer anders aussieht, während die Figuren am Anfang immer gleich stehen. Außerdem gibt es am Ende immer andere Figuren die da sind. Dadurch vergrößert sich die Anzahl der theoretisch denkbaren Endspiele unglaublich schnell.

glkgereon 25. Apr 2005 17:57

Re: Ideen zur Schach KI
 
hi

hier ist eine vorläufige version meiner eröffnungsdb...is aber auf keinen fall eine entgültige version ;)

in TZug sollen die züge drinstehen
zb e2e4, e7e5, c5d4 o.ä.

Delphi-Quellcode:
type
  TZug = String[4];
  TEroeffnungsDB = class (TObject)
  private
    FConn: TADOConnection;
    FQuery: TADOQuery;
    FDBName: String;                       //AusgangsDB
    FTable: String;
    FZugID: Integer;
    function Init(DBName, User, Passwd: String):Boolean; //DB laden
    function UnInit:Boolean;               //Daten speichern
  published
    constructor Create;
    destructor Destroy;
    function SetNeuenZug(Neu: TZug):Integer;//Zug setzen und Elemente löschen
    function GetNeuenZug:TZug;             //Besten Zug raussuchen
    property Tabelle: String read FTable write FTable;
  end;

const
  STD_TEMP_DB = 'Temp_DB';

implementation

constructor TEroeffnungsDB.Create;
begin
  inherited Create;
  FConn := TADOConnection.Create(FConn);
  FQuery:=TADOQuery.Create(FQuery);
  FQuery.Connection:=FConn;
end;

destructor TEroeffnungsDB.Destroy;
begin
  FConn.Free;
  FQuery.Free;
  inherited Destroy;
end;

function TEroeffnungsDB.Init(DBName, User, Passwd: String):Boolean;
begin
  try
    //in Temp-DB ablegen
    FDBName:=ExtractFileDir(DBName)+STD_TEMP_DB+ExtractFileExt(DBName);
    CopyFile(PAnsiChar(DBName),PAnsiChar(FDBName),False);
    //öffnen
    FConn.Provider:='MSDAIPP.DSO';
    FConn.DefaultDatabase:=FDBName;
    FConn.Open(User, Passwd);
    Result:=True;
  except
    Result:=False;
  end;
end;

function TEroeffnungsDB.UnInit:Boolean;
begin
  try
    //schliessen
    FConn.Close;
    //Temp-DB löschen
    DeleteFile(FDBName);
    Result:=True;
  except
    Result:=False;
  end;
end;

function TEroeffnungsDB.SetNeuenZug(Neu: TZug):Integer;
begin
  //irrelevante Züge löschen
  FQuery.SQL.Clear;
  FQuery.SQL.Add('DELETE FROM :table WHERE (Zugid=:zugid) AND (zug<>:zug)');
  FQuery.Parameters.ParamValues['table']:=FTable;
  FQuery.Parameters.ParamValues['zugid']:=FZugID;
  FQuery.Parameters.ParamValues['zug']:=Neu;
  FQuery.ExecSQL;
  repeat
    FQuery.SQL.Clear;
    FQuery.SQL.Add('DELETE FROM :table WHERE NOT parentid IN ( SELECT id FROM :table)');
    FQuery.Parameters.ParamValues['table']:=FTable;
    FQuery.ExecSQL;
  until FQuery.RowsAffected=0;
  FQuery.ClearFields;
  inc(FZugID);
end;

function TEroeffnungsDB.GetNeuenZug:TZug;
begin
  //Neuen Zug holen
  FQuery.SQL.Clear;
  FQuery.SQL.Add('SELECT Zug FROM '+FTable+' ORDER BY ZugID, Bewertung');
  FQuery.Open;
  Result:=FQuery.Fields.FieldByName('Zug').AsString;
  FQuery.ClearFields;
  SetNeuenZug(Result);
end;

tr909 26. Apr 2005 07:50

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Binärbaum
Aber was den Rest angeht, stimme ich zu, bis auf die DB für das Endspiel. Die ist IMHO nicht nötig (im Gegensatz zur Eröffnungsdatenbank).

Nun gut. Anstatt der Endspiel-DB kann mann natürlich auch Brute-Force bis zum Ende machen, das das Spiel ab dieser Situation in annehmbarer Zeit komplett berechnet werden kann.

Gruß
DerAnkh

Cicaro 26. Apr 2005 09:16

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Seniman
Zitat:

Zitat von Binärbaum
Zitat:

Zitat von tr909
Also was die KI angeht, würde ich es folgendermaßen machen.
Eine Eröffnungsdatenbank, wo der Spielbaum für die ersten Züge abgelegt wird, sowie eine Endspiel-Datenbank.

Aber was den Rest angeht, stimme ich zu, bis auf die DB für das Endspiel. Die ist IMHO nicht nötig (im Gegensatz zur Eröffnungsdatenbank).

Dazu kommt, das eine DB für das Endspiel viel zu groß, einfach, weil die Endsituation immer anders aussieht, während die Figuren am Anfang immer gleich stehen. Außerdem gibt es am Ende immer andere Figuren die da sind. Dadurch vergrößert sich die Anzahl der theoretisch denkbaren Endspiele unglaublich schnell.

einen kompletten Spielbaum anzufertigen ist keine gute Idee; :?
find' ich;
denn theoretisch kann eine Partie endlos sein;
einen Baum bis zum 10. Zug:=OK;

Tonic1024 26. Apr 2005 09:32

Re: Ideen zur Schach KI
 
Hi

Zitat:

Zitat von Airblader
Wenn bei Schach etwas Nebensache ist, dann wohl die Zeit ;)

Das ist so nicht richtig. Natürlich speilen auch echte Profis - vorallem diese - auf Zeit, Auch wenn es manchmal nicht so ausschaut.

Was himitsu meinte war wohl aber auch etwas anders zu verstehen. Wenn du viel schneller Abschätzen kannst welche Züge völliger Mist sind, kannst du dich ja mit deiner Zeit, die du ja nur begrenzt zur verfügung hast, viel sinnvolleren Dingen zuwenden. Eine KI muss selbst entscheiden wann es sinnvoll ist den äußersten Bauern, der nach einer Rocharde den König schützt, um eins vorzuziehen.

Als Konkretes Beispiel:
Sinnvoll ist es wenn so ein bevorstehendes Matt verhindert werden kann, weil der Turm schon weg ist und der König "Luft braucht" oder wenn der Turm noch steht um einen Angriff mit einer Dame oder einem Läufer von Forne abzuwähren. Unsinnig ist es den selben Bauernzug überhaupt in betracht zu ziehen, wenn die Rocharde überhaupt noch nicht, oder bereits zur anderen Seite gemacht wurde. Auch unsinnig ist er als Eröffnung beispielsweise.

Die KI sollte immer wenn sie am Zug ist möglichst viele Züge vorausberechnen um einen möglichst großen Pool zu haben aus dem sie sich den besten oder erfolgverspechensten Zug auswählt. Nätürlich hat die KI nicht Stunden Zeit für jeden Zug, und natürlich muss sie diese Berechnung öfter machen. Entweder bei jedem Zug neu oder - viel eleganter - erst dann wenn ihr Plan (Der aktuell gültige Branch) nicht mehr funktionieren kann. Wenn sie also - wie auch immer - erkennt, welcher Branch überhaupt nie zu was führen kann (Beispiel oben) hat sie mehr Zeit einen qualitativ hochwertigen Pool in der selben Zeit zu erstellen.

Ich könnt noch Stunden so weiter machen... Das Thema versprüht eine irre Faszination *g*

MfG

Tonic

Cicaro 26. Apr 2005 09:58

Re: Ideen zur Schach KI
 
Besitzt jemand eine Umfangreiche Eröffnungsdatenbank ?
Sowas hätte ich gerne, würde eine solche auch gern in mein Spiel einbauen.

Arnulf 26. Apr 2005 10:41

Re: Ideen zur Schach KI
 
naja ich hab eröffnungsbücher zuhause.
hab ne zeitlang in nem club gespielt - recht gut sogar - gut über 1500 elo und das in der ersten liga :)

sicher kann ich dir ein paar eröffnungen posten, eine fertige datenbank hab ich leider nicht.

Die eröffnung geht übrigens über ca. 12-14 züge - solange wird praktisch die verteidigung aufgebaut bzw. der Angriff vorbereitet.
Die eröffnung - ist aber schon ziemlich bald sehr variabel - meistens geht es bei einer eröffnung darum eine position zu stärken oder sich in einem bestimmte bereich platz zu schaffen.

Ich hab hier nicht alles geslesen - aber die ansätze stimmen wohl.
Wertigkeiten hätte ich 1. den figuren gegeben 2. den positionen der figuren.
Türme die eine linie beherschen sind sehr stark.
Läufer die auf langen schrägen stehen werden ebenfalls als stark angesehen.
Springer haben ebenfalls positionen die sehr stark sind.

Bauern haben ebenfalls wertigkeiten am feld - die mittleren bauern sind eher als stärker zu betracheten.

Jeh nach plan ist es auch sinnvoll sich erstmal platz zu verschaffen (typische königsbauern eröffnung).
Allerdings sollte man mit bauern eher weniger machen - die anderen figuren müssen ins spiel.
Figuren die auf der Grundlinie stehen sind wertlos oder kommen erst beim endspiel ins spiel und das ist oft zu spät.

Jede Figur hat also eine tabelle mit wertigkeiten - verhältnisse.
( 2 bauern für einen springer - 2 türme für eine dame und einen bauern usw.)
Jede figur hat gleichzeitig felder an denen sie ihre wertigkeit erhöhen können.
Das ist jetzt rein taktisches spielen und wird das schachprogramm nicht gut machen aber es ist eine grundfunktion auf die man zurückgreifen kann.
Auch sollte die wertigkeit variabel werden können - für späteren ausbau. - also sich der spielsituation anpassen können.
Wie das beispiel von dem bauern der sich in eine dame verwandeln kann. - klar hat der hohe wertigkeit aber nicht zu beginn des spiels!

Das ist mal die basisfunktion.
Eröffnungsdatenbank ist sicherlich sehr wichtig - man kann tatsächlich von der eröffnung schon auf die richtung des zu erwartenden angriffs schließen.
Also man kann tatsächlich beim ersten Zug richtig oder falsch reagieren.
Hier sollte die Datenbank also beinhalten.
1. Die Zugreihenfolge wie aus den Büchern ( bis zu 14-15 Züge ).
2. Die fallen der Eröffnung - (ist dann gleich mal ein eröffnungstrainer :)).
3. Die Grundtaktik der Eröffnung und die idee hinter der eröffnung ( ja die gibt es ).

und dann kommen wir zu dem teil der die eigentliche ki ausmacht.

Ein Plan muß her - so machen es die Menschen.
natürlich kann man einfach situationen berechnen lassen - aber ein zug ist schon ordentlicher recheaufwand - geschweige denn 4-5 Züge.
Hier muß also wieder eine wertigkeit eingeführt werden - welche Figuren sind als passiv zu betrachten und welche Aktiv.
Welche stellen eine gefahr dar und welche sind ganz aus der berechnung rauszunehmen.

Hier hab ich aber auch nur spinnereien zu liefern .. nicht mehr.

Arnulf

Cicaro 26. Apr 2005 11:24

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Arnulf
Jede Figur hat also eine tabelle mit wertigkeiten - verhältnisse.
( 2 bauern für einen springer - 2 türme für eine dame und einen bauern usw.)
Jede figur hat gleichzeitig felder an denen sie ihre wertigkeit erhöhen können.

Das klingt interessant. Die Tabelle hätte ich gerne, wenns recht ist. Dann hätte ich bei der KI-Taktik, Figurenwertigkeiten, eine gute Basis.
Zitat:

Zitat von Arnulf
Das ist jetzt rein taktisches spielen und wird das schachprogramm nicht gut machen aber es ist eine grundfunktion auf die man zurückgreifen kann.

Wieso macht es sich in Schachprogrammen nicht gut, ein taktisches Spielen zu haben ? Würde mir dies schon gelingen wär' ich endlich froh. Es soll nicht unbedingt die weltbeste Schach-KI werden.
Zitat:

Zitat von Arnulf
Auch sollte die wertigkeit variabel werden können - für späteren ausbau. - also sich der spielsituation anpassen können.

Das hatte ich auch vor. Hier sind wir wieder bei der lernenden KI.

Tonic1024 26. Apr 2005 11:26

Re: Ideen zur Schach KI
 
Hi...

Delphi-Quellcode:
Result:=Google('Schach', 'Datenbank', 'Eröffnung');

Speedmaster 26. Apr 2005 11:55

Re: Ideen zur Schach KI
 
Zum Thema lernende KI:

Obwohl dies beim Schachspiel Relativ leicht ist, ist es auch wieder nicht so leicht.

Um einen Schachcomputer zum lernen zu bewegen muss man eine Zug -> Ergebniss - Analyse einführen.
D.h. der SC muss nach einem oder mehreren Zügen eine Analyse durchführen was die Züge von einem selber, und die Züge vom Gegner gebracht haben, dabei muss der Zusammenhang zu den Vorhergehenden Zügen beachtet werden.

Obwohl dies schon Relativ schwer ist wenn man sich nicht auf eine Feste Anzahl an Zügen beschränkt( Was dann eine Lineare KI wäre ), ist es noch viel Schwerer dem SC beizubringen diese Züge im Richtigen Moment auszuführen, oder z.b. eine Falle des Gegners vorzeitig zu erkennen und darauf entsprechend Reagieren zu können.

Arnulf 26. Apr 2005 12:00

Re: Ideen zur Schach KI
 
Zitat:

Wieso macht es sich in Schachprogrammen nicht gut, ein taktisches Spielen zu haben ? Würde mir dies schon gelingen wär' ich endlich froh. Es soll nicht unbedingt die weltbeste Schach-KI werden.
Es macht das programm deshalb nicht gut, weil er nur taktisch spielen würde und keine startegie hätte.

Es wäre vermutlich spielbar und für anfänger vielleicht sogar garnicht schlecht - aber man kann so ein programm doch leicht austriksen - vor allem wenn man die wertigkeiten ungefähr kennt.

Ich wüde mit ein paar Profis reden die immer noch schach spielen - ich hab vor 8 Jahren aufgehört.

Aber die wertigkeit kann ich so ungefähr hinbekommen.

1. springer läufer haben gleiche wertigkeit.
2. turm = springer + bauer
3. dame = turm + 2 Bauern (od. springer/läufer).

Das sind ungefähre verhäldnisse.
Ausserdem gibt es kombinationen die stark sind.
2 Türme sind normalerweise stärker als 1 Dame - (1 Dame + Bauer).
2 läufer sind gut weil man beide felder überwachen kann - aber die schwäche ist hald, daß sie sich nicht gegenseitig decken können - ich hab immer einen läufer und einen springer bevorzugt.
1 läufer und 1 springer sind recht gut in kombination!
2 Springer sind eher schwächer (ähnlich wie zwei läufer).

Das ist mal nur ein leitfaden - ich denke jeder spieler hat da so seine eigenen vorzüge aber die grundstruktur stimmt.

wenn man das mal rein tatkisch aufbauen will, kann man neben der datenbank auch mal die wergikeit für die eröffnungszüge und die jeweiligen positionen der figuren in einer tabelle haben.
Diese Wertigkeit könnte sich nach ein paar zügen (ende der eröffnung) ändern und eben das erste mal anpassen.

Man gibt hier alse den springern oder läufern hohe weritkeiten ausserhalb der grundlinie.
Das wäre mal ein schachprogramm dem man ein gewisses taktick spiel nicht absprechen kann - aber gut macht es das programm sicher nicht. Es fehlt einfach immer noch die taktik und das ziel :) - und auch das erkennen von abstrakten gefahren.

Das Programm würde nur versuchen sich theoretisch gut zu positionieren - was für die viele spieler vermutlich sogar reichen würde :)

Arnulf

Arnulf 26. Apr 2005 12:27

Re: Ideen zur Schach KI
 
Das ganze system auf wertigkeittabellen aufzubauen ist meiner meinung nach ein ganz interessante methode.
Man kann das soweit treiben, daß man auch tabellen für gefahrensituationen hat.
Schafft der gegner es mit einem zu eine figur in gefahr zu bringen (hier muß man dann auf die tabellen der wertigkeiten der figuren zurückgreifen).
kann also ein bauer von einem springer bedroht werden, wird man nich so viel darauf setzen ausser der bauer hat in seiner position eine hohe wertigkeit.
Die wertigkeit des bauern kann sich auch herabsetzen wenn er gedeckt ist.

Das ist vor allem ein spielen mit tabellen.
Aber eine situationsanalyse ist auf der art durchaus möglich.
Sicher ein professionelles schachprogramm wird das nicht aber es könnte schon seinen reiz entwickeln.

so ist sowas zumindest rein mathematisch möglich zu berechenen.

Immer noch gibts keine plan hinter dem ganzen - Aber zumindestens erkennt das programm dann spielsituationen.

Wenn das programm aktuell keine gefahr entdeckt wird es hald einen zug machen das die eigene position verbessert.
Aber geplant angreifen tut das hald immer noch nicht und abstraktere situationen werden hier wohl auch in die hose gehen.

Aber immerhin man könnte spielen - vor allem wenn man viel herumbastelt mit den tabellen.

Arnulf

Tonic1024 26. Apr 2005 12:42

Re: Ideen zur Schach KI
 
Zitat:

Zitat von Arnulf
1. springer läufer haben gleiche wertigkeit.
2. turm = springer + bauer
3. dame = turm + 2 Bauern (od. springer/läufer).

Das sind ungefähre verhäldnisse.
Ausserdem gibt es kombinationen die stark sind.
2 Türme sind normalerweise stärker als 1 Dame - (1 Dame + Bauer).
2 läufer sind gut weil man beide felder überwachen kann - aber die schwäche ist hald, daß sie sich nicht gegenseitig decken können - ich hab immer einen läufer und einen springer bevorzugt.
1 läufer und 1 springer sind recht gut in kombination!
2 Springer sind eher schwächer (ähnlich wie zwei läufer).

Das ist mal nur ein leitfaden - ich denke jeder spieler hat da so seine eigenen vorzüge aber die grundstruktur stimmt.

Nicht so ganz...

Bauer -> 1 Punkt
Springer/Läufer -> 3 Punkte
Turm -> 5 Punkte
Dame -> 9 Punkte
(wurde das nicht schon erwähnt hier irgendwo)

Deine Regeln (oder Leitfaden) sind größtenteil Schlußfolgerungen daraus.

Aber ich denke dass dieses Punkte System nicht 1:1 funktionieren wird. Wenn kaum noch Figuren auf dem Brett sind sind Bauern sehr wichtig, weil eine Dame draus werden kann. Wenn alle Figuren auf Schwarzen Feldern eine wichtige Funktion haben ist ein weißer Läufer (also der auf einem weißen Feld steht) unnütz. Wenn noch viele Figuren auf dem Feld sind und man mit einem Läufer eine komplette (oder gar zwei) Diagonalen beherrscht ist dieser Gold wert. Wenn er aber noch auf der grundlinie steht, weil vergessen/unterdrückt zu entwickeln, ist er schwach und wertlos. Zwei Läufer sind stark. Aber nur wenn sie nebeneinander stehen und auch wirklich felder bedrohen und sich nicht hinter einer Reihe Bauern verstecken. Ein Springer allein ist nicht mehr Wert als als ein Läufer aber wenn er im nächsten drei Zügen die Dame durch eine Gabel bekommt ist er (fast) die wichtigste Figur auf dem Brett.

Wie du siehst, alles nicht so einfach. Und ich denke so eine variable Wertigkeitstabelle sollte schon eine Rolle spielen bei der KI. Quasi Taktik-Boni für die Figuren.
Code:
Figurwert=FigurGrundwert+TakikBonus+X
MfG

Tonic

[Edit]
Ausserdem sollte es mehrere Sekundärziele geben, die die KI verfolgt. Angenommen die KI rechnet 4 (oder 5, 6, mehr) Züge voraus. (Das mag nicht viel erscheinen, aber das ist wohl mehr als was der durchschnitts Hobby Schachspieler vermag und die Rechenzyklen würden sich in grenzen halten.) Dann sollte sie auf jeden fall schauen, ob nicht innerhalb dieser Züge schon ein Matt/optional ein Remis zu erzwingen ist. Dann sollte sie gezielt schauen, ob nicht eine Figur gewonnen/optional abgetauscht oder bedingt abgetauschtwerden kann - soll heissen wenn sie dadurch startegischen Vorteil hat oder Punkte gewinnt (Bauern mehr oder sowas) ohne selbst schlechter da zu stehen. Natürlich sollte auch die eine oder ander Taktik darauf zielen, dass die Dame gewonnen/abgetauscht/bedingt abgetauscht wird.

Was ich damit sagen will: Es reicht nicht nur einen Spielbaum ( x Züge lang) zu erzeugen, sondern diesen auch noch dahingehend auszuwerten was alles für möglichkeiten drin sind. Dazu kommt, dass die KI nicht nur offensiv spielen darf. Es nutzt nichts, wenn die KI mit 19 Punkten vorsprung verloren hat :wink:
[/Edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz