Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 1 Schachregeln in Datalog Deduktive Datenbanken WS 2000/01 Schachregeln in Datalog.

Ähnliche Präsentationen


Präsentation zum Thema: "Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 1 Schachregeln in Datalog Deduktive Datenbanken WS 2000/01 Schachregeln in Datalog."—  Präsentation transkript:

1 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 1 Schachregeln in Datalog Deduktive Datenbanken WS 2000/01 Schachregeln in Datalog modelliert

2 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 2 "Schachspielen in Datalog"? in diesem zweiten Einschub: ausführliche Diskussion eines weiteren Modellierungs- beispiels einer "realen" Anwendung unter Verwendung von Datalog und DDB Wieso sind die Regeln des Schachspiels ein (deduktives) DB-Thema ? Schach ist seit langem ein aktives Anwendungsgebiet verschiedenster Informatik-Techniken vorwiegend populär geworden: Schachspielprogramme ("Deep Blue") Forschungsthema u.a. in der KI, Spieltheorie und Algorithmik zentrale Rolle spielen Datenbanken mit Partien (z.B. von Großmeistern auf internationalen Turnieren) Stellungen (mit Fortsetzungsmöglichkeiten), insbesondere Eröffnungen und Endspiele (z.B. alle 5-Steiner: ca. 2 Giga-Byte!) Schachdatenbanken erheblichen Umfangs (z.B. 1,6 Mill. Partien) kommer- ziell über Internet oder auf CD-ROMs verfügbar bisher: "Schach-DB" als reine Faktensammlungen (oft komprimiert) mit speziellen Schnittstellen; selten Verwendung eines DBMS; nie regelbasierte Techniken

3 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 3 Regeln in Schach-DB: Ideen und Spekulationen am naheliegendsten: Spielregeln als DB-Regeln normativ: zulässige Zugfolgen (dynamische IB) und Stellungen (statische IB) deduktiv: Definitionen von Schach-Begriffen (z.B. matt, remis, gedeckt, gefesselt) und der legalen Zugmöglichkeiten aktiv: Lehr- und Trainingssysteme, Überprüfung "dynamischer" Spiel- regeln (Remisreklamation nach 50 Zügen, Bauernumwandlung) weitere Einsatzmöglichkeiten deduktiver Regeln: Bewertung und Analyse von Stellungen Herleiten von Stellungen aus Zugfolgen Empfehlungen für aussichtsreiche Folgezüge (Strategien) ebenfalls aussichtsreich: "Data Mining" in Schach-DB (zur Gewinnung strategischen Wissens: Assoziationsregeln) all diese Möglichkeiten: bisher (meines Wissens) praktisch nicht genutzt folgende Beispielmodellierung diente als Grundlage für entsprechende Fallstudie (einschlägige Diplomarbeit Uni Bonn 1999)

4 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 4 Schachbrett mit Koordinatensystem a b c d e f g h Y X Feld mit Koordinaten (d,4) reihe(a). reihe(b).... reihe(h). reihe(a). reihe(b).... reihe(h). zeile(1). zeile(2).... zeile(8). zeile(1). zeile(2).... zeile(8). feld (X,Y) reihe(X), zeile(Y). feld (X,Y) reihe(X), zeile(Y).

5 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 5 Datalog-Erweiterung um geklammerte Terme Koordinatenpaarangabe für Felder motiviert geringfügige Erweiterung von Datalog: Zulassen von geklammerten (u.U. auch geschachtelten) Termen auf Parameterposition in Literalen damit möglich: Auffassen von Feldkoordinaten als Einzelterme: z.B.: p(X, (X, Y, (a, b))) feld( (X,Y) ) reihe(X), zeile(Y). erweitertes Matching ("Unifikation") von Variablen gegen Klammerterme bzw. von Klammertermen untereinander: feld(F) feld( (X, 3) ) feld( (a,3) ) feld(F) feld( (X, 3) ) feld( (a,3) ) F = (a,3)X = a

6 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 6 Topologie des Schachbretts a b c d e f g h Y X zunächst: aufbauend auf Grund- relationen reihe zeile feld Modellierung von Nach- barschaftsbeziehungen zwischen Feldern "Topologie" des Schachbretts

7 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 7 Topologie des Schachbretts (2) rechts_von(a,b). rechts_von(b,c).... rechts_von(g,h). links_von(X1,X2) rechts_von(X2,X1). rechts_von(a,b). rechts_von(b,c).... rechts_von(g,h). links_von(X1,X2) rechts_von(X2,X1). über(1,2). über(2,3).... über(7,8). unter(Y1,Y2) über(Y2,Y1). über(1,2). über(2,3).... über(7,8). unter(Y1,Y2) über(Y2,Y1). vertikal ((X,Y1), (X,Y2), oben) reihe(X), über(Y1,Y2). vertikal ((X,Y1), (X,Y2), unten) reihe(X), unter(Y1,Y2). vertikal ((X,Y1), (X,Y2), oben) reihe(X), über(Y1,Y2). vertikal ((X,Y1), (X,Y2), unten) reihe(X), unter(Y1,Y2). analog: horizontal (3. Parameter: rechts, links)

