Delphi-PRAXiS
Seite 5 von 10   « Erste     345 67     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)

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; :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 Uhr.
Seite 5 von 10   « Erste     345 67     Letzte »    

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