Delphi-PRAXiS
Seite 7 von 10   « Erste     567 89     Letzte »    

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)

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr.
Seite 7 von 10   « Erste     567 89     Letzte »    

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