8 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 8 Topologie des Schachbretts (3) Verallgemeinerung von vertikal/horizontal: rechtwinklig (Feld1, Feld2, Richtung) vertikal(Feld1, Feld2, Richtung). rechtwinklig(Feld1, Feld2, Richtung) horizontal(Feld1, Feld2, Richtung). rechtwinklig (Feld1, Feld2, Richtung) vertikal(Feld1, Feld2, Richtung). rechtwinklig(Feld1, Feld2, Richtung) horizontal(Feld1, Feld2, Richtung). diagonale Nachbarschaft: diagonal( Feld1, Feld2, (Hor, Ver)) vertikal( Feld1, Feld3, Ver), horizontal( Feld3, Feld2, Hor). diagonal( Feld1, Feld2, (Hor, Ver)) vertikal( Feld1, Feld3, Ver), horizontal( Feld3, Feld2, Hor).

9 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 9 Topologie des Schachbretts (4) Zusammenfassung von 'diagonal' und 'rechtwinklig': benachbart (Feld1, Feld2) diagonal(Feld1, Feld2, _). benachbart(Feld1, Feld2) rechtwinklig(Feld1, Feld2, _). benachbart (Feld1, Feld2) diagonal(Feld1, Feld2, _). benachbart(Feld1, Feld2) rechtwinklig(Feld1, Feld2, _). indirekte Versionen aller Nachbarschaftsrelationen durch transitiven Abschluß: rechts_von* (X,Y) rechts_von(X,Y). rechts_von*(X,Y) rechts_von(X,Z), rechts_von*(Z,Y). rechts_von* (X,Y) rechts_von(X,Y). rechts_von*(X,Y) rechts_von(X,Z), rechts_von*(Z,Y). (analog: links_von*, über*, unter*) vertikal* (X,Y,R) vertikal(X,Y,R). vertikal*(X,Y,R) vertikal(X,Z,R), vertikal*(Z,Y,R). vertikal* (X,Y,R) vertikal(X,Y,R). vertikal*(X,Y,R) vertikal(X,Z,R), vertikal*(Z,Y,R). (analog: horizontal*, rechtwinklig*, diagonal*, benachbart*)

10 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 10 Figuren und Farben farbe (w). weiß farbe(s). schwarz farbe (w). weiß farbe(s). schwarz gegner (s,w). gegner(w,s). gegner (s,w). gegner(w,s). stein (k). König stein(d). Dame stein(t). Turm stein(l). Läufer stein(s). Springer stein(b). Bauer stein (k). König stein(d). Dame stein(t). Turm stein(l). Läufer stein(s). Springer stein(b). Bauer a b c d e f g h

11 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 11 Positionen von Figuren auf dem Brett a b c d e f g h position (k, s, (c,8)). position(d, s, (b,5)). position(b, s, (g,7)). position(k, w, (f,1)). position(l, w, (e,2)). position(b, w, (c,3)). position (k, s, (c,8)). position(d, s, (b,5)). position(b, s, (g,7)). position(k, w, (f,1)). position(l, w, (e,2)). position(b, w, (c,3)). Beschreibung einer aktuellen Spielstellung durch Fakten: besetzt_von(Feld, Farbe) position(_, Farbe, Feld). besetzt (Feld) besetzt_von( Feld, _). frei (Feld) feld(Feld), not besetzt(Feld). besetzt_von(Feld, Farbe) position(_, Farbe, Feld). besetzt (Feld) besetzt_von( Feld, _). frei (Feld) feld(Feld), not besetzt(Feld). im_spiel (Stein, Farbe) position(Stein, Farbe,_). geschlagen (S, F) stein(S), farbe(F), not im_spiel(S, F). im_spiel (Stein, Farbe) position(Stein, Farbe,_). geschlagen (S, F) stein(S), farbe(F), not im_spiel(S, F).

12 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 12 Korrekte Positionierung von Figuren Bereits mit diesen einfachen Begriffen zum Beschreiben von Schachbrett und Spielkonstellationen sind viele inkorrekte Zustände konstruierbar, die durch geeignete Integritätsbedingungen verhindert werden müssen. Ein und dasselbe Feld darf nicht mit zwei verschiedenen Figuren besetzt sein: Eine Figur kann nicht gleichzeitig auf zwei verschiedenen Feldern stehen: constraint not doppelt_belegt with doppelt_belegt position(Figur1, Farbe1, Feld), position(Stein2, Farbe2, Feld), (Stein1,Farbe1) (Stein2,Farbe2) ! constraint not doppelt_belegt with doppelt_belegt position(Figur1, Farbe1, Feld), position(Stein2, Farbe2, Feld), (Stein1,Farbe1) (Stein2,Farbe2) ! constraint not doppelt_positioniert with doppelt_positioniert position(Stein, Farbe, Feld1), position(Stein, Farbe, Feld2), Feld1 Feld2 ! constraint not doppelt_positioniert with doppelt_positioniert position(Stein, Farbe, Feld1), position(Stein, Farbe, Feld2), Feld1 Feld2 ! ? ? ? ?

