Re: Ideen zur Schach KI
Zitat:
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 |
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: |
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 |
Re: Ideen zur Schach KI
Zitat:
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: |
Re: Ideen zur Schach KI
Zitat:
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 |
Re: Ideen zur Schach KI
Zitat:
|
Re: Ideen zur Schach KI
Zitat:
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 |
Re: Ideen zur Schach KI
Zitat:
|
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; |
Re: Ideen zur Schach KI
Zitat:
Gruß DerAnkh |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr. |
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