Einzelnen Beitrag anzeigen

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