13 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 13 Feinere Figurenmodellierung constraint not doppelt_positioniert with doppelt_positioniert position(Stein, Farbe, Feld1), position(Stein, Farbe, Feld2), Feld1 Feld2 ! constraint not doppelt_positioniert with doppelt_positioniert position(Stein, Farbe, Feld1), position(Stein, Farbe, Feld2), Feld1 Feld2 !... formalisiert leider nicht, was gemeint war !! Grund: Es gibt von den meisten Steinen mehrere Exemplare, die mit der bisherigen Modellierung nicht unterschieden werden können! Ausweg: "Feinere" Unterscheidung von Stein-Exemplaren etwa durch zusätzliche Angabe der Reihe, in der der Stein am Spielbeginn stand, z.B.: z.B.: position(b, w, (a,2)). ist völlig in Ordnung position(b, w, (b,2)). z.B.: position(b, w, (a,2)). ist völlig in Ordnung position(b, w, (b,2)). position(l, w, f, (c,4) ). position(l, w, c, (h,6) ). position(l, w, f, (c,4) ). position(l, w, c, (h,6) ). a b c d e f g h

14 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 14 Figuren statt Steine Um gleichzeitigen Zugriff auf alle Aspekte eines Stein-Exemplars zu gewährleisten: wieder Verwendung von strukturierten Termen zur Modellierung, z.B.: zur besseren Unterscheidung: neuer Begriff 'Figur' für 'Exemplar eines Steins': zum Unterscheiden von Figuren ohne Komponentenschreibweise: "Typprädikate" (s, w, b) weißer Springer, der auf (b, 1) beginnt ("Damenspringer") figur ((s, w, b)) Stein Farbe Reihe bauer ((b, F, R)) farbe(F), reihe(R). bauer ((b, F, R)) farbe(F), reihe(R). analog: springer/1, läufer/1,... weiss/1, schwarz/1, gegnerisch/2... farbe_von/2

15 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 15 Weitere Integritätsaspekte Um zu verhindern, daß zu viele Figuren ins Spiel kommen, muß auch der "Vorrat" an Figuren entsprechend explizit angepaßt werden: figur( (b, w, a) ). figur( (t, w, a) ). figur( (b, w, b) ). figur( (t, w, h) ).... figur( (b, w, a) ). figur( (t, w, a) ). figur( (b, w, b) ). figur( (t, w, h) ).... Entsprechend muß die Syntax für Positionsvergabe angepaßt und durch Typ- Constraints kontrolliert werden: position(k, s, (f, 5)). = = = > position( (k, s, e), (f, 5) ). constraint not fehlbelegung with fehlbelegung position(Figur, _), not figur(Figur) ; fehlbelegung position(_, Feld), not feld(Feld) ! constraint not fehlbelegung with fehlbelegung position(Figur, _), not figur(Figur) ; fehlbelegung position(_, Feld), not feld(Feld) !

16 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 16 Integrität bei Schachpositionen (3) Alle Figuren dürfen auf dem Schachbrett fehlen, nur die beiden Könige müssen in jeder Schachstellung auf dem Brett stehen: constraint beide_könige_im_spiel with beide_könige_im_spiel im_spiel(k, w), im_spiel(k, s) ! constraint beide_könige_im_spiel with beide_könige_im_spiel im_spiel(k, w), im_spiel(k, s) ! Sonderregelung erforderlich für den Fall, daß ein Bauer zur gegnerischen Grundlinie vorstößt und "umgewandelt" werden kann (in eine höherwertige Figur, z.B. eine zusätzliche Dame): Wie kennzeichnet man solche Extra- figuren in der dritten Komponente eines figur-Terms? ganz sicher: noch diverse weitere Integritätsbedingungen zum Modellieren zulässiger Schachpositionen erforderlich

17 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 17 Stellungsanalyse durch DB-Prädikate: Motivation a b c d e f g h gefesselt im_schach bedroht_durch gedeckt_von

18 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 18 Besetzbare und erreichbare Felder Vorgehensweise beim Modellieren von Zugmöglichkeiten. a) pro Figur: 1) Felder, die die Figur auf einem leeren Schachbrett erreichen kann erreichbar 2) Felder, die diese spezielle Figur in der aktuellen Stellung besetzen kann besetzbar_1 b) für alle Figuren generell: erreichbare Felder, die aktuell tatsächlich besetzt werden können besetzbar gefesselt erreichbar blockiert besetzbar

19 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 19 Besetzbare Felder gefesselt blockiert für alle Figuren gleichermassen: Eine Figur kann auf ein für sie im Prinzip besetzbares Feld (besetzbar_1) nur dann ziehen, wenn ° sie selbst nicht gefesselt ist, ° das Feld nicht von einer eigenen Figur blockiert wird. (Blockierende gegnerische Figuren können hingegen geschlagen werden.) schlagbar besetzbar (Figur, Feld1, Feld2) besetzbar_1(Figur, Feld1, Feld2), farbe_von(Figur, Farbe), not besetzt_von(Feld2, Farbe), not gefesselt(Figur, Feld1). besetzbar (Figur, Feld1, Feld2) besetzbar_1(Figur, Feld1, Feld2), farbe_von(Figur, Farbe), not besetzt_von(Feld2, Farbe), not gefesselt(Figur, Feld1). (noch zu definieren)

