AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alpha-Beta Suche

Ein Thema von Monday · begonnen am 12. Jan 2016 · letzter Beitrag vom 12. Jan 2016
 
Benutzerbild von frankyboy1974
frankyboy1974

Registriert seit: 7. Apr 2015
Ort: SH
169 Beiträge
 
Delphi XE7 Professional
 
#2

AW: Alpha-Beta Suche

  Alt 12. Jan 2016, 15:30
hallo,

also erstmal Respekt, ist sicher keine ganz leichte Aufgabe, die du dir gestellt hast. Habs kurz mal überflogen. Vielleicht kann ich ein wenig helfen:

Zitat:
// In Wikipedia wird die Funktion mit Variable "Spieler" begonnen => was ist denn damit gemeint in meinem Fall?! Das Brett zur Bewertung?! eine ID ?? Farbe?!
// am_zug habe ich hinzugefügt => w / b für weiß oder schwarz
Spieler meint die Id des Spieler also 1 bzw -1. Beim Schachspiel würde ich das so programmieren, das 1 Weiss meint und -1 entspechend schwarz
Die zusätzlich Information w / b brauchst du dann eigentlich nicht mehr. Wenn du also für weiss den Zug berechnen möchtest, ruftst du Funktion mit 1 ansonsten mit -1 auf

Zitat:
{OR keine zügemehr}
Du musst also eine Funktion programmieren, die ermittelt ob für den aktuellen Spieler, für den du gerade die MinMax ausführst, aus der aktuelle betrachteten Stellung überhaupt noch Zugmöglichkeiten bestehen (Schach-Matt). Du bewertest also immer dann die Stellung, wenn entweder die maximale Zugtiefe erreicht wurde ist oder es eben keine weiteren Züge mehr gibt. Wenn du also eine Zugtiefe von 4 Züge eingestellt hast und der Gegner schon nach 2 Züge Schach-Matt ist, macht es keine Sinn mehr diesen 'Ast' weiter zu durchlaufen.

Zitat:
// Zug vor?!
wert := -miniMax(id,tiefe-1,-beta,-maxWert,farbwechsel(am_zug),zugliste[a].stellung_lang);
// Zug zurück?!
Aus einer gegebenen Schachstellung, berechnest du erstmal alle(erlaubten) neuen Schachstellungen nach einem Zug, dann wählst du eine daraus aus, rufst wiederum rekursiv die minmax-Funktion auf, anschließend musst du natürlich wieder zu deiner Ausgangsstellung zurückkehren. Ich bin mir nicht ganz sicher, ob es reicht sich nur die Ausgangstellung zu merken, und dann jeweils die Züge sich zu merken oder ob es nicht doch erforderlich ist, sich tatsächlich jede Stellung einzeln zu merken (Rückwärtsrechnung beim Schach Möglich?/ Stichwort en Passante). Hab seit Jahren kein Schach mehr gespielt.

Zitat:
//if tiefe = anfangstiefe then begin end; // Was soll hier geschehen?!
Wenn du an diese Stelle kommst speicherst du denn bis dahin besten Zug , dieser wird dann am Ende ausgeführt, es sein denn beim Durchlaufen, findet sich eine noch bessere Alternative.

Zitat:
Eine Stellung bewertung - geschieht das in der Alpha-Beta Funktion, oder muss dies bereits vorher geschehen?
Die Stellungbewertung rufst du mit der Bewerten(Spieler)-Funktion on-the-fly auf. Das ist wahrscheinlich bezogen auf das eigentliche Schachprogramm, die anspruchsvollste Methode.

Ich hoffe zumindestens ein klein wenig geholfen zu haben.

mfg
Java ist auch eine Insel.
Ist Delphi von Oracle?
In meiner Buchstabensuppen fehlt das C++!
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.
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