Tilbage til Skak

 

  • Dabbaba
  • Von Jens Bæk Nielsen

    Übersetzt von Thomas Mally

  • Dabbaba ist ein Schachprogramm, das ich seit Mai 1995 geschrieben habe. Es ist in C programmiert und besteht aus 7000 Zeilen.

    Es läuft auf jedem IBM-kompatiblen PC mit 386-Prozessor oder höher im DOS-Modus. Auf meinem Pentium II 233 MHz untersucht es 16.000 Positionen pro Sekunde, in einfachen Endspielen das Doppelte.

    Die heruntergeladene Datei enthält neben der EXE-Datei, der Quelldatei, verschiedenen Testdateien etc. auch detaillierte Informationen in README.TXT und DABBABA.TXT, so daß dieser Artikel sich auf die speziellen Eigenschaften von Dabbaba und seinem Spiel konzentrieren wird.

    Nach tiefen Matts suchen...

    Eine charakteristische Eigenschaft von Dabbaba ist, daß es zu Beginn jeder Zugberechnung etwa 20% der verfügbaren Zeit für die Untersuchung von langen Schachserien aufwendet, um zu prüfen, ob es damit ein Matt, Materialgewinn oder ein rettendes Remis erzwingen kann.

    Siehe die folgenden drei Beispiele. Sie sollten es zuerst selbst versuchen, bevor Sie die Lösungen anschauen.

    Diagramm 1:

    5nk1/nbb2pr1/p3p1p1/1p1r3q/2P5/PP1PP1P1/N3RP1P/BQN1RBK1/b

    Schwarz am Zug. Dabbaba findet ein Matt in 10 Zügen in 0,33 Sekunden (auf Pentium II 233 MHz).

    Diagramm 2:

    3nn3/2p2p1k/1p1pp1p1/p2B3p/r2B2N1/4P2N/3PKPP1/6q1/w

    Dabbaba spielt nicht 1.Sxg1, sondern findet ein Matt in 12 Zügen in 0,27 Sekunden.

    Diagramm 3:

    q7/1p2pppb/7p/1P5k/4PP1b/2P3PP/1N1N3K/6B1/w

    Weiß könnte 1.gxh4 spielen, aber Dabbaba findet in 0,16 Sekunden einen anderen Zug, der in 7 Zügen die schwarze Dame gewinnt.

    Lösungen:

    Diagramm 1: 1.-,Dxh2+! 2.Kxh2, Th5+ 3.Lh3, Txh3+ 4.Kxh3, Th7+ 5.Kg4,f5+ 6.Kg5, Ld8+ 7.Kf4, g5+ 8.Ke5, Sc6+ 9.Kd6, Lc7+ 10.Kc5, Sd7+ matt.

    (Wenn man auch stille Züge zuläßt, ist die Stellung ein Matt in 8 Zügen.)

    Diagramm 2: 1.Sg5+, Kg8 2.Sh6+, Kf8 3.Sh7+, Ke7 4.Sg8+, Kd7 5.Sf8+, Kc8 6.Se7+, Kb8 7.Sd7+, Ka7 8.Sc8+, Ka6 9.Sb8+, Kb5 10.Sa7+, Kb4 11.Sa6+, Ka3 12.Sb5+ matt.

    Diagramm 3: 1.g4+!, Kg6 2.f5+, Kg5 3.Le3+, Kf6 4.e5+!, Kxe5 5.Sbc4+, Kd5 6.Sb6+ und 7.Sxa8

    Genius5 braucht mehr Zeit, um zu verstehen, daß die Züge zu einem Matt führen: 12 Sekunden für Diagramm 1 und 23 Sekunden für Diagramm 2. Nicht weil Dabbaba besser als Genius5 oder damit vergleichbar wäre, sondern weil Genius5 sich nicht die Mühe nimmt, die Varianten so tief zu untersuchen wie Dabbaba. Wahrscheinlich betrachtet er es als Zeitvergeudung, im normalen Spiel so tief zu suchen. Aber ich finde es attraktiv, daß Dabbaba eine sehr tiefe Kombination finden kann.

    Wie findet Dabbaba diese Kombinationen?

    Es ist leicht, Schachserien dieser Art zu verfolgen. Das Problem besteht darin, eine Explosion des Variantenbaums zu vermeiden. Ich erlaube Dabbaba, bis zu 20% seiner verfügbaren Zeit für einen Zug in dieser Suche, die ich "Mattsuche" nenne, zu verwenden. (Sie ist als "Null-Iteration" programmiert.)

    Wenn Dabbaba 60 Sekunden für einen Zug zur Verfügung hat und 16.000 Positionen/Sekunde untersucht, bekommt es 20/100 * 60 * 16.000 = 192.000 Knoten für die Mattsuche. Wenn diese Zahl überschritten wird, beendet Dabbaba einfach die Mattsuche und setzt mit der normalen Suche fort.

    Aber das ist viel zu einfach. Dabbaba würde dann wahrscheinlich nur den ersten Zug untersuchen, der leicht zu Millionen von Schachs führen kann.

    Ich habe zwei Maßnahmen getroffen, um dies zu vermeiden. Erstens wird die Anzahl der untersuchten Schachs mit zunehmender Suchtiefe reduziert. Zweitens geschieht dies auf dynamische Art, in Abhängigkeit davon, wie viele Züge der Verteidiger zur Verfügung hat. Das führt dazu, daß seichte Varianten tiefer untersucht werden als breitgefächerte Abspiele.

    Bevor ich dies im Detail erkläre, muß ich anmerken, daß Dabbaba in jedem Knoten alle Züge generiert und ihnen eine ungefähre Bewertung zuteilt; daher untersucht es zuerst solche Züge, die ihm attraktiv erscheinen, also z.B. das Schlagen von wertvollen Figuren oder Züge, die eigene angegriffene Figuren in Sicherheit bringen.

    An der Wurzel des Suchbaumes setze ich die fiktive Ressource mate_sch_pos[0] = 16000, und auf dem ersten Level der Suche werden alle Schachs ausprobiert. In Diagramm 2 hat Weiß zwei Schachs: 1.Sg5+ und 1.Sf6+. Daher wird der Wert von mate_sch_pos[0] durch 2 dividiert, was mate_sch_pos[1] = 8000 ergibt. Weiß wird wahrscheinlich zuerst den Zug 1.Sf6+ versuchen, da der Springer auf g4 von einem schwarzen Bauern bedroht ist. Nach 1.Sf6+ hat Schwarz 4 Züge, die seinen König dem Schach entziehen, daher wird mate_sch_pos[1] durch 4 dividiert, was mate_sch_pos[2] = 8000/4 = 2000 ergibt.

    Dieser Wert wird nun benutzt, um festzustellen, wie viele Schachzüge Weiß an diesem Punkt untersuchen darf, und zwar nach folgendem Schema:

    Mate_sch_pos[x] Anzahl der Züge

    < 2 0

    < 1000 1

    < 1.000.000 2

    In unserem Beispiel darf Weiß also noch 2 Schachzüge untersuchen etc.

    Dieses Auswahlverfahren bedeutet natürlich, daß Dabbaba ein Matt nicht findet, wenn es in einer Variante mehrere "wahrscheinliche" Schachs gibt, das Matt aber auf einem weniger wahrscheinlichen und daher weiter hinten gereihten Schach beruht. Dennoch findet Dabbaba viele Kombinationen dieser Art. Die obigen drei Beispiele stammen aus der Datei matesrch.epd, in der sich noch zahlreiche weitere Beispiele finden.

    Dabbaba führt die Mattsuche übrigens dreimal aus, nämlich bis zu einer Suchtiefe von 8, 16 und 24 Ply. Ich befürchte nämlich, daß ihm bei den letzten Zügen "die Luft ausgehen" würde und es manche Kombinationen übersehen würde, wenn ich die Suche gleich mit einer Tiefe von 24 Ply starten würde. Ich muß das eines Tages näher untersuchen...

    Eine weitere Regel ist, daß die Mattsuche nicht gestartet wird, wenn mehr als ein Drittel der zugeteilten Knotenanzahl bereits untersucht worden ist. In einfachen Stellungen werden mehr Knoten pro Sekunde untersucht, so daß Dabbaba die Schätzung der zugeteilten Knoten revidieren darf, wenn die vorangegangene(n) Mattsuche(n) länger als 0.20 Sekunden gedauert hat bzw. haben. Dies ist notwendig, um die Berechnungen verläßlicher zu machen.

    Diagramm 3 erfordert eine besondere Feinheit, da 7.Sxa8 kein Schach ist. Züge dieser Art, die zu einer Verbesserung der Materialbilanz gegenüber der Ausgangsstellung führen, können auch in die Suche einbezogen werden. Um Zeit zu sparen, werden von den möglichen schwarzen Antworten nur Rückschlagzüge und Schachs betrachtet.

    In diesem Fall hat die Mattsuche zu keinem Matt geführt, daher geht Dabbaba zur normalen Suche über und versucht dort, einen besseren Zug zu finden als den besten, den die Mattsuche gefunden hat. Daher vertraut Dabbaba auf 1.g4+, obwohl nicht alle schwarzen Antworten auf 7.Sxa8 untersucht worden sind. Daher werden Züge wie 7.Sxa8 normalerweise erst nach dem 10. Ply in die Mattsuche einbezogen, da die Züge von der normalen Suche innerhalb der ersten 10 Halbzüge ohnehin erfaßt und dabei gründlicher untersucht werden.

    Falls Sie selbst etwas Ähnliches wie die oben beschriebene Mattsuche programmieren möchten, dann sollten sie unbedingt die Geschwindigkeit des Computers, den sie verwenden, messen und berücksichtigen.

    Mate_sch_pos[0] wird am besten mit 8000 + (100 * Geschwindigkeitsfaktor) initialisiert, wobei der Geschwindigkeitsfaktor für einen 50 MHz 486 (mein alter PC) mit 10 angesetzt wird. Auch die Anzahl der erlaubten Knoten etc. muß den Geschwindigkeitsfaktor in Rechnung stellen.

    Wie Dabbaba spielt...

    Im Herbst 1997 nahm Dabbaba zum erstenmal an einem Turnier teil. 23 Programme spielten 9 Runden.

    Torsten Schoop absolvierte das ganze Turnier allein auf seinen zwei Pentium 133Mhz! Das Spieltempo betrug 60 Züge in 60 Minuten. Dabbaba erzielte 3/9, und spielte eine hübsche Partie gegen PAX.

    [Event "Quali97"]

    [Site "60/60"]

    [Date "1997.08.11"]

    [Round "6"]

    [White "Dabbaba 051197"]

    [Black "PAX 0.0001L "]

    [Result "1-0"]

    1. e4 c5

    2. Sf3 d6

    3. d4 cxd4 {*}

    4. Lb5+ Ld7

    5. Sxd4 Sf6

    6. Sd2 e6

    7. O-O d5

    Dabbaba spielt in dieser Partie sehr gut; tatsächlich stimmen alle restlichen Züge mit denen überein, die Genus2 in einer Analyse der Partie vorgeschlagen hätte!

    8. exd5 e5?

    9. Te1 Dc7

    10. S2f3 e4?

    11. Lg5 a6(?)

    12. Lxf6 gxf6

    13. Txe4+ Kd8 (schlechter wäre 13.-,Le7 14.Sf5)

    14. Lxd7 Kxd7? (Genius2: 14.-,Sxd7 15.De2,Ld6 16.Te1,Se5)

    15. c3 (mit der unangenehmen Drohung 16.Da4+,b5 17.Sxb5)

    15. - Dc4? (Genius2: 15.-,Kd8 15.De2,Ld6 16.Te1,Dd7)

    Das Protokoll zeigt, daß Dabbaba nach 49 Sekunden verstanden hat, daß es durch den nächsten Zug seine Bewertung von 4 auf 7 Bauern erhöhen konnte:

    16. Se5+! fxe5

    17. Dg4+ Kd6?

    Macht es leichter für Weiß, aber Schwarz hätte bei jeder Antwort die Dame verloren, da der Springer mit Schach wegzieht und der Turm die Dame schlagen kann:

    17.-,f5 18.Dxf5+,Ke8/Kd6 19.Dxe5+,Kd7 20.De8+

    nebst Springerschach

    19.-,Kf7 20.De6+,Kg7

    nebst 21.Tg4+ matt

    17.-,Ke8 18.Sc6!! mit den Drohungen Txc4/Dc8+ matt.

    (18.Txe5 ist auch gut)

    18. Sf5+ Kc7

    19. Txc4+ Kd8?

    20. Dg5+ Ke8?

    21. Tc8+

    PAX gibt auf wegen 22.Dd8+ matt.

    Während des Turniers und nachher war Torsten Schoop sehr, sehr hilfreich mit seinen zahlreichen e-mails, Informationen, Tips, Dateien sowie vielen mit Auto232 gespielten Partien, vor allem gegen Diogenes.

    Im Juli beginnt er ein neues Turnier, dessen Verlauf Sie an der Adresse http://www.fsv.de/chess-server/Summer98/summer98.htm verfolgen können.

    Es wird ein 11 Runden Turnier nach Schweizer System mit einer Bedenkzeit von 60 Zügen in 60 Minuten gespielt. Teilnehmen werden:

    01 ChessMachine Gideon 3.0, 16 MHz

    02 Chess Tiger

    03 Cilian

    04 Comet

    05 Crafty

    06 Dabbaba

    07 Diogenes

    08 Dr. T/Guschoen

    09 EXchess

    10 Fortress

    11 Gromit

    12 Inmichess

    13 Mach III

    14 Nero

    15 Patzer

    16 Rabbit

    17 Rebel 5

    18 The Crazy Bishop

    Dabbabas derzeitige Spielstärke...

    Seit diesem ersten Turnier und seiner Vorstellung in CSS 3/1998 ist Dabbaba stark verbessert worden. Es arbeitet jetzt mit permanent brain, Hash Tables (wenn auch nur kleinen; 2.048 Einträgen), verbesserter Eröffnungsbehandlung und versteht jetzt alle Remisregeln.

    Ich schätze seine Spielstärke jetzt auf etwa 1900 Punkte auf einem schnellen Pentium.

    Zwei Matches gegen Menschen wurden gespielt; beide Gegner hatten ein Rating von etwa 2000 Elo. Pro Match wurden 4 Partien gespielt, wobei der menschliche Spieler 15 Minuten pro Partie zur Verfügung hatte. Dabbaba bekam nur 8 Minuten, so daß ich 7 Minuten für die Übertragung der Züge zur Verfügung hatte.

    Dabbaba gewann das Doppel-Match mit 5:3, obwohl die Menschen in den meisten Partien die bessere Stellung hatten. Die begrenzte Bedenkzeit wirkte sich dann negativ auf ihr Spiel aus, obwohl man sagen muß, daß auch Dabbaba in einer besonders langen Partie eine gewonnene Stellung durch Zeitüberschreitung verlor.

    Hier folgt die erste Partie des ersten Matches:

    [Turnier "Match 5. Mai 1998. Partie Nr. 1."][Weiß "Peter Haarup"][Schwarz "Dabbaba"][Ergebnis "0-1"]

    1. d4 d5 2. c4 dxc4 3. Sf3 c5 4. d5 e6 5. e4 exd5 6. exd5 b5 {dieser gierige Zug ist nicht in der Eröffnungsbibliothek von Genius5) 7. a4 Lb7 8. axb5 Dxd5 9. Dxd5 Lxd5 10. Sc3

    Lxf3 11. gxf3 Sf6 12. Lxc4 {Peter hat seinen Bauern zurückgewonnen; Genius 5 gibt ihm jetzt einen Vorteil von einem halben Bauern} Sbd7 13. Sd5 Ld6 14. b6 a5 15. Sxf6+

    Sxf6 16. Lb5+ Ke7 17. Ld2

    Thb8 {Laut Genius 5 kommt Schwarz hier in Vorteil, der sich bis zum 22. Zug jedoch fast wieder verflüchtigt. Entscheidend ist, daß Peter wegen der hier entstehenden Komplikationen einen Großteil seiner Zeit verbraucht...}

    18. Lc6 Ta6 19. Lxa5 Tbxb6 20. Le4 Lc7 21. O-O Txa5 22. Txa5 Sxe4

    23. Ta7 Sd2 24. Txc7+ Kd8 25. Td1 Tg6+ 26. Kh1 Kxc7 27. Txd2 Td6

    28. Tc2 Td1+ 29. Kg2 Kd6 30. Kg3 h5 31. h4 g6 32. f4 Tg1+ 33. Kf3

    Tg4 34. b4 cxb4 35. Tb2 {b2-b4 war schlecht, aber dieser Zug erlaubt es Schwarz, mühelos seinen Bauern zu behalten. 35.Tc4,b3 36.Tb4,Txh4 und Weiß kann den Bauern noch immer nicht zurückgewinnen wegen -,Th3+} Kc5 36. Ke3 Txh4 37. Tc2+ Kd6 {-,Kb5 muß wohl der richtige Zug sein} 38. Tc4 b3 39. Tb4 Th3+ {-,g5! sollte hier gespielt werden }

    40. f3 Th1 41. Txb3 Te1+ 42. Kf2 Tc1 43. Tb5 h4 44. Kg2 Tc4 45. f5 {die Idee ist gut, hätte aber mit 45.Tb6+,Ke7 vorbereitet werden sollen}

    g5 46. f6 Tc5 47. Tb6+ Ke5 48. Kh3 Tc4 49. Ta6 Tb4 50. Tc6 Tf4

    51. Kg2 Txf6 52. Tc5+ Kf4 53. Tc4+ Ke3 54. Te4+ Kd3 55. Tg4 Tf5

    56. f4 f6

    0-1. Weiß überschritt die Zeit.

    Ein weiteres Beispiel stammt aus einer Auto232-Partie gegen Diogenes. Dabbaba verliert zwar meistens, aber manchmal gewinnt es auch. In der folgenden Partie zeigt es eine schöne Königsjagd, indem es den König von Diogenes im 28. Zug nach f4 treibt.

    [Turnier "Dab_Dio, 60/60, P-120"]

    [Datum "1998"]

    [Weiß "Dabbaba 060598"]

    [Schwarz "Diogenes 4.61"]

    [Ergebnis "1-0"]

    1. e4 e6 2. d4 d5 {*} 3. Ld3 {Dabbaba has no openingbook...} dxe4

    4. Lxe4 Sf6 5. Lg5?! {better were Le4-d3 } Le7?! {Diogenes should

    play c7-c5} 6. Lf3 h6?! 7. Lh4 g5?! {black weakens his kingside.

    Better were still c7-c5} 8. Lg3 O-O?! {Will Diogenes never play c7-c5

    in this game?} 9. h4! c5? {at last c7-c5 came, but now Nf6-d5 were

    better} 10. hxg5 hxg5 11. dxc5?! {better were probably Qd1-d2, but

    although the queens now are exchanged, Dabbaba gets a strong

    kingattack} Dxd1+ 12. Lxd1 Lxc5 13. Sc3? Td8? {black should now play

    Bc5-b4. White should have played the knight to d2, so c2-c3 was

    possible } 14. Sf3 Sh7 15. Le5 Le7 16. Lc7 Te8 17. Le2 Sc6 18. O-O-O

    g4 19. Sd2 Sf6 20. Sc4 Lb4 21. Sb5 e5 22. Scd6 Te7 23. c3 Lc5

    24. Th6! Se8? {giving white knight and bishop for a rook with Kg8-g7

    were better} 25. Tdh1! Kg7? {now Lc5 gets lost. Only 3 moves later

    Diogenes king is at f4!} 26. Th7+ Kf6 {if the king goes back, Ne8 is

    lost. The rest of the game is a safe win by Dabbaba} 27. T1h6+ Kg5

    28. Se4+ Kf4 29. Sxc5 Kg5 30. Th5+ Kg6 31. Ld6 Sxd6 32. Sxd6 f5

    33. T7h6+ Kg7 34. Kd2 Sd8 35. Th7+ Kf6 36. Th8 Kg6 37. Th2 g3

    38. T2h3 Sf7 39. Sxc8 Sxh8 40. Sxe7+ Kf7 41. Th7+ Kf6 42. f3 b6

    43. Sd7+ Ke6 44. Sc6 Sg6 45. Sdxe5 Sxe5 46. Th6+ Kd7 47. Sxe5+ Kc7

    48. Ke3 a6 49. Kf4 b5 50. Ld3 Kb7 51. Sd7 Tc8 52. Lxf5 Ka7 53. Th7

    Td8 54. Sc5+ Kb6 55. b4 a5 56. a3 axb4 57. axb4 Tb8 58. Tf7 Te8

    59. Tb7+ Kc6 60. Ld7+ Kd5 61. Lxe8 Kc4 62. Se4 Kb3 63. Td7 Kb2

    64. Td2+ Kc1 65. Lg6 Kb1 66. Sc5+ Kc1 67. Sb3+ 1-0

    Schachmatt

    Unorthodoxe Schachvarianten...

    Eine andere Besonderheit von Dabbaba ist, daß es neben dem orthodoxen Schach 11 andere Arten von Schach spielen kann.

    Dabbaba Chess wurde in CSS 3/1998 vorgestellt, darum gebe ich hier nur einige zusätzliche Beispiele.

    Das erste ist Stationäres Schach (Stationary Chess), wobei es den Königen einfach verboten ist, zu ziehen.

    Es folgt eine komplette Partie, die von Dabbaba gegen sich selbst mit nur 10 Sekunden Bedenkzeit pro Zug gespielt wurde. Bei diesem schnellen Tempo kommt es auf meinem alten 486er natürlich zu etlichen Fehlern, aber die Partie ist voller Mattdrohungen und ganz amüsant nachzuspielen.

    1.Sf3 Sf6 2.Se5 e6 3.Sxf7 De7 4.Sxh8 Se4 Schwarz kopiert jetzt die Strategie von Weiß, aber Weiß vergißt, seiner Dame etwas Luft zu machen.

    5.Sc3? Sxf2 6.Sb5 Dc5? Schwarz sollte 6.-,Sa6 spielen. Weiß bekommt jetzt mit Tempo Luft für seine Dame.

    7.d4 Dxb5 8.e4 Db4+ 9.Ld2 Sxd1 10.Lxb4 Se3 Droht Matt auf c2

    11.Tc1 Lxb4+ 12.c3 Le7 Droht 13.-,Sxg2+ 14.Lxg2, Lh4+ matt

    13.Tg1 Lg5 14.Ld3 Wenn jetzt 14.-,Sxg2 15.Txg2, Lxc1 16.Tf2! und Weiß gewinnt

    14...e5? Schwarz sollte seinen Damenflügel entwickeln. Dieser Zug schwächt seinen König.

    15.g3 Sc4 Droht 16.-,Ld2+ matt

    16.Tc2 Ld2+ 17.Txd2 Sxd2 18.Le2 g6 Vermeidet 19.Lh5+, g6 20.Tf1!, Sxf1 21.Sxg6!

    19.dxe5 Sc6 20.Tg2 Sxe4 Verhindert die weiße Drohung 21.Tf2 nebst 22.Tf8+ matt

    21.Sf7 Se7 22.Ld3 Sc5 23.Lc4 Sf5 24.g4 b5 Schwarz ist jetzt in Schwierigkeiten. Er kann nicht Sf5 spielen wegen 25.Sd6+, cxd6 26.Lf7+ matt

    25.Lxb5 Sh4 Droht Matt auf g2 und f3

    26.Tf2 Se6 Deckt f8, wo Weiß nach 27.Sd6+, cxd6 mit 28.Tf8+ matt setzen würde.

    27.Lc4! Sf5 Die schwarze Stellung ist jetzt hoffnungslos.

    28.Sh6 Sg5

    29.Lf7+! Sxf7 30.Sg8 Sxe5 31.Sf6+ matt.

     

    Eine andere Schachvariante, die Dabbaba beherrscht, ist das Nachtreiter-Schach (Nightrider Chess), in dem der Nachtreiter mehrere Springerzüge hintereinander machen kann. Hier ist der Beginn einer Partie:

    1.d4 d5 2.Se5 Lf5 3.Lf4 e6 4.e3 Lb4+! Weiß kann nicht 5.c3, Lxb1 spielen, da der Nachtreiter viel mehr wert ist als ein Läufer.

    5.Ke2 Ld6!

    Weiß verliert jetzt einen Nachtreiter (6.Sf3, Lg4). Aber warum konnte Dabbaba nicht 6.Sg1 spielen, um seinen Nachtreiter zu retten? Wegen 6.Sg1, Lxf4 7.exf4, Lxc2! nebst 8.-,Lxb1 (8.Dxc2?, Sxd4+! - oh, ja, da war ja ein Nachtreiter auf b8!).

     

     

     

    In 4 of the variants the knight can also move like a fairy piece. One of these pieces is called a Dabbaba, and it is of course from that piece the program has got its name.

    A dabbaba moves in the same directions as a rook, but always 2 squares and it may jump over a piece.

    Here is an example from a game of Dabbaba Chess played by Dabbaba against itself:

    Nn4k1/pp3prp/8/8/4b3/6P1/PPP4P/2KR1B2/w

    17.Nc8! a6 black saved his pawn, but...

    18.Ne8+! Kh8 If 18.-,Kf8 19.Nf6+ (yes, a check) and black loses his bishop. Now the program don't play 19.Nxg7 as the knight+dabbaba is a little more worth than a rook, but it plays

    19.Nf6! Rg5 20.Nxe4

    What happened? Why didn't the program play fx 19.-,Bg6 to save the bishop?

    Because Dabbaba would have played 20.Nh6+ mate!