20 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 20 Zugmöglichkeiten des Läufers erreichbar (Figur, Feld1, Feld2) läufer (Figur), diagonal*(Feld1, Feld2, Richtung). erreichbar (Figur, Feld1, Feld2) läufer (Figur), diagonal*(Feld1, Feld2, Richtung). von nach Läufer können diagonal beliebig weit ziehen.

21 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 21 Zugmöglichkeiten des Läufers (2) besetzbar_1 (Figur, Feld1, Feld2) läufer(Figur), erreichbar(Figur, Feld1, Feld2), not verdeckt(l, Feld1, Feld2). besetzbar_1 (Figur, Feld1, Feld2) läufer(Figur), erreichbar(Figur, Feld1, Feld2), not verdeckt(l, Feld1, Feld2). verdeckt (l, F1, F2) diagonal*(F1, F3, Richtung), besetzt(F3), diagonal*(F3, F2, Richtung). verdeckt (l, F1, F2) diagonal*(F1, F3, Richtung), besetzt(F3), diagonal*(F3, F2, Richtung). egal, ob durch eigene oder fremde Figur (besetztes Feld selbst ist nicht verdeckt!)

22 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 22 Zugmöglichkeiten des Turms erreichbar (Figur, Feld1, Feld2) turm (Figur), rechtwinklig*(Feld1, Feld2, Richtung). erreichbar (Figur, Feld1, Feld2) turm (Figur), rechtwinklig*(Feld1, Feld2, Richtung). Türme ziehen rechtwinklig, (analog zum diagonalen Ziehen der Läufer)

23 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 23 Zugmöglichkeiten des Turms (2) besetzbar_1 (Figur, Feld1, Feld2) turm (Figur), erreichbar(Figur, Feld1, Feld2), not verdeckt(t, Feld1, Feld2). besetzbar_1 (Figur, Feld1, Feld2) turm (Figur), erreichbar(Figur, Feld1, Feld2), not verdeckt(t, Feld1, Feld2). verdeckt (t, F1, F2) rechtwinklig*(F1, F3, Richtung), besetzt(F3), rechtwinklig*(F3, F2, Richtung). verdeckt (t, F1, F2) rechtwinklig*(F1, F3, Richtung), besetzt(F3), rechtwinklig*(F3, F2, Richtung).

24 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 24 Zugmöglichkeiten der Dame erreichbar (Figur, Feld1, Feld2) dame(Figur), erreichbar((t, _, _), Feld1, Feld2). erreichbar(Figur, Feld1, Feld2) dame(Figur), erreichbar((l, _, _), Feld1, Feld2). erreichbar (Figur, Feld1, Feld2) dame(Figur), erreichbar((t, _, _), Feld1, Feld2). erreichbar(Figur, Feld1, Feld2) dame(Figur), erreichbar((l, _, _), Feld1, Feld2). Damen ziehen rechtwinklig wie Türme oder diagonal wie ein Läufer

25 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 25 Zugmöglichkeiten der Dame (2) auch Besetzbarkeit speziell für Damen über Turm und Läufer herleitbar besetzbar_1 (Figur, Feld1, Feld2) dame(Figur), besetzbar_1((t, _, _), Feld1, Feld2). besetzbar_1(Figur, Feld1, Feld2) dame(Figur), besetzbar_1((l, _, _), Feld1, Feld2). besetzbar_1 (Figur, Feld1, Feld2) dame(Figur), besetzbar_1((t, _, _), Feld1, Feld2). besetzbar_1(Figur, Feld1, Feld2) dame(Figur), besetzbar_1((l, _, _), Feld1, Feld2).

26 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 26 Zugmöglichkeiten des Springers erreichbar (Figur, Feld1, Feld2) springer(Figur), vertikal(Feld1, Feld3, V), vertikal(Feld3, Feld4, V), horizontal(Feld4, Feld2, _). erreichbar (Figur, Feld1, Feld2) springer(Figur), vertikal(Feld1, Feld3, V), vertikal(Feld3, Feld4, V), horizontal(Feld4, Feld2, _). erreichbar(Figur, Feld1, Feld2) springer(Figur), horizontal(Feld1, Feld3, H), horizontal(Feld3, Feld4, H), vertikal(Feld4, Feld2, _). erreichbar(Figur, Feld1, Feld2) springer(Figur), horizontal(Feld1, Feld3, H), horizontal(Feld3, Feld4, H), vertikal(Feld4, Feld2, _). rote Pfeileblaue Pfeile gleiche Richtungbeliebige Richtung Springerzüge bereiten gerade Anfängern leicht Schwierigkeiten: "Rösselsprung"

27 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 27 Zugmöglichkeiten des Springers (2) Springer können durch eigene oder gegnerische Figuren nicht "aufgehalten" werden ("überspringen" sie). besetzbar_1 (Figur, Feld1, Feld2) springer(Figur), erreichbar(Figur, Feld1, Feld2). besetzbar_1 (Figur, Feld1, Feld2) springer(Figur), erreichbar(Figur, Feld1, Feld2).

28 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 28 Zugmöglichkeiten des Bauern erreichbar (Figur, Feld1, Feld2) bauer(Figur), farbe_von(Figur, Farbe) richtung_von(Farbe, Richtung), vertikal(Feld1, Feld2, Richtung). erreichbar (Figur, Feld1, Feld2) bauer(Figur), farbe_von(Figur, Farbe) richtung_von(Farbe, Richtung), vertikal(Feld1, Feld2, Richtung). Bauern bleiben in "ihren" Reihen gehen pro Zug eine Zeile "vorwärts" Grundprinzip der Bauernzüge denkbar einfach: Weiss spielt stets von unten nach oben, schwarz in umgekehrter Richtung: richtung_von (w, oben). richtung_von(s, unten). richtung_von (w, oben). richtung_von(s, unten).

29 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 29 Zugmöglichkeiten des Bauern (2) erreichbar (Figur, (X,2), (X,4)) bauer(Figur), weiss(Figur), reihe(X). erreichbar(Figur, (X,7), (X,5)) bauer(Figur), schwarz(Figur), reihe(X). erreichbar (Figur, (X,2), (X,4)) bauer(Figur), weiss(Figur), reihe(X). erreichbar(Figur, (X,7), (X,5)) bauer(Figur), schwarz(Figur), reihe(X). Ausnahme: im ersten Zug (aus der Ausgangs- position) ist ein Doppelschritt erlaubt

30 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 30 Zugmöglichkeiten des Bauern (3) besetzbar_1(Figur, (X,7), (X,5)) bauer(Figur), schwarz(Figur), reihe(X), not besetzt((X,6)), not besetzt_von((X,5), w). besetzbar_1(Figur, (X,7), (X,5)) bauer(Figur), schwarz(Figur), reihe(X), not besetzt((X,6)), not besetzt_von((X,5), w). für Besetzbarkeit: Zwischenfeld bei Doppelschritt darf nicht blockiert sein Zielfeld darf zudem nicht vom Gegner besetzt sein (kein Schlagen in gerader Linie!!) besetzbar_1 (Figur, (X,2), (X,4)) bauer(Figur), weiss(Figur), reihe(X), not besetzt((X,3)), not besetzt_von((X,4), s). besetzbar_1 (Figur, (X,2), (X,4)) bauer(Figur), weiss(Figur), reihe(X), not besetzt((X,3)), not besetzt_von((X,4), s).

31 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 31 Zugmöglichkeiten des Bauern (4) Bauern können ihr direktes Nachbarfeld in Laufrichtung nur dann auch besetzen, wenn es nicht durch eine gegnerische Figur besetzt ist. (kein Schlagen möglich!!) besetzbar_1 (Figur, Feld1, Feld2) bauer(Figur), farbe(Figur, Farbe), richtung_von(Farbe, Richtung), vertikal(Feld1, Feld2, Richtung), gegner(Farbe, Farbe1), not besetzt_von(Feld2, Farbe1). besetzbar_1 (Figur, Feld1, Feld2) bauer(Figur), farbe(Figur, Farbe), richtung_von(Farbe, Richtung), vertikal(Feld1, Feld2, Richtung), gegner(Farbe, Farbe1), not besetzt_von(Feld2, Farbe1).

32 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 32 Zugmöglichkeiten des Bauern (5) aber: vom Gegner besetztes Diagonal- feld kann (mit Schlagen) betreten werden besetzbar_1 (Figur, Feld1, Feld2) bauer(Figur), farbe(Figur, Farbe), richtung_von(Farbe, Richtung) diagonal(Feld1, Feld2, (_, Richtung)), gegner(Farbe, Farbe1), besetzt_von(Feld2, Farbe1). besetzbar_1 (Figur, Feld1, Feld2) bauer(Figur), farbe(Figur, Farbe), richtung_von(Farbe, Richtung) diagonal(Feld1, Feld2, (_, Richtung)), gegner(Farbe, Farbe1), besetzt_von(Feld2, Farbe1).

33 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 33 Zugmöglichkeiten des Bauern (6) Zusammenfassung der möglichen Bauernzüge: besetzbar_1 (Figur, (X,2), (X,4)) bauer(Figur), weiss(Figur), reihe(X), not besetzt((X,3)), not besetzt_von((X,4), s). besetzbar_1 (Figur, (X,2), (X,4)) bauer(Figur), weiss(Figur), reihe(X), not besetzt((X,3)), not besetzt_von((X,4), s). Einfachschritt Doppelschritt diagonales Schlagen besetzbar_1 (Figur, Feld1, Feld2) bauer(Figur), farbe(Figur, Farbe), richtung_von(Farbe, Richtung) diagonal(Feld1, Feld2, (_, Richtung)), gegner(Farbe, Farbe1), besetzt_von(Feld2, Farbe1). besetzbar_1 (Figur, Feld1, Feld2) bauer(Figur), farbe(Figur, Farbe), richtung_von(Farbe, Richtung) diagonal(Feld1, Feld2, (_, Richtung)), gegner(Farbe, Farbe1), besetzt_von(Feld2, Farbe1). besetzbar_1 (Figur, Feld1, Feld2) bauer(Figur), farbe(Figur, Farbe), richtung_von(Farbe, Richtung), vertikal(Feld1, Feld2, Richtung), gegner(Farbe, Farbe1), not besetzt_von(Feld2, Farbe1). besetzbar_1 (Figur, Feld1, Feld2) bauer(Figur), farbe(Figur, Farbe), richtung_von(Farbe, Richtung), vertikal(Feld1, Feld2, Richtung), gegner(Farbe, Farbe1), not besetzt_von(Feld2, Farbe1). (analog für schwarze Bauern)

34 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 34 Zugmöglichkeiten des Königs Könige können (im Prinzip) jedes direkte Nachbarfeld erreichen erreichbar (Figur, Feld1, Feld2) könig (Figur), benachbart(Feld1, Feld2). erreichbar (Figur, Feld1, Feld2) könig (Figur), benachbart(Feld1, Feld2). 1. Ausnahme für Besetzbarkeit: Könige dürfen nie ein vom Gegner bedrohtes Feld betreten! (Jede andere Figur hingegen darf "sich opfern"!)

35 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 35 Zugmöglichkeiten des Königs (2) 2. Ausnahme für Könige: Ein angegriffener König darf ein Nachbarfeld nicht betreten, wenn er dort (vom selben Angreifer) nach dem Wegziehen immer noch bedroht wäre. besetzbar_1 (Figur1, Feld1, Feld3) könig(Figur1), erreichbar(Figur1, Feld1, Feld3), farbe_von(Figur1, Farbe1), not bedroht(Farbe1, Feld3), not potentiell_bedroht(Figur1, Feld1, Farbe1, Feld3). besetzbar_1 (Figur1, Feld1, Feld3) könig(Figur1), erreichbar(Figur1, Feld1, Feld3), farbe_von(Figur1, Farbe1), not bedroht(Farbe1, Feld3), not potentiell_bedroht(Figur1, Feld1, Farbe1, Feld3). ( Vorsicht: aktuell ist das fragliche Feld 3 nicht vom Turm bedroht! ) Ausnahme 1 Ausnahme 2 (noch zu definieren)

36 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 36 Potentiell bedrohte Felder potentiell_bedroht(Figur1, Feld1, Farbe1, Feld3) bedroht_von(Figur2, Feld2, Farbe1, Feld1), stein_von(Figur2, Stein), verdeckt(Stein, Feld2, Feld3). potentiell_bedroht(Figur1, Feld1, Farbe1, Feld3) bedroht_von(Figur2, Feld2, Farbe1, Feld1), stein_von(Figur2, Stein), verdeckt(Stein, Feld2, Feld3). "Potentielle Bedrohung" von Figuren, die auf der Sichtlinie eines Angreifers einfach nur weiterrücken: (nur für Läufer, Türme und Damen definiert)

37 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 37 Bedrohung von Feldern durch Figuren im Prinzip: Figuren bedrohen jedes von ihrer aktuellen Position aus besetzbare Feld. Begriff 'Bedrohung' ist hier potentiell zu verstehen: Wenn auf dem bedrohten Feld eine gegnerische Figur stände, könnte die bedrohende Figur sie schlagen - bedrohte Felder können aber auch leer sein. einzige Ausnahme: Bauern können nur diagonale Nachbarfelder (in Laufrichtung) zum Schlagen besetzen (und damit bedrohen) Projektion auf bedrohte Felder: bedroht_von (Figur1, Feld1, Farbe2, Feld2) position(Figur1, Feld1), not bauer(Figur1), farbe_von(Figur1, Farbe1), gegner(Farbe1, Farbe2), besetzbar(Figur1, Feld1, Feld2). bedroht_von(Figur1, Feld1, Farbe2, Feld2) position(Figur1, Feld1), bauer(Figur1), farbe_von(Figur1, Farbe1), gegner(Farbe1, Farbe2), richtung(Farbe1, Richtung), diagonal(Figur1, Figur2, (_, Richtung)). bedroht_von (Figur1, Feld1, Farbe2, Feld2) position(Figur1, Feld1), not bauer(Figur1), farbe_von(Figur1, Farbe1), gegner(Farbe1, Farbe2), besetzbar(Figur1, Feld1, Feld2). bedroht_von(Figur1, Feld1, Farbe2, Feld2) position(Figur1, Feld1), bauer(Figur1), farbe_von(Figur1, Farbe1), gegner(Farbe1, Farbe2), richtung(Farbe1, Richtung), diagonal(Figur1, Figur2, (_, Richtung)). bedroht (Farbe, Feld) bedroht_von(_, _, Farbe, Feld).

38 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 38 Gedeckte Figuren Auch beim (scheinbar inversen) Begriff 'gedeckt_von' muß wieder die Sonderrolle der Bauern berücksichtigt werden: besetzbar, aber nicht gedeckt gedeckt, weil L dort geschlagen werden könnte Es reicht nicht aus, das Feld, das gedeckt werden soll, mit der deckenden Figur besetzen zu können. Man muß dort auch schlagen dürfen!

39 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 39 Gedeckte Figuren (2) gedeckt_von (Figur1, Feld1, Farbe2, Feld2) position(Figur1, Feld1), not bauer(Figur1), not gefesselt(Figur1, Feld1), farbe_von(Figur1, Farbe1), gegner(Farbe1, Farbe2), besetzbar_1(Figur1, Feld1, Feld2). gedeckt_von(Figur1, Feld1, Farbe2, Feld2) position(Figur1, Feld1), bauer(Figur1), not gefesselt(Figur1, Feld1), farbe_von(Figur1, Farbe1), gegner(Farbe1, Farbe2), diagonal(Figur1, Figur2, _). gedeckt_von (Figur1, Feld1, Farbe2, Feld2) position(Figur1, Feld1), not bauer(Figur1), not gefesselt(Figur1, Feld1), farbe_von(Figur1, Farbe1), gegner(Farbe1, Farbe2), besetzbar_1(Figur1, Feld1, Feld2). gedeckt_von(Figur1, Feld1, Farbe2, Feld2) position(Figur1, Feld1), bauer(Figur1), not gefesselt(Figur1, Feld1), farbe_von(Figur1, Farbe1), gegner(Farbe1, Farbe2), diagonal(Figur1, Figur2, _). "Problem": Auf dem zu deckenden Feld kann (muß nicht) eine eigene Figur stehen. Das Feld ist damit nicht 'besetzbar', sondern nur 'besetzbar_1'. Verhinderung der Fesselung der deckenden Figur muß dafür aber explizit garantiert werden, wenn man 'besetzbar_1' verwendet. gedeckt( Farbe, Feld) gedeckt_von(_, _, Farbe, Feld).

40 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 40 Schach und Matt: Übersicht Schach einfaches Schach Doppelschach König nicht beweglich König beweglich König nicht beweglich Angreifer schlagbar Schach abblockbar sonst MATT Schach abwendbar Schach abwendbar

41 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 41 Matt matt (Spieler) im_doppelschach(Spieler), not beweglich( (k, Spieler, e) ). matt(Spieler) im_schach(Spieler, Feld, Figur1, Feld1), not im_doppelschach(Spieler), not beweglich( (k, Spieler, e) ), gegner(Spieler, Gegner), not bedroht(Gegner, Feld), not abblockbar(Figur1, Feld1, Spieler, Feld) matt (Spieler) im_doppelschach(Spieler), not beweglich( (k, Spieler, e) ). matt(Spieler) im_schach(Spieler, Feld, Figur1, Feld1), not im_doppelschach(Spieler), not beweglich( (k, Spieler, e) ), gegner(Spieler, Gegner), not bedroht(Gegner, Feld), not abblockbar(Figur1, Feld1, Spieler, Feld) beweglich (Figur) position(Figur, Feld), besetzbar(Figur, Feld, _ ). beweglich (Figur) position(Figur, Feld), besetzbar(Figur, Feld, _ ). kann auf irgendein Feld abziehen einfaches Schach

42 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 42 Abblocken von Angriffen Angriffe von Läufern, Türmen und Damen können u.U. durch "Dazwischenziehen" eigener Figuren abgeblockt werden: Welche Felder liegen "zwischen" Angreifer und Angegriffenem ? zwischen(Figur1, Feld1, Feld2, Feld3) turm(Figur1), rechtwinklig*(Feld1, Feld2, Richtung), rechtwinklig*(Feld1, Feld3, Richtung), rechtwinklig*(Feld3, Feld2, Richtung). zwischen(Figur1, Feld1, Feld2, Feld3) turm(Figur1), rechtwinklig*(Feld1, Feld2, Richtung), rechtwinklig*(Feld1, Feld3, Richtung), rechtwinklig*(Feld3, Feld2, Richtung). (analog für Läufer und Dame zu definieren)

43 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 43 Abblocken von Angriffen (2) damit definierbar: abblockbar(Figur1, Feld1, Spieler, Feld) position(Figur2, Feld2), farbe_von(Figur2, Spieler), besetzbar(Figur2, Feld2, Feld3), zwischen(Figur1, Feld1, Feld, Feld3). abblockbar(Figur1, Feld1, Spieler, Feld) position(Figur2, Feld2), farbe_von(Figur2, Spieler), besetzbar(Figur2, Feld2, Feld3), zwischen(Figur1, Feld1, Feld, Feld3).

44 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 44 Schach a b c d e f g h Ein Spieler steht im Schach, wenn sein König von irgendeiner gegnerischen Figur bedroht wird! im_schach (Farbe, Feld, Figur1, Feld1) position( (k, Farbe, e), Feld), bedroht_von(Figur1, Feld1, Farbe, Feld). im_schach (Farbe, Feld, Figur1, Feld1) position( (k, Farbe, e), Feld), bedroht_von(Figur1, Feld1, Farbe, Feld). hier: Feld = (c, 8) Feld1 = (e, 6)

45 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 45 Doppelschach Ein Spieler steht im Doppelschach, wenn sein König von zwei gegnerischen Figuren gleichzeitig bedroht wird! im_doppelschach (Farbe) im_schach(Farbe, Feld, Figur1, Feld1), im_schach(Farbe, Feld, Figur2, Feld2), Figur1 Figur2. im_doppelschach (Farbe) im_schach(Farbe, Feld, Figur1, Feld1), im_schach(Farbe, Feld, Figur2, Feld2), Figur1 Figur2. (Schlagen eines Angreifers oder Abblocken eines Angriffs hilft dann nicht mehr !)

46 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 46 Fesselung von Figuren "Altlast" (d.h. immer noch nicht definiert): Wann ist eine Figur auf einem Feld gefesselt? gefesselt Abziehen der gefesselten Figur würde direkt zum Schach des eigenen Königs führen. Nur Läufer, Türme und Damen können gegnerische Figuren fesseln. gefesselt (Figur, Feld) position(Figur, Feld), farbe_von(Figur, Farbe), position((k, Farbe, e), Feld1), position(Figur2, Feld2), gegnerisch(Figur, Figur2), zwischen(Figur2, Feld2, Feld1, Feld). gefesselt (Figur, Feld) position(Figur, Feld), farbe_von(Figur, Farbe), position((k, Farbe, e), Feld1), position(Figur2, Feld2), gegnerisch(Figur, Figur2), zwischen(Figur2, Feld2, Feld1, Feld). 1 2

47 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 47 Abhängigkeitsgraph im folgenden: Auszug des Abhängigkeitsgraphen dieser Anwendung (Beschränkung auf alle wesentlichen Abhängigkeiten) Abhängigkeiten von Basisrelationen: weitgehend ausgelassen matt im_doppelschach im_schach bedroht_von bedroht abblockbar beweglich not

48 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 48 Abhängigkeitsgraph (2) bedroht_von abblockbarbeweglich bedroht gedeckt_von gedeckt besetzbar besetzbar_1 gefesselterreichbarbesetzt_von besetzt verdeckt Basisrelationen und topologische Relationen not

49 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 49 Stratifikationsproblem Nicht auf den ersten Blick zu erkennen: Regelmenge ist nicht stratifizierbar !! bedroht_vonbedroht besetzbar not Grund für diesen Zyklus: Könige können Nachbarfeld nur besetzen, wenn es nicht (von einer gegnerischen Figur) bedroht ist besetzbar_1 (Figur1, Feld1, Feld3) könig(Figur1), farbe_von(Figur1, Farbe1), bedroht_von(Figur2, Feld2, Farbe1, Feld1), erreichbar(Figur1, Feld1, Feld3), not erreichbar(Figur2, Feld2, Feld3), not bedroht(Farbe1, Feld3). besetzbar_1 (Figur1, Feld1, Feld3) könig(Figur1), farbe_von(Figur1, Farbe1), bedroht_von(Figur2, Feld2, Farbe1, Feld1), erreichbar(Figur1, Feld1, Feld3), not erreichbar(Figur2, Feld2, Feld3), not bedroht(Farbe1, Feld3). besetzbar_1 ?

50 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 50 Stratifikationsproblem (2) besetzbar_1 ((k, w, e), _, Feld3) not bedroht( w, Feld3) bedroht_von (Figur1, Feld1, w, Feld3) farbe_von(Figur1, Farbe1), gegner(Farbe1, w ), besetzbar(Figur1, Feld1, Feld3). besetzbar_1((k, s, e), _, Feld3) not bedroht( s, Feld3) bedroht_von (Figur1', Feld1', s, Feld3) farbe_von(Figur1', Farbe1'), gegner(Farbe1', s ), besetzbar(Figur1', Feld1', Feld3).

51 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 51 Stratifikationsproblem (3) a b c d e f g h Kritische Situation kann Eintreten, wenn beide Könige "in Opposition" zueinander stehen: Sind die roten Felder für die Könige besetzbar oder nicht ? intuitiv: nicht besetzbar, da vom gegnerischen König bedroht Wie kann man dieses Stratifikations- problem am besten lösen ? Wie kann man dieses Stratifikations- problem am besten lösen ?

52 Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 52 vorläufige Schlußfolie Dieser Einschub ist hiermit noch nicht endgültig abgeschlossen - es handelt sich also bei dieser Version zunächst nur um eine vorläufige Fassung. Eine Lösung für das Stratifikationsproblem sollte noch gefunden und entsprechende Modifikationen eingebaut werden. Zudem sollen noch einige Bemerkungen zu weiterführenden Konzepten wie Rochade und En passant-Schlagen folgen. Bitte schauen Sie bei Gelegenheit nach der endgültigen Version.


Herunterladen ppt "Schachbeispiel © 2000 Prof. Dr. Rainer Manthey Deduktive Datenbanken 1 Schachregeln in Datalog Deduktive Datenbanken WS 2000/01 Schachregeln in Datalog."

Ähnliche Präsentationen


Google-Anzeigen